From 4fc2f276064b12e9869544456b685154d49aae32 Mon Sep 17 00:00:00 2001 From: "joe.ruzzi" Date: Wed, 12 Jul 2017 15:32:05 -0400 Subject: [PATCH 1/8] added empty_file --- .gitignore | 3 - README.md | 88 - empty_file | 0 pom.xml | 135 - src/main/jbake/assets/css/style.css | 1 - src/main/jbake/assets/img/jeett_dt_001.png | Bin 26697 -> 0 bytes src/main/jbake/assets/img/jeett_dt_002.png | Bin 18758 -> 0 bytes src/main/jbake/assets/img/jeett_dt_003.png | Bin 26289 -> 0 bytes src/main/jbake/assets/img/jeett_dt_004.png | Bin 32799 -> 0 bytes src/main/jbake/assets/img/jeett_dt_005.png | Bin 22811 -> 0 bytes src/main/jbake/assets/img/jeett_dt_006.png | Bin 17191 -> 0 bytes src/main/jbake/assets/img/jeett_dt_007.png | Bin 22583 -> 0 bytes src/main/jbake/assets/img/jeett_dt_008.png | Bin 18396 -> 0 bytes src/main/jbake/assets/img/jeett_dt_009.png | Bin 14522 -> 0 bytes src/main/jbake/assets/img/leftnav.gif | Bin 290 -> 0 bytes src/main/jbake/assets/img/oracle.gif | Bin 2122 -> 0 bytes src/main/jbake/assets/img/rightnav.gif | Bin 294 -> 0 bytes src/main/jbake/assets/img/toc.gif | Bin 261 -> 0 bytes src/main/jbake/content/overview.adoc | 104 - src/main/jbake/content/overview001.adoc | 123 - src/main/jbake/content/overview002.adoc | 99 - src/main/jbake/content/overview003.adoc | 106 - src/main/jbake/content/overview004.adoc | 360 --- src/main/jbake/content/overview005.adoc | 169 -- src/main/jbake/content/overview006.adoc | 167 -- src/main/jbake/content/overview007.adoc | 89 - src/main/jbake/content/overview008.adoc | 565 ---- src/main/jbake/content/overview009.adoc | 263 -- src/main/jbake/content/overview010.adoc | 138 - src/main/jbake/content/partintro.adoc | 88 - src/main/jbake/content/preface.adoc | 264 -- src/main/jbake/content/title.adoc | 190 -- src/main/jbake/content/toc.adoc | 2844 -------------------- src/main/jbake/jbake.properties | 7 - src/main/jbake/templates/footer.ftl | 3 - src/main/jbake/templates/header.ftl | 10 - src/main/jbake/templates/menu.ftl | 1 - src/main/jbake/templates/page.ftl | 8 - 38 files changed, 5825 deletions(-) delete mode 100644 .gitignore delete mode 100644 README.md create mode 100644 empty_file delete mode 100644 pom.xml delete mode 100644 src/main/jbake/assets/css/style.css delete mode 100644 src/main/jbake/assets/img/jeett_dt_001.png delete mode 100644 src/main/jbake/assets/img/jeett_dt_002.png delete mode 100644 src/main/jbake/assets/img/jeett_dt_003.png delete mode 100644 src/main/jbake/assets/img/jeett_dt_004.png delete mode 100644 src/main/jbake/assets/img/jeett_dt_005.png delete mode 100644 src/main/jbake/assets/img/jeett_dt_006.png delete mode 100644 src/main/jbake/assets/img/jeett_dt_007.png delete mode 100644 src/main/jbake/assets/img/jeett_dt_008.png delete mode 100644 src/main/jbake/assets/img/jeett_dt_009.png delete mode 100644 src/main/jbake/assets/img/leftnav.gif delete mode 100644 src/main/jbake/assets/img/oracle.gif delete mode 100644 src/main/jbake/assets/img/rightnav.gif delete mode 100644 src/main/jbake/assets/img/toc.gif delete mode 100644 src/main/jbake/content/overview.adoc delete mode 100644 src/main/jbake/content/overview001.adoc delete mode 100644 src/main/jbake/content/overview002.adoc delete mode 100644 src/main/jbake/content/overview003.adoc delete mode 100644 src/main/jbake/content/overview004.adoc delete mode 100644 src/main/jbake/content/overview005.adoc delete mode 100644 src/main/jbake/content/overview006.adoc delete mode 100644 src/main/jbake/content/overview007.adoc delete mode 100644 src/main/jbake/content/overview008.adoc delete mode 100644 src/main/jbake/content/overview009.adoc delete mode 100644 src/main/jbake/content/overview010.adoc delete mode 100644 src/main/jbake/content/partintro.adoc delete mode 100644 src/main/jbake/content/preface.adoc delete mode 100644 src/main/jbake/content/title.adoc delete mode 100644 src/main/jbake/content/toc.adoc delete mode 100644 src/main/jbake/jbake.properties delete mode 100644 src/main/jbake/templates/footer.ftl delete mode 100644 src/main/jbake/templates/header.ftl delete mode 100644 src/main/jbake/templates/menu.ftl delete mode 100644 src/main/jbake/templates/page.ftl diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 15ae253..0000000 --- a/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -/nb-configuration.xml -target -.DS_Store diff --git a/README.md b/README.md deleted file mode 100644 index 937b02d..0000000 --- a/README.md +++ /dev/null @@ -1,88 +0,0 @@ -# A JBake project for the Java EE tutorial - -## About JBake - -JBake is a static site generator, it's inspired from jekyll and written in java. -The basic idea is to have templates for the structure of the page, and the body generated from asciidoc content. - -## Pre requisites - -- Maven -- JDK8+ - -Deploying to Github will require password less authentication. - -This is done by exporting your SSH public key into your Github account. - -## Create an empty gh-pages branch - -The instructions below assume the current directory to be the root of the clone. - -``` -git checkout --orphan gh-pages -git rm -rf . -touch empty_file -git add empty_file -git commit -m "add empy_file" -git push origin gh-pages -``` - -Now that you created the gh-pages branch, get back to master: - -``` -git checkout master -``` - -## Update site.url in pom.xml - -The pom.xml file references the Github repo URL. - -Update distributionManagement.site.url to point at your repository. - -## Build the site locally - -The site is generated under target/staging. - -Open file:///PATH_TO_PROJECT_DIR/target/staging in a browser to view the site. - -``` -mvn generate-resources -``` - -Or you can invoke the JBake plugin directly. - -``` -mvn jbake:build -``` - -### Rebuild the site on changes - -``` -mvn jbake:watch -``` - -If you keep this command running, changes to the sources will be detected and the site will be rendered incrementally. - -This is convenient when writing content. - -### Serve the site locally - -``` -mvn jbake:serve -``` - -If a webserver is required (e.g. absolute path are used), this command will start a webserver (jetty) at http://localhost:8820. -It can also watch for changes and rebuild incrementally. - -## Deploy the site to Github Pages - -``` -mvn deploy -``` - -## Links - -- [JBake maven plugin documentation](https://github.com/Blazebit/jbake-maven-plugin) -- [JBake documentation](http://jbake.org/docs/2.5.1) -- [Freemarker documentation](http://freemarker.org/docs) -- [Asciidoctor quick reference](http://asciidoctor.org/docs/asciidoc-syntax-quick-reference) \ No newline at end of file diff --git a/empty_file b/empty_file new file mode 100644 index 0000000..e69de29 diff --git a/pom.xml b/pom.xml deleted file mode 100644 index d98aebc..0000000 --- a/pom.xml +++ /dev/null @@ -1,135 +0,0 @@ - - - - 4.0.0 - org.glassfish - javaee-tutorial - 1.0.0-SNAPSHOT - JavaEE Tutorial - - - ${project.build.directory}/staging - true - true - - - - - scm:git:git@github.com:romain-grecourt/javaee-tutorial.git - - - - - - - org.apache.maven.plugins - maven-enforcer-plugin - 1.4.1 - - - enforce-versions - - enforce - - - - - [1.8.0,1.9.0) - You need JDK8 or lower - - - - - - - - com.blazebit - jbake-maven-plugin - 1.0.0 - - ${site.output.dir} - - - - build-site - generate-resources - - build - - - - - - org.asciidoctor - asciidoctorj - 1.5.5 - - - org.asciidoctor - asciidoctorj-diagram - 1.5.4 - - - - - org.apache.maven.plugins - maven-scm-publish-plugin - 1.1 - - - deploy-site - deploy - - publish-scm - - - gh-pages - false - Update site - - - - - - - diff --git a/src/main/jbake/assets/css/style.css b/src/main/jbake/assets/css/style.css deleted file mode 100644 index c8d1736..0000000 --- a/src/main/jbake/assets/css/style.css +++ /dev/null @@ -1 +0,0 @@ -/* CSS */ \ No newline at end of file diff --git a/src/main/jbake/assets/img/jeett_dt_001.png b/src/main/jbake/assets/img/jeett_dt_001.png deleted file mode 100644 index d906ad92d4367cfee0f568cfcfac6a2285d2eaa9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26697 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 NSIbbdLc=cRe*h=u$87)r diff --git a/src/main/jbake/assets/img/jeett_dt_002.png b/src/main/jbake/assets/img/jeett_dt_002.png deleted file mode 100644 index 2bfc90800350a9c05e647f8c38ee449650c2e5d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18758 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%0DlI|R#Z|$q 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 diff --git a/src/main/jbake/assets/img/jeett_dt_003.png b/src/main/jbake/assets/img/jeett_dt_003.png deleted file mode 100644 index 103748108d992441c910d0539532ab87f61c2989..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26289 zcmX7PbyyVd_x8^0vMjK`f;32XNk~d8NGk{k2nf<4At5RtF?6@0bm|ACQ;=F|rAt6+ z>4rrRQ4n6fzxS`%YiF)KGxu|!=gc|xy)pWFn&hNRq%ataTw6=c5C#JQ7z}udf?s`; zEH8+-IxzaEoBG`MaP)a$xR}FM>b|>XHQN}o@wzMp8Q=RETyET?CtIC?(XjF?09*3nV6W2jgSBQ`E!2j zXzyfidwcuv@bKv9=qlpi!oF^5V@*xX{{DW~^v?SF`j_w99i1J=$HxQ$!CVAWP*4!{ z_Fest`t0m%2M32=zkZ#bp1QfYVKA81*0!1TpDL=V2L}fMfr0zSf5gPaNAL&#)pu+k zo^BF;vvaT~Bqnw&b;K6LmY0_+Y3OB^Hjgb4n&z6;_fLNP`PIGL-LlZK^Yiq-)=_6) z=ZWo!`ThBU^?~8x;fZC!^6szgkuO9x`{UIAw_4n`JNg4l;D#=Jw|H=YF34Tv}Rco7h_1KK?wq2|-Zb*c_ctQRBpP%h;wvZpZ50N$-zc zgiE$lO3lX62H`iMc5uxnETOOOYes!W!|=L;0z3WyU(?c^TsiPb*dyEo2!7lfgkF=)HU@@D(NU~9Q^*Tyt*CtWq9!*JM5{h`1QVt zzK@+h-ehEY26%RK_a&#L%k$AMuI&h!M~_c_pW2z~m|0xj+!c|Ov+=PR85zB&fA96{ z*9wo*>*^b{SP{R^eh+U9KlbtsO3Wzv@X^5Vepy>tV^dR4Pfz*V==1aQM^;u1BTH%j zr8+r3?)$zvx3s2pSASq|FgPN(p(s7Dunl^sva^2}6BG0P{rkH+8MP)?0o2tWO z!^0z^+lKMmyZh7A)8U!ny(_(62EK%ag)MC?jrX>VO^vrNwl6QQ)D7XGu!x0)g=f#6 z*}2%QuC5*(|JvHx`gwG0s;yMjF}SvU;OFP3Dl5ixCtz!Pdv*WU#@^4Z^|g(??TNv! z$H%{FMr$VK7pohptsZ-AtgaNa&F<{&@9h&-_O5tzvN-ddk(uf3+qZT9I1eLHTi|G{T>o)x||=8{u+ zy3GBYg~fH{8ehfSapQN{1%kebQ_?@IPo@*x>3#RZp3nyZRJ$hPLqdi(9&~+lx%PS9 zC+q%;=9sCulX_igz1ZJDzlZRb=S`9@hwkq@>ISduhg*M3E}msI!Cj^*O7~ove^fO5 z-(g{BZ$o+XUh{8KkAonxPcMGWJduKNd(64lMaln=DnF@C)ZoFba0Gw*{4e!cb497* z%)%3whKIL)?B(n|=|6dtb#l~`<#6Wwpt$c+9HTEgXLa)N{6_@akSic%LkJ9Z~ahI1*tEY6O1CH@)0eeVF;qM z8iYRSBUuPM_)bNzZL28|Xb)Z@TMdgkslO4B(Dv`y8FSDJ_h38NDf7mO`bzoXHTAP| zdgXhILv;)MKO~)UtKI&QOz-I8!iJ}!{?!dC{qXwMpfV$x`aT)vn|)u@!vi@>KbAJ& zKwEVdxOKIS+!=iCUc2YoQ0>U<-mvBP(7D07R#$pftyWiR)~$9>YBpMZ)?+l$v~H0j z0o8a#qZQHl!#U<}L%#cQ?hj~40s3YBpPL!2FH`(sAFdyO#Sni(`z|xAA=sdEkkrq?^1LY=U7jNBbZlht%3b>8E_I`B@_232=l{TY}VfA+}KvB9nrSjlZj8zwI1B6;X* zj4JA>au^MI=P2%GwyF#ds$rV>R0-MI*_BdB!l^|7z~C-Nj5*GTTUm%=H3{SjD#Q5m&4vICv4 z;<20sMB8R|Bt z-&oi*{kmGDWvCMea9AR1IkL{nJ5kCplCX=r3?1xAoS78CJ1wQKUbJbrQC#mR!PNel z8~QKRwQJ6_-Rhj|5z5@fT7U?*9e=ujS|}q8>ivklVCeEsd*p?JatPRX#}uoiR3EZj zZANG81~bf5T0d`74&= zz|)joWpXu~CwB_=S0KNr_M!0+7fLI>yU>=ShS7?ah#RR-%|mA^t{sigkH5pgh)^S4 zmkT2jyA~qb*?o9mLdAv^j<-}8CX1G7qb51>O9fICSfz*@3M5?=C~4S{E~iK4bZg^( zv=l1eBrn`U?p`x+X3##pZR^H%Y$rtlc1>z=!SipC(A>G(>7j0i){)?Ez*xRc!NH?U zjfQ&paQ`AX@?)hLx(edZwoZdesazhYzCyu|+cpTr@gsibxa~iUi8}tW%a+idrOL|u zY@muc;Ms;Q>JF@;j_0vfWZ+^`!BWK(Wrf(PzG6UV;OkOSTB=|h+MFmS#bUl}**%bR zpbK&BODV5ypP*Pbfh7#@{+v!}XyA|=u5aBX>!nYZ^oVXLg57YQ@;_ZV@-Iz!lTxQ6 z50JZYG}O+*<|q|LeYNgUPMzeWu~0K&wN-?UD4yaAWf%4d5f?fNobwV5lSmT|ooqKo zq5kk63$TPl!2X7wo&I16i-yg0NSdjW-+o0-HU0V@?WyVgsGDybuv;%YoW(%VZco1D zRxtkcQyL`S6H+a9Q|ZG4+bfcpRKr9aNU<8OByUkG?X#GX61X|z2rtax@Ec_wuJ`EF z!{O{3WI?wAEg$fB~kl$ ze>4F74bouScqB=Ly$*{r&t;LIK&ZvuepUV@Sn!rC(1y|{N)C$JyZkg>xH(YfZDz8dMt)7h`e*CEJS_$N4IaQZMa4z_`wrjNmO z?+IFv$0x*i?J`{)RR48e3BtJ;b_l_m=wQR8DuDk@0W2`A`;D;CL=wP*!K%UHe)@_; zcfQ7}&uJ3r1kv<7Xf(Tx(_*Ob<1`?8Azr%TAE?|Wub-5kc^_rL0W#S|9*`v80s)>FJB7dCt>U>{>;r##s4f8fkpc3M(T{@P|PUA^=H&3t1oo<8TswF?h z=&d18UUNtZ>A(bc9<)@A&6~bd!V~cw4y~=z{eP z%{d4$HEb+P;CbT=W6NZ>If*qB_|XIeKR;3zbht-h7>TW=aNeUBXQ-mV)}tX<3tx+D zELc<&ftq1M0%DE=b;;r0Mik30`Bam4uVuabn3g6?ih~Zd-dfx7_vobrF7uOimMjJ0 zGt2^}oDz3orCg04CliJbC6kO#i_U)EXLKHh5+ABM9g2QZdmfUIWQx7+LEd?(Vy@;q zN+YI|$a2i2q zmTSLCCF6JAy~d>?s)ogqy1#XG68@%Xcb|WVR$n&a)a*1qZUeshNHFYYfRcpjiGD4A zQ7cIdHjE&s_|pE_{WvGkKN#Hu-Qvpr-3xDt}Y58fV(-Rg42n zvZ65tgXM*>9^NOw#qXm(M@ONPnBW_oa~8Bn-*qYEwpoN5re&Bmxmfo$&XH5V2FS86y2i(hLb2DpC+g!}@ZV9PTBxd}TKP zqjEMtozpsHmn5lBja@pOGp|!ntQGn+(f4Ra@PcWELk&H1pNA3qeGqm}8hMzA2{J9? z!A%?YHh;WpM@gH&0BV4Q(o{Y`k@8v7olTFj$Qstol2X599jRA7o8dCnzMlY^UE>E7W>{U<) zl>ehBD1rbCZty?YD;zkYu%H`kC&kn|2@Codi!z10((IeqxkUM|$^mAT%y&Y9pJ;`L zy+ZM7)9=`IlN#%TwS1y5E+2}@0$sjEXKHeB1=?d72P^s3se+Wy)QjiNPsnd05wS&M zf)b>_=17S(X>{>jpqK)sdL5U)k|y!(*b%n8j<^qVMBjlKY9ek@N2_=GhWS?5qj19s zM$atCWj-~jV9O<5sb@yOk~loAH4#3TXqqnP0JhBDmmNj=kLXok7cAQ_s_z%}#jw)0 zcm{z;O%f+q1&QZ%F*7W{K^r5z1Es?(h!ITBU_(%f)>}%=kMAKDg^%05iq{YGfFqRh zVI-$Ly{t{p%}j=q>mcawTwGJOds=BZO$=nl7E1=%&p}f z&C(JBa1Jpspr|5j-Pg|dTT9Y+IhP9(AA9V*7u?~^TpU^ZWuF(<)-jWo`v4}No-pv@ z9J6^J%G*=;Z5Yfpa8PI%di%InWIN{t#)QIVb~M)#j@#Me0B% zxUZaiLR-(_aQYD|4s10Vor=@5$0bJKPzf*@P%2}EJEa?W;xCRDv?eA6rj8U06jkqes(sv~hV*&LiYszL5+d5T#X!1A```p#u^%8M&HqM)ioV z+CTr!tT3LtDfscYx!BUR3qJq&=c6fwvi^b$Ko5|ELOgnnmw$I+0OMtzYxT$#DtqXAh zuUGWKAWF+i0@r`s0&n_bGK$-@ZE%*@;0S2g0S6CBQE|jlhK#}_UWWZf+P_lGAVOZ3 zc?3pzpgH_(IcdLCURS*vo{{O&D)^jEohW@LOY$|;Nt`aVe|$7$l|-K1{D+2De|ei! zys8rn5P^sBh%M&=7q{6X`hItz`h0^ufhE2OLQ*yE*K7Wo!=ZGAiP~ziV^6 zI01xcw99f38pb3Ik-RFtn-XkOSqt0(ZaqZ#(%^OSU*KQy-IBnyL)<#LH|~;Yx!7Yp z3plX2m-AIDHzo6rjH}(O)5|%BT&=PZvKZ6x$)n%Qj1X0Ja|VWA`&aSBbxklAaomJ9 zoeB-(7*X_o4=G7l*ZGNHQ13WLw=}Mg^g;R6ZytXK)UZ>fwg#_z7w>hvv}z&6A@sIg zUZdDyO2@8UFbw|((qY!;Vk7O4N+i|_A+Isyfi#^A^}TUT-u4k0;_Lm+Q-`Y4U$trL z^)OQrQ^nWOWYxgJ5Dm=)5xuNSFNJPwJ8u6YenK{V1ON0Lp zL#RUgQUH`I8f|AyCOy$$;K;&iO;C0Sf^kyxF zP=nq@01@Ys*UHhpl25!TB4IDdXhRUe+qJ*zMd0lkh=B8zX^0(Vp)pt2X1pr`|7(d< zNHk|d+y&|ws}6L8T@_HW1o}|kfRnbf{T&{{VbV1?kIAP6nc}O|v_d|Ipxek@f=ERS z@H?V4A`-VD>&_^V&qWjsv&FaFmPMxe{~cJ!)r{Gd%pX?8>++7I0k^8q7P)FWRMvk4 zRaL&HAG8m1k6Z`YF6$mcy6=a5l=U3*fLm?oQ-*rEOGdFO2kRw?r;h)FRb`xdc+rU# zRKxwJ{O|DW3pScz+La5(0k6o$yk&MnTAWE%l~jM4Q>~_$@ZI~p-(IPXznz1q3b}Wi zB3xBb4xbDhI}O5Ap-dc0J;ZlQ(%RYSg?tJ1V3HFVK!?zKUw^a*RvefjmE7x+@?LV& zkZS8_Qe1UVVK>3Ko-(@;=>hR(qm$Aa>;g8jQKs|h?e}OMzv1saa`hx!kOZR3SiL)kN{&wU#_<%RN8tbXk6C{D@OO?R zxsM0tnIrC>K8pL1GpVnPCDPXvnThD($z`tS_g3uW+3C*jeTK`yWd{Rq6g16WO?By* zucyiXH!%}&A;0qB#;ynr!i4*9VmWZb|IQamseQ7b&)WEG%<=}MDXOXu_Nlf<4k0)i z%k5P>nU<;NwcyJmwxNq<>&J!O9Fmq#vlx|lbUUB&3fz4JMJ{#sh*K8h$PdmsYS;t# z);7?O_8n1y@-WuhO+6*FW+?}6pm!lnK|~{w&^Hl(UU)vk`3Ao3`3jb!F z{+9b5>JD~|+4Q6HX|QsRWUA`?YfPQ*g=(HCIv*D~D!P4#Ya$dL3*nxkj9xbkz1k@p zyAfjcqs<3Z#Z~pLUnb~eNdtAP#5+O(Z3j0@~!M4-A0TxRqd7^2IsZiX^pR+R6{0)DCKL2O?q?Atp}(uQu@Vg=r( zF*Z$a-<3$SaYC*&70FnFWh69XHRo4}8#Vll9&Fvg$*Jg1wXbl&TOx4gsUjwN9yeAD z?n@=2vkJL6P?2BX3b-kzY1hOW9_!$|rp<3}@Z!ie*KFTs52OyQ-Yk-IacHy{db?vD zImrF`bD{k!6>8_YCqO!aG*;Nf^va&D*b?1#1Y<9r_r6ieKFe(Tk> zYacZ0G}L8<)1Eq7%<#f9wJYxW^I|2RR92^h=OXYAd%sfEBE z-zZkP&;;7#<+JMxeXHSb%PeV~HbDjSNgyalKr2OT4xr@vWpuNqsxDUxR}%B?pwwx@ zxQMAQ+INpdhiuD1!o@bwK|&IJxRn4KY-}PSU_b+#+0DCJ<8;)cuN-|MCkgH$x^fSD zWmQ$>o4f_&1}=PYxi5))s9^BLa>^riEY0M2{qVwKJ=!M%hPryJ%>jtGm8_~M?R`$p zaCv1V-`mtKQDFob5&4b$0D~~`e)1z1J?R(_nTojw_ry6*0SSk9}S@tO?5#7a`_^IkD zPRJQXVO%aw@|U;4`b=^5dfKkoL|Ebb$4S|Gii;rTH4r1ku5bH}R*Kw8*M1tqDD~Q*I$lRY@mw?Uf9YDAD~WS@(NUl->n0_0SCu_` z4c}3fD)imc387B1B=2QrG*&G6?BBAoFQ4@kBPT8rm*MkSc*iYsZKkH<=+{7%Dhf+s zA%;FK1ND)cM^UZz&;h1o*y$79{rCn|qzJ<#zC-_ey%?oc`4f-Z30OTAZT6z~{i1w{ z^HqcX{jfZaWYfwH8#0#~DsUvDrsqHIxeSb*4=;`2(vWkfys}*55Cd3-${u}YIgv(c zC0fgvqHA)q9Q}@;BVVbe<+x=sjWbHeQ(&a+!zvGaj_9fbBCRj)RySbgMD!R3+=-ZM zh!6>o7ZH)tNSM26DCGUSWRx;%5;sFipa)-1I*c(Mo`vJg$P=@|m>j=uqMHo+q@OUw zl)b&Ez8o4DBatmSYT>U{S0q8QgZMOgZtQ2297Fk zR_B8O>3ww2V30Yz(7$Kz%az|lqM(y+2L1R~|465}*hd4e%rZnC9D5s19s5V{AaK~_ zKMgNI23!;c36F98FhqPtJECX(GM5D5BA~m73+oZtu>MS|#JI^SMGZFDJa()(FmNT$ z)&wdL;0HmL)6eN`;Up7AELMz+YWKZptMOB?lMdV;+G{_6Bsn;yHPj z=IFn`tnRHuu*36S?J!yOAdTGEyR6~m4)~xCT_j&S8yKwxa4&c;wCfx2`m*#Ux&s;= zGX~DrLhe)X2DcW)U2M%Wiy5W9*_`FJ!t&_D{l+q~OYpsUE=)r=3`E?C&2wxrbC&A= z;^oI_Mz{%~Wif?iOXVcdFiU|qaSo^2PW{hJQ9dS>t~C@$EUZ_N`derSZ^+Yk)E1<^ z1F%I7oN#&hATh{O?d#=lbBD{0+p~ZgW4g;Km40?u++FfV8q0$t3vo;EiM%G63`S@; z)o@^{CXJ`GVsC2CW(ZJ%Xz&J3kP>G9D6QaPm^)27qx|*-eVV7bei`BPT6I|_QdW!| z3h7zH6&R9O{V!&)-3c;{JgU>xa~)M^Vbs{;Zu_{o&bbVpoqoURD!D|=SPR+eKeS0$ z_YrT(yydBtOy#BT7qna8UH^VZYAoZKvCxM(i7m91@I8tONp~<8cT{N$D;zlTXG#w+ z87Q9lJWvyxEnKTDmu9qjH%Is9W8>A=@sToOtbS@JMx@fkVU`N^SJf2yioM`{vKzdF zDkAHO?zM@C?Z5tdf)T3!F&dJ3z8i_CCDLYpV?f&8(f^Z-u4sK2mIHGc`7jdD_?f0h zJQ)(uN=BsNb)N6|#A5XCbS%$^@!7vQB$MzBQcsUUj%Pdv79(oSCAqLu<7@JH-_!gx zoOUw2Q*=8?lTEgtc?ahYxfJp;Be}Oy3^z4QQTZ6*FYj>q61WJ6RfL4(y-T)S!uE|9 zf{54D6_`&ST|^lyv~YPHllgD$3)s4~w+*s><^f8o5M$Jk@KpTJ#K4f&>g;hbq4M4x zTTdH~DnSxogE0GbA%}D&WVZh}wdZVX#YcB4SbtEY?#}13+tl2&;`i+fL?PEspNv80 zjQGM2nI-ntJjtvndauKom5&d1?yc!$ZY#p)hM7vATTi zp1$cfWI8DSXdv}Uij=>pf>PICOl(aOejbh!%w9A=fvJy+B|kh9s6*tC;H`9ce%AGk zef&{^>|Z-B{%`1RlM^m8z3h`FmI}dNCi?TVL7)0Pn<(j5ci>UTy8?^5wKX4O-3%jW zlDXfWGqZhNGve?Yd5SzG1J1R-vty*~tj#cV8-prnuO6Wr>7*8R6Q*)oUK6`LdoTZy zR0+G$fkZY+a|3ndhWruqa$}4PCSw`(Oil~Sc!{4?x=t;>B3sKd0HTz%F>P|Vvl=)t5zW+50^*QCB6JlWYxEtnzut%UpdF6>|Ud?C!UnsMbm_s29DcmynJEsNoNr zl3N-a5`RcIDTzNfLAf&*rN8>4eNZI5CI>%%G*5#DBk?YJ)^u=3r^f6*U8WOd$fa$K zarav*6IuHgRiC6tXzX52&GI9E@XWUVHN#eh8}9~|7rHcE77>~ZVtD);D3BDyu4bV45q z3uiXo$^K*8aU}J%rN6s>x%gnA?iUJi6BU2N`Q}1CDh86(<|61ap3?LkoGqOc#^kL ziGPMQY5Mv#gu#;v-&_?UN3Tc!9sfC>H@tWv-C(tB@Q&>dOx0W0Ip(|RU2M%hj-lp| z3clk09}v!g3GJ}D@t_K3x^}0gBFqWa&qK^d~es`8P)HzDm z6{HE?iSb*ya#$TBE$CP4mTLd&TsQo9xW04HfOtA#WR{uDf-9*fdwV!@eP^LeBKLsdlGpfy z=$0BZtPO8_%l#M@QGhZo#;tvB{~aCysZ_$fvHTHzJE-2LO~1A}3~{Is zDGecyRD*}~139)FIayaL(nLncdi-$X%^j8??STNxL3ue&7t$WxMCcl|yV zs!e8)$ODcdp0n=%{rofj>!t-j=V0~#hBc&^?6$~&;r+~Lmr|=LisLf;BQ2egklc)19%*Xciio@owrz3&WA|-=Xaj@dBa*ClRD4S z%hIlmiA{Q^(yQm{^2R;u3-`GV36~0zSvjuRn}3LtC8x>l{B*qiB~?!#_-V?!Zcm#) za{2o!`1ls-MxGSK;nZWTI;P{XERqL+E_g57Kd&n-N_D5EZEd;Wi3r_?$f;?=stP&!9OTak!tLlkV>h_k&;Ue zhCHwYJ7w~OTmYArrQW;0v?H1*A8P0*YIulQ>eytHs=#HxGHT-Qx9*U5ruf-s zN<_Zg(CkTrpNc-MY{B8_eeKdpL?FZFmVPs2LfUsw`oR=dCS6nFjW53jz5hU+l*f_w zH6eff{J-=M2w$?RK?t4UWDk+b*=;+Hm|`eNCCigWEcqEO7yC?TuH|rkb3i^!ahA$+ zPw!!+JmMyL?pId^&J1~Qy6PEn!#mYPnkbqaAT+mVorE{K*%Q9*FQ?p}3lO?C?rro= zMT|(Gw79>&Nk<6GQvo?g!TllHUB-rV+a zZnkV(D3+B|h$t+KK`IrPY9eDmhqNd0_T?TvpDc0x2*PvB4z}YhJ$UDd=GHLqdkWP* zEpBFaP{CkypYF(I@KNQ*sM=jj5zZe59{?|bTe|pz;naSh?}miS9Uh=X0;Ff@D@j3b zV*ZCXmMkeu}jq;zb&Dpm22EHeMTseZDi$ri)yE3*T z?h(U3Ti6c#8J@Qt4Im@5P)t+di$c^I8?r5}By;(#A`OHhLg9=zCE*oM=|>i8zVA{5 zOB;~ikhpr?n{s=t+F>|ZD5*D};e)~7h3c05FWfk+QFyhS>v}F~(BSzesfWP7a2R<= zgierBmX)+c4SuK&LI>oO&`kIY&XLp zj7!D7l!DPC^UfWX?CYwYkWO=ha~q4=INWz&);wQKw73yEoMWc}L&#=xE<>XZRBFFL zIcDE8=e2W1!VMqZ=^^^!Uve|(kyX`x!kriXpVbhJRASG`^JLTdllU@0YMLWuE#Ofv z+B_j^fx$|`Wiu7``%C>;$@VH#k!!GCWG02X4`K*koB7cU zQ^*xF;rx;(IiJ_kFA%#U@*~gg|J(I%_*`F~OP=%TZ&ZK+rMV{Zii{pFq)lo`<}%!Q ztMSuW`7Zz?acei0bux~Ifsw)X8$cKjdweAw>CsUfJ-r2Ta3y102rq##Wm0~Ks*IRj zZ@=8XNo0Dh>L$Sg|El|UHbL}?Ubx2tpKY!E3;z4%j?=-dkx0euBhI$;?m&Y&)(&`* zEDr?GZOZZAzy5S%mxFVCo)d@)n4Um0IJaq zVL^WE6Wdx8g}p@nF#iO3cNdUTesYbV3f9JL<}fd8=in?WOb5>!by*sQ(xU(fN0U@x6vmS>}7+E1thBoez}!<2<|Ix)_w(vP5~Z zSM+_4B5GX(*}_moUv+lyWS5FCLP5g74)_Clh=n%+*LDo;a{se1STXI8e~ED}2Lnl`<(xh0t(m#} z;$-@=rIoq=S>4enVfI~VjOB^Q=bgP-!=G1P;Ezx#SV7t-i2wf|e4Fc%&Qz>lIj`(bRv)}PagpJtjKB09R^ESdxx{v9ckijrpWw^j&p+DhTrNA_ z|Fe?bvwGGL>^O5#u6t(fbVgklEEq`OI^DPtxXQ)$XJc@Bw+aOpk0 z{u8~dlZ^f61BI=N6@m55*T3xLSsNE$!Owo9uT#}fNjSf!H4ZF=l7nr%U(!w$7A*7GP-XK;!g?d5?s`{0|+DIoULp`l{`!TMqx6?Gd$HeuQN*gYD6eF2{xwArJ8z?dDho z|6dN=0YYa#OKp70%!qM<(8GaToH0NLDxJQYvbtjN--pOYJ)lyWCVygLx9bg6G((=u z4)mM(8T2F%oChzSmMWg*?ftk^+{YnJcFqLSm~e$o8wNx<2Wa!p`sSntVxTUHnh zX#;qkuw5IezOn#bpf6g&S+*h8E4@8vX{vq9-x62bdV|z6NDj6Z2XoFnJMf*j{JcQ? z?=b9NPtnDvPr*lTW)Iq$H~w7wUY3cA`g1*RzP;0T$4~mQJ#(+&K>Cs2;8@J z6US2$%g-(>oY?G~Oj5EnO>rQ6yTqb53{EB){4+Gg&ek`2nHcl4roh_`$j=h^sdn!{ zT0XoyGhng^#BLj3|6aN374Su4#euQ>jg4u*OARsrfxTBm@7ZOBbHab76-AQq|Fq@y z7Y5^S)nc(mOGg^llbz!8CVvM{_F$8ss0E6vai&EKm>4jv4(++CM4g3NA{TPOAjd1! z_iA%L_>abOaPms4B-(ACn)(iV4J*X&3E;{xb2b360_wD?8M;8}lQgc|E$%+C!g-v| zw+8N!Srs`4ySFU8=sl4+O}Hr!ya*nx3A~8Qd*R{4}9J$wgarL8|h=5(c z=lP5Je;V)1db-jV2>5_{LU7sjAPRam*LO({_=Oky!oX)VKl)Q}(Xai3iiLmk6EE8| z{a5m!EQ#5&ne_qbvB{Gc^<49NFY?Vus@Offr+?-*CpMiWms3u!`{pFkvAME=C(WeL zPB6_%;I;gINOREwI9u!i{U!6`aG&%;f~A=Lq+5Z?SzsdC9M>^KBCE=0U1n4 z=gFSB*enwXzWlv>PwSTMjr=$W_6%m5sQz}C#g6kdL%immg+F6!z^=n9^&8D)pa(N> zCYl9{D=PO{r0MJZovU&<{fNkNx)f_(2|)_6m8Vn$i86%WagEnyo`MtuWebCxqZ`V8 z^o;lhjHe8lc7C~BbKf$8xQkc*c{?+}kBg!;1G|Bj-r9U%? zOR|qrW0Kck)Y(K`g@SnrnlCBn9R|4uIWy7v$;nBq*#FoPuxS2MV$;(q@O6k2uo$am zwMLfWv1V7<#uP^d*k8fSJrKopqtNaaCp(SG;Ru7$8&WE9q!R@SVj~k^(Bs#B5T^2z zu*@B0Vi2CSy39Yc1UMMLdeSsOW_5mrTX7vI<05{A!e#V?rUrg$l;dY<^yl`_xS4-U z7ZD~Q*N*%A!iRqISyQVjl27@`fA?-{pW66j zio)elgwr5gY2F{Y;`_S}3cq^e18rF;Rwf^$%t{rsLQ%U!G^2&4SUUsRH=H4-ANkp- zoFM*g6MFD4oQBd~Uq>`w8(IFXH07%nkZcPW*V$y>uV&y=18ey!==2+7kA=VO{OQwT zH#D@XrdoM$rY%m!7p#<%#PXp)hsog%|NI*mRfKd(xH9+q|LhFBq;lD#rZMd79BqPR z(Zju`pe^VX8ApsKbW+{NDo{Jp^p!alC{iaR>?TcMu_C#X%TlsKTC&#@Wu0�f=&z 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 t`Nwe`9Iy6_p<;1 diff --git a/src/main/jbake/assets/img/jeett_dt_004.png b/src/main/jbake/assets/img/jeett_dt_004.png deleted file mode 100644 index 3ab53284d5ae4b8c9455168845062ef23be2b2a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32799 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 UOc4-opK^{5KnZF@+!uT1~mk43dE5$H5^vH zt-?-eMoXo@SH}UPJ{za8m&zAcq%P#WKoihJ_%3m3&SkG7VcUVRnLSsy>#K|D1!kXI z{9M69>V)k3tOT^@WnkA#Y2Xyx@0clC$wmi9Is7jz7FN^Sx$PDkQxX=<#p$TNe;29; zO0{0rm@N~L5fq|oR{$wDQcf=1O>dD)<;rg?$yEd&Hx1bh21(%lBQhc5Q+tRbR~I0j zth16d@N9(p^zD+?_)9s1r#`aR`M?jFgzx|*_9hbA3AV)kxoicd@>^r?%MyvG(g&`@ zR|4mo?Ps7M5d_*}MWnfEOFdMlC%;rNI2FwRazTx*quirE;`Mmn+JcLcZCz?3(XVp@ zp`|HZ(+#P*3(w6i>>SjPx84lu%LB&y2=g^dN{EeNsjmq~Tch2IOu%^EzFry>^M6Ma$jp0^!o?Co{b5OrtPeGmN}_8ihNgzI}s1$#&aK#cqlKuzPO z{`)nf7tkc_(jeIvp-&$qJ=lg_%Yn14!14GuQb^pN*yY-1dA#0v2J@Oh3^Xzu-x1sV-)nUm!;cs!&j8<0aNlD9 z9ZEzGL$1Qwb?@)!;Gj8qMvN80LM|ubXRpP39R%ydXP0zzQ8Ddvyfkgidb2$rNYI0x z%d_K~HdmKIZybR?PIR+v%*LtPboQ?>iXuvFt5TaxbdEPc%}UzzwaVU-d5= zL|67(ywQC#u>H;0uZdYoZBn||dSFBQfm+!`-pyk*^`w-M?|QtX!6O9*4IDT+4jFnk zpBj6SsuiMcq~|(e@{|8>FJ8FenXw_X`3Zi3A2eqf|Kg`Q;Nrc0z2JHBXp=J*yvR2r z4T!$a8+kSh`4T5wS^F?(eR1$K1xOKQMkMP_YRbWwYXZfv=oML8I!~=J896|Fjq5m+N4|uua zVEGJ1mILqlA{n`wz}d*=tmOCIUvj%p)@43OHr#^aTPCRXpiK|afFEtmD941MG_nq` z0PeLjDE}pSVJzk_AtBv{@EA{rL!4#WxUCcb^*PtMA$))9HO>1pW2(YH27um z!^ThN=!aXPYHQDW?4?hX9Pa%jqJH9L%W-r+k=lhLZ>OIGa)07yi@|L0=Y_b6!kE?R z?8&K$6h*Dm&lClbFwS|34Vyl^qvjxvk zhx`tKajw)tia^S5QnThGr6u|)9lzn@s4`qbrRr9`dJSo_?!@2W8>&U$o=jY(p^iy} zRN;(nJ+=m{CqzBSkOv0_Zk9hkjM8zYt$a7bry*qrTzwJ`G_k_{BzI|{h5`kbJSkcJ zz!YxVy`tmK90t%39yBy7OXfac;eE@x~VWZcB)1$Z}$jdfzh>W!4bdc1Ju)}(| zG#dq(?#(yP_2nH$PZKW+Q+1h9mLy4a4H@YZO-3INUeMQmqie{AW8Y~TqXnJx_$(H@ z8d>ys{N`J2fxa#5r($#^dLp(4eY=Sco#D7oD|^)9_>#;wBIW*6r{@Q5W>}-DAPIMr zT&hS3;YezrB&si~aTtYU!rO_xtU)WR^zL-f6mZzd3l<^95X6RF_}# zZu7m(-{7}e<{1x@tD0+hk>JDR`u~f8bN+Yubi)S)fp7Qs7RQ|_uLpRKT{ez8%dHr3 F{|~?fnF0U+ diff --git a/src/main/jbake/assets/img/jeett_dt_005.png b/src/main/jbake/assets/img/jeett_dt_005.png deleted file mode 100644 index 873de0fe4fe842b13955f81d983e4e2c6cae8ef5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22811 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 diff --git a/src/main/jbake/assets/img/jeett_dt_006.png b/src/main/jbake/assets/img/jeett_dt_006.png deleted file mode 100644 index c919ca5c4b246f9a5f2f145f515b084ed1f859d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17191 zcmV){Kz+Z7P)lqF%;nMG@A~@s*WKdH z-tM=@*Yx=On3GW7)Yv}Ozsj8~l=kixv zVF3aH)Z*~m=<`NLNN{j)+vDmcCn;7}S>NjP)6>&wc!$B(>YkvZhbr=-0j5J>xiJa=H}+^^!fMq_u1LmYHDiq z^z?_BszGOr*yZxf`M7=;-L>@&4c6-`M2x>+<-l!q~OW=8&SZfP#cncA2NV z(c$6Yc$Bip+U&y8G~X;@ar+yVB?` zG&!ZMw7uB#U}kEdwaVx3_noc1{{H^y^Zl#5&6J#@@Av?~g>-+or z-RAGO)9%>c<>cz|yUyVrA|~bR@{f&+fQ5>-(dyRd`H7^!=H=zI&F0|aGSjR`v3nC5)%v!4%p-E?d|Q*+bIE?d-jP= zGtS-Yy35_N%;e|i=aQ0=LSuy6V&&aTmoO0+%ta#p1xaP%KX(Tsa7Lm zu}(}!#6ESnLNQMjewy&s#4R0Rd<_ZXZ%7!WF4hS%6Pqygvv<4wTLZJwTwq{f+!Iy6 zJXr7)n5hMf?-T^a?LW_9uvxGBQ(z1@Oy+-@!+zLR(JnXIq*c76?iax&$4}x;hJ#Wkah(65MnSsmnpZ!Id@u#-R>V!Q4@S z3QXokF%^h`;@j}&_QL=!SH%tD0shrQ=K$kAb%A-vWPWk8mzJ|)OH-!c;Y~!YE^Y*HRS+q1uoHf(jT#b4q&2*f@7zQStUw#-62Kel8SSif89b0;L ze>Tx_*eSUh2)Auh6By5})Lu{jpVC`=wlw*dUoCyOgTPEbSX{P+5c^Z!M2=v0(5$P3 z&3k7ZDc+D5xOevf?hj>B+J=?o!J;Dv_fIGU=MM17C9&yjvBz~Qfw7^(%rgkg#+D*+ z`;cdU_@Z3=;-stD;N|j99eWb9Zs^7rQSKq{X`*wwH_O8(u$5EZg{y zE@5U>5I489T-|LEFxZH3o1zZ$MH%5R1kOVsB@qOEiX9v14T~tF?d{?g!9)%b0OsMA z0bcQe-M^3rD}D(qO7Gn4LD=9CEV|kv6>uAl5UG?6($>H-$%b=N#$gNq!{2djM`2!z zcymim`Z-GeW<^ULA>ZG}7XT%Hb8&Ir7grV8;OB>){{9sg+h}E3KAz_&iVZD<&7Vmd zn&^rVVat}Q;vE77^H_1KwCvcTQXOJ!3Cy;s3XE6-Oo1RvQgO3)M_~RI_akLFH)EUj zg1$SaNg7P0>`iBEm_rejP5i1<_N#QUEK9m~@BQ&6;=rO`_S0|&wv=09F^+YZEs15D z56@7P6&Ds~(aQ4L=T*d#Hr@e%p|wc~k{#*2@aL>VKo6f{W*b$Km9=H_?(3BDUP9Tq ztck!1LRmR?cwuqVeBsolR(czx}Tv|5L0bugVz^ZSMD{9*NLz&_y zsD=S!*8klg5rv588ySE2m4ezP`XODKP6YqzXl!~g?%+7{+JPB~j3XU}x#L`W zL0e}-+2Nd~GD?=8Xn+w+>Ai!jVbm!J>L*cA);?>q1V~RBhnaO%N)MTprPzP&s)P`@ zm)y2u4qfysY5D=0=(<30RSmz$`WbjH_XXNi65*xzd_u(8>;9 zY$&hTT)=3*PGN5AEmD9E1J^L^8#gNGz~|!hOn?9D%z~`LKFsWgVtVFPMRBj9ed+Fp zd}{mkJVM#^GWONL9YA?!VK)gy7nI@NsR|50%m9^9zI)F8vd?y8-7IEMB^!R&A9&cm zShTyGS`HBNOO}{QZ7r`@be}%(hr`FVP)8|yk1+?Xrc0@vWx_1QwLg-1*N*KcpR+_5 za~;M)U|#j(4pQ@76PrdyTNJf<74+=h#1S#Ipk<(?!uL*ZzJyRfV6^*eDFQ#A0;;;q z-j)F>b<2T@tQ>0aexF{^=EI)nnqt#;ySGnJCpK4XXiCQnj77va5g1HE;3$(OH*czj z8-9UQS@imT%5{}2ur{C?i_FqxrgIzyie)NcfIk6QzCgK>U~!PT{PfdLTDqVP#8{t` zrX(=F<^iK4%&cP+Le^fhtQP|@rX0rFkvnformM}KWiuBT48k}N7;k$4!)u>uz4ht{ zW6EKiKKp3de6{t$I0KkvHU-9JSJF&JIt(UYd>syqXCA{4;b5A zNi(M?FteQwj7AzqI?NMrCCzjiFjf_JHnd)Y#LTp(!_1rdz?c%oQNZ{;eAxTYRLn6M zN9G*4e+2k={Rn#e?#S=Z<9~klKWOoPknys+MjHbT^UhZFYvVh>$42Fcq38u)hT|dl zvV}1BL0uqa>>$kFk<2&<7{4-BjHBZM7~Sef(up*6)Ij0Vec_TunZIisMgz?Bk@gE0 zVx~e|&_p+CB$gtv+Up_Rn zaN)w?;qdVAFfjW2`{UwzdU~S4=<4cn1EXFz{5J$JNQYUX0_MRfUR{)n6Cw(XF(?wC z=<9>t9vF3X@SB9*=MeN(p?3>Lc)034hpFB<^ycHB_pg#5S|x-^3pncGz+HIH3BdSK zx}PjyP#wm(z(hF=0VBNd^34AnhtUFN7zs?AN-ed;XaV!& zI?NC@VB$;yOr5QO(I@7~bC~04f>;rqhwrltm^vjexjMKQv6vki~;P3iBW@RQ`4>!9z@lCDs`LCXOtxS#A=Ta3jDN&q;1iro%*~ zd9?9FlbwM><^t1a02u9@q$I{Uz|_SMCf(fV)Qpeonc@o&FhT`ATFFZoli?v}c9O%9 zz=X-U#9@e-u8i@dA@hOh#|#XJ%#-IZ05IaPsH6;9m`e={-$zUeY7zA+?c~D5~Ps1 zgkGRfLohHaqyDN3%#zh_jI3F0A7J7d6-0b2C6*``d*H?ygn`K}_Mo_Pf*c0I#7+Xi zaTykf8EvA4WGV1_Hc?EK%IFi)Q7(=yidF=RCBbAIcY-j=?IAMLQMSrY<58!drOCrjN}JULM!i^ogS@YF}c`rRb-oTNicGz^UU z@5nUDbvDMU$@vEz=X>cfgZ7BcA$rXNTfXa8PCMCCx|~&KvaY@5tN*MJg(sO zCy71qo#QyXLQbX-1xz_^oXHZ2qG>c1PQjHk@j^V4C~x)XU%1d5U`!M9L^_N_E+?}m zhCOI;G8*~YD16(GvAjoYv5bZ%k21$uH6E=%kt2O17^pvvTErl764GL{h;du~H}|U| zMzB?(dE+oJfWxq)v`2KvVWb&u05FqcI!_eK3Iu_{TJ`GZBvfLa&>F@i zO3=vyzyV5`uP02l&=yWHmEFmdCZ3jEJ_DT7>3p2UYIWe}N)G&d2w zJHaK4EDj8-V@Y@}it(O)TBDo-1H+a9zZPaFfdL$b+enwirEz5z0E1>RUAn*^R>?du zHH;)UBLM*BxPTGMo{-hC#NucbyRV-yk*jajb*2BnBujs}b>D=9~O>;87> zWdWsiA`p?1>VcG0SqY@1T@$T}veoT&7`O|^cQVt4(!>Pf!ZGFqPr@Faq%zr(K%nRy z8>V+sL=y^G{kU{e%#0z!4ucmrc}SVDgidm-(qVW>G%0sNG>iboKoMg+C!rBj9|HoT zURw1ejP%y9$Yip-I|}Sn1084)k2U6!CJ=nxO->qfA&PkTua9>>q6ZE^ooZt_$sjSH zYydFsOJ^=Uz?)nOe%3B}XJl{L^T0kMy-{g+;@2*90(=c{+T_VcNy`NS4-x)2bf6&t zj}E@eVY#T0HN+xbs7n*X42?G?;pvZ(#>qt4kbpH5E|c{w4~&(Mg@K)FEWnsUj0PB( z8v6s|XM?$<hPqf2WJpYKa7*t}^+C8zr7?`iNFef31QBKPKXE+R6*{cC29IXV5|J&Xv3ykSS znsw;F3>yW;Br!k$z-Zl6u+09z_&MBRv~!Y4V&EQj`~?IsE1yhYFcdK;7Gsnc=K$ki zhcRR^D8#6c>5uC}ILy*135?zX2g{2XqZXruj4m*@{!JampvCAB6NUkpB~uv~qeYB< zPQqX@NMxJ?jH4aKJYwJ#GFXB6ku~yonkDh>`|qDPabgu1C&5?`#`9ooSH?PZ%vDBZ zW#y9Xul(=vsHi^HjA=GL?DNJBTe*rIw(Zn0g&Zi(G-@d#poYUOXWfmvb$hdB$j+;&Y$Qn#F|=28cmZpF=zkRW8s z`P&zm+t6WwOsE4)sS|-Qx}}?DcMHAkEwuKx(AwZav%`gEiwn&r7n)rz5F1_S?R8;n z;|n9e3|j>Z&~&;jw-3$@x1g2-nr_7ku;pg0R8=uH0A@V|%sS|>3!uYJR{^sO1_n?! zM3a-i!v@Vm1;*QXz!=9Dh)8;qKP+lodROdU9D~sSj2>cfGwvaX69_OfO+!@hm;*U z?S#5l4FChC!Vfnk&()+tv~CiZlVDIGj|p*o4_a6j^UG3%Fb)F7%$$VHVvHswL&TUy z22uy3!yHZFSEJZXNi`!UzqTm!sGh^DU$45Hu@7p*jKrX7Ro18Pk#7By~L;{s~>{IzVhiuUw(fTR68AND2ISqGJTJ9*8@b=tI0_#LNvszTHPehT@9T1sRdN3*PkfVf{_R6B1V~$R6T2$ z81T6MPIVaL7UOH7#h@i61H_nTGG;gorz)p9BD-*B4*w9RkmFUDdKUP~YqX8;m3lsv zPnus{z{zD4oX#%@jo|Y`3#$+17v8HLAnjSV;PX?3itH@`n-lpv4!@XF_71J3f<&3Y z=brP(*+6N*U8JP%1Br5J}QTqBEVoRd$CyzIx&Vl##9em zADAV&4)f;a+}x5BJ}0?wlwVlb5y=lA{Vea1D_s^DKF{S9#Mbg$g%PKB5ND2xV?HlP0RQki+ z;5#r6nC8%(m)}1c+7?;ZR#a45n99#iF4;X0b`@G*M`IxMaBp)Du-!KCXwb>@z(|vmXvrEq`sNoK&pC7B9)w{-8q$JKzl$DVL z6{nh7TCx&mK3;^?Zei1)s({CF% zFH&|cnD3Q5Qt;`6#o87FB_$0pkju=TLco|+_L{U9V`Yr7v}6n!EDqBgP*g=KxZ=gA zuC8sXn(sv=m7FCNRRs(dULiGjMOGK(pUEkz%FoG-XS!9L7 zOlwZfuFc6k-w{wt;!r-Cf7*+4wD~lpHUOwxfPQUlVRdtJYJP1_XvxlM;G#cY?bUJS zd@i4npB%A?b8pGq%7{Ijk?BCo{i(fB`sqdHj4aAT)8fo@`UEL!=~jA?B5&^s=sDfq z=Jb;O)tpNzswJInJ|9_F8<2dyId*2N40e3%<-R%6YN!Pdf_tAS?z!3<8;u zAYUf~gEc4FBqRbL_(TD|!uG<0|JDnz zHs3E)EeADTsh?RzFLWft+58KrgQ1~2)%>Gouvcv{(C8h481S%D3mEgtUSmngd}8#G zS!5P47SC3zm&81;9_&@lCxK0;?&GQkd{u8XXr5JbN!kTcy>VBVw7{%h^AAwou}0fgUm^K7NbRs zFXG{n2w)Ib(^5Yt0%IGCv4|Lh$SA=<17?ZU4uf1116#}zO;Uo__9B{2`Tjj0SnDv_ zOC0nqMmd#*AQe>H8v%?a90`oQEXFcoj51>k7;9=6^^CQC6{D;`!K`%amI@ijX7*X_ zFz*_$7)??_kg9Swzq@F_taK_c*e%8~Vk}0+ZVvM0Oq|6Vhwwvug-D-zX z%~+#Y48mi;B{|Ag0JT>G^T$Qb0>q;oGRniwyZat^!`qYr#%>m4CNZeY*v(;dEJm4>ki@`+42XS%z!y!`bHZ7 zqhm2}QqmBks-IMcU3S~o)mgyIvk@`=77~LI8SSONMu4%-VSu&+?_7m%U4`#mg>PO} z-@mH4b5Q&zhRDY8wjk7l}rjwGz#27(F z&5coqku%wj3<{U^HMkqNJXY^llNck`f|%sh^r(PATu{bp8S6XnoxSB~RuMQwf zEF}xA1;(1BWDYT+jWW1JYPkTK>kQ;8VE7GpDF zddzefp-kEn7$d|HaUg?WAOg7|h6+?J(rn=p@B}bW|<`YM2 zekI03z(_8zd2YBSUcEqAGd?Kn1pb-uB=nSIKZ`Mw7&K%`pEQR-vlxqr!G?@Ez)0i* zB84%83&!JQR5I903Kjrg$%)iJ99de=%y3I!h;W@`A*-{VO{wo!;Blsbu`@B+-D_;f zpe%nd0F0>HNxRp`1?r2@L^b++wUrN`{CrXfg(n(V-?t8yJ|F2fO$blIo@PVM*)&KTuw1 z!DP_3Si7H&g?s8y^8ToGDcNA8S7>S+#(Imff*2HJ3^Su92Nf922CQJL){ezmad)~p z_QBz*j(Kpnf*%HT(Gn)Hy_4SSW4-s95~kF&FpC^8HDJ_Y%uh;YD-&b^G6sQJf(p!H zy_h~-4;c+M^E83sN?Nwfhdn6G%e2~iF^d+VJx|pOh}^#Or>#PRvQIo zx-KvVh%s;_-Aa5(+%~vB)7KWnSSgI-fU(eGEF?zvT0&PQ$SPnQVlj{~hqB2F4~9GtZ2qbo)-0f+6W_4NNq7C7D6YO%u8V zIUN{VS_~Fq^pr6uO^|V5<~lAXp$n5(PRZhyx3p~av57EPFC_ybolXJ9QN-vdV?-L= zrFnV|W51kaGAV7_y76$!soh&QZgcphgfh|ZIAE|?jD3i~hzvp>V-919#q6`nVt^{9 zr7Y2~E;bMbqb_CubL3ch)}E1Fxw*MJUwduOo{^D}8C$m=`{Cuk3oQZ0GK(==7>ker zY3~J6Ql{N6r4U;HQ-5qv)!N9&KkMTH(z0gj z){Pr`dmlcW^NRte!3GTGq-0ze+;L`i>vpM&F_~hWCOF|RCn3t4nMGQJJA!a*_jmuuM>Ruov zWuobVUf=AFATae?*CN~n!sRt3E?M`owA|%&7#HvfKQk{~ zGX{+1NeMGCCY8~aCIo}S7_peucDEQnm^+(iQ~)(hUiz!HC&mymA?5-zr%HuORp_o< zH7+BdyWE3ufr}S4E{mYY`?z2FUZ?|%t4)ZRZ6z^=kwFy);V^Tt<|O-AjQ6d?Kw5bV zUEH*7n^hiT8)49axi+H41*~;3u-S?go8U)5@wzeHHCXhiebJGMc5p$hxG2Rs|gS3%MgWhY1 z7z>0kr3(r$!geJtyL1L#veqcOMrvIC2;#C5e)OpZ7XX;O*R_E$KPlOh7=31Lns6A) z%U%mDMn{;$Vg`4%?=pK6gGCs9U}~ySae;<))jjD?J~4>PUVxXq>M=YeFs`n>M&cp- z0za_F92>;_BbtvR_kRd7=`inrB52|r@B{hU_|7{U!I$#GVD!Q-lc827w#>(Yx@gHV z=O?Xs6+K`)B2k8Qvvh}b!Q$oRMex%kb=(Dt@3n#1SH_C5EG}rG8#R(lMH*_<=!Q%8 zfl|$drQ&*mBN8ZHK1Gbvsk=rx<8-Ql7r1Mr zaTg#CAHM#*HZYV6X56HOxJ3(bgBIfMEaaV8h+DFB_8sVtg96;nx+hu_T~N4bq8I7 z%yI_;13L^v%!8EwNMJremNh62Qw4O5_8aU_vx~ zg`b`nhq1FPATY>IlpZiR<}>IkUgj7ar_RnePiQvny!(Om&C+~`4!s0 zARVTLOw>{RxL`brEKkr@CLw8@6|bwz^0aZWl-C`eHXf72b3;|8PEM23Wp3!obcG4X zxGvOd$&|y)wUfid%QEO9QEa0u-ldKh$dWbDMX`ZNW8km)Vz^Ri6RQs$nB_?x#BjR; z{A>@M2_G7ouga2A9mmC5N;eW*^dFYCNcvueJC2OAD0tWsJuofJumv z_II<1bvnQdb+Z|AGG!npMoMJSgoy1kM5YiD#Vwr7 z#i2>#X3}Bi+R0(U!A#LO>Gl+53&1O#3!&uqrnTwg(y#o2Y_M8S<3-s`sAZ&3x~Ve zlq4xJY-ngW0gsOg9}cf0;uE4}Qet#iSTwO!ULO~qF@fuelFQrxS?ch_`g(jTE;?L> zPjiEWiH^b7)OXeQ$z?b62Ec2RYW+%>f>(p?f0r>7>bDw(hCF#8Y=BcsN&jrXO|8Lfn1 z!3F9Bp_QEwC>^8oqQ-*>!Q?)2u#_QnnV<$o5%5vmV8Vnfjm?-Kw8_JOgv4cbfmhNE zmXs(P#IXny5=M8-1n_AhhC*$Xb%lkK8A3>z9ziQX!W9arVgiF*(?%uWL~R6yM|~rE zn8J`uNMty2r<6g#$*E$g3YbidE@;5mCnbfefdRf`g23G9;j(4RT@n(+ylCj>apMw6 z>o|@%AeIEn$499iGU-I8lo+Fs%K@zh*+~m26O!OSoR~2B$jvA)7&-%8dcgc(+F_n~ zF7maly%+~xknWQBYHH}|i#dap8@f1naj09P$fGl;P^SWD! zHIEo$3XdVy1Rijh7y=&O*%w7-)UhYr092xZj1=3{0|GM)0rN38R+z@6CryZiF^a$# z&|&(2^ibfSjkZ|KK%9(*CsOf3!NhWWt56^b6OucxHL}AL3S5ndm&U~7WK1G{6pwS$ za~MwtI*gpqDJ4wsy88f!VdL=xhLkbd*aKuF8FRcJ{2Slk6@m3~g@7rR;h6M#F;~ds z)wxL;lK@~^AK~ycK_i`ox*C`y#w3|XmDSLB2`(3?Y1D--Npule8buf3rQd)xObwYA8;p;kcCn;# z9zCp%H6fsL`&}N ziZ2LSadF*b5lwqnXL|{}T!@c5)a6S577i(xPC8 z0lvf23FI&hFwwk8*-$_2k%ITL8=W2|=62N(Gw7q^X$m=+E$CtaDA52Rq%!Gvy%|-n zp`6rZ6qpr;940h3HF?d$gJ`&*4ZHxn?0zHkndd-Yk{^F{Xs>~kbX-0vB@kLO0ATu% zz_@^a0C_vAn7=#UX#%| zMpwkwkZEaD!H*XR0;qBPQatMVW};E$ zFf_b~ThoR27}5vEydnmb7~uu%4s&nKJ9oWb4cWca_^|Ho)u*3(_N`~1ef#YfUVu{4 z3Bxr^+Mpl`EPMsAgG~AWQ1nVfG{x6}U=35ll+q_2B}o)?aqDFFXj2ja->p#4C4n_+ zV7^V`4btfn1zf}6}XBg;MLj`bu)>3%~yLuYdo05EzxitkSDt)WERFKZ2Dno=6upiUd(HR2hA|`#1|9 zMI`>1lp&J$MX`7pGC427gBOoaiU)p#|7MIR8|q^ThQJYr1ObmH4;zXS)VRp|hgdvr zcUXepcv!qFW=PIW>IW3L!OGx~zm4m^A)r6H5$z)QIl7NHJT^Wq#EaxcZ2cQXC&c>4R?_V&Ab_mz9esiA9Mc;@YAf3FA3*^#=bx`W`~LSt0lf~x3b>l-(8_9xa=29W0CkCD>A`nX{RX1cwm1`rP{ zsi`r%l`||0pb0e8`}NnbEMLR()!#1v_FD`K9Q1P%Ix$^XfkAf|B`~l4m$&QPSJte# zHzPT9XKq!b0btG;8;4P*rp9q_DxjM%glX2q^wJM=%~wwvEDqzmoxq(Y3joaP#vO)j z#9>ST^EM0&Si{T_8V3gZM*0|+eqb?QL()LvXanQpu#_~#Wzhp>x~{{}pS9XyR+S_V z<17Tmtfe1Dv$e@<2`LRA&X8$focOE(XUWoK3K$%PW3j_%YMAo9HUma)CLil^MAO%j z_SH0WKm&}wk3(yiDJ+X=VECLDtaX?ZyLP!-2TYXt%2+Fnmc#f@wUlHrFjf;|+F^dZ z=LIWkm<~E}q<1NLHv9kQ}y=W}J0KKFaM%G&8FuC~)ki8@%FtT0mPqSCNe*%8MF7#a8 z?eK%4p+`f{h3;5X-lV9y9TC3!5WL~gb@4$ra~vj~*xqc(`9aSBK64U&@b7lj2`bl@ ztIkh-x1{Ry=J|QA2A^9UHH3eu*^#pNE#4Q0&0)TKYtxLX$SR9#7!Ku?uaG0X;8`ev zslj`lwIeU8CwapU@>V@>9(sni_pN2OeP_@10p9V7kf5N_S>R%@rO^7GnX_O288BhY zHH@Xttv(B#-}CU3#+Rth4|=vacz(Bl^8;^g^<1$c2z+da^8DQ0FWv0@3jj=yWzVgK zWLd9#z&ZSUb97leLxM_?vRqo^*WVS5$zh&-dsEhH7CTIK>>Jv%)gZTy0%ko1U_4QQ zi3S|z4mvRFv>j%l4S>;{p9Yv^N?<%!fScmZ(zKjE2#lo)}*>W@8J#7ZeTm&%tjLS09y;Kd1);;~x z4UF`TqzlXj=9z2-?_Tcd4(*X%2Lbc0A!S@$b(IOxQf8^I+F>-?9?V8M%sQJmj4m*U zOMRXn1kCK&vz09uglsu~8w0Z%2F8ReNMMlrK}LfH`SInOnD^A^|R9z-$dmvvlUt+iHjL@xPzP-je9A1q|@-t$vM^pS-}z8U`qO z5h z*aVOCTH`S5*CWnvf$IERq4T@tt0`iF;Fg1$&fUjez|1ou%hH)auJ0*<$;_iOg1N5R zz~E?|l8gkQ&TRGF&khLk1Y18d3e0yO@%f_m*Q%a*`vrI$=B&jv%w^8b6WTxN;6!$K zo!0rk&Zg#{*DorQNwo#lC%@X09kHwWfwCK-t&GxqH5LO(vvL^(OxN&+$%)q1&K-iy zn>TFU{Ne@~kw_G9y>@MC-*jphM-klGN}zDRHQQl6SWC$#eMI4$e|Obaoa#dyQvQzY zPa{+<2UWeU@cF5$US&>F5k1=yV2*NtqmoFR%d1wERHuBv$={Km|0$RX)rZxS<))S_ zOK-Zq2i=)-p`6y)**bA5Zv!mMW+D`_@rlmXPBva|w%Y%fV^;;_&3VL)8-JqXP*nqk0MWtw~aw3_M-NDa2qxs33mpP=8odtSr)|}f=xT(6f zC}PvV=bZe{mmsR%f4-D+Se31j*AghrN)<3}V~-TUfCRMtO<-`F#>X4S8`%`EmVlO) zmTYlrYwLuRyWDJti6FIQD}kBM=l?gUAv-&#i1PpmjIzJ7OqG*>jx~aqncFM@CW2Hz zBIQ%o0>DJ@v%dnq%ccyZJkaYV8I(l@Og)h|(F*7yYEngGBdE+cozdCZDe*vE53_sk zFGpm=4f3+_z`($=vhwo%`!8}uqWu}g#UmrR&prElt${n86?fPj=5caiVel2eVy>ic z07U+EnsXYkjqIauLSJ{Bn07gobNb9>FNl^C9g!)`AU~ntZyDJHOvPcB^V2c5&7){ez0?gwQetz=f$J72b?fu8| z0buyqmp?d^ll{g5L^lbMs`X`AxztnTFkgI8M(Z3XyRV&+gv?IBUw$^c9wsxfG;vnq z?x3qz)6=uEvTpmWd1FTIpHb(M^lKQ54wFkw4X$oZW;8GwiaM$X+KL9MFH^FUi>j^! z1lI;fUd|6LYRf)NrRJm#Mx+)r)D|@FY$#&XHguewc4lXxR|(i3_%J1SzE{rYoYta- zoImZN78Erw*923GDpcmHa$jh44Af@UEhR7q{Czw(?iX*V&?|Zu?4i(3RaRQmO9Ft2 zcsvaW%!gm{vkxJvUR4pJ>L)3y7^vwMSqRLu2!4LYW4N0X0Ri*nhY>~P3($)gG+9>q ztAM%hGdnXcmXNLuj9i*ACN#C;4o*p1;gl3=a4yNx8m1#Z=W$NK`PAB+^T`DP)zqDD zRtG;O0l;iJ-L`X@7o(#sxjAyM#H%18bns|)PDv_>l*}NNoG$b_I_*quQRsHCy!)_f z008D*4(IbdIj3Hvw*U51#@1bJ6{-#ad@aG!z)e!>{kj?$K#+&&5A}fg@XL`8EgXk= z9PtqVEl^yQy!jXeW(T#PV6bS9b`gWjNpRV#BnCXcrMG+k*L;VGAT`t$6*WX2eg6yq zObPH^!9eZKh{`2;15}895>gfK%!%X% z66d4Qn$*S$CIRUug1~?dqp=u`G|(740L;hW41XN}j5>VvfLUj$ z!vHl5*lS6t?og(r?ejS~Df5>g`*E&Fi-Cy=34x!RXBjY$fs~XC)Pc>Ls#Ad)rUa;A z)6pN2hgUH(aUp zYEC8vR5wg}Gqhn92uxMzz}YL+4V;3KE1W^tVVX(#=Q{%UsUR?*!<^^{sBK>VJSRAH z6X-A_1>R?O_Ta<^05C6(mj71UeL-nf+=MpJ z_rwUyI*V%l2VHb zNez*QNDaU@gVpQ6B@M`&G|!+cr5J$$dP#X}t*l{E_J3}H!(2%P`_j`cS8Xb)&JH+z z1*l>^;+(mXyYq5Y^4X4n{K)1jRix@vuj-Ec>dSz5x%t_tXF95q&s@%h2KG*L0QJt! z54Lxt%uW7u!MaVP{c{(8+5TYqnwMT#)8v&2Uc!+3Dy4z70mLyE7&9HFc_#;qO^;6p ze6;C<4^D$$UtTg-Ih~|T4r+@5%9w5Hri0opq}1DzUQ+YUwcuf^E_VcwLRW3ynZn_u zdSswx0uHC{OsoRuAGhnvvd@StD}sFYVRe{ipUZmD3Wo_0Ew*%|SJ_$O=biv( z2}tJ7oxHC-Z=$L1^rS&F$qN5@uYU}#ZjC?Sv&|?l>#Uot)?Gt2SI1)f)WrDu`XG=A znrF>il3`gE8hqheKEIpuEOHohSx_uy z9=a@^x3B@D+JP!-#1e;jhQ!{Jsx#6Hp4npi&sL)?{?NOY)Y8D(K;q0+1M})^_0vIa z+r?p^oTP6ts-y`Mb4yJO+;*PUIt+64Dt1}?5x^jyn__4^%xmey88ggv7>eRlvffB9 zcxDa+Mq|F(RgAtg%8@7pFuquTvD{%Gi&?KMC+6x}jH{N%sL#*G^MREPqmc!rxKkx1 zJz4y{u>qr*OS*S8OOS;fn72OSZ#k75sXto{El76^Fw@>&rFAVK(lwG8jW(b-zK(Mk zWlln~7}a8ZsOhxM&wrn_4r7rl{(g7Oau{d_s@`5gAo|*9jG?m zdYCTQAV}{u0?bF>QJD0yJ%}BsbZZ#L0i#>rsjnqnX&`N2ahBbE{bTS>!1x2(eC_No zC>EnRKWJEFo}cDwS2f;rs~yG?S!U0>`yP0QWOU4DTF-u4Y-)d)Z8uBjT*ViYHwb2= zr>Eal1CyJ=srCxUX45YQ=IvbjEOOvZuZD3LFq*Pgx4=Wx2}o@Kb#6`92gVl_nAKK0 z%)9SuS&U}%4!(KKRo!%m^P6qG!&o8c1p5K|h4BUb0oi)j+n+)#{e9=4`d$8b-jjFeWiZtl2S1C*%5! z0kd7#VdPAq!R2J_@2P{W)h0CKt+$ zbd>vCC^x!LZFQmA>_TV13)G1F`oK2zBYwYFhUPE}AYh^#yW_`kUC|sXOBevmZA9n; z!?b?I-Kvs9LT!gxjeUO@bY=8+cC)oK{f2!)sqIJHU@#2Y7XOASxf_iwB93W0}PmlP3J%!C@RK3kG1~NhB+4 z7*{nf8en3QtPN9-aMx^!9Hkp$h)6&SQ0%m;7#zkWX{v>tW$CM9nF0nEPsxA5ni}Sw zP^bqCjXULI{OYUdz^I9dC{r|X|I>oE!OzzOFu1-+%5zmaEp(WwbRpuOQgy3e)Q^|U zkIgS_wn^lnyf%+~c6*sReuD7a)OjCI6VrVNTS#>6oRjJd?DwlOhSFC|+G zV*nVid(EblzwwG$z)FyDPgDvuGO z{R@VGv6dJE%3zbmxHgbJ7=W=dDH$NfK9>?kT}%se%Q!GVbO{bAFZaIEgjZn-x=5nDr)r0pnvX+Ir+9n7=t)i5w8cAw}+I!ZnO)0HeqsA4Xs2L+x32IZjF>BS1 z8nI{0m_NV2?(^LHoco+}-uJwpao%usRVC`Xtaq)YAcRd$RvG&U?RPxC?f>k0KAK72r-P-A0l)6>1u z($c?w7o%{0R`*u(f40xg4*dPwOxPrxoSanlEzWMw4h+{GDzQ_H(;V{5~!!*BF$^6T?^37ghY<^G@j*VpHF_K%4qqNbVVpMP6EQ9i@N zjk>1qJcEJSf#qyW_R{Xs!ouj(##D7n^<@<1cjkL~aBHNah=>SNQ~kKqyt&o6f2;db zQ(g6gE59c;1_$dWCOW&iesp#go}Qi#&8%%7ZsYOz`SpXYsSOfoeQa&a*2QOdWq53C ztbC%pe7wAIc!ipVHl;FUbC0a8r5PBNs2^Oix3^i{zw|^@K0GcNfz)5#KFlnxS=u@j zGYo7Q_~)P2^i1-Fv^=a3SF?L~QZ-p+V&|c+ui4*U)z;nih=X&SIDT+^5LFQMJv;Ti zr*C?7dPo0QXn648n1HRCRTAM@L6mT3UB+cSuBxprBx5*JxZ^ z-0RnJUS3}Ae!)FcJ$cQOsH9Z<-vxDTgTC>F!eZ>x%b2#}!@|NwhI{bS__C^c{P;@y z@1EyMTJh-Eqmv_RYiku1m7$fP`IXJQ=DfFtrsee=;*#R;-@m7&r9C`8H8C+!SBFhb zPR=Y7rWRH^=R0R+`W+n|ho%MXML~T29M*Vttz0lx^f2 z&pP;^68lgx;;Z3X8exD=G&`<${R{gmQ+zx1>yElW13pJIS4!xWQI0!-DUc*l@M%h^ zvDZA{?neJ6=#Glq^fUfo4oSH?cOTgXR#g!7rxAedd)r>ms){XuW+{Xjt$pmh%H>ZbU~-l`+QDkJAl$zZ>)R{ZQ!I= zef42X(b1jfPWPjmlsY>H%H$;k40<^@LOQe6ynfARca!HEPIqALMNH9EnHK$S%hl^O z3fo6hZj`e-Ok$^HXj$W+=nK!@7Mo2Tuv4FM=tX)Hnd8;zp`jm`t!mfhNmQMyi`6p$ zbeqNUlWJA5A$XJCdeMB#h_U-`p z>xO$T_FwoF-80X=7n7~q(K)0h*mOuBZU?B5cBb5_nvdGucuL6ag8nWuL~%+Ndl|+r zbG3fbkD>!!x{Rw36a0#j=rmnN;@ZE^DR#sqqL8cch8jHNy&*N({b5aIVf%1UI{jQc zm#qZ%MgK(mk`{^Z7{3$+KX2_(wj*L5=ZJD|L4y`L7?J_=E_mF7xh1?go?j$6J{h3w zf|41;@O)np=N7XOLEsvgiK=ad$-M|HM!DHld z7bJpet5r!cHuDvCmU&|dx^>G3FC*m=!Tf?(1+I;X=V&YjP*r%CA_Mpu_s@xD=d|Uh ztg#3%L|s+oBax3oNw#t401GL@ytED2>Ea8p4JhN}&ep^KV6Rp;5?1q}l6PI|Q%U)Y zvln+J)VP(uc5StP%D-_U94ideeGbGV;a<9au3z9#JKYIiyL!O=ylQR-77c*MA`Y>%2TMcvi^ofWr!MVKU<58vfqAF^EtRZmi@?ca_GQZnI4StRXRMo4cokUH{a2aeNe>_5aX?2=1qCI8^nbs zLRCVIt=zwKMnfhk|LL7#gBc=NYU5qj>30hJmSWS%G<{Y2k-#ar1B>0?N~>OLU#?rz z5H|K9Msn=(^(E-!ZmbRE8P`hGR*F14;|1z5O(Hkg*Q8Izv|oB&C6x{3HDHfIm=rS$ zpjOuHdPT|ck>f#=VdAtLQ+@1HZysz;lO1L_eXA4M*A3d(Cq3x|B-xhZsN0&^Ps-xT zJ2Mt&HWxZ9wl>bc_?|)qAt@-9uE_{DQrphh@NghDh6!3NNMgIURuPb%CtW7?=gtkO zjqgv-i5%Nt=YaWvsbxEk=cSqr(=Kn zI{z(ihRI7sEaJ=KItA9ZE@-9Rbc-#74B)eN_;t-;=jXD%RU1qooj5n_ zAN{@2*&G<~+(pyIq1mHn%NrkH_ES;qb=tCY8H3_$B~^doJX2m{z{z2r@#)cl4jFc! z;GY)t81JQ_YD^xiV^W%>s`2MLz5~zl5ypu%CL~U+Dgegk>FXDr%OS$R?cHAmG>-TL z`@?m^Dxb-|7xv<`IGzt=AAqP96kP)Tpevyn9TgpQcNf%q_P*We{BUFXMJ=@HgH1dx z7Wb4}_GdcIxxs_tXw)l@aq1(7_q9_2HyZb8`nct$cQKn;?I%atrF$LXYK|}b=Me_Z z!Q)3pJU&D(a;l%)?;b?SbwMLPmj!oY*W2}bV-|r6$CMmvTj^7GZ*X7Cw=9R;MP2X| zO|K?Krg+vXx;s3F)gN@_ItD%EW-3+$>b^7%IQ|BT!=BXHbe6?e#Ky}`h}X`AWxwww z&xX}C&kMu8W&0r?`|SQ@2BrcQa}6vEn4m`zrWd_|ko+SlW0IHVZ8!V8%e)=*^nOKF zyq~6?c6@Fm*s#;hq*m`fk1Abo_vw9n{3vY!<9Y<3iJj|6^U6W-k=8*pDhGJiN z^sH#iK5Ta(=F3C2@P{!Mv5bg_cwx10Q8!6RkLATN?2Rpg*P4n=#)9)N>>8sXo$j_^ zo;Q9bb-8{sT=hNnsha0%+-cWvojPecCUb$(Ap75u(aZ(&Yr+3igZw2u9^bto*qHQL z^OjbyBzfm^&@h>?SgaKQLnblHt3>mLV@Od z-+X7>M~L{Tc7YDB5WPGoC4hD6v!Y302x9GiA?*9qGS?~#(k7}P6*(Zeozz8 z-SUKz$yv|UayG7=PlsI+_rAO9B<7c(^TgE{18u?2o#2n#YfAouRd?6}Oq$5bopEVt zBM%=cY47cMxVsnW?$CQrRqt>=jFe)ZIXY>-#dI+$>~46lmmNtf;Iq1-RJHZ|cvy3} z+K)U?ZuJ3P_y{6Zzt5E;oO2jp;yzIDmdOYuSwiQ3W_(_4=XhT2<~XbK_ipFMyPb*T zY>u<^hMoW-F>zNZ;9zvfs-XEEtj`e1i;O;7|JEL<^ud=&fY5lGeXE|Hoyl<=m+xgc z0Dzx7c@p`v=yj(`3gg!(cZZ4kcLQ0`y@j(orY0QE|BedkyOT`S&hYWv0b{$q-cyxx z8s2{H^V!@pGUVoYj{38MNe<|IO!vS}`qtS}RlxCq>o5gxkhi1<5C$zB;h{|vlxCj0le_1WH4w4@t z1QH9avPSY^tSA;K3!@$S5uQcI8|765rGjuLXlQpv+ZvhQhu}Rn5>!Ds9f--pStzTwgZ2&O&>@-os5?HNHJQIXXIU z@(h>~8~hAXqKN=0{km&Rayhz2U*GPnkC7jMlYe-xByMNl!B|U*oY$lu zVxtdwF`}snf|gr1c7W4~2I6@`;XhGw`V-#+sNUeo#BXPExG>)xZn)?EYU>Yb8XCID zo43~1loZ#($l2vz_;QSOm7L2^c%6QKX+aUD zDnku!_Pt{*=(cssS>v^E)Akq8K6j2W>>4Z_2C21a^zJWz3K6IB+8Z?Z=}sm1pDWJ7 zd#CF^e|Nzy*ulOGrOu|sM|B+SBIpHjM#QglX^gY^hlH#-?JL+EhKDAMlY#1oic)Vol!i>W}I!;F$U6nsJ z9{qLvurV(8JU#y7UU~j~vG{nlFUKN16dz<7zvF`9o9{D^M?%36mS8=%HZ07La zh?4Wf9zD5EE+(R{S4lBpCg8WRUt~nl<_ORR?=r^=gL0ndNG}drc&oKluz!(5NQq}v z-E7TY@Hhrn#v|jAt*(wfpdHGfyLM0SUgmGrRjW))BW4%|`3W8DiQW`WEPpp_`dho4 z8Qz6(0Sk4A-^{@gDHQ;bIMgZ;iiCZK>4Ef0c8Xs^Dtmm<2DtpE`S~}qt5X&9=z=b@ z)fUx`Ufyjfc=7=xKFf3y%S7`9{*(%CtOFwJ1Qd%vDtQw4t$3P}4P3gk`m$nCt76QF zENXCzOHEcsrNL;i=sIXB8R=>k3%80LrZYi?A{B9%o#G%QZ;hz98tZqS%SA*BTj1SZ z;k&6~oXZw21_7ve&e+gNx${T+>00NHd~TUHBOUD#2BeRE-6Px zcb_*tmfV!?&JGW zPwJZ-pEq!B*d6jBeBkpS<#CJG@BdW`s68nzDYOMp&-P2oTeQvS~R$i$rMoK?+Mx!UoxVGA+4?4GN^#v(+(Zu~%m{`JqU$7Og?KGKqFlR)PNl>z zdBd_{5J7AtN$~+(r8|J3_A`s#&$Vu?z(?HSYI>a5?V+rB33; z;ZTIHxH5RB^YE$|{u@TCydGJtKb#mJbI`KPgFYRAwI9R2)@F3?fr(eCVAnLkH*+G0 zIx~|c0q*75d5U4QHcE%hj^8S!hTJla{)SjPqr0Ot8DXmkxCdMkq0nP!BK87!${`h6 zE-5LT4C^Yw%)Q2rr6_13zacen(kL7nm$Yr?QuhdN^x9 zlZVlzY}%=y1;VDbBaf?rDzg8`SRKF!=g=UqiIJdY*8G?gz^Wh#Aeg>|9W|YEbk;g2GT|^do#)bMurm zzDora(V&-xg0E&9s&kSqCe zDM1wrpjnfQp8)x)j*}&gjm-le>((b%XU22_NaF+4FK!LgHdJj(-_8^7wn{Yn>dex0 z!>b#<%08oOi?#M)N?U+`?KIoJA^!LMhw`b&Cs-9o97?4Nhvc=0AbhMYKXrUs8li^) zK0tDSWl7gY&|p>04*Oel38+ig%ABvgSbnD2G)a9p!FLrEnz_JWS04 z%K6}oE);CgGD3#nbdkOV!x^IQ!bb()#eWtM*Y}XCX~{5$Id&Pm1y$yCy@C@fdJOE$ z8iU7M;colds&Ha$1{D_|`UcBun}j4F8Fn|)KklLl1ZRH{H$O$c2jiU2NhW$I*@MPi zs^<{_AL$+{;W`Z($-N5B+4EA{d{utC8&zbByyemH?1!+`y!y8qxCf}a=&qz6=Su~x zYky1hD?N?QtDUE7UlbD9UUyb5S9@;!d*(iMa$H-vUF|qIQF-#uh2#0AZk_Xtl9cEA zd<^}`K?6+;yQMq#I#nnowI z&2A~v;Jx!qqU#xacz8x`V~@~8+v0!4=(yezjw zu`PWQPuR4-OS&nGq(iI^B-gWMyf#tHvI$OeJ;A2q zUgDsadrwNL(alkF-L-Eh9HlAQoK$dFX2W=mj0(;vt}2CwXZzr%pF(09qD&Y;acx=k zdJ30C2ae`V5;WT{1r`=oN1yHOznGYu6rcKRjdwgaj?*}i!7glSP{Uv$3A#u@t2hh= z+z1U%Uh{xwrAkZJd&+lae|&hoX~F%TI_clGaz8;%&ed{0f;MJjB>$K`;Rb{9oCcu? zswV(vK(O@H{heP|csw!3L|j;P?5A5_E+J@`typU?bSSy2()GsM$hHYm))v2{izit_ zVTSN)=o@J@;zSp5ijQBnrvHrYOq3ZtNRN+v2O1Z7UhVZh*h)!5wM)kos#8?T8w<_V zDnrE$=eDULsCo?R!!EK;7heSVsp1|M&Pq#8DD6GQH(S&%$Q|f;d@4Ptb1|?jXN*TW^gi5!hhl&O`$Bfx;^I6Bo@u!4@gNLUzcu zy@X3vJAq1EiEGOkjz>!*t?e8<9`HN(lU*xPY^N8?X^TRF$k-c2!zk`0UTX8N zlFzq@%Z#u>yhsu(GAi=I4^_FWX2T^vXqcGiR1 zrXmS+^t*Kc0h$~l*VS&Pz*bQ5r^pIFdSlu#m?R8_iNT-PhKJRhXBnjF)gQ4idpU)L zg?O>cb@HFOfSW%^B07s}qh%y}FGK3Tp ztQ0fJ@!G5bk=OhGxg6VUOHjlV8mD7%E(xU-?()aA(6>UP{j|MKwzlL9t7lPYw4~djXrHZv zLu$8@2#2hE7$JL|3T?rxc-IW4L5kkMifUZ*~Z-+RbME{P{h` ze&R>X;!H`+V%*6kmZ*0j3Xo`XY)_59zj$zJZ|4IUR4TMlJ&eym(RCux<);9R1K!gL=7%U-m@(Bf*R?Z;D_n#XEEvuM9{^ILl#{S3 zBu*<+ORf8Achg_9Z(nzL$J655F!fpp>5hN6rDGX} zrt3kjE@?@TCzAiI5QF4fMRAh`@$olm`o*5kNp_Cl&kUf6iPK$gyh~kow~ut3OJby% zVNpt|Cz&OzmG;4#9_wpD61ABNFY7bSo{j!`Gde=fwO@ej0yxwvnhs`x@B~>Y+XWa(HRI+>q|FZ->^(qTf zrE=xXs(E;nt<+xans^NRj!tBRn`@Zsby+aJk5CEm!AU?wb}d=m2W^>WMIYYDP6Zi= z0IJ-|1DMYE()eZvRW4Y{wZ8Z(T;MO`-uQC}4-1EB5-ZQRx~8(80SFsU8oUa7P4-ei zbwCrI5+yDki>P%`JIiqQ_t|qjPbub{;#9BKgeCQK-rSMrg{b+6msp~aUiw}7ycUd~OLWk|Lm)3toaD=2&5qP= zpAKkm2}|NNJ`6*`CJ6~ccB)WSV(x3+O;ShRB2F^{5w_vB z*idX6*{;lz9D2z+hjF<#VO{ETdc4YWn!LIN7G0mv@^s>m1Rfulku9XT; z@r_WS2239IEw3m(Za4ug`6e6_e91p~^;duSdHCNpKw5ZrgTahe+Q?|+5R#Xyqd0^d zzpTMOasVPT0SAM~f9vdlt>y-6@aVmUq@Z0dIl+aBk}BH5yAYfMwYn)HX!{GNOy?ZD z_H%gH&*R+EOXGS%Rt^uSCY7wlc}^R5rWTj-C?Z=A3PJe93&4Ef^%cXvwB}Dqf5mqD z<)b271<=Fxmn!0oo+<*|uXAQuq3q7{H- zTWmj_fhGc3DVo1f+vF(*Q-I&ejl#UrXRT@*9OnM^FDUVi#P{Vcff3M)z^QT{^S#^ws9I%xx268keg)^{Rwv)MoL_-1 z0rOZ=6K$934UD^rJ(I1C13e&27by>JD8|%1e1_-=Oh>W6o}iUA<&fdXA-Zdt>=jxt z!CqQtIUv=u9QuAwiDHzfj)G?ODD!F*82GEm39Dfz>FCRUX=%Gg4?d(~{I$IVnl&lK zMu7}nA3S|DON)?x#}?U5wEXUHM^SY!HYW?Cs9#{P+PWa02l~b}L`Vg}07&0l4?IhW z@Ra|AqV?&3P>MBju|UuD(iYNTi5pf%P;lAqz$N^Cb zU`RV{-K9|CR{)xhTbLR@eM5VrYelJHS8@Dph*xmmF3s3@OF999mS*#rt3ubr#0mQm zl!o~BCMaPDX^ssgC)R>pRC&lgbl%t8TQ->%VOO`87O6gSsnb<=enCA+3$}#>z#%5R zq+d3&kv2XFPB2HrMqArZ8>$CNc$W+s%6umL-={>0_sJlBRpY@x{}-WMA5Lb+eeS+h z=hdS5jVj*;%;93)g?sP5=%nCKBYNtyPgR#J3~>jw(Rk z6v`?6aaXK?pXjgAlbM~W0K#?yqfpc-D(;c-JKNWqsCa%WUg|+37El~Y-Oj*x-!u-S zsNbcBj(~K*z9XXJFk1P|vC69zs5nuFZ|$NOJyd*-pkz{loJRyu3$+3>K-$rE;gFWo zltEXzix=v}mzYp$l^zm zzVAsjZ#!N|X2;XvJxzDvSXRMTA>Z*pw|N z&TPqI9#AAGLzHyRpKzRjDZov+rr7UEkMV;3tD4WDLPFr=_SBlA8t*iR0mC}tk2)fU zcef7BeTH&r((fmSk6>VUahq1+uo*T`?-zvjn5Y&7Y9#(h06G6b=$T?8^xE{^hhuri zy`8}Sape+!5Zy?jYSS5`NRHgBrJ1woLi@fH%V;DBo0KS=)YOqMY>WL0LFlK(m)mIJ z6idPqlrPN_#@*3&KoR=YJRKzU$J5P)K?%hUkXPmPL2A z^D-5(#A;QZLZdNq-R5szB)9Kk*zrBf)(Md#tiz#Rb%B^#qD=zWnP&uflRmz@Ew#sx z7pHF(5b-u(<1WC8e%#xg1F)i)FYOxU)MF4Oym$P~G)Ls}3aQQ|05Y%rFm03>+}ft0Q_I<`A#ue4J}rXeRU zHNZEvrw|vRw_=oU!2o|P_#X8+uulIq;Ku8MR+TDSMWzO3T03qf^&=Hek5qy%2Nu!c`ref7jC|gBlCt@Z9mmv z*e^PJOMxy#Un~w&Kpb_4&8e^c)ViP0jUWF&sBXPvZgM%=Dvz-akd$w{fcIsJM`~HQ zB0FtkdtOlWV2U*2hD%Rb8$r2N*d*zEb5(PGN!=|0yU_v$Sb-j+sh#qiK02CgwNtJT zH9;|T*!G^stsB7HAb7oCeXd{zNI8 zBN4(-iYImxWsfp6-e56K-E5}9syBBd zt?l1`868ef>5`PplWsU*fULCviG>CQrp88`SUX62aKtQr)7nK~d#16Hje1XTdH9sX ziWmdP8qv(ibDj>bSPYsNGzJu)BzwdY1uBCVd0zb8tq8_p!@J2rnu&(O8mG;-Wsgle zQ2MF<^0C7ee)lwytt3tHQ)aNmA705gzD9z_&9D|p703R-0sf|FrlPqU_SJJ9Y&7ho)!UNX7l{6$zEy?123q$v63n$X6>pa1@R7N602k#{ld(}(wDfk}54>gFP6nP(6hxLI=t-Zs*WqVNk2lBC85b{+~6s0rq05X zrzjr_#Jj@uA~5F2E||GN1i0y_{nc-dUHq6X8g#GGL#O-CU{0u;u%M)K+WKMZ1erS3 zRjq@$gF>0@@3xZ;(AI{6!=VB7dsp6ckZAKf{WE6N^;LOcuG8#l;)(GUx>G|S!nR_< zH8>!F4gpN=gDt$~qf~Z&cHjd)J8^O^QTSrU**?vvJiecGg%|>8b-jzJzxw z6;{v9f6ey#=q7@RuH=_H(&HHIQ?Hq&l1BYjlIy7tDL}t(7Q6iSAqLmB1-)Us44LZup%>TXf*e!}sGMCq)DdK6$k18jdG=vJ)xlnvw! z+X$>&xHG56p1fDVng&H?ygqa3hY@*0g;nvp(U}=~{(`~5`2ilJEhh;f*TH-YW%-=+VSSx4T{rUI zeT2WF9PXbKQ=^NZGy|6vh^1!BKmm6uiFIGoD?Sz6tv67lW7B+0{?`9bnKa{*L>WsV zfIR(LKE74Qm-EqwYXQWO12?C3PWb>14Fs`Ue_pV84_?Y%jDbj9X#aQIF-iVZBZ3QI#WfViNAjYn#ax=XDkdL}GW+c$JrV2Jw z)t{5=)Rj(&XN8SNC&Z7@gRPOz@H*!2lnX3ad+~pNzHgIV_i_z?9f+&Dvf`@YFTUYc z7X5|~89LA?EiYMf{|UEPD}jRAozerS93mYdg<%l^nsv9F7uRmBNL>vHFom#}_j z$47ru7rtp@=mHXhFj?sVKs#hzxqn@#&KTlyPddAKOG2a)sMBz zWw4d~V%vZW&f*uZecSaWG?Z)P35H?1D{kh_suT;%u&1yR?1D~x`S?G@NO2Lu#*TNL zMltII-vK*FMYlifdq1MK?ko_n*9e@fzvPZc%HfCFvj>zv-cI`uV{%LiZ-xE`-jEK??KvGUa=sg4L{1&{dc|`4_O4}B zCvk^DqIO@5vfwSct>eDLh}-2AZqqosKJG5^}!vRHhl7b|bIemb^WSC7hcACS+I_1X5Z)IKsyLWSl)sEp# zEI0RlWwplmlhV>%Iziienu!>HgkL{L{`$C9hqYY$VG0p60!lOYuqPV zlDXjZjN-09auRL+B}SglK0x%nk7T<6bL@%AOT8q-9M*=eG}e)9K_B%>L1j-lyp6Sy zVOBMw0j1W+pQ|9|wp!iq#V%#MUYWe-F)f`RX^jdWD1!IR&~m$Mc=D1&M`VkCe`SH0 z7Bbxmn>@1}|6S-vG~M*E zcz>*Rx%A%Y?gaX7vOZAD|JBvs98?Ci60HPNo2@QMs{w;{jB<2LyZUFqO(72-|7>+Qvn!D@=-H{%_k*gh&;v~NBzvdF3*c?1(t>%>9OXb^Et6T_=jcJ0;;uO?RJb< zj7(2|IH)PuOiwtMt}xKD8GI=H_!XD#kDs7lGptG~$XmHublte9q^w^6Rk@i&J^jJo zpZ8c8U$m`o@!tj(IH3CK@f3`b9Ub1k%f_j%361ESy8`LH#?PXZ=k(4m8!M^CMCfx8 zue{Fq3VQeQ=tVfaDDy!LR8&Il)-)A`1f{8-0pdX$mTOY9y#sK$_po3H6AYwlmiiGs zU9#93u`B9TJ@ReguOvW$KrDrx{QZL()lLW?ifC3eX8Y}I?D~` z!B>tsG+NSs5uqZNrX7l^x^#|dSbFc`B??^Ak`Hp$FHg#OiKNyHb+ZP)l`6kIT06=E z@A|HOvpU@8O0fQ=5?8H+fj_oJrQfc#?NW=9l;{v*v^w2kl;O_4Pk(4Oe1idAU?FpX z2OLJhw$%OUOrI}4@O`^oQ5jOdEd87Q=dWGPAKg}F9YIcB?^DYp9>{bISehLhIH*|g ztEljwy?K*!RbB;oO=Qc5pj6eEIy|x6Z1n1eqGNF&<{8(VbUJYA7!;V=HvL?FYv?Jo z>x8{_$*n8XOphHFV_nBdrqSks$3Z=8QqA$c!%*2gCDNqCSzwW|Fh&y@hkVA}UG8yH z^+u=`DZ=;YXljY-ebTpUY=o zl~+X4YpU+DkEix1v)^(Bde2|m+kg4O<8`fDx!};~vI3|hSkMpFaTMdV8TFWF){pXZ zNs|halF##8WUuV9aW6H?A~H0WqwH^NOJlx*X5Zc{_5Gd}%=B8>n?`t(2Knjkb0`+Y zadt--D95gdT=Vd7>-%&*k=!BjuP61Orf2UPKFaC@IoqPCfeQ|&OA$7Z+uhY5TIcFp`a6b0UQpzp2TsBQItgt=4Er~~{J5Y-!614O5hT2$&9Vf3)^4p5=^8a>u9JF)wdf1aEVj4s<77 zqo#U;_}S-`n`@o1c69%N{7#2$ZcT%TuZ$t*corAdD+?6>Q>hV9R=jlD_%4m>>nc4d zzMoR;X)UGZNe@@AD3B2FtHvch(ppW4?}bj8%t5~|>E1`pQBm>UzfY-78|_181|;v< z%p2X63@=;APuH+Zya5@#0Z}$L<3-^7RMWnXj!Dq=0q)86PF#c9!z_u^t+Kc7v|OpQ zUReY`fn8Mdwf~ZBP6|r(lyU`BN;Advc7baHH(;DpSje*pS?bkV3D1JuMQ_x1_WbXu)-@&T*jt324+ z;H)zj^7g%I29{kk_oj?Lm}%_haYOpCmlB+~#y*YNfe(-qP@Xk4bD6&GHxyOTc}ry~ zj^iEPzaF!WZ}Sjs$N#5^SdXTo1aF z%6L?z$KaOs=5ABh_%3oXIgK6|b%ek*Otb3|0NY#rqwhKR$^ z^oHF9UA!q5r#wiWSD(q0pr>Y*l%x;}?}I&?dXQP{UOUo#2bc%3WL{H^C3)94F(Klx z7%64le+rBvTg;IY$MY8a140Hm^`B=$S(8LO&P6<~89s5#%@y)DBn4|%H**Vyhm-Fa ztFAg|EOk`>7yq>-6K8smQRFaNUq z<;usl*Qg2|L~TGn65~_X7r?YGrtEQPY!r_KEOT!A2KL4{Ni<5jpU}Xw1hhZh;NcEB zmq0v%adpj1S}=q3I!U{CDRZ0mP=;dN40b5iOAh~oQqm{-#I%Tv)JEoBShDuW0aKt_ zmXWER-n=5?i3wJ7@_%u0>$wBHJd_ip2+;H<=$f0bmCN;TX4D>e)_d8R4#cLuV&cj} z(A5$uUC;H~^(-w{`s1o9e%yKQ>)T6^YqdUVE3iL{T zx5?iW1p`lI&O9E8S>=SWJd zsT>un3v;6OpV!fU!b!ZKdN2*S;wOOU`p@#EYmYVJ*by!A$<{Waos~7TmUT60MWlSq zt~NKmOuxns%}3h#BmZ1d0SLJ8XhwpmcxT)8k3NnRS=sR*4SQWfMA<(mhh5^xmI%5a zDg9Zh$Lh{kI*<@+gs7=Ujn7d8Uz8~+1Bu63%mvvIL7Tp$oclNN%Bz2R5a;7F2_{1i)d~*-*LnLU9!(i{(A%Tnn^nytpHEm zWyijg3jffW>>V*?S|-JDaCZSj?Ib+5{-4>m%dgCu7(E)*`=bGL1$qM2FaOf1X~tl( z7Dq2CKn#U?0{`aCERsKf6U3U%@#wbk@|8eC=0Bp3AtO*)8#1W#H)Hk)lyZbz42UvT{>KLL=*|5tS$vkT5*l z6NpwohH5fu-Pr$-TBVEvKY8yRbCS6rv2>{SRH~5SZMk6voqjTHq8gH*d8guOiFo78 z8voqgkMxQvAbm^2t>2-njJUNQGyp(dzH&PRh zaqisM3@K%yi8`_F|Ib6buLcxafWsW$0k^wS#B^?X9Ip!`&QLN)qAiAhT54YI=v51s zG!Vnw2l=||tOeF_zJI?G6pF=oA#Ldy3q5bkwL&a?es&JzTVoCJZbrRGGhnGKIcE^e zCdA>zw#E$F>_x@_VC`}Vs*Q22hk!`afVu)=wa|KCTqwU}4s27DtWYkF2vJ@{sBnor z3I1=I_fgY-!(Qwq*YR85pKFFzV=&&?S&Ck;t=N1=RMgubGk7wPyTEON)G>;!NNz{9 zp^G#o%CUDrOMRa#9bFPrR%263#dnBewbP8*~dQp(m)YNV*e{x?`tj+pR zMBd|?LyxH#A_R8xcA?nI&lMxiYGZP2_|LBgH>3XCksaOG8KUZqE3pJJ&zwTDPal{9 zzy8wgi=_St|0<$sIDKD=zsW|^R{_pTXuM)uJ7gF0E43m_-$0Lt#cs{|`<+4jDD`zC zx#&Hv=}pcJ>rbr|$Y*T!Yg^8CtcYi2Wuc+om#%}o-2(jSM4_VVd2mAME12`uKk9V9 zd;kwm5zk)$=o3AdljZ9EttTuu;T^G{FRg;5Dh~4ULlvBQp>}B5xA=}!%cL)8TyPrI3-o%goGIvz<4g6Z|h3Mzv3)|w2)|=9Vo^2`Bm_cdtpKk3^(29 z6uo!PI5Ff&=Q5{kElZeh@`951$ngDaVaf4d=rVz2H3iq7MGJn>TSh8Fzf_Mz0DsX8 zTeXO5*X3&enfxcCBg1X*Z#!C_H8|DbOCW2dIeInrzR7|v{=NNJ%8Sgs58tOTVe4E$ zE)~x7ET}Y%=ys9~N?s`BFLZ<#awr|e%-w1G9n4(GVBBk7biEZp5um=-k<4ht07DxF zX6pAKzj?@6Ir9W+^q9lZ+DuxS`)>n^t)?mFLDX+`XSYPP6!znZQ?Mfa)xfTD zpPWXO6kY{aWbRdk##Kzd%6qPuNU0k(B%c!V!hhNtx_t5^->rVxP9fv_2VKAM;krfi zAGKN{W#B@gGB_blwp+op9A@Wk|104-z}fu1zt$*42TF}rX=29Svs#n{u}6$5VkM{% zqo^uMZC!%-YeGIwX%b zO?o!rr8p)~Qu>G$m_e)E52s7ZX`ufLh`00yxOY}oR`-2oQ{%L~@PX%6zw(1S|@%$9XVi2OpqR`EiX5 zynphE4HAMIm`5SjoQ!MsDT#| z&syPoPYGq9U#I_??o%g9Ud9S63hXa3Ru_53Dt%rixiGd78d4wnvXZEYykCdBnU?um1JC+wub zyyU~M>vVWj4J&@BrRSt^a2jJwm%2ktiC|GvTrl}_N%7H z`Uf08p%+2$$~>ZsFuNMW44$-J579bIyBgpdr=h`n2ZNap3BGd6UMT zxs~FjSionJI581>=>t5bm#wO3DCosIt{)M`TE?x;yjiEM%4SdY2_41$>h;srY_9lEAmeW9ADws4;uB+Xw*(q3Rx4HKq0{6PF92 zt@-m@X;NQ;L!Kk#rCtwkK1XAz?Ta=>F6TA@k1LX-s)6(l$j*xWM>uNFC17Yb*G&Jh zW&DFy@0{mH1w`CU&+t}B^?aBE_OxukY1tNbj2w?9r*jDB-^%`uO}m&+E@X5&fR0iz z?k_>)isoalikkIf0DLD>SwhmLJ`W(PJ=iwUbw?l|G6YZ$=Wv{}09Y&lb~NNfekE?2 zO)vI#0|blUg(ptctGp#YwfmDgsGa|08^jlLj@_ww`zhANTaZh>86P&zV`BsSe}BAw z62T&IZXU{i4c|!k6d=r?o79el<$sCGFl8Sdk4CBsY_={XHT^G zskV_GxR)*2*z2dusVy{=`8^xw+M5xTMq`>6IjaxI~`L3xxNFF zSQGzrIC)}rmMA^-_UR7asDiRNa_fE-QMzAD3!4I&CYg})bxlyuc$llGlxm+Y(DnFJ zWN?8|R_&|UTncyN4?w0!E_q^;@Z#wZpB8t#$&j9ZT^PAkT1thty7r)zrl(MZlWV>dG=&ls@x zi%lD5*^1_~h>%p6I(`glcQ@EnkAGi%nGonTbPhIfC$jhZ#FB74puk{%XJkaaH`paq zh2vd`Z(X|K)S6z<*?LUQSQ{T9y0v;Ng3L;;g{lO&N#NFG8V92ri2IPB0MgXhXW?vz zl~*<@z=xK|OBbE&yc7)YqpatFN;5DW{{Y5&)6o759+yNMRn&MW_d zL7hVI#W7aP|LKN4rP6qLr(0bPn9KvbkTIfA>EL0phXcL*xe2+CTjKjPa_Y8=6XnCW zxJ@FDjDxiwLgHgGDy=PmG>VYte@#%Q3npH&A;xpKW|aCFxY)*ZHH~i}nL)ZnSt%X? zkcj}q3Z$4V#rUrCEm_v2mf`P6MIW5_J9#xOtQs@~NSM5{`?9ZQ(17~S>l?S*DKXoJ z!h04yWiEr-n|yIMisV)$;sW>^1LfRoVcJ*uAxeM;??y7294BmTQnvu z?TW%rsQnN@h!P`LJ5GlQ&_$>ZKU#%($L^Ggh2G-Jj`O}@&|iGR5POu+w^)?&omOrX zT*Qzt2|qQ`+B)<7*G=Cpg~0OdkSmvktvhB&FMX|5;Jl`IH?mXo?5B<8aKGR;)L@Q9 zeuHP*Q{l@SWl!(?oS3vC)J9U)oI4a+i2k)bpJATsZ(R-_HPq}!QZ9av{3aPXN=(V| zlZ4YBPFfO9M^ff+JrZu_%~D@zag?PsKUOc&L~-KKIMO}T7OGJNL0xSt?N!us})C@Ld(^gH{h;Zrl{Ih zSym^mEDQQ@d6l}P<_*Q7USYfnCVxYXGYnt0T5c{eh~Xy zVsY&*uOL8U{n}l%oU!NZm=}(4lCk2Aq^bG=eao3cgJj5zZaXJ}2&jH)E8FRRVsqa( z6;cx4XgUQ62kSaVAlVPAimB09qvD|xR(gvf#UV?tanZ?t+%Ym@08-6pK!`os^ zuVbfYndWqW!DxoLj>}_b-#k9qvldoyX;Vly26wO^ASZ6$i5C6uXc zwlYINI1%=zuB2bhCgFG(*r1= z1F!rQ%*O}vfJ%D`c(I{07XHJ^6~%o;vI&ztV9FHeni>GQ#98`nJBp79*@Euj-Cm4j zfATBB7@5VS9Qj#&r5<`>QFv341jbdS+fc_Fn>>>t{i+sMo+?#hSe&xp`IA46Q43}^xIOeb|QUXKM$M~aQ7iiyODY6~Z(aU-qH z#q6LMZkVuKKDmojbcGw|aL6DpqdpGX@KQ-d(SkQgD1q9B0h%c|e6yDV^tUok%|8#q znP%ky9*vYeuwD%6jEI)fx=m|R6WiVXq%!TrItelC54 z@bBuh4AEJwP%4x=V%|ttN8uq~m9*cm7=`5xUYUe4g;NG-;`N{m?fOZ%DBdqs<5h~H z_#ni%s+F|$y~n{L9T zIXuf@2dLL?Zdx`+40;KAI5mE}?QFd~4(ouNck8US^UouE3%Er$YM;SLZ3dpx6`VdP z-Y*MMTplCN3Xf#Vbor2-zS#EguHt)^_@a3Bo>G6R1UJ^QPy#y*&9!x;#X%(RJH_e) zyc3)KFby2cP(z|rZnM5=n=#`zD1aXUkqj1P!3X%RVMAxxE;3z?hMu=Sq|QC{Usa|Mf!C_mDGuPrL5g@!LP6gH0+aeINsSk4FMG{K`8F=G+blN|xa zV?_cSep#CivdNyZR?Ge?4|MRrw4rzuO>uM_ z)&wqo117f(18$5P(-T3HICS@kAf>>twV=|0{)qzDC%?tyB4#O)u2{tyevz~_JGQ;_ zGO5afWmEnI04V1op|*ETm9g^M#*SuG^8jRXAprho05!yl57gN<2$w8Wyycbu1<6eg zMpA!CSb4-;YIn^CG~jxXeH+)$Qt!&F!LRaDvPJ_8L9s}$g&fZROskq(^SY@15`HC0 z@cp;oilBp&iu>!2>b<$;)_H@uJj!7(j@pTs>vyREDIRQnP#Qexl}@4556NerPq`nC z>^Pj%_OwLWZIzgPD1LIA>7+58t?j8N)B9z@O{;<^RZod`M@aGcPdkVTmEZYe~Y(uI*KnrtAo^0;E9}S|CAS{njfWFe9(4f zCQ5bOmbgT4W=@Hog4b8dr)&%Mt{3gS$TIT{YD_5?g}grQTsjO9S~PTfkycc6#iMww zg7?<^RY9-_l`tbYh~b{%`IT$4HHliCUM?fzF7$6ScRNaS97cW+lN$`;Cs>g65MQfY}Dt|?*?jvEHDAOyvX!d6jQAZN_p4M%CQ4g zr3B<~ka=H5b4!BCT92yh>Al9Psb&N$G87jaKn|JMR-Q##?vNuKp!)Wt;j9}69me(-y6 zceaR55e&~}A`oi69n65szlq@$eRz2xP?oFAU$~qwRoDw6IC%rkAzQ#^(9Ie(6P52% z3AP$tPdJw#mNx{}X>rYdwL1bF$sm`+XrEy$&~^=+z!;5%8GfzeLt*7motNcnk24nD zxlHGRgVQK;zrAYubP5}h@f|{s%UI={Us(p(N=?eWe}IYuS-K?AZk=q?@{Swg#$>55 zkoQ0Gk3m(50cm+N4yzU9v<>G>?EVZ>0Xea^>sPC=>qno8gm*GAYW_ca2JXJ_0zZ>- zRWTXgm>P3f(J92M`q!SLvd!Mj+?6KCR{zb4X0j2j6mr?ijQ%E zK&E_+(-i^D!39^EVxacD!-$GzNKH&Q*%KzMF<}LnLRoW;!?sxEPrpQ(!R?NA3^~xy z>!ykwNo^R+RBg3azS`N0O?{>ev|ui}+kn6DIas>mR`8kP5+w$QO$(1zR2Nqu!c+TE-D72F`w1bI7@0C&KGl0ft16 zgw$-gSBYPUSZq5O-|D=Vl1v_@U69eZb1cNb-%3@E^4Sz|-|V2!a&QEGOybMHJoXk# zKS6l7mgH-0#judvfT6F=O1dXi+O7jjjq&p^PL6Q~cS;2#r^`=G*XW@lpSo+h7H=lP z`UJ7V@{^|K!~Uh4wS)ii94?<7S;y^vd#cQNN^J(-^*YZSHI>!GpS5-L%-^j!T|gWT z1d?YipS@xo^F(?rG{hs|q)ug1c30mY|K^LaTWG!usl5yO-qE4pVIv^&Dyt}?X|m^`cN?X-7-j9$3djUHnA1Z9RyVJ8twI#w z=BjGp#B9hQm3921fS1$J`6`N5R<^07Y-VOq=6}aQ;i}>k;FaXdg>ALs^;(ig20LJV z)YQcI({Thv)nHqpwI^sPd!JD+)HP5eP9<+oCAV&^;S$bx2h$OQ;wOs4TUmX<>Tm6> z_{^QwPfTt>d@E@7NnwxbHixmv3zt%!-X(iUL~8S1yTxuz2@d)7NBiQbIrzwkcHoYl zhrl2scTPwlV^>K)^H4nSAdvLrWHytwMoWC`XnrhkBGr5FOmuaFz&T_*OwtMFMM1Td zp-0cD&;|p1ewc~RpDrn?^~7LUfH`&NZgK3iNAb8Nt!Fq#^D^D4rsu1ngs&Y%S#=0Z z!>I8JiaKE#!Oi&A>2!&--EN85%d@_F7!^uErJok3Mj)ta+OALvJjF;T+~eCk6J(p` zOWzcAH*;nFsUeQDcl;6mtfGTiF?qihwKC)kY9mCV4DX)`m;zzjGV>RXCtv$sjK{*@ z`qpJ9lf5KHiXz~Jhnm8z>3C%*O&)6Y|1Hq_0b5F@)cnVvLI;%0g*%sXoi>l;A{=&v zw6*tBKRboxt4Bh`BElsX)3f=%qzGdOFe!VXF*GW@Wlbl~Fp#+>< zmJKNxyJmh1hi-yMihvb7i3Abqp#hsWqU2Z2h6Yu|ErNC9$wAem&ta(S4Xnkt;Uni7 z?Ct^$ASB=iN{;1Q!YGyzYel&SRqU_dOC4b~E8=eNcyB{_dkgv<+tvJs#GvMq4#!Rz z-jQZE$rNilNmw>VxTfKKxh-?_Uwxj#Q*6D(7oe?Qj?KymJg~nc@zNX-)il-{Ki4BZ zwcd}+%`qF+#NEvLn$}lUQDq2tFN``z+6fV7)<=i_Y%B9wWv7MPjjfg3`!D-(w3QbH zX!+)lw~A6qXC2ZjRyrvDR);&>uG<~uhpQ?}zg@nMWkoWtucMLxikIP=1Cd?dn8UE( zQTd(K7+&|k`6*68s-8KDCapI_HKb!$5y63p?Mp|f(c-GnpD5>*J3rxlDKS`y&Xs$4 zuj{yviKzJ_>_Qw`Xd{Tb{|IKF>>LD`{KBJ5lF@nb@dX!nQ}wY6fi|yPA+6USOH1oV zNpq8*&EN1KjV1}hb(TUi@7u_mw>w(yE%$SHipjWXN4|*Q*SJ(%qQa>pQCxDNBx6`p z=U%mOa2q$Wj5498UVY}2?5crlL8WNEv$Y#Q*^xo9Nvf?%e2vOl32}#u<4r@bNTYd2 zcD_7iL8&3?pMoV{_4Cg)bS^!t7Aj(#A4z1lkWe#6g4D8vdso7re{tv$uhgSDO-$aQ zKASl#RpYr?HJLO5H&Is}$k%DjU*_<>|E>;stlbd8>HI-!ZfcOhzl~R=RR)aO-gn=2I4ajKz&?=^gy*6if92jI5)`P9QHX9Xw*r7=VzVjr`>d$N zij2MRz5ciVy$-wcdh7T=1SI^tSlYCy&=GbwTkAY{%RFe7N?TP2dpw+`;NzD2&7{@x zw+Pu6R-I-Y!~ZzV?oTv_{-_TSy#MF0WpH(-4SMNd_iv8p-{YhCA3u){I_EzeA2rCg r&SF2Vm5Tp+;HZeSzpk+-7%uT&e_ZePDiN$f%K$e-8a%&oJMRAgnEuQn diff --git a/src/main/jbake/assets/img/jeett_dt_008.png b/src/main/jbake/assets/img/jeett_dt_008.png deleted file mode 100644 index 82f238cd3e086d4327787e81f3798b2a656914b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18396 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 diff --git a/src/main/jbake/assets/img/oracle.gif b/src/main/jbake/assets/img/oracle.gif deleted file mode 100644 index 41bbefe53467521abc45b16f7b794e2dcd9c77ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2122 zcmchW`#;lr1HeBvW}B(q+@+ZrbD6p164f@d<%C12bGkVbo>CH0uTYN7CW~r&)Jdhz zl1_V_bWxN_Jq+2fLYzbjElZ8&Qsnl1&iN2E(ZcZHVtw? z0q+(-YXuG(;5ZVp75e;2OJOR3<1^r_2DbgqtdW?wcHq+r9Q(`|(9(Dd@cbVjyx+f1 z32e12=3g)>qO~Q z0g{f(8DvK^19UqeKz+@ST=e~FG4!hQjkB*IM>6)PW;{ot23An>?E!A&q^5rC<^8b- zH-`N;b(wo;fcy8B8fZb=y^Pv{bJ1t-)jz7~4p`p_D7r1lWAf``b+wBc)sp7%E86OD z$*(%M(9zW6dO^b_2hM&RD3H&R)ug#s;9i2OTz^8epq2@_B7Z(Ey76!s!9>`uR~!JMh!( zJ}{p3tD)-b_{EYpsTsZT|LNVH&|@Fe3cN!alsn=bLWBs3G zg*~RLpid(MzH1w?1Gi^@_IY>Q7jez@~x$R%KeG{!RP0n7yBxSiKO=1M#+ zf~IuY`{f{H)qd^}M;T@l;xLf8+M8U!GhrqI86#SavGe+YzUrY!Qbavy>XQ*)Zd`)P zgPS4BoKyri|JQ-AVI}t+{+QFb(jCfzBAgVTMPc{+8HwmDm8v>D+z}*d#-PeQx~~ZD z#6~6>5J*DH8RvCRamW;8w@*f>13k#}h9H4mXC2>IkfwGn&e<{Xhlzxk_On@;u-v`0 zauaV!r4HWBkyvq4y42}UPF*6?$MY6TNv0|GtE%COoS%MmAl*rpAJ2uK6|&u(3Rxsj zRe>GYyYbM7%$8|jwUQ-+J_V5vduN37#}pX{OZo3Cj6#)W2$7>Ja7~+XJX9;=Dkltm z$U2XYoy&uJc@|h_giYcymojNSHZ-E?JSq&(5~alr_d~M-R(Qiu)C$CvNG{397?l|G zJrNt;Ar~=y@d^=vMGO*_{rv5rMsOx4 zYNMOTTfKKVU{4<5w46QFe*KpVm1~5y6uY_b6BsWrtfSt3A|+nATq97KFVTrKca%Q^ z$Dyq}zw0gXdTBKqm%D}`b#eiM6Q{~XER;wpNp`~R2FHD@`bLU(VI&U|8sUA(njoOo zirmL*FL3z9NV*i;DE1+sg>K)CcZ6M?3^ADTcPTHYqSbDre~w#rFjY= z^(5=rt)$YSW}BRQV_~i8y9Li~B`c~Bc4vPd3bTVhoDksB^tMg{UR}K@_85{QTIqD; zek`a*ObEjB-dH1nP@jF1_oR{AA{6z8CB%u5=`g~vIa)qytMsN5$+gTX)4sa@))~8~ zq@ia#S%jOKSyCbQa(39v{tK+8zFWEPH%1PMx+$?7T3Yz>rD3_l1gA6gzMKs{o5T#o zjeVMy5M76tVTU zzJX8~fZI~7T)y27lwbJ)P{Pbz>0T% zV3F|r;!4D5DK3yjI)F7t3k7U*bm+Q3gVd%SnU??>Y&x@8Xr@dUm3_CQ?5N;0|9Zvh z3tAg#2j4O`K;~J>JDL@vT+#KRcmcygmZ!5U{nhFpv+*V!(YxT=_^`F2E9ah0e<0)< z0jEIW8ajY^m5i#B`Vx(Jg)EC=pFdMGN{AH-HrxSMEislGZM{&iQNc7PSc`25z0L4H zelkbwaRGb%(p>PBj?#S?!7>Kp1g7qFBq2865{83gHX26>mrY-(sOS2(pEuu60ondXNk%w1VHf}y0P_Gb|NsC0_y6zb-skuK-sktu*4Dk==dHcot+mFKjJ=Gd zwQGc&T7;ZhYkNXtdjJ3cEC2ui02lxm06+xW5XcD#Dd!+;DJ_Tx6b-W!;?N}1<`oV@ zh{DpK(tsed=phN5L@^M-77KvC>9C3g<}!&=`;gE5il4W3PIn_Lpb>a z3f8bWAtg-$kD`&sh!7203mp?G3u6KZ2XuKJa7scRVFe0EfeQ)+bUq^*1_uTOQyOBN z0E#GMY-m-EJf=TsIj6g5l2tjLmR4GrdOQ{@W@NH#0drULu|shkl2J6o7;M*si- diff --git a/src/main/jbake/assets/img/toc.gif b/src/main/jbake/assets/img/toc.gif deleted file mode 100644 index e4836e615961c938a05e266b23507346122f7f43..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 261 zcmZ?wbhEHblwgox_{?DV|NsB*|Np;#|Nh*y=f{qnTe|h!(zSbgmTs+{vNXB6C#rg> zS9XtAc8g(9HUk*wfJl&D2bNs|Cp=fL^;X@|qtIed({fRv>1gWQ30_W{be?Kab|e}tCHs` zma3($D^yuG*|2eQFgwrV-k_*AIm4ODb9dk*1%|cajmG)*#;ul}!c6C-LwLF6FZJHJ JD=f%h4FD91W(NQO diff --git a/src/main/jbake/content/overview.adoc b/src/main/jbake/content/overview.adoc deleted file mode 100644 index c50f1cb..0000000 --- a/src/main/jbake/content/overview.adoc +++ /dev/null @@ -1,104 +0,0 @@ -type=page -status=published -title=Overview -~~~~~~ - -++++ - - - - - -
Java Platform, Enterprise Edition The Java EE Tutorial
-Release 7 Java Platform, Enterprise Edition
-E39031-02
- - - - - -
 Go To Table Of Contents
-Contents
-
-
- - - - - - -
Previous
-Previous
 
Next
-Next
 
-++++ - - - -[[BEGIN]] - -[[JEETT00064]] -[[BNAAW]] - - -[[overview]] -1 Overview ----------- - -[[JEETT1339]] - -This chapter introduces you to Java EE enterprise application -development. Here you will review development basics, learn about the -Java EE architecture and APIs, become acquainted with important terms -and concepts, and find out how to approach Java EE application -programming, assembly, and deployment. - -The following topics are addressed here: - -* link:overview001.adoc#A1046550[Introduction to Java EE] -* link:overview002.adoc#GIQVH[Java EE 7 Platform Highlights] -* link:overview003.adoc#BNAAX[Java EE Application Model] -* link:overview004.adoc#BNAAY[Distributed Multitiered Applications] -* link:overview005.adoc#BNABO[Java EE Containers] -* link:overview006.adoc#BNABS[Web Services Support] -* link:overview007.adoc#BNABX[Java EE Application Assembly and Deployment] -* link:overview008.adoc#BNACJ[Java EE 7 APIs] -* link:overview009.adoc#GIRDR[Java EE 7 APIs in the Java Platform,Standard Edition 7] -* link:overview010.adoc#BNADF[GlassFish Server Tools] - -++++ -
- ---- - - - - -
- ---- - - - - -
 Previous
-Previous
 
Next
-Next
-
Oracle Logo
-Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

-
- - - - - -
 Go To Table Of Contents
-Contents
-
-

-++++ \ No newline at end of file diff --git a/src/main/jbake/content/overview001.adoc b/src/main/jbake/content/overview001.adoc deleted file mode 100644 index db6eb5b..0000000 --- a/src/main/jbake/content/overview001.adoc +++ /dev/null @@ -1,123 +0,0 @@ -type=page -status=published -title=Overview001 -~~~~~~ -++++ - - - - - -
Java Platform, Enterprise Edition The Java EE Tutorial
-Release 7 Java Platform, Enterprise Edition
-E39031-02
- - - - - -
 Go To Table Of Contents
-Contents
-
-
- - - - - - -
Previous
-Previous
 
Next
-Next
 
-++++ - -[[A1046550]] - -[[JEETT1340]] -[[introduction-to-java-ee]] -1.1 Introduction to Java EE ---------------------------- - -Developers today increasingly recognize the need for distributed, -transactional, and portable applications that leverage the speed, -security, and reliability of server-side technology. Enterprise -applications provide the business logic for an enterprise. They are -centrally managed and often interact with other enterprise software. In -the world of information technology, enterprise applications must be -designed, built, and produced for less money, with greater speed, and -with fewer resources. - -With the Java Platform, Enterprise Edition (Java EE), development of -Java enterprise applications has never been easier or faster. The aim of -the Java EE platform is to provide developers with a powerful set of -APIs while shortening development time, reducing application complexity, -and improving application performance. - -The Java EE platform is developed through the Java Community Process -(JCP), which is responsible for all Java technologies. Expert groups -composed of interested parties have created Java Specification Requests -(JSRs) to define the various Java EE technologies. The work of the Java -Community under the JCP program helps to ensure Java technology's -standards of stability and cross-platform compatibility. - -The Java EE platform uses a simplified programming model. XML deployment -descriptors are optional. Instead, a developer can simply enter the -information as an annotation directly into a Java source file, and the -Java EE server will configure the component at deployment and runtime. -These annotations are generally used to embed in a program data that -would otherwise be furnished in a deployment descriptor. With -annotations, you put the specification information in your code next to -the program element affected. - -In the Java EE platform, dependency injection can be applied to all -resources a component needs, effectively hiding the creation and lookup -of resources from application code. Dependency injection can be used in -Enterprise JavaBeans (EJB) containers, web containers, and application -clients. Dependency injection allows the Java EE container to -automatically insert references to other required components or -resources, using annotations. - -This tutorial uses examples to describe the features available in the -Java EE platform for developing enterprise applications. Whether you are -a new or experienced enterprise developer, you should find the examples -and accompanying text a valuable and accessible knowledge base for -creating your own solutions. - - -++++ -
- ---- - - - - -
- ---- - - - - -
 Previous
-Previous
 
Next
-Next
-
Oracle Logo
-Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

-
- - - - - -
 Go To Table Of Contents
-Contents
-
-

-++++ \ No newline at end of file diff --git a/src/main/jbake/content/overview002.adoc b/src/main/jbake/content/overview002.adoc deleted file mode 100644 index a0ff515..0000000 --- a/src/main/jbake/content/overview002.adoc +++ /dev/null @@ -1,99 +0,0 @@ -type=page -status=published -title=Overview002 -~~~~~~ -++++ - - - - - -
Java Platform, Enterprise Edition The Java EE Tutorial
-Release 7 Java Platform, Enterprise Edition
-E39031-02
- - - - - -
 Go To Table Of Contents
-Contents
-
-
- - - - - - -
Previous
-Previous
 
Next
-Next
 
-++++ - -[[GIQVH]] - -[[JEETT00306]] -[[java-ee-7-platform-highlights]] -1.2 Java EE 7 Platform Highlights ---------------------------------- - -The most important goal of the Java EE 7 platform is to simplify -development by providing a common foundation for the various kinds of -components in the Java EE platform. Developers benefit from productivity -improvements with more annotations and less XML configuration, more -Plain Old Java Objects (POJOs), and simplified packaging. The Java EE 7 -platform includes the following new features: - -* New technologies, including the following: -** link:overview008.adoc#CJAJHGIH[Batch Applications for the Java -Platform] -** link:overview008.adoc#CJAFGFCJ[Concurrency Utilities for Java EE] -** link:overview008.adoc#CJAGIEEI[Java API for JSON Processing] (JSON-P) -** link:overview008.adoc#CJAHDJBJ[Java API for WebSocket] -* New features for EJB components (see -link:overview008.adoc#BNACL[Enterprise JavaBeans Technology] for details) -* New features for servlets (see link:overview008.adoc#BNACM[Java Servlet -Technology] for details) -* New features for JavaServer Faces components (see -link:overview008.adoc#BNACP[JavaServer Faces Technology] for details) -* New features for the Java Message Service (JMS) (see -link:overview008.adoc#BNACQ[Java Message Service API] for details) - -++++ -
- ---- - - - - -
- ---- - - - - -
 Previous
-Previous
 
Next
-Next
-
Oracle Logo
-Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

-
- - - - - -
 Go To Table Of Contents
-Contents
-
-

-++++ \ No newline at end of file diff --git a/src/main/jbake/content/overview003.adoc b/src/main/jbake/content/overview003.adoc deleted file mode 100644 index c1b8eb3..0000000 --- a/src/main/jbake/content/overview003.adoc +++ /dev/null @@ -1,106 +0,0 @@ -type=page -status=published -title=Overview003 -~~~~~~ -++++ - - - - - -
Java Platform, Enterprise Edition The Java EE Tutorial
-Release 7 Java Platform, Enterprise Edition
-E39031-02
- - - - - -
 Go To Table Of Contents
-Contents
-
-
- - - - - - -
Previous
-Previous
 
Next
-Next
 
-++++ - -[[BNAAX]] - -[[JEETT00307]] -[[java-ee-application-model]] -1.3 Java EE Application Model ------------------------------ - -The Java EE application model begins with the Java programming language -and the Java virtual machine. The proven portability, security, and -developer productivity they provide form the basis of the application -model. Java EE is designed to support applications that implement -enterprise services for customers, employees, suppliers, partners, and -others who make demands on or contributions to the enterprise. Such -applications are inherently complex, potentially accessing data from a -variety of sources and distributing applications to a variety of -clients. - -To better control and manage these applications, the business functions -to support these various users are conducted in the middle tier. The -middle tier represents an environment that is closely controlled by an -enterprise's information technology department. The middle tier is -typically run on dedicated server hardware and has access to the full -services of the enterprise. - -The Java EE application model defines an architecture for implementing -services as multitier applications that deliver the scalability, -accessibility, and manageability needed by enterprise-level -applications. This model partitions the work needed to implement a -multitier service into the following parts: - -* The business and presentation logic to be implemented by the developer -* The standard system services provided by the Java EE platform - -The developer can rely on the platform to provide solutions for the hard -systems-level problems of developing a multitier service. - -++++ -
- ---- - - - - -
- ---- - - - - -
 Previous
-Previous
 
Next
-Next
-
Oracle Logo
-Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

-
- - - - - -
 Go To Table Of Contents
-Contents
-
-

-++++ \ No newline at end of file diff --git a/src/main/jbake/content/overview004.adoc b/src/main/jbake/content/overview004.adoc deleted file mode 100644 index e6aee71..0000000 --- a/src/main/jbake/content/overview004.adoc +++ /dev/null @@ -1,360 +0,0 @@ -type=page -status=published -title=Overview004 -~~~~~~ -++++ - - - - - -
Java Platform, Enterprise Edition The Java EE Tutorial
-Release 7 Java Platform, Enterprise Edition
-E39031-02
- - - - - -
 Go To Table Of Contents
-Contents
-
-
- - - - - - -
Previous
-Previous
 
Next
-Next
 
-++++ -[[BNAAY]] - -[[JEETT00308]] -[[distributed-multitiered-applications]] -1.4 Distributed Multitiered Applications ----------------------------------------- - -The Java EE platform uses a distributed multitiered application model -for enterprise applications. Application logic is divided into -components according to function, and the application components that -make up a Java EE application are installed on various machines -depending on the tier in the multitiered Java EE environment to which -the application component belongs. - -link:#BNAAZ[Figure 1-1] shows two multitiered Java EE applications -divided into the tiers described in the following list. The Java EE -application parts shown in link:#BNAAZ[Figure 1-1] are presented in -link:#BNABB[Java EE Components]. - -* Client-tier components run on the client machine. -* Web-tier components run on the Java EE server. -* Business-tier components run on the Java EE server. -* Enterprise information system (EIS)-tier software runs on the EIS -server. - -Although a Java EE application can consist of all tiers shown in -link:#BNAAZ[Figure 1-1], Java EE multitiered applications are generally -considered to be three-tiered applications because they are distributed -over three locations: client machines, the Java EE server machine, and -the database or legacy machines at the back end. Three-tiered -applications that run in this way extend the standard two-tiered -client-and-server model by placing a multithreaded application server -between the client application and back-end storage. - -[[JEETT00001]] -[[BNAAZ]] - -Figure 1-1 Multitiered Applications - -image:img/jeett_dt_001.png[Description of Figure 1-1 follows] + -link:img_text/jeett_dt_001.adoc[Description of "Figure 1-1 Multitiered -Applications"] + - + - -[[BNABA]] - -[[JEETT00843]] -[[security]] -1.4.1 Security -~~~~~~~~~~~~~~ - -Although other enterprise application models require platform-specific -security measures in each application, the Java EE security environment -enables security constraints to be defined at deployment time. The Java -EE platform makes applications portable to a wide variety of security -implementations by shielding application developers from the complexity -of implementing security features. - -The Java EE platform provides standard declarative access control rules -that are defined by the developer and interpreted when the application -is deployed on the server. Java EE also provides standard login -mechanisms so that application developers do not have to implement these -mechanisms in their applications. The same application works in a -variety of security environments without changing the source code. - -[[BNABB]] - -[[JEETT00844]] -[[java-ee-components]] -1.4.2 Java EE Components -~~~~~~~~~~~~~~~~~~~~~~~~ - -Java EE applications are made up of components. A Java EE component is a -self-contained functional software unit that is assembled into a Java EE -application with its related classes and files and that communicates -with other components. - -The Java EE specification defines the following Java EE components: - -* Application clients and applets are components that run on the client. -* Java Servlet, JavaServer Faces, and JavaServer Pages (JSP) technology -components are web components that run on the server. -* EJB components (enterprise beans) are business components that run on -the server. - -Java EE components are written in the Java programming language and are -compiled in the same way as any program in the language. The differences -between Java EE components and "standard" Java classes are that Java EE -components are assembled into a Java EE application, they are verified -to be well formed and in compliance with the Java EE specification, and -they are deployed to production, where they are run and managed by the -Java EE server. - -[[BNABC]] - -[[JEETT00845]] -[[java-ee-clients]] -1.4.3 Java EE Clients -~~~~~~~~~~~~~~~~~~~~~ - -A Java EE client is usually either a web client or an application -client. - -[[BNABD]] - -[[JEETT00576]] -[[web-clients]] -1.4.3.1 Web Clients -^^^^^^^^^^^^^^^^^^^ - -A web client consists of two parts: - -* Dynamic web pages containing various types of markup language (HTML, -XML, and so on), which are generated by web components running in the -web tier -* A web browser, which renders the pages received from the server - -A web client is sometimes called a thin client. Thin clients usually do -not query databases, execute complex business rules, or connect to -legacy applications. When you use a thin client, such heavyweight -operations are off-loaded to enterprise beans executing on the Java EE -server, where they can leverage the security, speed, services, and -reliability of Java EE server-side technologies. - -[[BNABF]] - -[[JEETT00577]] -[[application-clients]] -1.4.3.2 Application Clients -^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -An application client runs on a client machine and provides a way for -users to handle tasks that require a richer user interface than can be -provided by a markup language. An application client typically has a -graphical user interface (GUI) created from the Swing API or the -Abstract Window Toolkit (AWT) API, but a command-line interface is -certainly possible. - -Application clients directly access enterprise beans running in the -business tier. However, if application requirements warrant it, an -application client can open an HTTP connection to establish -communication with a servlet running in the web tier. Application -clients written in languages other than Java can interact with Java EE -servers, enabling the Java EE platform to interoperate with legacy -systems, clients, and non-Java languages. - -[[BNABE]] - -[[JEETT00578]] -[[applets]] -1.4.3.3 Applets -^^^^^^^^^^^^^^^ - -A web page received from the web tier can include an embedded applet. -Written in the Java programming language, an applet is a small client -application that executes in the Java virtual machine installed in the -web browser. However, client systems will likely need the Java Plug-in -and possibly a security policy file for the applet to successfully -execute in the web browser. - -Web components are the preferred API for creating a web client program -because no plug-ins or security policy files are needed on the client -systems. Also, web components enable cleaner and more modular -application design because they provide a way to separate applications -programming from web page design. Personnel involved in web page design -thus do not need to understand Java programming language syntax to do -their jobs. - -[[BNABG]] - -[[JEETT00579]] -[[the-javabeans-component-architecture]] -1.4.3.4 The JavaBeans Component Architecture -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -The server and client tiers might also include components based on the -JavaBeans component architecture (JavaBeans components) to manage the -data flow between the following: - -* An application client or applet and components running on the Java EE -server -* Server components and a database - -JavaBeans components are not considered Java EE components by the Java -EE specification. - -JavaBeans components have properties and have `get` and `set` methods -for accessing those properties. JavaBeans components used in this way -are typically simple in design and implementation but should conform to -the naming and design conventions outlined in the JavaBeans component -architecture. - -[[BNABH]] - -[[JEETT00580]] -[[java-ee-server-communications]] -1.4.3.5 Java EE Server Communications -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -link:#BNABI[Figure 1-2] shows the various elements that can make up the -client tier. The client communicates with the business tier running on -the Java EE server either directly or, as in the case of a client -running in a browser, by going through web pages or servlets running in -the web tier. - -[[JEETT00002]] -[[BNABI]] - -Figure 1-2 Server Communication - -image:img/jeett_dt_002.png[Description of Figure 1-2 follows] + -link:img_text/jeett_dt_002.adoc[Description of "Figure 1-2 Server -Communication"] + - + - -[[BNABJ]] - -[[JEETT00846]] -[[web-components]] -1.4.4 Web Components -~~~~~~~~~~~~~~~~~~~~ - -Java EE web components are either servlets or web pages created using -JavaServer Faces technology and/or JSP technology (JSP pages). Servlets -are Java programming language classes that dynamically process requests -and construct responses. JSP pages are text-based documents that execute -as servlets but allow a more natural approach to creating static -content. JavaServer Faces technology builds on servlets and JSP -technology and provides a user interface component framework for web -applications. - -Static HTML pages and applets are bundled with web components during -application assembly but are not considered web components by the Java -EE specification. Server-side utility classes can also be bundled with -web components and, like HTML pages, are not considered web components. - -As shown in link:#BNABM[Figure 1-3], the web tier, like the client tier, -might include a JavaBeans component to manage the user input and send -that input to enterprise beans running in the business tier for -processing. - -[[JEETT00003]] -[[BNABM]] - -Figure 1-3 Web Tier and Java EE Applications - -image:img/jeett_dt_003.png[Description of Figure 1-3 follows] + -link:img_text/jeett_dt_003.adoc[Description of "Figure 1-3 Web Tier and -Java EE Applications"] + - + - -[[BNABK]] - -[[JEETT00847]] -[[business-components]] -1.4.5 Business Components -~~~~~~~~~~~~~~~~~~~~~~~~~ - -Business code, which is logic that solves or meets the needs of a -particular business domain such as banking, retail, or finance, is -handled by enterprise beans running in either the business tier or the -web tier. link:#BNABN[Figure 1-4] shows how an enterprise bean receives -data from client programs, processes it (if necessary), and sends it to -the enterprise information system tier for storage. An enterprise bean -also retrieves data from storage, processes it (if necessary), and sends -it back to the client program. - -[[JEETT00004]] -[[BNABN]] - -Figure 1-4 Business and EIS Tiers - -image:img/jeett_dt_004.png[Description of Figure 1-4 follows] + -link:img_text/jeett_dt_004.adoc[Description of "Figure 1-4 Business and -EIS Tiers"] + - + - -[[BNABL]] - -[[JEETT00848]] -[[enterprise-information-system-tier]] -1.4.6 Enterprise Information System Tier -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The enterprise information system tier handles EIS software and includes -enterprise infrastructure systems, such as enterprise resource planning -(ERP), mainframe transaction processing, database systems, and other -legacy information systems. For example, Java EE application components -might need access to enterprise information systems for database -connectivity. - -++++ -
- ---- - - - - -
- ---- - - - - -
 Previous
-Previous
 
Next
-Next
-
Oracle Logo
-Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

-
- - - - - -
 Go To Table Of Contents
-Contents
-
-

-++++ \ No newline at end of file diff --git a/src/main/jbake/content/overview005.adoc b/src/main/jbake/content/overview005.adoc deleted file mode 100644 index c27fdaa..0000000 --- a/src/main/jbake/content/overview005.adoc +++ /dev/null @@ -1,169 +0,0 @@ -type=page -status=published -title=Overview005 -~~~~~~ -++++ - - - - - -
Java Platform, Enterprise Edition The Java EE Tutorial
-Release 7 Java Platform, Enterprise Edition
-E39031-02
- - - - - -
 Go To Table Of Contents
-Contents
-
-
- - - - - - -
Previous
-Previous
 
Next
-Next
 
-++++ - -[[BNABO]] - -[[JEETT00309]] -[[java-ee-containers]] -1.5 Java EE Containers ----------------------- - -Normally, thin-client multitiered applications are hard to write because -they involve many lines of intricate code to handle transaction and -state management, multithreading, resource pooling, and other complex -low-level details. The component-based and platform-independent Java EE -architecture makes applications easy to write because business logic is -organized into reusable components. In addition, the Java EE server -provides underlying services in the form of a container for every -component type. Because you do not have to develop these services -yourself, you are free to concentrate on solving the business problem at -hand. - -[[BNABP]] - -[[JEETT00849]] -[[container-services]] -1.5.1 Container Services -~~~~~~~~~~~~~~~~~~~~~~~~ - -Containers are the interface between a component and the low-level, -platform-specific functionality that supports the component. Before it -can be executed, a web, enterprise bean, or application client component -must be assembled into a Java EE module and deployed into its container. - -The assembly process involves specifying container settings for each -component in the Java EE application and for the Java EE application -itself. Container settings customize the underlying support provided by -the Java EE server, including such services as security, transaction -management, Java Naming and Directory Interface (JNDI) API lookups, and -remote connectivity. Here are some of the highlights. - -* The Java EE security model lets you configure a web component or -enterprise bean so that system resources are accessed only by authorized -users. -* The Java EE transaction model lets you specify relationships among -methods that make up a single transaction so that all methods in one -transaction are treated as a single unit. -* JNDI lookup services provide a unified interface to multiple naming -and directory services in the enterprise so that application components -can access these services. -* The Java EE remote connectivity model manages low-level communications -between clients and enterprise beans. After an enterprise bean is -created, a client invokes methods on it as if it were in the same -virtual machine. - -Because the Java EE architecture provides configurable services, -components within the same application can behave differently based on -where they are deployed. For example, an enterprise bean can have -security settings that allow it a certain level of access to database -data in one production environment and another level of database access -in another production environment. - -The container also manages nonconfigurable services, such as enterprise -bean and servlet lifecycles, database connection resource pooling, data -persistence, and access to the Java EE platform APIs (see -link:overview008.adoc#BNACJ[Java EE 7 APIs]). - -[[BNABQ]] - -[[JEETT00850]] -[[container-types]] -1.5.2 Container Types -~~~~~~~~~~~~~~~~~~~~~ - -The deployment process installs Java EE application components in the -Java EE containers, as illustrated in link:#BNABR[Figure 1-5]. - -[[JEETT00005]] -[[BNABR]] - -Figure 1-5 Java EE Server and Containers - -image:img/jeett_dt_005.png[Description of Figure 1-5 follows] + -link:img_text/jeett_dt_005.adoc[Description of "Figure 1-5 Java EE Server -and Containers"] + - + - -The server and containers are as follows: - -* Java EE server: The runtime portion of a Java EE product. A Java EE -server provides EJB and web containers. -* EJB container: Manages the execution of enterprise beans for Java EE -applications. Enterprise beans and their container run on the Java EE -server. -* Web container: Manages the execution of web pages, servlets, and some -EJB components for Java EE applications. Web components and their -container run on the Java EE server. -* Application client container: Manages the execution of application -client components. Application clients and their container run on the -client. -* Applet container: Manages the execution of applets. Consists of a web -browser and a Java Plug-in running on the client together. - -++++ -
- ---- - - - - -
- ---- - - - - -
 Previous
-Previous
 
Next
-Next
-
Oracle Logo
-Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

-
- - - - - -
 Go To Table Of Contents
-Contents
-
-

-++++ \ No newline at end of file diff --git a/src/main/jbake/content/overview006.adoc b/src/main/jbake/content/overview006.adoc deleted file mode 100644 index 6a01662..0000000 --- a/src/main/jbake/content/overview006.adoc +++ /dev/null @@ -1,167 +0,0 @@ -type=page -status=published -title=Overview006 -~~~~~~ -++++ - - - - - -
Java Platform, Enterprise Edition The Java EE Tutorial
-Release 7 Java Platform, Enterprise Edition
-E39031-02
- - - - - -
 Go To Table Of Contents
-Contents
-
-
- - - - - - -
Previous
-Previous
 
Next
-Next
 
-++++ -[[BNABS]] - -[[JEETT00310]] -[[web-services-support]] -1.6 Web Services Support ------------------------- - -Web services are web-based enterprise applications that use open, -XML-based standards and transport protocols to exchange data with -calling clients. The Java EE platform provides the XML APIs and tools -you need to quickly design, develop, test, and deploy web services and -clients that fully interoperate with other web services and clients -running on Java-based or non-Java-based platforms. - -To write web services and clients with the Java EE XML APIs, all you -need to do is pass parameter data to the method calls and process the -data returned; for document-oriented web services, you send documents -containing the service data back and forth. No low-level programming is -needed because the XML API implementations do the work of translating -the application data to and from an XML-based data stream that is sent -over the standardized XML-based transport protocols. These XML-based -standards and protocols are introduced in the following sections. - -The translation of data to a standardized XML-based data stream is what -makes web services and clients written with the Java EE XML APIs fully -interoperable. This does not necessarily mean that the data being -transported includes XML tags, because the transported data can itself -be plain text, XML data, or any kind of binary data, such as audio, -video, maps, program files, computer-aided design (CAD) documents, and -the like. The next section introduces XML and explains how parties doing -business can use XML tags and schemas to exchange data in a meaningful -way. - -[[BNABT]] - -[[JEETT00851]] -[[xml]] -1.6.1 XML -~~~~~~~~~ - -Extensible Markup Language (XML) is a cross-platform, extensible, -text-based standard for representing data. Parties that exchange XML -data can create their own tags to describe the data, set up schemas to -specify which tags can be used in a particular kind of XML document, and -use XML style sheets to manage the display and handling of the data. - -For example, a web service can use XML and a schema to produce price -lists, and companies that receive the price lists and schema can have -their own style sheets to handle the data in a way that best suits their -needs. Here are examples. - -* One company might put XML pricing information through a program to -translate the XML into HTML so that it can post the price lists to its -intranet. -* A partner company might put the XML pricing information through a tool -to create a marketing presentation. -* Another company might read the XML pricing information into an -application for processing. - -[[BNABU]] - -[[JEETT00852]] -[[soap-transport-protocol]] -1.6.2 SOAP Transport Protocol -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Client requests and web service responses are transmitted as Simple -Object Access Protocol (SOAP) messages over HTTP to enable a completely -interoperable exchange between clients and web services, all running on -different platforms and at various locations on the Internet. HTTP is a -familiar request-and-response standard for sending messages over the -Internet, and SOAP is an XML-based protocol that follows the HTTP -request-and-response model. - -The SOAP portion of a transported message does the following: - -* Defines an XML-based envelope to describe what is in the message and -explain how to process the message -* Includes XML-based encoding rules to express instances of -application-defined data types within the message -* Defines an XML-based convention for representing the request to the -remote service and the resulting response - -[[BNABV]] - -[[JEETT00853]] -[[wsdl-standard-format]] -1.6.3 WSDL Standard Format -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The Web Services Description Language (WSDL) is a standardized XML -format for describing network services. The description includes the -name of the service, the location of the service, and ways to -communicate with the service. WSDL service descriptions can be published -on the Web. GlassFish Server provides a tool for generating the WSDL -specification of a web service that uses remote procedure calls to -communicate with clients. - -++++ -
- ---- - - - - -
- ---- - - - - -
 Previous
-Previous
 
Next
-Next
-
Oracle Logo
-Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

-
- - - - - -
 Go To Table Of Contents
-Contents
-
-

-++++ \ No newline at end of file diff --git a/src/main/jbake/content/overview007.adoc b/src/main/jbake/content/overview007.adoc deleted file mode 100644 index c0d6ac5..0000000 --- a/src/main/jbake/content/overview007.adoc +++ /dev/null @@ -1,89 +0,0 @@ -type=page -status=published -title=Overview007 -~~~~~~ -++++ - - - - - -
Java Platform, Enterprise Edition The Java EE Tutorial
-Release 7 Java Platform, Enterprise Edition
-E39031-02
- - - - - -
 Go To Table Of Contents
-Contents
-
-
- - - - - - -
Previous
-Previous
 
Next
-Next
 
-++++ -[[BNABX]] - -[[JEETT00311]] -[[java-ee-application-assembly-and-deployment]] -1.7 Java EE Application Assembly and Deployment ------------------------------------------------ - -A Java EE application is packaged into one or more standard units for -deployment to any Java EE platform-compliant system. Each unit contains - -* A functional component or components, such as an enterprise bean, web -page, servlet, or applet -* An optional deployment descriptor that describes its content - -Once a Java EE unit has been produced, it is ready to be deployed. -Deployment typically involves using a platform's deployment tool to -specify location-specific information, such as a list of local users who -can access it and the name of the local database. Once deployed on a -local platform, the application is ready to run. - -++++ -
- ---- - - - - -
- ---- - - - - -
 Previous
-Previous
 
Next
-Next
-
Oracle Logo
-Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

-
- - - - - -
 Go To Table Of Contents
-Contents
-
-

-++++ \ No newline at end of file diff --git a/src/main/jbake/content/overview008.adoc b/src/main/jbake/content/overview008.adoc deleted file mode 100644 index d1b3994..0000000 --- a/src/main/jbake/content/overview008.adoc +++ /dev/null @@ -1,565 +0,0 @@ -type=page -status=published -title=Overview008 -~~~~~~ -++++ - - - - - -
Java Platform, Enterprise Edition The Java EE Tutorial
-Release 7 Java Platform, Enterprise Edition
-E39031-02
- - - - - -
 Go To Table Of Contents
-Contents
-
-
- - - - - - -
Previous
-Previous
 
Next
-Next
 
-++++ - -[[BNACJ]] - -[[JEETT00314]] -[[java-ee-7-apis]] -1.8 Java EE 7 APIs ------------------- - -link:#BNACK[Figure 1-6] shows the relationships among the Java EE -containers. - -[[JEETT00007]] -[[BNACK]] - -Figure 1-6 Java EE Containers - -image:img/jeett_dt_006.png[Description of Figure 1-6 follows] + -link:img_text/jeett_dt_006.adoc[Description of "Figure 1-6 Java EE -Containers"] + - + - -link:#GJQMG[Figure 1-7] shows the availability of the Java EE 7 APIs in -the web container. - -[[JEETT00008]] -[[GJQMG]] - -Figure 1-7 Java EE APIs in the Web Container - -image:img/jeett_dt_007.png[Description of Figure 1-7 follows] + -link:img_text/jeett_dt_007.adoc[Description of "Figure 1-7 Java EE APIs -in the Web Container"] + - + - -link:#GJQMN[Figure 1-8] shows the availability of the Java EE 7 APIs in -the EJB container. - -[[JEETT00009]] -[[GJQMN]] - -Figure 1-8 Java EE APIs in the EJB Container - -image:img/jeett_dt_008.png[Description of Figure 1-8 follows] + -link:img_text/jeett_dt_008.adoc[Description of "Figure 1-8 Java EE APIs -in the EJB Container"] + - + - -link:#GJQNH[Figure 1-9] shows the availability of the Java EE 7 APIs in -the application client container. - -[[JEETT00010]] -[[GJQNH]] - -Figure 1-9 Java EE APIs in the Application Client Container - -image:img/jeett_dt_009.png[Description of Figure 1-9 follows] + -link:img_text/jeett_dt_009.adoc[Description of "Figure 1-9 Java EE APIs -in the Application Client Container"] + - + - -The following sections give a brief summary of the technologies required -by the Java EE platform and the APIs used in Java EE applications. - -[[BNACL]] - -[[JEETT00859]] -[[enterprise-javabeans-technology]] -1.8.1 Enterprise JavaBeans Technology -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -An Enterprise JavaBeans (EJB) component, or enterprise bean, is a body -of code that has fields and methods to implement modules of business -logic. You can think of an enterprise bean as a building block that can -be used alone or with other enterprise beans to execute business logic -on the Java EE server. - -Enterprise beans are either session beans or message-driven beans. - -* A session bean represents a transient conversation with a client. When -the client finishes executing, the session bean and its data are gone. -* A message-driven bean combines features of a session bean and a -message listener, allowing a business component to receive messages -asynchronously. Commonly, these are Java Message Service (JMS) messages. - -In the Java EE 7 platform, new enterprise bean features include the -following: - -* Asynchronous local session beans in EJB Lite -* Nonpersistent timers in EJB Lite - -The Java EE 7 platform requires Enterprise JavaBeans 3.2 and -Interceptors 1.2. The Interceptors specification is part of the EJB -specification. - -[[BNACM]] - -[[JEETT00860]] -[[java-servlet-technology]] -1.8.2 Java Servlet Technology -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Java Servlet technology lets you define HTTP-specific servlet classes. A -servlet class extends the capabilities of servers that host applications -accessed by way of a request-response programming model. Although -servlets can respond to any type of request, they are commonly used to -extend the applications hosted by web servers. - -In the Java EE 7 platform, new Java Servlet technology features include -the following: - -* Nonblocking I/O -* HTTP protocol upgrade - -The Java EE 7 platform requires Servlet 3.1. - -[[BNACP]] - -[[JEETT00861]] -[[javaserver-faces-technology]] -1.8.3 JavaServer Faces Technology -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -JavaServer Faces technology is a user interface framework for building -web applications. The main components of JavaServer Faces technology are -as follows: - -* A GUI component framework. -* A flexible model for rendering components in different kinds of HTML -or different markup languages and technologies. A `Renderer` object -generates the markup to render the component and converts the data -stored in a model object to types that can be represented in a view. -* A standard `RenderKit` for generating HTML 4.01 markup. - -The following features support the GUI components: - -* Input validation -* Event handling -* Data conversion between model objects and components -* Managed model object creation -* Page navigation configuration -* Expression Language (EL) - -All this functionality is available using standard Java APIs and -XML-based configuration files. - -In the Java EE 7 platform, new features of JavaServer Faces technology -include the following: - -* HTML5-friendly markup -* Faces Flows -* Resource library contracts - -The Java EE 7 platform requires JavaServer Faces 2.2 and Expression -Language 3.0. - -[[BNACN]] - -[[JEETT00862]] -[[javaserver-pages-technology]] -1.8.4 JavaServer Pages Technology -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -JavaServer Pages (JSP) technology lets you put snippets of servlet code -directly into a text-based document. A JSP page is a text-based document -that contains two types of text: - -* Static data, which can be expressed in any text-based format, such as -HTML or XML -* JSP elements, which determine how the page constructs dynamic content - -For information about JSP technology, see the The Java EE 5 Tutorial at -`http://docs.oracle.com/javaee/5/tutorial/doc/`. - -The Java EE 7 platform requires JavaServer Pages 2.3 for compatibility -with earlier releases but recommends the use of Facelets as the display -technology in new applications. - -[[BNACO]] - -[[JEETT00863]] -[[javaserver-pages-standard-tag-library]] -1.8.5 JavaServer Pages Standard Tag Library -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The JavaServer Pages Standard Tag Library (JSTL) encapsulates core -functionality common to many JSP applications. Instead of mixing tags -from numerous vendors in your JSP applications, you use a single, -standard set of tags. This standardization allows you to deploy your -applications on any JSP container that supports JSTL and makes it more -likely that the implementation of the tags is optimized. - -JSTL has iterator and conditional tags for handling flow control, tags -for manipulating XML documents, internationalization tags, tags for -accessing databases using SQL, and tags for commonly used functions. - -The Java EE 7 platform requires JSTL 1.2. - -[[BNADB]] - -[[JEETT00864]] -[[java-persistence-api]] -1.8.6 Java Persistence API -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The Java Persistence API (JPA) is a Java standards–based solution for -persistence. Persistence uses an object/relational mapping approach to -bridge the gap between an object-oriented model and a relational -database. The Java Persistence API can also be used in Java SE -applications outside of the Java EE environment. Java Persistence -consists of the following areas: - -* The Java Persistence API -* The query language -* Object/relational mapping metadata - -The Java EE 7 platform requires Java Persistence API 2.1. - -[[BNACR]] - -[[JEETT00865]] -[[java-transaction-api]] -1.8.7 Java Transaction API -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The Java Transaction API (JTA) provides a standard interface for -demarcating transactions. The Java EE architecture provides a default -auto commit to handle transaction commits and rollbacks. An auto commit -means that any other applications that are viewing data will see the -updated data after each database read or write operation. However, if -your application performs two separate database access operations that -depend on each other, you will want to use the JTA API to demarcate -where the entire transaction, including both operations, begins, rolls -back, and commits. - -The Java EE 7 platform requires Java Transaction API 1.2. - -[[GIRBT]] - -[[JEETT00866]] -[[java-api-for-restful-web-services]] -1.8.8 Java API for RESTful Web Services -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The Java API for RESTful Web Services (JAX-RS) defines APIs for the -development of web services built according to the Representational -State Transfer (REST) architectural style. A JAX-RS application is a web -application that consists of classes packaged as a servlet in a WAR file -along with required libraries. - -The Java EE 7 platform requires JAX-RS 2.0. - -[[GJXSD]] - -[[JEETT00867]] -[[managed-beans]] -1.8.9 Managed Beans -~~~~~~~~~~~~~~~~~~~ - -Managed Beans, lightweight container-managed objects (POJOs) with -minimal requirements, support a small set of basic services, such as -resource injection, lifecycle callbacks, and interceptors. Managed Beans -represent a generalization of the managed beans specified by JavaServer -Faces technology and can be used anywhere in a Java EE application, not -just in web modules. - -The Managed Beans specification is part of the Java EE 7 platform -specification (JSR 342). The Java EE 7 platform requires Managed Beans -1.0. - -[[GJXVO]] - -[[JEETT00868]] -[[contexts-and-dependency-injection-for-java-ee]] -1.8.10 Contexts and Dependency Injection for Java EE -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Contexts and Dependency Injection for Java EE (CDI) defines a set of -contextual services, provided by Java EE containers, that make it easy -for developers to use enterprise beans along with JavaServer Faces -technology in web applications. Designed for use with stateful objects, -CDI also has many broader uses, allowing developers a great deal of -flexibility to integrate different kinds of components in a loosely -coupled but typesafe way. - -The Java EE 7 platform requires CDI 1.1. - -[[GJXVG]] - -[[JEETT00869]] -[[dependency-injection-for-java]] -1.8.11 Dependency Injection for Java -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Dependency Injection for Java defines a standard set of annotations (and -one interface) for use on injectable classes. - -In the Java EE platform, CDI provides support for Dependency Injection. -Specifically, you can use injection points only in a CDI-enabled -application. - -The Java EE 7 platform requires Dependency Injection for Java 1.0. - -[[GJXTY]] - -[[JEETT00870]] -[[bean-validation]] -1.8.12 Bean Validation -~~~~~~~~~~~~~~~~~~~~~~ - -The Bean Validation specification defines a metadata model and API for -validating data in JavaBeans components. Instead of distributing -validation of data over several layers, such as the browser and the -server side, you can define the validation constraints in one place and -share them across the different layers. - -The Java EE 7 platform requires Bean Validation 1.1. - -[[BNACQ]] - -[[JEETT00871]] -[[java-message-service-api]] -1.8.13 Java Message Service API -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The Java Message Service (JMS) API is a messaging standard that allows -Java EE application components to create, send, receive, and read -messages. It enables distributed communication that is loosely coupled, -reliable, and asynchronous. - -In the platform, new features of JMS include the following. - -* A new, simplified API offers a simpler alternative to the previous -API. This API includes a `JMSContext` object that combines the functions -of a `Connection` and a `Session`. -* All objects with a `close` method implement the -`java.lang.Autocloseable` interface so that they can be used in a Java -SE 7 `try`-with-resources statement. - -The Java EE 7 platform requires JMS 2.0. - -[[BNACZ]] - -[[JEETT00872]] -[[java-ee-connector-architecture]] -1.8.14 Java EE Connector Architecture -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The Java EE Connector Architecture is used by tools vendors and system -integrators to create resource adapters that support access to -enterprise information systems that can be plugged in to any Java EE -product. A resource adapter is a software component that allows Java EE -application components to access and interact with the underlying -resource manager of the EIS. Because a resource adapter is specific to -its resource manager, a different resource adapter typically exists for -each type of database or enterprise information system. - -The Java EE Connector Architecture also provides a performance-oriented, -secure, scalable, and message-based transactional integration of Java EE -platform–based web services with existing EISs that can be either -synchronous or asynchronous. Existing applications and EISs integrated -through the Java EE Connector Architecture into the Java EE platform can -be exposed as XML-based web services by using JAX-WS and Java EE -component models. Thus JAX-WS and the Java EE Connector Architecture are -complementary technologies for enterprise application integration (EAI) -and end-to-end business integration. - -The Java EE 7 platform requires Java EE Connector Architecture 1.7. - -[[BNACS]] - -[[JEETT00873]] -[[javamail-api]] -1.8.15 JavaMail API -~~~~~~~~~~~~~~~~~~~ - -Java EE applications use the JavaMail API to send email notifications. -The JavaMail API has two parts: - -* An application-level interface used by the application components to -send mail -* A service provider interface - -The Java EE platform includes the JavaMail API with a service provider -that allows application components to send Internet mail. - -The Java EE 7 platform requires JavaMail 1.5. - -[[GIRBE]] - -[[JEETT00874]] -[[java-authorization-contract-for-containers]] -1.8.16 Java Authorization Contract for Containers -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The Java Authorization Contract for Containers (JACC) specification -defines a contract between a Java EE application server and an -authorization policy provider. All Java EE containers support this -contract. - -The JACC specification defines `java.security.Permission` classes that -satisfy the Java EE authorization model. The specification defines the -binding of container-access decisions to operations on instances of -these permission classes. It defines the semantics of policy providers -that use the new permission classes to address the authorization -requirements of the Java EE platform, including the definition and use -of roles. - -The Java EE 7 platform requires JACC 1.5. - -[[GIRGP]] - -[[JEETT00875]] -[[java-authentication-service-provider-interface-for-containers]] -1.8.17 Java Authentication Service Provider Interface for Containers -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The Java Authentication Service Provider Interface for Containers -(JASPIC) specification defines a service provider interface (SPI) by -which authentication providers that implement message authentication -mechanisms may be integrated in client or server message-processing -containers or runtimes. Authentication providers integrated through this -interface operate on network messages provided to them by their calling -containers. The authentication providers transform outgoing messages so -that the source of each message can be authenticated by the receiving -container, and the recipient of the message can be authenticated by the -message sender. Authentication providers authenticate each incoming -message and return to their calling containers the identity established -as a result of the message authentication. - -The Java EE 7 platform requires JASPIC 1.1. - -[[CJAHDJBJ]] - -[[JEETT1341]] -[[java-api-for-websocket]] -1.8.18 Java API for WebSocket -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -WebSocket is an application protocol that provides full-duplex -communications between two peers over TCP. The Java API for WebSocket -enables Java EE applications to create endpoints using annotations that -specify the configuration parameters of the endpoint and designate its -lifecycle callback methods. - -The WebSocket API is new to the Java EE 7 platform. The Java EE 7 -platform requires Java API for WebSocket 1.0. - -[[CJAGIEEI]] - -[[JEETT1342]] -[[java-api-for-json-processing]] -1.8.19 Java API for JSON Processing -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -JSON is a text-based data exchange format derived from JavaScript that -is used in web services and other connected applications. The Java API -for JSON Processing (JSON-P) enables Java EE applications to parse, -transform, and query JSON data using the object model or the streaming -model. - -JSON-P is new to the Java EE 7 platform. The Java EE 7 platform requires -JSON-P 1.0. - -[[CJAFGFCJ]] - -[[JEETT1343]] -[[concurrency-utilities-for-java-ee]] -1.8.20 Concurrency Utilities for Java EE -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Concurrency Utilities for Java EE is a standard API for providing -asynchronous capabilities to Java EE application components through the -following types of objects: managed executor service, managed scheduled -executor service, managed thread factory, and context service. - -Concurrency Utilities for Java EE is new to the Java EE 7 platform. The -Java EE 7 platform requires Concurrency Utilities for Java EE 1.0. - -[[CJAJHGIH]] - -[[JEETT1344]] -[[batch-applications-for-the-java-platform]] -1.8.21 Batch Applications for the Java Platform -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Batch jobs are tasks that can be executed without user interaction. The -Batch Applications for the Java Platform specification is a batch -framework that provides support for creating and running batch jobs in -Java applications. The batch framework consists of a batch runtime, a -job specification language based on XML, a Java API to interact with the -batch runtime, and a Java API to implement batch artifacts. - -Batch Applications for the Java Platform is new to the Java EE 7 -platform. The Java EE 7 platform requires Batch Applications for the -Java Platform 1.0. - -++++ -
- ---- - - - - -
- ---- - - - - -
 Previous
-Previous
 
Next
-Next
-
Oracle Logo
-Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

-
- - - - - -
 Go To Table Of Contents
-Contents
-
-

-++++ \ No newline at end of file diff --git a/src/main/jbake/content/overview009.adoc b/src/main/jbake/content/overview009.adoc deleted file mode 100644 index 3afb466..0000000 --- a/src/main/jbake/content/overview009.adoc +++ /dev/null @@ -1,263 +0,0 @@ -type=page -status=published -title=Overview009 -~~~~~~ -++++ - - - - - -
Java Platform, Enterprise Edition The Java EE Tutorial
-Release 7 Java Platform, Enterprise Edition
-E39031-02
- - - - - -
 Go To Table Of Contents
-Contents
-
-
- - - - - - -
Previous
-Previous
 
Next
-Next
 
-++++ - -[[GIRDR]] - -[[JEETT00315]] -[[java-ee-7-apis-in-the-java-platform-standard-edition-7]] -1.9 Java EE 7 APIs in the Java Platform, Standard Edition 7 ------------------------------------------------------------ - -Several APIs that are required by the Java EE 7 platform are included in -the Java Platform, Standard Edition 7 (Java SE 7) and are thus available -to Java EE applications. - -[[BNADA]] - -[[JEETT00876]] -[[java-database-connectivity-api]] -1.9.1 Java Database Connectivity API -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The Java Database Connectivity (JDBC) API lets you invoke SQL commands -from Java programming language methods. You use the JDBC API in an -enterprise bean when you have a session bean access the database. You -can also use the JDBC API from a servlet or a JSP page to access the -database directly without going through an enterprise bean. - -The JDBC API has two parts: - -* An application-level interface used by the application components to -access a database -* A service provider interface to attach a JDBC driver to the Java EE -platform - -The Java SE 7 platform requires JDBC 4.1. - -[[BNADC]] - -[[JEETT00877]] -[[java-naming-and-directory-interface-api]] -1.9.2 Java Naming and Directory Interface API -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The Java Naming and Directory Interface (JNDI) API provides naming and -directory functionality, enabling applications to access multiple naming -and directory services, such as LDAP, DNS, and NIS. The JNDI API -provides applications with methods for performing standard directory -operations, such as associating attributes with objects and searching -for objects using their attributes. Using JNDI, a Java EE application -can store and retrieve any type of named Java object, allowing Java EE -applications to coexist with many legacy applications and systems. - -Java EE naming services provide application clients, enterprise beans, -and web components with access to a JNDI naming environment. A naming -environment allows a component to be customized without the need to -access or change the component's source code. A container implements the -component's environment and provides it to the component as a JNDI -naming context. - -The naming environment provides four logical namespaces: `java:comp`, -`java:module`, `java:app`, and `java:global` for objects available to -components, modules, or applications or shared by all deployed -applications. A Java EE component can access named system-provided and -user-defined objects. The names of some system-provided objects, such as -a default JDBC `DataSource` object, a default JMS connection factory, -and a JTA `UserTransaction` object, are stored in the `java:comp` -namespace. The Java EE platform allows a component to name user-defined -objects, such as enterprise beans, environment entries, JDBC -`DataSource` objects, and messaging destinations. - -A Java EE component can also locate its environment naming context by -using JNDI interfaces. A component can create a -`javax.naming.InitialContext` object and look up the environment naming -context in `InitialContext` under the name `java:comp/env`. A -component's naming environment is stored directly in the environment -naming context or in any of its direct or indirect subcontexts. - -[[BNACT]] - -[[JEETT00878]] -[[javabeans-activation-framework]] -1.9.3 JavaBeans Activation Framework -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The JavaBeans Activation Framework (JAF) is used by the JavaMail API. -JAF provides standard services to determine the type of an arbitrary -piece of data, encapsulate access to it, discover the operations -available on it, and create the appropriate JavaBeans component to -perform those operations. - -[[BNACU]] - -[[JEETT00879]] -[[java-api-for-xml-processing]] -1.9.4 Java API for XML Processing -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The Java API for XML Processing (JAXP), part of the Java SE platform, -supports the processing of XML documents using Document Object Model -(DOM), Simple API for XML (SAX), and Extensible Stylesheet Language -Transformations (XSLT). JAXP enables applications to parse and transform -XML documents independently of a particular XML-processing -implementation. - -JAXP also provides namespace support, which lets you work with schemas -that might otherwise have naming conflicts. Designed to be flexible, -JAXP lets you use any XML-compliant parser or XSL processor from within -your application and supports the Worldwide Web Consortium (W3C) schema. -You can find information on the W3C schema at -`http://www.w3.org/XML/Schema`. - -[[BNACW]] - -[[JEETT00880]] -[[java-architecture-for-xml-binding]] -1.9.5 Java Architecture for XML Binding -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The Java Architecture for XML Binding (JAXB) provides a convenient way -to bind an XML schema to a representation in Java language programs. -JAXB can be used independently or in combination with JAX-WS, in which -case it provides a standard data binding for web service messages. All -Java EE application client containers, web containers, and EJB -containers support the JAXB API. - -The Java EE 7 platform requires JAXB 2.2. - -[[BNACV]] - -[[JEETT00882]] -[[java-api-for-xml-web-services]] -1.9.6 Java API for XML Web Services -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The Java API for XML Web Services (JAX-WS) specification provides -support for web services that use the JAXB API for binding XML data to -Java objects. The JAX-WS specification defines client APIs for accessing -web services as well as techniques for implementing web service -endpoints. The Implementing Enterprise Web Services specification -describes the deployment of JAX-WS-based services and clients. The EJB -and Java Servlet specifications also describe aspects of such -deployment. JAX-WS-based applications can be deployed using any of these -deployment models. - -The JAX-WS specification describes the support for message handlers that -can process message requests and responses. In general, these message -handlers execute in the same container and with the same privileges and -execution context as the JAX-WS client or endpoint component with which -they are associated. These message handlers have access to the same JNDI -namespace as their associated component. Custom serializers and -deserializers, if supported, are treated in the same way as message -handlers. - -The Java EE 7 platform requires JAX-WS 2.2. - -[[BNACX]] - -[[JEETT00881]] -[[soap-with-attachments-api-for-java]] -1.9.7 SOAP with Attachments API for Java -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The SOAP with Attachments API for Java (SAAJ) is a low-level API on -which JAX-WS depends. SAAJ enables the production and consumption of -messages that conform to the SOAP 1.1 and 1.2 specifications and the -SOAP with Attachments note. Most developers do not use the SAAJ API, -instead using the higher-level JAX-WS API. - -[[BNADD]] - -[[JEETT00883]] -[[java-authentication-and-authorization-service]] -1.9.8 Java Authentication and Authorization Service -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The Java Authentication and Authorization Service (JAAS) provides a way -for a Java EE application to authenticate and authorize a specific user -or group of users to run it. - -JAAS is a Java programming language version of the standard Pluggable -Authentication Module (PAM) framework, which extends the Java platform -security architecture to support user-based authorization. - -[[JEETT1345]] -[[sthref12]] - -[[common-annotations-for-the-java-platform]] -1.9.9 Common Annotations for the Java Platform -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Annotations enable a declarative style of programming in the Java -platform. - -The Java EE 7 platform requires Common Annotations for the Java Platform -1.2. - -++++ -
- ---- - - - - -
- ---- - - - - -
 Previous
-Previous
 
Next
-Next
-
Oracle Logo
-Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

-
- - - - - -
 Go To Table Of Contents
-Contents
-
-

-++++ \ No newline at end of file diff --git a/src/main/jbake/content/overview010.adoc b/src/main/jbake/content/overview010.adoc deleted file mode 100644 index c6ec342..0000000 --- a/src/main/jbake/content/overview010.adoc +++ /dev/null @@ -1,138 +0,0 @@ -type=page -status=published -title=Overview010 -~~~~~~ -++++ - - - - - -
Java Platform, Enterprise Edition The Java EE Tutorial
-Release 7 Java Platform, Enterprise Edition
-E39031-02
- - - - - -
 Go To Table Of Contents
-Contents
-
-
- - - - - - -
Previous
-Previous
 
Next
-Next
 
-++++ - -[[BNADF]] - -[[JEETT00316]] -[[glassfish-server-tools]] -1.10 GlassFish Server Tools ---------------------------- - -GlassFish Server is a compliant implementation of the Java EE 7 -platform. In addition to supporting all the APIs described in the -previous sections, GlassFish Server includes a number of Java EE tools -that are not part of the Java EE 7 platform but are provided as a -convenience to the developer. - -This section briefly summarizes the tools that make up GlassFish Server. -Instructions for starting and stopping GlassFish Server, starting the -Administration Console, and starting and stopping the Java DB server are -in link:usingexamples.adoc#GFIUD[Chapter 2, "Using the Tutorial -Examples"]. - -GlassFish Server contains the tools listed in link:#BNADH[Table 1-1]. -Basic usage information for many of the tools appears throughout the -tutorial. For detailed information, see the online help in the GUI -tools. - -[[JEETT1346]] -[[BNADH]] - -Table 1-1 GlassFish Server Tools - -[width="27%",options="header"] -|======================================================================= -|Tool |Description -|Administration Console |A web-based GUI GlassFish Server administration utility. Used to stop -GlassFish Server and to manage users, resources, and applications. - -|`asadmin` |A command-line GlassFish Server administration utility. Used -to start and stop GlassFish Server and to manage users, resources, and -applications. - -|`appclient` |A command-line tool that launches the application client -container and invokes the client application packaged in the application -client JAR file. - -|`capture-schema` |A command-line tool to extract schema information -from a database, producing a schema file that GlassFish Server can use -for container-managed persistence. - -|`package-appclient` |A command-line tool to package the application -client container libraries and JAR files. - -|Java DB database |A copy of the Java DB server. - -|`xjc` |A command-line tool to transform, or bind, a source XML schema -to a set of JAXB content classes in the Java programming language. - -|`schemagen` |A command-line tool to create a schema file for each -namespace referenced in your Java classes. - -|`wsimport` |A command-line tool to generate JAX-WS portable artifacts -for a given WSDL file. After generation, these artifacts can be packaged -in a WAR file with the WSDL and schema documents, along with the -endpoint implementation, and then deployed. - -|`wsgen` |A command-line tool to read a web service endpoint class and -generate all the required JAX-WS portable artifacts for web service -deployment and invocation. -|======================================================================= - -++++ -
- ---- - - - - -
- ---- - - - - -
 Previous
-Previous
 
Next
-Next
-
Oracle Logo
-Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

-
- - - - - -
 Go To Table Of Contents
-Contents
-
-

-++++ \ No newline at end of file diff --git a/src/main/jbake/content/partintro.adoc b/src/main/jbake/content/partintro.adoc deleted file mode 100644 index 8fa78b3..0000000 --- a/src/main/jbake/content/partintro.adoc +++ /dev/null @@ -1,88 +0,0 @@ -type=page -status=published -title=Introduction -~~~~~~ -++++ - - - - - -
Java Platform, Enterprise Edition The Java EE Tutorial
-Release 7 Java Platform, Enterprise Edition
-E39031-02
- - - - - -
 Go To Table Of Contents
-Contents
-
-
- - - - - - -
Previous
-Previous
 
Next
-Next
 
-++++ - - -[[JEETT00127]] - -[[part-i]] -Part I + --------- - - -[[introduction]] -Introduction ------------- - -Part I introduces the platform, the tutorial, and the examples. This -part contains the following chapters: - -* link:overview.adoc#BNAAW[Chapter 1, "Overview"] -* link:usingexamples.adoc#GFIUD[Chapter 2, "Using the Tutorial Examples"] - -++++ -
- ---- - - - - -
- ---- - - - - -
 Previous
-Previous
 
Next
-Next
-
Oracle Logo
-Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

-
- - - - - -
 Go To Table Of Contents
-Contents
-
-

-++++ \ No newline at end of file diff --git a/src/main/jbake/content/preface.adoc b/src/main/jbake/content/preface.adoc deleted file mode 100644 index bdd57a2..0000000 --- a/src/main/jbake/content/preface.adoc +++ /dev/null @@ -1,264 +0,0 @@ -type=page -status=published -title=Preface -~~~~~~ -++++ - - - - - -
Java Platform, Enterprise Edition The Java EE Tutorial
-Release 7 Java Platform, Enterprise Edition
-E39031-02
- - - - - -
 Go To Table Of Contents
-Contents
-
-
- - - - - - -
Previous
-Previous
 
Next
-Next
 
-++++ - -[[JEETT00063]] -[[GEXAF]] - -[[preface]] -Preface -------- - -This tutorial is a guide to developing enterprise applications for the -Java Platform, Enterprise Edition 7 (Java EE 7), using GlassFish Server -Open Source Edition. - -GlassFish Server Open Source Edition is the leading open-source and -open-community platform for building and deploying next-generation -applications and services. GlassFish Server Open Source Edition, -developed by the GlassFish project open-source community at -`https://glassfish.java.net/`, is the first compatible implementation of -the Java EE 7 platform specification. This lightweight, flexible, and -open-source application server enables organizations not only to -leverage the new capabilities introduced within the Java EE 7 -specification, but also to add to their existing capabilities through a -faster and more streamlined development and deployment cycle. GlassFish -Server Open Source Edition is hereafter referred to as GlassFish Server. - -The following topics are addressed here: - -* link:#CIACGIBD[Audience] -* link:#CIAHFICG[Documentation Accessibility] -* link:#BNAAC[Before You Read This Book] -* link:#GIPRL[Related Documentation] -* link:#GKVTF[Conventions] -* link:#GFIRK[Default Paths and File Names] - -[[JEETT1336]] - -[[CIACGIBD]] -[[audience]] -Audience -~~~~~~~~ - -This tutorial is intended for programmers interested in developing and -deploying Java EE 7 applications. It covers the technologies comprising -the Java EE platform and describes how to develop Java EE components and -deploy them on the Java EE Software Development Kit (SDK). - -[[JEETT1337]] -[[CIAHFICG]] - -[[documentation-accessibility]] -Documentation Accessibility -~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -For information about Oracle's commitment to accessibility, visit the -Oracle Accessibility Program website at -`http://www.oracle.com/pls/topic/lookup?ctx=acc&id=docacc`. - -[[sthref2]] - -Access to Oracle Support - -Oracle customers that have purchased support have access to electronic -support through My Oracle Support. For information, visit -`http://www.oracle.com/pls/topic/lookup?ctx=acc&id=info` or visit -`http://www.oracle.com/pls/topic/lookup?ctx=acc&id=trs` if you are -hearing impaired. - -[[JEETT00301]] -[[BNAAC]] - -[[before-you-read-this-book]] -Before You Read This Book -~~~~~~~~~~~~~~~~~~~~~~~~~ - -Before proceeding with this tutorial, you should have a good knowledge -of the Java programming language. A good way to get to that point is to -work through the Java Tutorials -(`http://docs.oracle.com/javase/tutorial/index.adoc`). - -[[JEETT00302]] -[[GIPRL]] - -[[related-documentation]] -Related Documentation -~~~~~~~~~~~~~~~~~~~~~ - -The GlassFish Server documentation set describes deployment planning and -system installation. To obtain documentation for GlassFish Server Open -Source Edition, go to `https://glassfish.java.net/docs/`. - -The Java EE 7 API specification can be viewed at -`http://docs.oracle.com/javaee/7/api/` and is also provided in the Java -EE 7 SDK. - -Additionally, the Java EE Specifications at -`http://www.oracle.com/technetwork/java/javaee/tech/index.adoc` might be -useful. - -For information about creating enterprise applications in the NetBeans -Integrated Development Environment (IDE), see -`https://netbeans.org/kb/`. - -For information about the Java DB database for use with GlassFish -Server, see -`http://www.oracle.com/technetwork/java/javadb/overview/index.adoc`. - -The GlassFish Samples project is a collection of sample applications -that demonstrate a broad range of Java EE technologies. The GlassFish -Samples are bundled with the Java EE Software Development Kit (SDK) and -are also available from the GlassFish Samples project page at -`https://glassfish-samples.java.net/`. - -[[JEETT00303]] -[[GKVTF]] - -[[conventions]] -Conventions -~~~~~~~~~~~ - -The following table describes the typographic conventions that are used -in this book. - -[width="55%", options="header",] -|======================================================================= -|Convention |Meaning |Example -|Boldface |Boldface type indicates graphical user interface elements -associated with an action or terms defined in text. a| -From the File menu, choose Open Project. - -A cache is a copy that is stored locally. - -|`Monospace` |Monospace type indicates the names of files and -directories, commands within a paragraph, URLs, code in examples, text -that appears on the screen, or text that you enter. a| -Edit your `.login` file. - -Use `ls` `-a` to list all files. - -`machine_name% you have mail.` - -|Italic |Italic type indicates book titles, emphasis, or placeholder -variables for which you supply particular values. a| -Read Chapter 6 in the User's Guide. - -Do not save the file. - -The command to remove a file is `rm` filename. - -|======================================================================= - - - -[[JEETT00304]] -[[GFIRK]] - -[[default-paths-and-file-names]] -Default Paths and File Names -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The following table describes the default paths and file names that are -used in this book. - -[width="50%",options="header",] -|======================================================================= -|Placeholder |Description |Default Value -|as-install |Represents the base installation directory for GlassFish -Server or the SDK of which GlassFish Server is a part. a| -Installations on the Solaris operating system, Linux operating system, -and Mac operating system: - -user's-home-directory`/glassfish4/glassfish` - -Windows, all installations: - -SystemDrive`:\glassfish4\glassfish` - -|as-install-parent |Represents the parent of the base installation -directory for GlassFish Server. a| -Installations on the Solaris operating system, Linux operating system, -and Mac operating system: - -user's-home-directory`/glassfish4` - -Windows, all installations: - -SystemDrive`:\glassfish4` - -|tut-install |Represents the base installation directory for the Java EE -Tutorial after you install GlassFish Server or the SDK and run the -Update Tool. |as-install-parent`/docs/javaee-tutorial` - -|domain-dir |Represents the directory in which a domain's configuration -is stored. |as-install`/domains/domain1` -|======================================================================= - - -++++ -
- ---- - - - - -
- ---- - - - - -
 Previous
-Previous
 
Next
-Next
-
Oracle Logo
-Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

-
- - - - - -
 Go To Table Of Contents
-Contents
-
-

-++++ \ No newline at end of file diff --git a/src/main/jbake/content/title.adoc b/src/main/jbake/content/title.adoc deleted file mode 100644 index 0d3e6c4..0000000 --- a/src/main/jbake/content/title.adoc +++ /dev/null @@ -1,190 +0,0 @@ -type=page -status=published -title=Java EE Tutorial -~~~~~~ -++++ - - - - - -
Java Platform, Enterprise Edition The Java EE Tutorial
-Release 7 Java Platform, Enterprise Edition
-E39031-02
- - - - - -
 Go To Table Of Contents
-Contents
-
-
- - - - - - -
Previous
-Previous
 
Next
-Next
 
-++++ - - -[[java-platform-enterprise-edition]] -Java Platform, Enterprise Edition ---------------------------------- - -The Java EE Tutorial - -Release 7 - -E39031-02 - -September 2014 - -Beta Draft - -[[sthref1]] - -''''' - -Java Platform, Enterprise Edition The Java EE Tutorial, Release 7 - -E39031-02 - -Copyright © 2014, Oracle and/or its affiliates. All rights reserved. - -Primary Author:  Eric Jendrock, Ricardo Cervera-Navarro, Ian Evans, Kim -Haase, William Markito - -Contributing Author:   - -Contributor:   - -This software and related documentation are provided under a license -agreement containing restrictions on use and disclosure and are -protected by intellectual property laws. Except as expressly permitted -in your license agreement or allowed by law, you may not use, copy, -reproduce, translate, broadcast, modify, license, transmit, distribute, -exhibit, perform, publish, or display any part, in any form, or by any -means. Reverse engineering, disassembly, or decompilation of this -software, unless required by law for interoperability, is prohibited. - -The information contained herein is subject to change without notice and -is not warranted to be error-free. If you find any errors, please report -them to us in writing. - -If this is software or related documentation that is delivered to the -U.S. Government or anyone licensing it on behalf of the U.S. Government, -then the following notice is applicable: - -U.S. GOVERNMENT END USERS: Oracle programs, including any operating -system, integrated software, any programs installed on the hardware, -and/or documentation, delivered to U.S. Government end users are -"commercial computer software" pursuant to the applicable Federal -Acquisition Regulation and agency-specific supplemental regulations. As -such, use, duplication, disclosure, modification, and adaptation of the -programs, including any operating system, integrated software, any -programs installed on the hardware, and/or documentation, shall be -subject to license terms and license restrictions applicable to the -programs. No other rights are granted to the U.S. Government. - -This software or hardware is developed for general use in a variety of -information management applications. It is not developed or intended for -use in any inherently dangerous applications, including applications -that may create a risk of personal injury. If you use this software or -hardware in dangerous applications, then you shall be responsible to -take all appropriate fail-safe, backup, redundancy, and other measures -to ensure its safe use. Oracle Corporation and its affiliates disclaim -any liability for any damages caused by use of this software or hardware -in dangerous applications. - -Oracle and Java are registered trademarks of Oracle and/or its -affiliates. Other names may be trademarks of their respective owners. - -Intel and Intel Xeon are trademarks or registered trademarks of Intel -Corporation. All SPARC trademarks are used under license and are -trademarks or registered trademarks of SPARC International, Inc. AMD, -Opteron, the AMD logo, and the AMD Opteron logo are trademarks or -registered trademarks of Advanced Micro Devices. UNIX is a registered -trademark of The Open Group. - -This software or hardware and documentation may provide access to or -information about content, products, and services from third parties. -Oracle Corporation and its affiliates are not responsible for and -expressly disclaim all warranties of any kind with respect to -third-party content, products, and services unless otherwise set forth -in an applicable agreement between you and Oracle. Oracle Corporation -and its affiliates will not be responsible for any loss, costs, or -damages incurred due to your access to or use of third-party content, -products, or services, except as set forth in an applicable agreement -between you and Oracle. - -This documentation is in preproduction status and is intended for -demonstration and preliminary use only. It may not be specific to the -hardware on which you are using the software. Oracle Corporation and its -affiliates are not responsible for and expressly disclaim all warranties -of any kind with respect to this documentation and will not be -responsible for any loss, costs, or damages incurred due to the use of -this documentation. - -The information contained in this document is for informational sharing -purposes only and should be considered in your capacity as a customer -advisory board member or pursuant to your beta trial agreement only. It -is not a commitment to deliver any material, code, or functionality, and -should not be relied upon in making purchasing decisions. The -development, release, and timing of any features or functionality -described in this document remains at the sole discretion of Oracle. - -This document in any form, software or printed matter, contains -proprietary information that is the exclusive property of Oracle. Your -access to and use of this confidential material is subject to the terms -and conditions of your Oracle Master Agreement, Oracle License and -Services Agreement, Oracle PartnerNetwork Agreement, Oracle distribution -agreement, or other license agreement which has been executed by you and -Oracle and with which you agree to comply. This document and information -contained herein may not be disclosed, copied, reproduced, or -distributed to anyone outside Oracle without prior written consent of -Oracle. This document is not part of your license agreement nor can it -be incorporated into any contractual agreement with Oracle or its -subsidiaries or affiliates. - -++++ -
- ---- - - - - -
- ---- - - - - -
 Previous
-Previous
 
Next
-Next
-
Oracle Logo
-Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

-
- - - - - -
 Go To Table Of Contents
-Contents
-
-

-++++ \ No newline at end of file diff --git a/src/main/jbake/content/toc.adoc b/src/main/jbake/content/toc.adoc deleted file mode 100644 index ab1a62b..0000000 --- a/src/main/jbake/content/toc.adoc +++ /dev/null @@ -1,2844 +0,0 @@ -type=page -status=published -title=Table Of Content -~~~~~~ -++++ - - - - - -
Java Platform, Enterprise Edition The Java EE Tutorial
-Release 7 Java Platform, Enterprise Edition
-E39031-02
- - - - - -
 Go To Table Of Contents
-Contents
-
-
- - - - - -
Next
-Next
 
-++++ - -[[contents]] -Contents --------- - - -[[title-and-copyright-information]] -link:title.adoc[Title and Copyright Information] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -* link:title.adoc#java-platform-enterprise-edition[Java Platform, Enterprise Edition] - -[[preface]] -link:preface.adoc#GEXAF[Preface] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -* link:preface.adoc#CIACGIBD[Audience] -* link:preface.adoc#CIAHFICG[Documentation Accessibility] -* link:preface.adoc#BNAAC[Before You Read This Book] -* link:preface.adoc#GIPRL[Related Documentation] -* link:preface.adoc#GKVTF[Conventions] -* link:preface.adoc#GFIRK[Default Paths and File Names] - -[[part-i-introduction]] -link:partintro.adoc#GFIRP[Part I Introduction] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -[[overview]] -link:overview.adoc#BNAAW[1 Overview] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -* link:overview001.adoc#A1046550[1.1 Introduction to Java EE] -* link:overview002.adoc#GIQVH[1.2 Java EE 7 Platform Highlights] -* link:overview003.adoc#BNAAX[1.3 Java EE Application Model] -* link:overview004.adoc#BNAAY[1.4 Distributed Multitiered Applications] -** link:overview004.adoc#BNABA[1.4.1 Security] -** link:overview004.adoc#BNABB[1.4.2 Java EE Components] -** link:overview004.adoc#BNABC[1.4.3 Java EE Clients] -*** link:overview004.adoc#BNABD[1.4.3.1 Web Clients] -*** link:overview004.adoc#BNABF[1.4.3.2 Application Clients] -*** link:overview004.adoc#BNABE[1.4.3.3 Applets] -*** link:overview004.adoc#BNABG[1.4.3.4 The JavaBeans Component -Architecture] -*** link:overview004.adoc#BNABH[1.4.3.5 Java EE Server Communications] -** link:overview004.adoc#BNABJ[1.4.4 Web Components] -** link:overview004.adoc#BNABK[1.4.5 Business Components] -** link:overview004.adoc#BNABL[1.4.6 Enterprise Information System Tier] -* link:overview005.adoc#BNABO[1.5 Java EE Containers] -** link:overview005.adoc#BNABP[1.5.1 Container Services] -** link:overview005.adoc#BNABQ[1.5.2 Container Types] -* link:overview006.adoc#BNABS[1.6 Web Services Support] -** link:overview006.adoc#BNABT[1.6.1 XML] -** link:overview006.adoc#BNABU[1.6.2 SOAP Transport Protocol] -** link:overview006.adoc#BNABV[1.6.3 WSDL Standard Format] -* link:overview007.adoc#BNABX[1.7 Java EE Application Assembly and -Deployment] -* link:overview008.adoc#BNACJ[1.8 Java EE 7 APIs] -** link:overview008.adoc#BNACL[1.8.1 Enterprise JavaBeans Technology] -** link:overview008.adoc#BNACM[1.8.2 Java Servlet Technology] -** link:overview008.adoc#BNACP[1.8.3 JavaServer Faces Technology] -** link:overview008.adoc#BNACN[1.8.4 JavaServer Pages Technology] -** link:overview008.adoc#BNACO[1.8.5 JavaServer Pages Standard Tag -Library] -** link:overview008.adoc#BNADB[1.8.6 Java Persistence API] -** link:overview008.adoc#BNACR[1.8.7 Java Transaction API] -** link:overview008.adoc#GIRBT[1.8.8 Java API for RESTful Web Services] -** link:overview008.adoc#GJXSD[1.8.9 Managed Beans] -** link:overview008.adoc#GJXVO[1.8.10 Contexts and Dependency Injection -for Java EE] -** link:overview008.adoc#GJXVG[1.8.11 Dependency Injection for Java] -** link:overview008.adoc#GJXTY[1.8.12 Bean Validation] -** link:overview008.adoc#BNACQ[1.8.13 Java Message Service API] -** link:overview008.adoc#BNACZ[1.8.14 Java EE Connector Architecture] -** link:overview008.adoc#BNACS[1.8.15 JavaMail API] -** link:overview008.adoc#GIRBE[1.8.16 Java Authorization Contract for -Containers] -** link:overview008.adoc#GIRGP[1.8.17 Java Authentication Service -Provider Interface for Containers] -** link:overview008.adoc#CJAHDJBJ[1.8.18 Java API for WebSocket] -** link:overview008.adoc#CJAGIEEI[1.8.19 Java API for JSON Processing] -** link:overview008.adoc#CJAFGFCJ[1.8.20 Concurrency Utilities for Java -EE] -** link:overview008.adoc#CJAJHGIH[1.8.21 Batch Applications for the Java -Platform] -* link:overview009.adoc#GIRDR[1.9 Java EE 7 APIs in the Java Platform, -Standard Edition 7] -** link:overview009.adoc#BNADA[1.9.1 Java Database Connectivity API] -** link:overview009.adoc#BNADC[1.9.2 Java Naming and Directory Interface -API] -** link:overview009.adoc#BNACT[1.9.3 JavaBeans Activation Framework] -** link:overview009.adoc#BNACU[1.9.4 Java API for XML Processing] -** link:overview009.adoc#BNACW[1.9.5 Java Architecture for XML Binding] -** link:overview009.adoc#BNACV[1.9.6 Java API for XML Web Services] -** link:overview009.adoc#BNACX[1.9.7 SOAP with Attachments API for Java] -** link:overview009.adoc#BNADD[1.9.8 Java Authentication and -Authorization Service] -** link:overview009.adoc#sthref12[1.9.9 Common Annotations for the Java -Platform] -* link:overview010.adoc#BNADF[1.10 GlassFish Server Tools] - -[[using-the-tutorial-examples]] -link:usingexamples.adoc#GFIUD[2 Using the Tutorial Examples] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -* link:usingexamples001.adoc#GEXAJ[2.1 Required Software] -** link:usingexamples001.adoc#GEXAE[2.1.1 Java Platform, Standard -Edition] -** link:usingexamples001.adoc#GEXAB[2.1.2 Java EE 7 Software Development -Kit] -*** link:usingexamples001.adoc#GEXBC[2.1.2.1 SDK Installation Tips] -** link:usingexamples001.adoc#GEXBA[2.1.3 Java EE 7 Tutorial Component] -** link:usingexamples001.adoc#GEXAZ[2.1.4 NetBeans IDE] -*** link:usingexamples001.adoc#GJSEQ[2.1.4.1 To Install NetBeans IDE -without GlassFish Server] -*** link:usingexamples001.adoc#GIQZL[2.1.4.2 To Add GlassFish Server as a -Server Using NetBeans IDE] -** link:usingexamples001.adoc#GEXAA[2.1.5 Apache Maven] -* link:usingexamples002.adoc#BNADI[2.2 Starting and Stopping GlassFish -Server] -** link:usingexamples002.adoc#CHDCACDI[2.2.1 To Start GlassFish Server -Using NetBeans IDE] -** link:usingexamples002.adoc#sthref14[2.2.2 To Stop GlassFish Server -Using NetBeans IDE] -** link:usingexamples002.adoc#CHDBDDAF[2.2.3 To Start GlassFish Server -Using the Command Line] -** link:usingexamples002.adoc#sthref15[2.2.4 To Stop GlassFish Server -Using the Command Line] -* link:usingexamples003.adoc#BNADJ[2.3 Starting the Administration -Console] -** link:usingexamples003.adoc#GJKST[2.3.1 To Start the Administration -Console Using NetBeans IDE] -* link:usingexamples004.adoc#BNADK[2.4 Starting and Stopping the Java DB -Server] -** link:usingexamples004.adoc#GJSFS[2.4.1 To Start the Database Server -Using NetBeans IDE] -* link:usingexamples005.adoc#BNAAN[2.5 Building the Examples] -* link:usingexamples006.adoc#GEXAP[2.6 Tutorial Example Directory -Structure] -* link:usingexamples007.adoc#CIHBHEFF[2.7 Java EE 7 Maven Archetypes in -the Tutorial] -** link:usingexamples007.adoc#CHDJGCCA[2.7.1 Installing the Tutorial -Archetypes] -*** link:usingexamples007.adoc#sthref16[2.7.1.1 Installing the Tutorial -Archetypes Using NetBeans IDE] -*** link:usingexamples007.adoc#sthref17[2.7.1.2 Installing the Tutorial -Archetypes Using Maven] -* link:usingexamples008.adoc#GIQWR[2.8 Getting the Latest Updates to the -Tutorial] -** link:usingexamples008.adoc#GIQYK[2.8.1 To Update the Tutorial Using -NetBeans IDE] -** link:usingexamples008.adoc#sthref18[2.8.2 To Update the Tutorial Using -the Command Line] -* link:usingexamples009.adoc#BNADL[2.9 Debugging Java EE Applications] -** link:usingexamples009.adoc#BNADM[2.9.1 Using the Server Log] -*** link:usingexamples009.adoc#GJSGH[2.9.1.1 To Use the Administration -Console Log Viewer] -** link:usingexamples009.adoc#BNADN[2.9.2 Using a Debugger] -*** link:usingexamples009.adoc#GJQWL[2.9.2.1 To Debug an Application -Using a Debugger] - -[[part-ii-platform-basics]] -link:partplatform.adoc#GFIRP2[Part II Platform Basics] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -[[resource-creation]] -link:resource-creation.adoc#GKJIQ2[3 Resource Creation] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -* link:resource-creation001.adoc#BNCJI[3.1 Resources and JNDI Naming] -* link:resource-creation002.adoc#BNCJJ[3.2 DataSource Objects and -Connection Pools] -* link:resource-creation003.adoc#CACFBGBE[3.3 Creating Resources -Administratively] - -[[injection]] -link:injection.adoc#GKJIQ3[4 Injection] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -* link:injection001.adoc#BABHDCAI[4.1 Resource Injection] -* link:injection002.adoc#BABDJGIE[4.2 Dependency Injection] -* link:injection003.adoc#BABHFECJ[4.3 The Main Differences between -Resource Injection and Dependency Injection] - -[[packaging]] -link:packaging.adoc#GKJIQ4[5 Packaging] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -* link:packaging001.adoc#BCGDJDFB[5.1 Packaging Applications] -* link:packaging002.adoc#BCGECBIJ[5.2 Packaging Enterprise Beans] -** link:packaging002.adoc#CHDFCDBG[5.2.1 Packaging Enterprise Beans in -EJB JAR Modules] -** link:packaging002.adoc#CHDJABEJ[5.2.2 Packaging Enterprise Beans in -WAR Modules] -* link:packaging003.adoc#BCGHAHGD[5.3 Packaging Web Archives] -* link:packaging004.adoc#BCGDHBHJ[5.4 Packaging Resource Adapter -Archives] - -[[part-iii-the-web-tier]] -link:partwebtier.adoc#BNADP[Part III The Web Tier] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -[[getting-started-with-web-applications]] -link:webapp.adoc#BNADR[6 Getting Started with Web Applications] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -* link:webapp001.adoc#GEYSJ[6.1 Web Applications] -* link:webapp002.adoc#BNADU[6.2 Web Application Lifecycle] -* link:webapp003.adoc#BNADX[6.3 A Web Module That Uses JavaServer Faces -Technology: The hello1 Example] -** link:webapp003.adoc#GJWTV[6.3.1 To View the hello1 Web Module Using -NetBeans IDE] -*** link:webapp003.adoc#GLQLK[6.3.1.1 Introduction to Scopes] -** link:webapp003.adoc#BNADZ[6.3.2 Packaging and Deploying the hello1 Web -Module] -*** link:webapp003.adoc#GJRGN[6.3.2.1 To Build and Package the hello1 Web -Module Using NetBeans IDE] -*** link:webapp003.adoc#GJRKN[6.3.2.2 To Build and Package the hello1 Web -Module Using Maven] -** link:webapp003.adoc#BNAEI[6.3.3 Viewing Deployed Web Modules] -*** link:webapp003.adoc#GJSGR[6.3.3.1 To View Deployed Web Modules Using -the Administration Console] -*** link:webapp003.adoc#GJSEW[6.3.3.2 To View Deployed Web Modules Using -the asadmin Command] -*** link:webapp003.adoc#sthref24[6.3.3.3 To View Deployed Web Modules -Using NetBeans IDE] -** link:webapp003.adoc#BCEBEGED[6.3.4 Running the Deployed hello1 Web -Module] -*** link:webapp003.adoc#BNAEM[6.3.4.1 Dynamic Reloading of Deployed -Modules] -** link:webapp003.adoc#BNAEN[6.3.5 Undeploying the hello1 Web Module] -*** link:webapp003.adoc#GJSEJ[6.3.5.1 To Undeploy the hello1 Web Module -Using NetBeans IDE] -*** link:webapp003.adoc#GJSHH[6.3.5.2 To Undeploy the hello1 Web Module -Using Maven] -* link:webapp004.adoc#BNAEO[6.4 A Web Module That Uses Java Servlet -Technology: The hello2 Example] -** link:webapp004.adoc#BNAEP[6.4.1 Mapping URLs to Web Components] -** link:webapp004.adoc#GJWWG[6.4.2 Examining the hello2 Web Module] -*** link:webapp004.adoc#GJWWA[6.4.2.1 To View the hello2 Web Module Using -NetBeans IDE] -** link:webapp004.adoc#GKBLH[6.4.3 Running the hello2 Example] -*** link:webapp004.adoc#GJSED[6.4.3.1 To Run the hello2 Example Using -NetBeans IDE] -*** link:webapp004.adoc#GJSHX[6.4.3.2 To Run the hello2 Example Using -Maven] -* link:webapp005.adoc#CHDHGJIA[6.5 Configuring Web Applications] -** link:webapp005.adoc#BNAES[6.5.1 Setting Context Parameters] -*** link:webapp005.adoc#GJSFJ[6.5.1.1 To Add a Context Parameter Using -NetBeans IDE] -*** link:webapp005.adoc#GKIHH[6.5.1.2 To Create a web.xml File Using -NetBeans IDE] -** link:webapp005.adoc#BNAER[6.5.2 Declaring Welcome Files] -** link:webapp005.adoc#GKBKW[6.5.3 Mapping Errors to Error Screens] -*** link:webapp005.adoc#BNAET[6.5.3.1 To Set Up Error Mapping Using -NetBeans IDE] -** link:webapp005.adoc#BNAEU[6.5.4 Declaring Resource References] -*** link:webapp005.adoc#BNAEW[6.5.4.1 Declaring a Reference to a -Resource] -*** link:webapp005.adoc#BNAEX[6.5.4.2 Declaring a Reference to a Web -Service] -* link:webapp006.adoc#BNAFC[6.6 Further Information about Web -Applications] - -[[javaserver-faces-technology]] -link:jsf-intro.adoc#BNAPH[7 JavaServer Faces Technology] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -* link:jsf-intro001.adoc#A1073698[7.1 Introduction to JavaServer Faces -Technology] -* link:jsf-intro002.adoc#BNAPK[7.2 What Is a JavaServer Faces -Application?] -* link:jsf-intro003.adoc#BNAPJ[7.3 JavaServer Faces Technology Benefits] -* link:jsf-intro004.adoc#GJAAM[7.4 A Simple JavaServer Faces Application] -* link:jsf-intro005.adoc#BNAQD[7.5 User Interface Component Model] -** link:jsf-intro005.adoc#BNAQE[7.5.1 User Interface Component Classes] -** link:jsf-intro005.adoc#BNAQF[7.5.2 Component Rendering Model] -** link:jsf-intro005.adoc#BNAQI[7.5.3 Conversion Model] -** link:jsf-intro005.adoc#GIREH[7.5.4 Event and Listener Model] -** link:jsf-intro005.adoc#BNAQK[7.5.5 Validation Model] -* link:jsf-intro006.adoc#BNAQL[7.6 Navigation Model] -* link:jsf-intro007.adoc#BNAQQ[7.7 The Lifecycle of a JavaServer Faces -Application] -** link:jsf-intro007.adoc#GLPRC[7.7.1 Overview of the JavaServer Faces -Lifecycle] -** link:jsf-intro007.adoc#BNAQS[7.7.2 Restore View Phase] -** link:jsf-intro007.adoc#BNAQT[7.7.3 Apply Request Values Phase] -** link:jsf-intro007.adoc#GJSBP[7.7.4 Process Validations Phase] -** link:jsf-intro007.adoc#BNAQV[7.7.5 Update Model Values Phase] -** link:jsf-intro007.adoc#BNAQW[7.7.6 Invoke Application Phase] -** link:jsf-intro007.adoc#BNAQX[7.7.7 Render Response Phase] -* link:jsf-intro008.adoc#GKNOJ[7.8 Partial Processing and Partial -Rendering] -* link:jsf-intro009.adoc#BNAQY[7.9 Further Information about JavaServer -Faces Technology] - -[[introduction-to-facelets]] -link:jsf-facelets.adoc#GIEPX[8 Introduction to Facelets] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -* link:jsf-facelets001.adoc#GIJTU[8.1 What Is Facelets?] -* link:jsf-facelets002.adoc#GIPRR[8.2 The Lifecycle of a Facelets -Application] -* link:jsf-facelets003.adoc#GIPOB[8.3 Developing a Simple Facelets -Application: The guessnumber-jsf Example Application] -** link:jsf-facelets003.adoc#GIQTE[8.3.1 Creating a Facelets Application] -*** link:jsf-facelets003.adoc#GIQQZ[8.3.1.1 Developing a Managed Bean] -*** link:jsf-facelets003.adoc#GJZPV[8.3.1.2 Creating Facelets Views] -** link:jsf-facelets003.adoc#GJJKC[8.3.2 Configuring the Application] -** link:jsf-facelets003.adoc#GIRGF[8.3.3 Running the guessnumber-jsf -Facelets Example] -*** link:jsf-facelets003.adoc#GJQZL[8.3.3.1 To Build, Package, and Deploy -the guessnumber-jsf Example Using NetBeans IDE] -*** link:jsf-facelets003.adoc#GJQYU[8.3.3.2 To Build, Package, and Deploy -the guessnumber-jsf Example Using Maven] -*** link:jsf-facelets003.adoc#GJQYX[8.3.3.3 To Run the guessnumber-jsf -Example] -* link:jsf-facelets004.adoc#GIQXP[8.4 Using Facelets Templates] -* link:jsf-facelets005.adoc#GIQZR[8.5 Composite Components] -* link:jsf-facelets006.adoc#GIRGM[8.6 Web Resources] -* link:jsf-facelets007.adoc#BABHGBJI[8.7 Relocatable Resources] -* link:jsf-facelets008.adoc#BABHAHDF[8.8 Resource Library Contracts] -** link:jsf-facelets008.adoc#sthref32[8.8.1 The hello1-rlc Example -Application] -*** link:jsf-facelets008.adoc#BABGEDEB[8.8.1.1 Configuring the hello1-rlc -Example] -*** link:jsf-facelets008.adoc#BABDHCFG[8.8.1.2 The Facelets Pages for the -hello1-rlc Example] -*** link:jsf-facelets008.adoc#BABBGFFF[8.8.1.3 To Build, Package, and -Deploy the hello1-rlc Example Using NetBeans IDE] -*** link:jsf-facelets008.adoc#BABJAGFB[8.8.1.4 To Build, Package, and -Deploy the hello1-rlc Example Using Maven] -*** link:jsf-facelets008.adoc#BABFCHEB[8.8.1.5 To Run the hello1-rlc -Example] -* link:jsf-facelets009.adoc#BABGECCJ[8.9 HTML5-Friendly Markup] -** link:jsf-facelets009.adoc#sthref33[8.9.1 Using Pass-Through Elements] -** link:jsf-facelets009.adoc#sthref35[8.9.2 Using Pass-Through -Attributes] -** link:jsf-facelets009.adoc#BABGGIAA[8.9.3 The reservation Example -Application] -*** link:jsf-facelets009.adoc#BABGCAHH[8.9.3.1 The Facelets Pages for the -reservation Application] -*** link:jsf-facelets009.adoc#BABHFCCG[8.9.3.2 The Managed Bean for the -reservation Application] -*** link:jsf-facelets009.adoc#BABIHHGC[8.9.3.3 To Build, Package, and -Deploy the reservation Example Using NetBeans IDE] -*** link:jsf-facelets009.adoc#sthref36[8.9.3.4 To Build, Package, and -Deploy the reservation Example Using Maven] -*** link:jsf-facelets009.adoc#sthref37[8.9.3.5 To Run the reservation -Example] - -[[expression-language]] -link:jsf-el.adoc#GJDDD[9 Expression Language] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -* link:jsf-el001.adoc#BNAHQ[9.1 Overview of the EL] -* link:jsf-el002.adoc#BNAHR[9.2 Immediate and Deferred Evaluation Syntax] -** link:jsf-el002.adoc#BNAHS[9.2.1 Immediate Evaluation] -** link:jsf-el002.adoc#BNAHT[9.2.2 Deferred Evaluation] -* link:jsf-el003.adoc#BNAHU[9.3 Value and Method Expressions] -** link:jsf-el003.adoc#BNAHV[9.3.1 Value Expressions] -*** link:jsf-el003.adoc#BNAHW[9.3.1.1 Referencing Objects] -*** link:jsf-el003.adoc#BNAHX[9.3.1.2 Referencing Object Properties or -Collection Elements] -*** link:jsf-el003.adoc#sthref38[9.3.1.3 Referencing Literals] -*** link:jsf-el003.adoc#GJHBZ[9.3.1.4 Parameterized Method Calls] -*** link:jsf-el003.adoc#BNAHY[9.3.1.5 Where Value Expressions Can Be -Used] -** link:jsf-el003.adoc#BNAHZ[9.3.2 Method Expressions] -** link:jsf-el003.adoc#BEIHCBAH[9.3.3 Lambda Expressions] -* link:jsf-el004.adoc#CIHGABHD[9.4 Operations on Collection Objects] -* link:jsf-el005.adoc#BNAIK[9.5 Operators] -* link:jsf-el006.adoc#BNAIL[9.6 Reserved Words] -* link:jsf-el007.adoc#BNAIM[9.7 Examples of EL Expressions] -* link:jsf-el008.adoc#CIHGBBHA[9.8 Further Information about the -Expression Language] - -[[using-javaserver-faces-technology-in-web-pages]] -link:jsf-page.adoc#BNAQZ[10 Using JavaServer Faces Technology in Web Pages] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -* link:jsf-page001.adoc#BNARB[10.1 Setting Up a Page] -* link:jsf-page002.adoc#BNARF[10.2 Adding Components to a Page Using HTML -Tag Library Tags] -** link:jsf-page002.adoc#BNARG[10.2.1 Common Component Tag Attributes] -*** link:jsf-page002.adoc#BNARH[10.2.1.1 The id Attribute] -*** link:jsf-page002.adoc#BNARI[10.2.1.2 The immediate Attribute] -*** link:jsf-page002.adoc#BNARJ[10.2.1.3 The rendered Attribute] -*** link:jsf-page002.adoc#BNARK[10.2.1.4 The style and styleClass -Attributes] -*** link:jsf-page002.adoc#BNARL[10.2.1.5 The value and binding -Attributes] -** link:jsf-page002.adoc#GJDGQ[10.2.2 Adding HTML Head and Body Tags] -** link:jsf-page002.adoc#BNARM[10.2.3 Adding a Form Component] -** link:jsf-page002.adoc#BNARO[10.2.4 Using Text Components] -*** link:jsf-page002.adoc#BNARR[10.2.4.1 Rendering a Field with the -h:inputText Tag] -*** link:jsf-page002.adoc#BNARV[10.2.4.2 Rendering a Password Field with -the h:inputSecret Tag] -*** link:jsf-page002.adoc#BNARS[10.2.4.3 Rendering a Label with the -h:outputLabel Tag] -*** link:jsf-page002.adoc#BNART[10.2.4.4 Rendering a Link with the -h:outputLink Tag] -*** link:jsf-page002.adoc#BNARU[10.2.4.5 Displaying a Formatted Message -with the h:outputFormat Tag] -** link:jsf-page002.adoc#BNARW[10.2.5 Using Command Component Tags for -Performing Actions and Navigation] -*** link:jsf-page002.adoc#BNARX[10.2.5.1 Rendering a Button with the -h:commandButton Tag] -*** link:jsf-page002.adoc#GKBUJ[10.2.5.2 Rendering a Link with the -h:commandLink Tag] -** link:jsf-page002.adoc#BNASB[10.2.6 Adding Graphics and Images with the -h:graphicImage Tag] -** link:jsf-page002.adoc#BNASC[10.2.7 Laying Out Components with the -h:panelGrid and h:panelGroup Tags] -** link:jsf-page002.adoc#BNASE[10.2.8 Displaying Components for Selecting -One Value] -*** link:jsf-page002.adoc#BNASG[10.2.8.1 Displaying a Check Box Using the -h:selectBooleanCheckbox Tag] -*** link:jsf-page002.adoc#BNASH[10.2.8.2 Displaying a Menu Using the -h:selectOneMenu Tag] -** link:jsf-page002.adoc#BNASI[10.2.9 Displaying Components for Selecting -Multiple Values] -** link:jsf-page002.adoc#BNASK[10.2.10 Using the f:selectItem and -f:selectItems Tags] -*** link:jsf-page002.adoc#BNASM[10.2.10.1 Using the f:selectItems Tag] -*** link:jsf-page002.adoc#BNASN[10.2.10.2 Using the f:selectItem Tag] -** link:jsf-page002.adoc#sthref50[10.2.11 Displaying the Results from -Selection Components] -** link:jsf-page002.adoc#BNARZ[10.2.12 Using Data-Bound Table Components] -** link:jsf-page002.adoc#BNASO[10.2.13 Displaying Error Messages with the -h:message and h:messages Tags] -** link:jsf-page002.adoc#GIQZD[10.2.14 Creating Bookmarkable URLs with -the h:button and h:link Tags] -** link:jsf-page002.adoc#GIQWQ[10.2.15 Using View Parameters to Configure -Bookmarkable URLs] -** link:jsf-page002.adoc#sthref52[10.2.16 The bookmarks Example -Application] -*** link:jsf-page002.adoc#CHDIEHEB[10.2.16.1 To Build, Package, and -Deploy the bookmarks Example Using NetBeans IDE] -*** link:jsf-page002.adoc#CHDEFJEF[10.2.16.2 To Build, Package, and -Deploy the bookmarks Example Using Maven] -*** link:jsf-page002.adoc#CHDGEBCB[10.2.16.3 To Run the bookmarks -Example] -** link:jsf-page002.adoc#GJGEP[10.2.17 Resource Relocation Using -h:outputScript and h:outputStylesheet Tags] -* link:jsf-page003.adoc#BNARC[10.3 Using Core Tags] - -[[using-converters-listeners-and-validators]] -link:jsf-page-core.adoc#GJCUT[11 Using Converters, Listeners, and Validators] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -* link:jsf-page-core001.adoc#BNAST[11.1 Using the Standard Converters] -** link:jsf-page-core001.adoc#BNASU[11.1.1 Converting a Component's -Value] -** link:jsf-page-core001.adoc#BNASV[11.1.2 Using DateTimeConverter] -** link:jsf-page-core001.adoc#BNASX[11.1.3 Using NumberConverter] -* link:jsf-page-core002.adoc#BNASZ[11.2 Registering Listeners on -Components] -** link:jsf-page-core002.adoc#BNATA[11.2.1 Registering a Value-Change -Listener on a Component] -** link:jsf-page-core002.adoc#BNATB[11.2.2 Registering an Action Listener -on a Component] -* link:jsf-page-core003.adoc#BNATC[11.3 Using the Standard Validators] -** link:jsf-page-core003.adoc#BNATE[11.3.1 Validating a Component's -Value] -** link:jsf-page-core003.adoc#BNATF[11.3.2 Using Validator Tags] -* link:jsf-page-core004.adoc#BNATN[11.4 Referencing a Managed Bean -Method] -** link:jsf-page-core004.adoc#BNATP[11.4.1 Referencing a Method That -Performs Navigation] -** link:jsf-page-core004.adoc#BNATQ[11.4.2 Referencing a Method That -Handles an Action Event] -** link:jsf-page-core004.adoc#BNATR[11.4.3 Referencing a Method That -Performs Validation] -** link:jsf-page-core004.adoc#BNATS[11.4.4 Referencing a Method That -Handles a Value-Change Event] - -[[developing-with-javaserver-faces-technology]] -link:jsf-develop.adoc#BNATX[12 Developing with JavaServer Faces Technology] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -* link:jsf-develop001.adoc#BNAQM[12.1 Managed Beans in JavaServer Faces -Technology] -** link:jsf-develop001.adoc#BNAQN[12.1.1 Creating a Managed Bean] -** link:jsf-develop001.adoc#BNAQP[12.1.2 Using the EL to Reference -Managed Beans] -* link:jsf-develop002.adoc#BNATY[12.2 Writing Bean Properties] -** link:jsf-develop002.adoc#BNATZ[12.2.1 Writing Properties Bound to -Component Values] -*** link:jsf-develop002.adoc#BNAUB[12.2.1.1 UIInput and UIOutput -Properties] -*** link:jsf-develop002.adoc#BNAUC[12.2.1.2 UIData Properties] -*** link:jsf-develop002.adoc#BNAUD[12.2.1.3 UISelectBoolean Properties] -*** link:jsf-develop002.adoc#BNAUE[12.2.1.4 UISelectMany Properties] -*** link:jsf-develop002.adoc#BNAUF[12.2.1.5 UISelectOne Properties] -*** link:jsf-develop002.adoc#BNAUG[12.2.1.6 UISelectItem Properties] -*** link:jsf-develop002.adoc#BNAUH[12.2.1.7 UISelectItems Properties] -** link:jsf-develop002.adoc#BNAUK[12.2.2 Writing Properties Bound to -Component Instances] -** link:jsf-develop002.adoc#BNAUL[12.2.3 Writing Properties Bound to -Converters, Listeners, or Validators] -* link:jsf-develop003.adoc#BNAVB[12.3 Writing Managed Bean Methods] -** link:jsf-develop003.adoc#sthref67[12.3.1 Why Use Managed Beans] -** link:jsf-develop003.adoc#BNAVC[12.3.2 Writing a Method to Handle -Navigation] -** link:jsf-develop003.adoc#BNAVD[12.3.3 Writing a Method to Handle an -Action Event] -** link:jsf-develop003.adoc#BNAVE[12.3.4 Writing a Method to Perform -Validation] -** link:jsf-develop003.adoc#BNAVF[12.3.5 Writing a Method to Handle a -Value-Change Event] - -[[using-ajax-with-javaserver-faces-technology]] -link:jsf-ajax.adoc#GKIOW[13 Using Ajax with JavaServer Faces Technology] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -* link:jsf-ajax001.adoc#GKIGR[13.1 Overview of Ajax] -* link:jsf-ajax002.adoc#GKINL[13.2 Using Ajax Functionality with -JavaServer Faces Technology] -* link:jsf-ajax003.adoc#GKABR[13.3 Using Ajax with Facelets] -** link:jsf-ajax003.adoc#GKAFN[13.3.1 Using the f:ajax Tag] -* link:jsf-ajax004.adoc#GKACE[13.4 Sending an Ajax Request] -** link:jsf-ajax004.adoc#GKHVT[13.4.1 Using the event Attribute] -** link:jsf-ajax004.adoc#GKHUZ[13.4.2 Using the execute Attribute] -** link:jsf-ajax004.adoc#GKHWM[13.4.3 Using the immediate Attribute] -** link:jsf-ajax004.adoc#GKHZS[13.4.4 Using the listener Attribute] -* link:jsf-ajax005.adoc#GKDDF[13.5 Monitoring Events on the Client] -* link:jsf-ajax006.adoc#GKDCB[13.6 Handling Errors] -* link:jsf-ajax007.adoc#GKDBR[13.7 Receiving an Ajax Response] -* link:jsf-ajax008.adoc#GKUAR[13.8 Ajax Request Lifecycle] -* link:jsf-ajax009.adoc#GKHYH[13.9 Grouping of Components] -* link:jsf-ajax010.adoc#GKAAM[13.10 Loading JavaScript as a Resource] -** link:jsf-ajax010.adoc#GKAFI[13.10.1 Using JavaScript API in a Facelets -Application] -** link:jsf-ajax010.adoc#GKIPX[13.10.2 Using the @ResourceDependency -Annotation in a Bean Class] -* link:jsf-ajax011.adoc#GKOKB[13.11 The ajaxguessnumber Example -Application] -** link:jsf-ajax011.adoc#GKOIJ[13.11.1 The ajaxguessnumber Source Files] -*** link:jsf-ajax011.adoc#GKOFW[13.11.1.1 The ajaxgreeting.xhtml Facelets -Page] -*** link:jsf-ajax011.adoc#GKOHN[13.11.1.2 The UserNumberBean Backing -Bean] -*** link:jsf-ajax011.adoc#CHDGAIGJ[13.11.1.3 The DukesNumberBean CDI -Managed Bean] -** link:jsf-ajax011.adoc#GKOKE[13.11.2 Running the ajaxguessnumber -Example] -*** link:jsf-ajax011.adoc#GLHVU[13.11.2.1 To Build, Package, and Deploy -the ajaxguessnumber Example Using NetBeans IDE] -*** link:jsf-ajax011.adoc#GLHVQ[13.11.2.2 To Build, Package, and Deploy -the ajaxguessnumber Example Using Maven] -*** link:jsf-ajax011.adoc#GLHWE[13.11.2.3 To Run the ajaxguessnumber -Example] -* link:jsf-ajax012.adoc#GKSDK[13.12 Further Information about Ajax in -JavaServer Faces Technology] - -[[composite-components-advanced-topics-and-an-example]] -link:jsf-advanced-cc.adoc#GKHXA[14 Composite Components: Advanced Topics and an Example] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -* link:jsf-advanced-cc001.adoc#GKHWV[14.1 Attributes of a Composite -Component] -* link:jsf-advanced-cc002.adoc#GKHUO[14.2 Invoking a Managed Bean] -* link:jsf-advanced-cc003.adoc#GKHWO[14.3 Validating Composite Component -Values] -* link:jsf-advanced-cc004.adoc#GKHVN[14.4 The compositecomponentexample -Example Application] -** link:jsf-advanced-cc004.adoc#GKHUU[14.4.1 The Composite Component -File] -** link:jsf-advanced-cc004.adoc#GKHVX[14.4.2 The Using Page] -** link:jsf-advanced-cc004.adoc#GKHVQ[14.4.3 The Managed Bean] -** link:jsf-advanced-cc004.adoc#GLECV[14.4.4 Running the -compositecomponentexample Example] -*** link:jsf-advanced-cc004.adoc#GKHVC[14.4.4.1 To Build, Package, and -Deploy the compositecomponentexample Example Using NetBeans IDE] -*** link:jsf-advanced-cc004.adoc#GLEAE[14.4.4.2 To Build, Package, and -Deploy the compositecomponentexample Example Using Maven] -*** link:jsf-advanced-cc004.adoc#GLEEU[14.4.4.3 To Run the -compositecomponentexample Example] - -[[creating-custom-ui-components-and-other-custom-objects]] -link:jsf-custom.adoc#BNAVG[15 Creating Custom UI Components and Other Custom Objects] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -* link:jsf-custom001.adoc#A1350198[15.1 Introduction to Creating Custom -Components] -* link:jsf-custom002.adoc#BNAVH[15.2 Determining Whether You Need a -Custom Component or Renderer] -** link:jsf-custom002.adoc#BNAVI[15.2.1 When to Use a Custom Component] -** link:jsf-custom002.adoc#BNAVJ[15.2.2 When to Use a Custom Renderer] -** link:jsf-custom002.adoc#BNAVK[15.2.3 Component, Renderer, and Tag -Combinations] -* link:jsf-custom003.adoc#GLPCB[15.3 Understanding the Image Map Example] -** link:jsf-custom003.adoc#GLPBD[15.3.1 Why Use JavaServer Faces -Technology to Implement an Image Map?] -** link:jsf-custom003.adoc#GLPEM[15.3.2 Understanding the Rendered HTML] -** link:jsf-custom003.adoc#GLPCD[15.3.3 Understanding the Facelets Page] -** link:jsf-custom003.adoc#GLPBO[15.3.4 Configuring Model Data] -** link:jsf-custom003.adoc#GLPEL[15.3.5 Summary of the Image Map -Application Classes] -* link:jsf-custom004.adoc#BNAVT[15.4 Steps for Creating a Custom -Component] -* link:jsf-custom005.adoc#BNAVU[15.5 Creating Custom Component Classes] -** link:jsf-custom005.adoc#BNAVV[15.5.1 Specifying the Component Family] -** link:jsf-custom005.adoc#BNAVW[15.5.2 Performing Encoding] -** link:jsf-custom005.adoc#BNAVX[15.5.3 Performing Decoding] -** link:jsf-custom005.adoc#BNAVY[15.5.4 Enabling Component Properties to -Accept Expressions] -** link:jsf-custom005.adoc#BNAVZ[15.5.5 Saving and Restoring State] -* link:jsf-custom006.adoc#BNAWA[15.6 Delegating Rendering to a Renderer] -** link:jsf-custom006.adoc#BNAWB[15.6.1 Creating the Renderer Class] -** link:jsf-custom006.adoc#BNAWC[15.6.2 Identifying the Renderer Type] -* link:jsf-custom007.adoc#BNAUT[15.7 Implementing an Event Listener] -** link:jsf-custom007.adoc#BNAUU[15.7.1 Implementing Value-Change -Listeners] -** link:jsf-custom007.adoc#BNAUV[15.7.2 Implementing Action Listeners] -* link:jsf-custom008.adoc#BNAWD[15.8 Handling Events for Custom -Components] -* link:jsf-custom009.adoc#BNAWN[15.9 Defining the Custom Component Tag in -a Tag Library Descriptor] -* link:jsf-custom010.adoc#BNATT[15.10 Using a Custom Component] -* link:jsf-custom011.adoc#BNAUS[15.11 Creating and Using a Custom -Converter] -** link:jsf-custom011.adoc#GLPHB[15.11.1 Creating a Custom Converter] -** link:jsf-custom011.adoc#BNATU[15.11.2 Using a Custom Converter] -* link:jsf-custom012.adoc#BNAUW[15.12 Creating and Using a Custom -Validator] -** link:jsf-custom012.adoc#BNAUX[15.12.1 Implementing the Validator -Interface] -** link:jsf-custom012.adoc#BNAUY[15.12.2 Specifying a Custom Tag] -** link:jsf-custom012.adoc#BNATV[15.12.3 Using a Custom Validator] -* link:jsf-custom013.adoc#BNATG[15.13 Binding Component Values and -Instances to Managed Bean Properties] -** link:jsf-custom013.adoc#BNATI[15.13.1 Binding a Component Value to a -Property] -** link:jsf-custom013.adoc#BNATJ[15.13.2 Binding a Component Value to an -Implicit Object] -** link:jsf-custom013.adoc#BNATL[15.13.3 Binding a Component Instance to -a Bean Property] -* link:jsf-custom014.adoc#BNATM[15.14 Binding Converters, Listeners, and -Validators to Managed Bean Properties] - -[[configuring-javaserver-faces-applications]] -link:jsf-configure.adoc#BNAWO[16 Configuring JavaServer Faces Applications] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -* link:jsf-configure001.adoc#A1352824[16.1 Introduction to Configuring -JavaServer Faces Applications] -* link:jsf-configure002.adoc#GIRCH[16.2 Using Annotations to Configure -Managed Beans] -** link:jsf-configure002.adoc#GIRCR[16.2.1 Using Managed Bean Scopes] -* link:jsf-configure003.adoc#BNAWP[16.3 Application Configuration -Resource File] -** link:jsf-configure003.adoc#GIREP[16.3.1 Configuring Eager -Application-Scoped Managed Beans] -** link:jsf-configure003.adoc#GIQCK[16.3.2 Ordering of Application -Configuration Resource Files] -* link:jsf-configure004.adoc#CHDGFCJF[16.4 Using Faces Flows] -** link:jsf-configure004.adoc#sthref80[16.4.1 Packaging Flows in an -Application] -** link:jsf-configure004.adoc#sthref81[16.4.2 The Simplest Possible Flow: -The simple-flow Example Application] -*** link:jsf-configure004.adoc#sthref82[16.4.2.1 To Build, Package, and -Deploy the simple-flow Example Using NetBeans IDE] -*** link:jsf-configure004.adoc#sthref83[16.4.2.2 To Build, Package, and -Deploy the simple-flow Example Using Maven] -*** link:jsf-configure004.adoc#sthref84[16.4.2.3 To Run the simple-flow -Example] -** link:jsf-configure004.adoc#sthref85[16.4.3 The checkout-module Example -Application] -*** link:jsf-configure004.adoc#sthref86[16.4.3.1 The Facelets Pages for -the checkout-module Example] -*** link:jsf-configure004.adoc#sthref87[16.4.3.2 Using a Configuration -File to Configure a Flow] -*** link:jsf-configure004.adoc#sthref88[16.4.3.3 Using a Java Class to -Configure a Flow] -*** link:jsf-configure004.adoc#sthref89[16.4.3.4 The Flow-Scoped Managed -Beans] -*** link:jsf-configure004.adoc#sthref90[16.4.3.5 To Build, Package, and -Deploy the checkout-module Example Using NetBeans IDE] -*** link:jsf-configure004.adoc#sthref91[16.4.3.6 To Build, Package, and -Deploy the checkout-module Example Using Maven] -*** link:jsf-configure004.adoc#sthref92[16.4.3.7 To Run the -checkout-module Example] -* link:jsf-configure005.adoc#BNAWQ[16.5 Configuring Managed Beans] -** link:jsf-configure005.adoc#BNAWR[16.5.1 Using the managed-bean -Element] -** link:jsf-configure005.adoc#BNAWS[16.5.2 Initializing Properties Using -the managed-property Element] -*** link:jsf-configure005.adoc#BNAWU[16.5.2.1 Referencing a Java Enum -Type] -*** link:jsf-configure005.adoc#BNAWV[16.5.2.2 Referencing a Context -Initialization Parameter] -*** link:jsf-configure005.adoc#BNAWW[16.5.2.3 Initializing Map -Properties] -*** link:jsf-configure005.adoc#BNAWX[16.5.2.4 Initializing Array and List -Properties] -*** link:jsf-configure005.adoc#BNAWY[16.5.2.5 Initializing Managed Bean -Properties] -** link:jsf-configure005.adoc#BNAXA[16.5.3 Initializing Maps and Lists] -* link:jsf-configure006.adoc#BNAXB[16.6 Registering Application Messages] -** link:jsf-configure006.adoc#GKUHG[16.6.1 Using FacesMessage to Create a -Message] -** link:jsf-configure006.adoc#BNASS[16.6.2 Referencing Error Messages] -* link:jsf-configure007.adoc#GIREB[16.7 Using Default Validators] -* link:jsf-configure008.adoc#BNAXD[16.8 Registering a Custom Validator] -* link:jsf-configure009.adoc#BNAXE[16.9 Registering a Custom Converter] -* link:jsf-configure010.adoc#BNAXF[16.10 Configuring Navigation Rules] -* link:jsf-configure011.adoc#BNAXH[16.11 Registering a Custom Renderer -with a Render Kit] -* link:jsf-configure012.adoc#BNAXI[16.12 Registering a Custom Component] -* link:jsf-configure013.adoc#BNAXJ[16.13 Basic Requirements of a -JavaServer Faces Application] -** link:jsf-configure013.adoc#BNAXK[16.13.1 Configuring an Application -with a Web Deployment Descriptor] -*** link:jsf-configure013.adoc#GLPOO[16.13.1.1 Identifying the Servlet -for Lifecycle Processing] -*** link:jsf-configure013.adoc#BNAXM[16.13.1.2 To Specify a Path to an -Application Configuration Resource File] -*** link:jsf-configure013.adoc#BNAXN[16.13.1.3 To Specify Where State Is -Saved] -** link:jsf-configure013.adoc#GIQXL[16.13.2 Configuring Project Stage] -** link:jsf-configure013.adoc#BNAXT[16.13.3 Including the Classes, Pages, -and Other Resources] - -[[java-servlet-technology]] -link:servlets.adoc#BNAFD[17 Java Servlet Technology] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -* link:servlets001.adoc#BNAFE[17.1 What Is a Servlet?] -* link:servlets002.adoc#BNAFI[17.2 Servlet Lifecycle] -** link:servlets002.adoc#BNAFJ[17.2.1 Handling Servlet Lifecycle Events] -*** link:servlets002.adoc#BNAFK[17.2.1.1 Defining the Listener Class] -** link:servlets002.adoc#BNAFN[17.2.2 Handling Servlet Errors] -* link:servlets003.adoc#BNAFO[17.3 Sharing Information] -** link:servlets003.adoc#BNAFP[17.3.1 Using Scope Objects] -** link:servlets003.adoc#BNAFS[17.3.2 Controlling Concurrent Access to -Shared Resources] -* link:servlets004.adoc#BNAFU[17.4 Creating and Initializing a Servlet] -* link:servlets005.adoc#BNAFV[17.5 Writing Service Methods] -** link:servlets005.adoc#BNAFW[17.5.1 Getting Information from Requests] -** link:servlets005.adoc#BNAFZ[17.5.2 Constructing Responses] -* link:servlets006.adoc#BNAGB[17.6 Filtering Requests and Responses] -** link:servlets006.adoc#BNAGC[17.6.1 Programming Filters] -** link:servlets006.adoc#BNAGD[17.6.2 Programming Customized Requests and -Responses] -** link:servlets006.adoc#BNAGF[17.6.3 Specifying Filter Mappings] -*** link:servlets006.adoc#GJSLC[17.6.3.1 To Specify Filter Mappings Using -NetBeans IDE] -* link:servlets007.adoc#BNAGI[17.7 Invoking Other Web Resources] -** link:servlets007.adoc#BNAGJ[17.7.1 Including Other Resources in the -Response] -** link:servlets007.adoc#BNAGK[17.7.2 Transferring Control to Another Web -Component] -* link:servlets008.adoc#BNAGL[17.8 Accessing the Web Context] -* link:servlets009.adoc#BNAGM[17.9 Maintaining Client State] -** link:servlets009.adoc#BNAGN[17.9.1 Accessing a Session] -** link:servlets009.adoc#BNAGO[17.9.2 Associating Objects with a Session] -** link:servlets009.adoc#BNAGQ[17.9.3 Session Management] -*** link:servlets009.adoc#sthref99[17.9.3.1 To Set the Timeout Period -Using NetBeans IDE] -** link:servlets009.adoc#BNAGR[17.9.4 Session Tracking] -* link:servlets010.adoc#BNAGS[17.10 Finalizing a Servlet] -** link:servlets010.adoc#BNAGT[17.10.1 Tracking Service Requests] -** link:servlets010.adoc#BNAGU[17.10.2 Notifying Methods to Shut Down] -** link:servlets010.adoc#BNAGV[17.10.3 Creating Polite Long-Running -Methods] -* link:servlets011.adoc#BABFGCHB[17.11 Uploading Files with Java Servlet -Technology] -** link:servlets011.adoc#sthref100[17.11.1 The @MultipartConfig -Annotation] -** link:servlets011.adoc#sthref101[17.11.2 The getParts and getPart -Methods] -* link:servlets012.adoc#BEIGCFDF[17.12 Asynchronous Processing] -** link:servlets012.adoc#sthref102[17.12.1 Asynchronous Processing in -Servlets] -** link:servlets012.adoc#sthref104[17.12.2 Waiting for a Resource] -* link:servlets013.adoc#BEIHICDH[17.13 Nonblocking I/O] -** link:servlets013.adoc#sthref108[17.13.1 Reading a Large HTTP POST -Request Using Nonblocking I/O] -* link:servlets014.adoc#BEIJHCDJ[17.14 Protocol Upgrade Processing] -* link:servlets015.adoc#GKCPG[17.15 The mood Example Application] -** link:servlets015.adoc#CHDEBFCB[17.15.1 Components of the mood Example -Application] -** link:servlets015.adoc#GKCOJ[17.15.2 Running the mood Example] -*** link:servlets015.adoc#GKCOB[17.15.2.1 To Run the mood Example Using -NetBeans IDE] -*** link:servlets015.adoc#GKCPJ[17.15.2.2 To Run the mood Example Using -Maven] -* link:servlets016.adoc#BABDGFJJ[17.16 The fileupload Example -Application] -** link:servlets016.adoc#CHDFGBGI[17.16.1 Architecture of the fileupload -Example Application] -** link:servlets016.adoc#CHDIHJCI[17.16.2 Running the fileupload Example] -*** link:servlets016.adoc#CHDGDJCI[17.16.2.1 To Build, Package, and -Deploy the fileupload Example Using NetBeans IDE] -*** link:servlets016.adoc#CHDCFADG[17.16.2.2 To Build, Package, and -Deploy the fileupload Example Using Maven] -*** link:servlets016.adoc#CHDDDAAJ[17.16.2.3 To Run the fileupload -Example] -* link:servlets017.adoc#BEIFAIFF[17.17 The dukeetf Example Application] -** link:servlets017.adoc#CHDBBEDA[17.17.1 Architecture of the dukeetf -Example Application] -*** link:servlets017.adoc#sthref110[17.17.1.1 The Servlet] -*** link:servlets017.adoc#sthref111[17.17.1.2 The Enterprise Bean] -*** link:servlets017.adoc#sthref112[17.17.1.3 The HTML Page] -** link:servlets017.adoc#CHDHBBBI[17.17.2 Running the dukeetf Example -Application] -*** link:servlets017.adoc#CHDCGCJD[17.17.2.1 To Run the dukeetf Example -Application Using NetBeans IDE] -*** link:servlets017.adoc#CHDHHAFG[17.17.2.2 To Run the dukeetf Example -Application Using Maven] -* link:servlets018.adoc#BNAGW[17.18 Further Information about Java -Servlet Technology] - -[[java-api-for-websocket]] -link:websocket.adoc#GKJIQ5[18 Java API for WebSocket] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -* link:websocket001.adoc#BABDABHF[18.1 Introduction to WebSocket] -* link:websocket002.adoc#BABEAEFC[18.2 Creating WebSocket Applications in -the Java EE Platform] -** link:websocket002.adoc#sthref113[18.2.1 Creating and Deploying a -WebSocket Endpoint] -* link:websocket003.adoc#BABGJEIG[18.3 Programmatic Endpoints] -* link:websocket004.adoc#BABFEBGA[18.4 Annotated Endpoints] -* link:websocket005.adoc#BABFCGBJ[18.5 Sending and Receiving Messages] -** link:websocket005.adoc#CIHEHFCB[18.5.1 Sending Messages] -*** link:websocket005.adoc#BABIFBCG[18.5.1.1 Sending Messages to All -Peers Connected to an Endpoint] -** link:websocket005.adoc#CIHIDFHD[18.5.2 Receiving Messages] -* link:websocket006.adoc#BABGJCAD[18.6 Maintaining Client State] -* link:websocket007.adoc#BABGADFG[18.7 Using Encoders and Decoders] -** link:websocket007.adoc#CIHBIGBI[18.7.1 Implementing Encoders to -Convert Java Objects into WebSocket Messages] -** link:websocket007.adoc#CIHGDJFG[18.7.2 Implementing Decoders to -Convert WebSocket Messages into Java Objects] -* link:websocket008.adoc#BABEJIJI[18.8 Path Parameters] -* link:websocket009.adoc#BABDEJHB[18.9 Handling Errors] -* link:websocket010.adoc#BABJAIGH[18.10 Specifying an Endpoint -Configurator Class] -* link:websocket011.adoc#BABGCEHE[18.11 The dukeetf2 Example Application] -** link:websocket011.adoc#CIHJHJCD[18.11.1 Architecture of the dukeetf2 -Sample Application] -*** link:websocket011.adoc#sthref115[18.11.1.1 The Endpoint] -*** link:websocket011.adoc#sthref116[18.11.1.2 The Enterprise Bean] -*** link:websocket011.adoc#CIHHIEFH[18.11.1.3 The HTML Page] -** link:websocket011.adoc#CIHHBAIC[18.11.2 Running the dukeetf2 Example -Application] -*** link:websocket011.adoc#CIHEBIAH[18.11.2.1 To Run the dukeetf2 Example -Application Using NetBeans IDE] -*** link:websocket011.adoc#CIHDJCGJ[18.11.2.2 To Run the dukeetf2 Example -Application Using Maven] -* link:websocket012.adoc#BABCDBBC[18.12 The websocketbot Example -Application] -** link:websocket012.adoc#CIHICIDE[18.12.1 Architecture of the -websocketbot Example Application] -*** link:websocket012.adoc#CIHDAEHF[18.12.1.1 The CDI Bean] -*** link:websocket012.adoc#CIHJJJHG[18.12.1.2 The WebSocket Endpoint] -*** link:websocket012.adoc#CIHFDGHG[18.12.1.3 The Application Messages] -*** link:websocket012.adoc#CIHGHHBD[18.12.1.4 The Encoder Classes] -*** link:websocket012.adoc#CIHHFICG[18.12.1.5 The Message Decoder] -*** link:websocket012.adoc#CIHGDBGF[18.12.1.6 The HTML Page] -** link:websocket012.adoc#CIHHJHDB[18.12.2 Running the websocketbot -Example Application] -*** link:websocket012.adoc#CIHFDDGE[18.12.2.1 To Run the websocketbot -Example Application Using NetBeans IDE] -*** link:websocket012.adoc#CIHEDEHB[18.12.2.2 To Run the websocketbot -Example Application Using Maven] -*** link:websocket012.adoc#BABDDAAG[18.12.2.3 To Test the websocketbot -Example Application] -* link:websocket013.adoc#BABDFIFD[18.13 Further Information about -WebSocket] - -[[json-processing]] -link:jsonp.adoc#GLRBB[19 JSON Processing] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -* link:jsonp001.adoc#BABEECIB[19.1 Introduction to JSON] -** link:jsonp001.adoc#BABGHEHG[19.1.1 JSON Syntax] -** link:jsonp001.adoc#CEGJHJAB[19.1.2 Uses of JSON] -** link:jsonp001.adoc#BABJJACI[19.1.3 Generating and Parsing JSON Data] -* link:jsonp002.adoc#BABDFHHD[19.2 JSON Processing in the Java EE -Platform] -* link:jsonp003.adoc#BABHAHIA[19.3 Using the Object Model API] -** link:jsonp003.adoc#BABBHEBA[19.3.1 Creating an Object Model from JSON -Data] -** link:jsonp003.adoc#BABIGIAF[19.3.2 Creating an Object Model from -Application Code] -** link:jsonp003.adoc#BABJHEHG[19.3.3 Navigating an Object Model] -** link:jsonp003.adoc#BABHEJFF[19.3.4 Writing an Object Model to a -Stream] -* link:jsonp004.adoc#BABDBHIA[19.4 Using the Streaming API] -** link:jsonp004.adoc#BABGCHIG[19.4.1 Reading JSON Data Using a Parser] -** link:jsonp004.adoc#BABGJEEF[19.4.2 Writing JSON Data Using a -Generator] -* link:jsonp005.adoc#BABCFABH[19.5 JSON in Java EE RESTful Web Services] -* link:jsonp006.adoc#BABEDFCG[19.6 The jsonpmodel Example Application] -** link:jsonp006.adoc#CEGHHCCC[19.6.1 Components of the jsonpmodel -Example Application] -** link:jsonp006.adoc#CEGEFHFH[19.6.2 Running the jsonpmodel Example -Application] -*** link:jsonp006.adoc#CEGFECCB[19.6.2.1 To Run the jsonpmodel Example -Application Using NetBeans IDE] -*** link:jsonp006.adoc#CEGGJBFA[19.6.2.2 To Run the jsonpmodel Example -Application Using Maven] -* link:jsonp007.adoc#BABBJDAC[19.7 The jsonpstreaming Example -Application] -** link:jsonp007.adoc#CEGDBIID[19.7.1 Components of the jsonpstreaming -Example Application] -** link:jsonp007.adoc#CEGGHFIG[19.7.2 Running the jsonpstreaming Example -Application] -*** link:jsonp007.adoc#CEGJCBCG[19.7.2.1 To Run the jsonpstreaming -Example Application Using NetBeans IDE] -*** link:jsonp007.adoc#CEGCGDDJ[19.7.2.2 To Run the jsonpstreaming -Example Application Using Maven] -* link:jsonp008.adoc#BABGAAGB[19.8 Further Information about the Java API -for JSON Processing] - -[[internationalizing-and-localizing-web-applications]] -link:webi18n.adoc#BNAXU[20 Internationalizing and Localizing Web Applications] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -* link:webi18n001.adoc#BNAXV[20.1 Java Platform Localization Classes] -* link:webi18n002.adoc#BNAXW[20.2 Providing Localized Messages and -Labels] -** link:webi18n002.adoc#GKUIA[20.2.1 Establishing the Locale] -** link:webi18n002.adoc#BNAXY[20.2.2 Setting the Resource Bundle] -** link:webi18n002.adoc#GKUFC[20.2.3 Retrieving Localized Messages] -* link:webi18n003.adoc#BNAYA[20.3 Date and Number Formatting] -* link:webi18n004.adoc#BNAYB[20.4 Character Sets and Encodings] -** link:webi18n004.adoc#BNAYC[20.4.1 Character Sets] -** link:webi18n004.adoc#BNAYD[20.4.2 Character Encoding] - -[[part-iv-bean-validation]] -link:partbeanvalidation.adoc#sthref1322[Part IV Bean Validation] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -[[introduction-to-bean-validation]] -link:bean-validation.adoc#CHDGJIIA[21 Introduction to Bean Validation] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -* link:bean-validation001.adoc#A1101988[21.1 Overview of Bean Validation] -* link:bean-validation002.adoc#GIRCZ[21.2 Using Bean Validation -Constraints] -* link:bean-validation003.adoc#GKCRG[21.3 Validating Null and Empty -Strings] -* link:bean-validation004.adoc#CACJIBEJ[21.4 Validating Constructors and -Methods] -** link:bean-validation004.adoc#sthref120[21.4.1 Cross-Parameter -Constraints] -** link:bean-validation004.adoc#sthref121[21.4.2 Identifying Parameter -Constraint Violations] -** link:bean-validation004.adoc#sthref122[21.4.3 Adding Constraints to -Method Return Values] -* link:bean-validation005.adoc#CACDECFE[21.5 Further Information about -Bean Validation] - -[[bean-validation-advanced-topics]] -link:bean-validation-advanced.adoc#GKAHP[22 Bean Validation: Advanced Topics] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -* link:bean-validation-advanced001.adoc#GKFGX[22.1 Creating Custom -Constraints] -** link:bean-validation-advanced001.adoc#GKAIA[22.1.1 Using the Built-In -Constraints to Make a New Constraint] -** link:bean-validation-advanced001.adoc#CIHCICAI[22.1.2 Removing -Ambiguity in Constraint Targets] -* link:bean-validation-advanced002.adoc#GKAHI[22.2 Customizing Validator -Messages] -** link:bean-validation-advanced002.adoc#GKAGY[22.2.1 The -ValidationMessages Resource Bundle] -*** link:bean-validation-advanced002.adoc#GKAIQ[22.2.1.1 Localizing -Validation Messages] -* link:bean-validation-advanced003.adoc#GKAGV[22.3 Grouping Constraints] -** link:bean-validation-advanced003.adoc#GKAGU[22.3.1 Customizing Group -Validation Order] -* link:bean-validation-advanced004.adoc#CIHGJBGI[22.4 Using Method -Constraints in Type Hierarchies] -** link:bean-validation-advanced004.adoc#sthref123[22.4.1 Rules for Using -Method Constraints in Type Hierarchies] - -[[part-v-contexts-and-dependency-injection-for-java-ee]] -link:partcdi.adoc#GJBNR[Part V Contexts and Dependency Injection for Java EE] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -[[introduction-to-contexts-and-dependency-injection-for-java-ee]] -link:cdi-basic.adoc#GIWHB[23 Introduction to Contexts and Dependency Injection for Java EE] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -* link:cdi-basic001.adoc#BABJDJGA[23.1 Getting Started] -* link:cdi-basic002.adoc#GIWHL[23.2 Overview of CDI] -* link:cdi-basic003.adoc#GJEBJ[23.3 About Beans] -* link:cdi-basic004.adoc#GJFZI[23.4 About CDI Managed Beans] -* link:cdi-basic005.adoc#GIZKS[23.5 Beans as Injectable Objects] -* link:cdi-basic006.adoc#GJBCK[23.6 Using Qualifiers] -* link:cdi-basic007.adoc#GJBAN[23.7 Injecting Beans] -* link:cdi-basic008.adoc#GJBBK[23.8 Using Scopes] -* link:cdi-basic009.adoc#GJBAK[23.9 Giving Beans EL Names] -* link:cdi-basic010.adoc#GJBBP[23.10 Adding Setter and Getter Methods] -* link:cdi-basic011.adoc#GJBBU[23.11 Using a Managed Bean in a Facelets -Page] -* link:cdi-basic012.adoc#GJDID[23.12 Injecting Objects by Using Producer -Methods] -* link:cdi-basic013.adoc#GJBNZ[23.13 Configuring a CDI Application] -* link:cdi-basic014.adoc#BABJFEAI[23.14 Using the @PostConstruct and -@PreDestroy Annotations with CDI Managed Bean Classes] -** link:cdi-basic014.adoc#CIHEHHCH[23.14.1 To Initialize a Managed Bean -Using the @PostConstruct Annotation] -** link:cdi-basic014.adoc#CIHBAFAC[23.14.2 To Prepare for the Destruction -of a Managed Bean Using the @PreDestroy Annotation] -* link:cdi-basic015.adoc#GIWEL[23.15 Further Information about CDI] - -[[running-the-basic-contexts-and-dependency-injection-examples]] -link:cdi-basicexamples.adoc#GJBLS[24 Running the Basic Contexts and Dependency Injection Examples] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -* link:cdi-basicexamples001.adoc#A1250045[24.1 Building and Running the -CDI Samples] -* link:cdi-basicexamples002.adoc#GJBJU[24.2 The simplegreeting CDI -Example] -** link:cdi-basicexamples002.adoc#GJCQS[24.2.1 The simplegreeting Source -Files] -** link:cdi-basicexamples002.adoc#GJDOJ[24.2.2 The Facelets Template and -Page] -** link:cdi-basicexamples002.adoc#GJCYM[24.2.3 Running the simplegreeting -Example] -*** link:cdi-basicexamples002.adoc#GJCXP[24.2.3.1 To Build, Package, and -Run the simplegreeting Example Using NetBeans IDE] -*** link:cdi-basicexamples002.adoc#GJCZT[24.2.3.2 To Build, Package, and -Deploy the simplegreeting Example Using Maven] -*** link:cdi-basicexamples002.adoc#GJCZE[24.2.3.3 To Run the -simplegreeting Example] -* link:cdi-basicexamples003.adoc#GJCXV[24.3 The guessnumber-cdi CDI -Example] -** link:cdi-basicexamples003.adoc#GJDJU[24.3.1 The guessnumber-cdi Source -Files] -*** link:cdi-basicexamples003.adoc#GJDJP[24.3.1.1 The @MaxNumber and -@Random Qualifier Interfaces] -*** link:cdi-basicexamples003.adoc#GJDJN[24.3.1.2 The Generator Managed -Bean] -*** link:cdi-basicexamples003.adoc#GJDHY[24.3.1.3 The UserNumberBean -Managed Bean] -** link:cdi-basicexamples003.adoc#GJDON[24.3.2 The Facelets Page] -** link:cdi-basicexamples003.adoc#GJDPW[24.3.3 Running the -guessnumber-cdi Example] -*** link:cdi-basicexamples003.adoc#GJDPS[24.3.3.1 To Build, Package, and -Deploy the guessnumber-cdi Example Using NetBeans IDE] -*** link:cdi-basicexamples003.adoc#GJDPR[24.3.3.2 To Build, Package, and -Deploy the guessnumber-cdi Example Using Maven] -*** link:cdi-basicexamples003.adoc#GJDQB[24.3.3.3 To Run the guessnumber -Example] - -[[contexts-and-dependency-injection-for-java-ee-advanced-topics]] -link:cdi-adv.adoc#GJEHI[25 Contexts and Dependency Injection for Java EE: Advanced Topics] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -* link:cdi-adv001.adoc#CACDCFDE[25.1 Packaging CDI Applications] -* link:cdi-adv002.adoc#GJSDF[25.2 Using Alternatives in CDI Applications] -** link:cdi-adv002.adoc#GKHPO[25.2.1 Using Specialization] -* link:cdi-adv003.adoc#GKGKV[25.3 Using Producer Methods, Producer -Fields, and Disposer Methods in CDI Applications] -** link:cdi-adv003.adoc#sthref125[25.3.1 Using Producer Methods] -** link:cdi-adv003.adoc#sthref126[25.3.2 Using Producer Fields to -Generate Resources] -** link:cdi-adv003.adoc#sthref127[25.3.3 Using a Disposer Method] -* link:cdi-adv004.adoc#CJGHGDBA[25.4 Using Predefined Beans in CDI -Applications] -* link:cdi-adv005.adoc#GKHIC[25.5 Using Events in CDI Applications] -** link:cdi-adv005.adoc#GKHHY[25.5.1 Defining Events] -** link:cdi-adv005.adoc#GKHNF[25.5.2 Using Observer Methods to Handle -Events] -** link:cdi-adv005.adoc#GKHIH[25.5.3 Firing Events] -* link:cdi-adv006.adoc#GKHJX[25.6 Using Interceptors in CDI Applications] -* link:cdi-adv007.adoc#GKHQF[25.7 Using Decorators in CDI Applications] -* link:cdi-adv008.adoc#GKHQC[25.8 Using Stereotypes in CDI Applications] - -[[running-the-advanced-contexts-and-dependency-injection-examples]] -link:cdi-adv-examples.adoc#GKHRE[26 Running the Advanced Contexts and Dependency Injection Examples] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -* link:cdi-adv-examples001.adoc#A1251406[26.1 Building and Running the -CDI Advanced Examples] -* link:cdi-adv-examples002.adoc#GKHPU[26.2 The encoder Example: Using -Alternatives] -** link:cdi-adv-examples002.adoc#GKHQA[26.2.1 The Coder Interface and -Implementations] -** link:cdi-adv-examples002.adoc#GKHPM[26.2.2 The encoder Facelets Page -and Managed Bean] -** link:cdi-adv-examples002.adoc#GKHQQ[26.2.3 Running the encoder -Example] -*** link:cdi-adv-examples002.adoc#GKHOW[26.2.3.1 To Build, Package, and -Deploy the encoder Example Using NetBeans IDE] -*** link:cdi-adv-examples002.adoc#GKHQU[26.2.3.2 To Run the encoder -Example Using NetBeans IDE] -*** link:cdi-adv-examples002.adoc#GKHQL[26.2.3.3 To Build, Package, and -Deploy the encoder Example Using Maven] -*** link:cdi-adv-examples002.adoc#GKHOL[26.2.3.4 To Run the encoder -Example Using Maven] -* link:cdi-adv-examples003.adoc#GKHPY[26.3 The producermethods Example: -Using a Producer Method to Choose a Bean Implementation] -** link:cdi-adv-examples003.adoc#GKHRO[26.3.1 Components of the -producermethods Example] -** link:cdi-adv-examples003.adoc#GKHQE[26.3.2 Running the producermethods -Example] -*** link:cdi-adv-examples003.adoc#GKHPE[26.3.2.1 To Build, Package, and -Deploy the producermethods Example Using NetBeans IDE] -*** link:cdi-adv-examples003.adoc#GKHPS[26.3.2.2 To Build, Package, and -Deploy the producermethods Example Using Maven] -*** link:cdi-adv-examples003.adoc#GKHQG[26.3.2.3 To Run the -producermethods Example] -* link:cdi-adv-examples004.adoc#GKHRG[26.4 The producerfields Example: -Using Producer Fields to Generate Resources] -** link:cdi-adv-examples004.adoc#GKHPP[26.4.1 The Producer Field for the -producerfields Example] -** link:cdi-adv-examples004.adoc#GKHPD[26.4.2 The producerfields Entity -and Session Bean] -** link:cdi-adv-examples004.adoc#GKHPF[26.4.3 The producerfields Facelets -Pages and Managed Bean] -** link:cdi-adv-examples004.adoc#GKHRH[26.4.4 Running the producerfields -Example] -*** link:cdi-adv-examples004.adoc#GKHPB[26.4.4.1 To Build, Package, and -Deploy the producerfields Example Using NetBeans IDE] -*** link:cdi-adv-examples004.adoc#GKHRM[26.4.4.2 To Build, Package, and -Deploy the producerfields Example Using Maven] -*** link:cdi-adv-examples004.adoc#GKHRR[26.4.4.3 To Run the -producerfields Example] -* link:cdi-adv-examples005.adoc#GKHPA[26.5 The billpayment Example: Using -Events and Interceptors] -** link:cdi-adv-examples005.adoc#CHDIBGDF[26.5.1 Overview of the -billpayment Example] -** link:cdi-adv-examples005.adoc#GKHOK[26.5.2 The PaymentEvent Event -Class] -** link:cdi-adv-examples005.adoc#GKHRB[26.5.3 The PaymentHandler Event -Listener] -** link:cdi-adv-examples005.adoc#GKHRJ[26.5.4 The billpayment Facelets -Pages and Managed Bean] -** link:cdi-adv-examples005.adoc#GKHRQ[26.5.5 The LoggedInterceptor -Interceptor Class] -** link:cdi-adv-examples005.adoc#GKHPK[26.5.6 Running the billpayment -Example] -*** link:cdi-adv-examples005.adoc#GKHQS[26.5.6.1 To Build, Package, and -Deploy the billpayment Example Using NetBeans IDE] -*** link:cdi-adv-examples005.adoc#GKHPX[26.5.6.2 To Build, Package, and -Deploy the billpayment Example Using Maven] -*** link:cdi-adv-examples005.adoc#GKHPT[26.5.6.3 To Run the billpayment -Example] -* link:cdi-adv-examples006.adoc#GKPAX[26.6 The decorators Example: -Decorating a Bean] -** link:cdi-adv-examples006.adoc#CHDDDFCI[26.6.1 Overview of the -decorators Example] -** link:cdi-adv-examples006.adoc#GKPAQ[26.6.2 Components of the -decorators Example] -** link:cdi-adv-examples006.adoc#GKPBK[26.6.3 Running the decorators -Example] -*** link:cdi-adv-examples006.adoc#GKPAG[26.6.3.1 To Build, Package, and -Deploy the decorators Example Using NetBeans IDE] -*** link:cdi-adv-examples006.adoc#GKPAJ[26.6.3.2 To Build, Package, and -Deploy the decorators Example Using Maven] -*** link:cdi-adv-examples006.adoc#GKPAN[26.6.3.3 To Run the decorators -Example] - -[[part-vi-web-services]] -link:partwebsvcs.adoc#BNAYK[Part VI Web Services] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -[[introduction-to-web-services]] -link:webservices-intro.adoc#GIJTI[27 Introduction to Web Services] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -* link:webservices-intro001.adoc#GIJVH[27.1 What Are Web Services?] -* link:webservices-intro002.adoc#GIQSX[27.2 Types of Web Services] -** link:webservices-intro002.adoc#GKCDG[27.2.1 "Big" Web Services] -** link:webservices-intro002.adoc#GKCAW[27.2.2 RESTful Web Services] -* link:webservices-intro003.adoc#GJBJI[27.3 Deciding Which Type of Web -Service to Use] - -[[building-web-services-with-jax-ws]] -link:jaxws.adoc#BNAYL[28 Building Web Services with JAX-WS] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -* link:jaxws001.adoc#A1250966[28.1 Overview of Java API for XML Web -Services] -* link:jaxws002.adoc#BNAYN[28.2 Creating a Simple Web Service and Clients -with JAX-WS] -** link:jaxws002.adoc#sthref131[28.2.1 Basic Steps for Creating a Web -Service and Client] -** link:jaxws002.adoc#BNAYP[28.2.2 Requirements of a JAX-WS Endpoint] -** link:jaxws002.adoc#BNAYQ[28.2.3 Coding the Service Endpoint -Implementation Class] -** link:jaxws002.adoc#BNAYR[28.2.4 Building, Packaging, and Deploying the -Service] -*** link:jaxws002.adoc#BNAYS[28.2.4.1 To Build, Package, and Deploy the -Service Using NetBeans IDE] -*** link:jaxws002.adoc#BNAYT[28.2.4.2 To Build, Package, and Deploy the -Service Using Maven] -** link:jaxws002.adoc#GKAJL[28.2.5 Testing the Methods of a Web Service -Endpoint] -*** link:jaxws002.adoc#BNAYW[28.2.5.1 To Test the Service without a -Client] -** link:jaxws002.adoc#BNAYX[28.2.6 A Simple JAX-WS Application Client] -*** link:jaxws002.adoc#BNAYY[28.2.6.1 Coding the Application Client] -*** link:jaxws002.adoc#BNAYZ[28.2.6.2 Running the Application Client] -** link:jaxws002.adoc#GJYGB[28.2.7 A Simple JAX-WS Web Client] -*** link:jaxws002.adoc#GJYFL[28.2.7.1 Coding the Servlet] -*** link:jaxws002.adoc#GJYGE[28.2.7.2 Running the Web Client] -* link:jaxws003.adoc#BNAZC[28.3 Types Supported by JAX-WS] -** link:jaxws003.adoc#BNAZT[28.3.1 Schema-to-Java Mapping] -** link:jaxws003.adoc#BNAZW[28.3.2 Java-to-Schema Mapping] -* link:jaxws004.adoc#BNAZD[28.4 Web Services Interoperability and JAX-WS] -* link:jaxws005.adoc#BNAZE[28.5 Further Information about JAX-WS] - -[[building-restful-web-services-with-jax-rs]] -link:jaxrs.adoc#GIEPU[29 Building RESTful Web Services with JAX-RS] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -* link:jaxrs001.adoc#GIJQY[29.1 What Are RESTful Web Services?] -* link:jaxrs002.adoc#GILIK[29.2 Creating a RESTful Root Resource Class] -** link:jaxrs002.adoc#GILRU[29.2.1 Developing RESTful Web Services with -JAX-RS] -** link:jaxrs002.adoc#GILQB[29.2.2 Overview of a JAX-RS Application] -** link:jaxrs002.adoc#GINPW[29.2.3 The @Path Annotation and URI Path -Templates] -** link:jaxrs002.adoc#GIPYS[29.2.4 Responding to HTTP Methods and -Requests] -*** link:jaxrs002.adoc#GIPXS[29.2.4.1 The Request Method Designator -Annotations] -*** link:jaxrs002.adoc#GIPZE[29.2.4.2 Using Entity Providers to Map HTTP -Response and Request Entity Bodies] -** link:jaxrs002.adoc#GIPZH[29.2.5 Using @Consumes and @Produces to -Customize Requests and Responses] -*** link:jaxrs002.adoc#GIPXF[29.2.5.1 The @Produces Annotation] -*** link:jaxrs002.adoc#GIPYT[29.2.5.2 The @Consumes Annotation] -** link:jaxrs002.adoc#GIPYW[29.2.6 Extracting Request Parameters] -** link:jaxrs002.adoc#CIHEGAGI[29.2.7 Configuring JAX-RS Applications] -*** link:jaxrs002.adoc#CIHFEBJF[29.2.7.1 Configuring a JAX-RS Application -Using a Subclass of Application] -*** link:jaxrs002.adoc#CIHDHAIJ[29.2.7.2 Configuring the Base URI in -web.xml] -* link:jaxrs003.adoc#GIPZZ[29.3 Example Applications for JAX-RS] -** link:jaxrs003.adoc#GIPYZ[29.3.1 Creating a Simple RESTful Web Service] -*** link:jaxrs003.adoc#GIQAA[29.3.1.1 To Create a RESTful Web Service -Using NetBeans IDE] -** link:jaxrs003.adoc#GJVBC[29.3.2 The rsvp Example Application] -*** link:jaxrs003.adoc#GJVAW[29.3.2.1 Components of the rsvp Example -Application] -*** link:jaxrs003.adoc#GKCCA[29.3.2.2 Running the rsvp Example -Application] -** link:jaxrs003.adoc#GIRCI[29.3.3 Real-World Examples] -* link:jaxrs004.adoc#GILIZ[29.4 Further Information about JAX-RS] - -[[accessing-rest-resources-with-the-jax-rs-client-api]] -link:jaxrs-client.adoc#BABEIGIH[30 Accessing REST Resources with the JAX-RS Client API] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -* link:jaxrs-client001.adoc#BABBIHEJ[30.1 Overview of the Client API] -** link:jaxrs-client001.adoc#CHDFCABB[30.1.1 Creating a Basic Client -Request Using the Client API] -** link:jaxrs-client001.adoc#CHDHBFHJ[30.1.2 Obtaining the Client -Instance] -** link:jaxrs-client001.adoc#CHDDCICC[30.1.3 Setting the Client Target] -** link:jaxrs-client001.adoc#CHDDBFCG[30.1.4 Setting Path Parameters in -Targets] -** link:jaxrs-client001.adoc#CHDEFCDB[30.1.5 Invoking the Request] -* link:jaxrs-client002.adoc#BABJCIJC[30.2 Using the Client API in the -JAX-RS Example Applications] -** link:jaxrs-client002.adoc#BABEDFIG[30.2.1 The Client API in the rsvp -Example Application] -** link:jaxrs-client002.adoc#CHDGBGID[30.2.2 The Client API in the -customer Example Application] -* link:jaxrs-client003.adoc#BABCDDGH[30.3 Advanced Features of the Client -API] -** link:jaxrs-client003.adoc#CHDGBBCC[30.3.1 Configuring the Client -Request] -*** link:jaxrs-client003.adoc#CHDHAFBG[30.3.1.1 Setting Message Headers -in the Client Request] -*** link:jaxrs-client003.adoc#CHDHFFDJ[30.3.1.2 Setting Cookies in the -Client Request] -*** link:jaxrs-client003.adoc#CHDJEFID[30.3.1.3 Adding Filters to the -Client] -** link:jaxrs-client003.adoc#CHDEBIGG[30.3.2 Asynchronous Invocations in -the Client API] -*** link:jaxrs-client003.adoc#sthref138[30.3.2.1 Using Custom Callbacks -in Asynchronous Invocations] - -[[jax-rs-advanced-topics-and-an-example]] -link:jaxrs-advanced.adoc#GJJXE[31 JAX-RS: Advanced Topics and an Example] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -* link:jaxrs-advanced001.adoc#GKKRB[31.1 Annotations for Field and Bean -Properties of Resource Classes] -** link:jaxrs-advanced001.adoc#GKKYA[31.1.1 Extracting Path Parameters] -** link:jaxrs-advanced001.adoc#GKKXJ[31.1.2 Extracting Query Parameters] -** link:jaxrs-advanced001.adoc#GKKYC[31.1.3 Extracting Form Data] -** link:jaxrs-advanced001.adoc#GKLCQ[31.1.4 Extracting the Java Type of a -Request or Response] -* link:jaxrs-advanced002.adoc#BABCJEDF[31.2 Validating Resource Data with -Bean Validation] -** link:jaxrs-advanced002.adoc#CIHJAFGI[31.2.1 Using Constraint -Annotations on Resource Methods] -** link:jaxrs-advanced002.adoc#CIHFDCBI[31.2.2 Validating Entity Data] -** link:jaxrs-advanced002.adoc#CIHCHEFH[31.2.3 Validation Exception -Handling and Response Codes] -* link:jaxrs-advanced003.adoc#GKNAV[31.3 Subresources and Runtime -Resource Resolution] -** link:jaxrs-advanced003.adoc#GKLAG[31.3.1 Subresource Methods] -** link:jaxrs-advanced003.adoc#GKRHR[31.3.2 Subresource Locators] -* link:jaxrs-advanced004.adoc#GKNCY[31.4 Integrating JAX-RS with EJB -Technology and CDI] -* link:jaxrs-advanced005.adoc#GKQDA[31.5 Conditional HTTP Requests] -* link:jaxrs-advanced006.adoc#GKQBQ[31.6 Runtime Content Negotiation] -* link:jaxrs-advanced007.adoc#GKKNJ[31.7 Using JAX-RS with JAXB] -** link:jaxrs-advanced007.adoc#sthref140[31.7.1 Using Java Objects to -Model Your Data] -** link:jaxrs-advanced007.adoc#sthref141[31.7.2 Starting from an Existing -XML Schema Definition] -** link:jaxrs-advanced007.adoc#sthref142[31.7.3 Using JSON with JAX-RS -and JAXB] -* link:jaxrs-advanced008.adoc#GKOIB[31.8 The customer Example -Application] -** link:jaxrs-advanced008.adoc#GKOFO[31.8.1 Overview of the customer -Example Application] -** link:jaxrs-advanced008.adoc#CIHJFEJI[31.8.2 The Customer and Address -Entity Classes] -** link:jaxrs-advanced008.adoc#GKLGT[31.8.3 The CustomerService Class] -** link:jaxrs-advanced008.adoc#GKQJQ[31.8.4 Using the JAX-RS Client in -the CustomerBean Classes] -** link:jaxrs-advanced008.adoc#GKQKV[31.8.5 Running the customer Example] -*** link:jaxrs-advanced008.adoc#GKQLY[31.8.5.1 To Build, Package, and -Deploy the customer Example Using NetBeans IDE] -*** link:jaxrs-advanced008.adoc#GKQJV[31.8.5.2 To Build, Package, and -Deploy the customer Example Using Maven] - -[[part-vii-enterprise-beans]] -link:partentbeans.adoc#BNBLR[Part VII Enterprise Beans] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -[[enterprise-beans]] -link:ejb-intro.adoc#GIJSZ[32 Enterprise Beans] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -* link:ejb-intro001.adoc#GIPMB[32.1 What Is an Enterprise Bean?] -** link:ejb-intro001.adoc#GIPLK[32.1.1 Benefits of Enterprise Beans] -** link:ejb-intro001.adoc#GIPKN[32.1.2 When to Use Enterprise Beans] -** link:ejb-intro001.adoc#GIPNM[32.1.3 Types of Enterprise Beans] -* link:ejb-intro002.adoc#GIPJG[32.2 What Is a Session Bean?] -** link:ejb-intro002.adoc#GIPKR[32.2.1 Types of Session Beans] -*** link:ejb-intro002.adoc#GIPNL[32.2.1.1 Stateful Session Beans] -*** link:ejb-intro002.adoc#GIPIN[32.2.1.2 Stateless Session Beans] -*** link:ejb-intro002.adoc#GIPIM[32.2.1.3 Singleton Session Beans] -** link:ejb-intro002.adoc#GIPMT[32.2.2 When to Use Session Beans] -* link:ejb-intro003.adoc#GIPKO[32.3 What Is a Message-Driven Bean?] -** link:ejb-intro003.adoc#GIPMJ[32.3.1 What Makes Message-Driven Beans -Different from Session Beans?] -** link:ejb-intro003.adoc#GIPJX[32.3.2 When to Use Message-Driven Beans] -* link:ejb-intro004.adoc#GIPJF[32.4 Accessing Enterprise Beans] -** link:ejb-intro004.adoc#GIRFL[32.4.1 Using Enterprise Beans in Clients] -*** link:ejb-intro004.adoc#GIRGN[32.4.1.1 Portable JNDI Syntax] -** link:ejb-intro004.adoc#GIPIZ[32.4.2 Deciding on Remote or Local -Access] -** link:ejb-intro004.adoc#GIPMZ[32.4.3 Local Clients] -*** link:ejb-intro004.adoc#GIPSC[32.4.3.1 Accessing Local Enterprise -Beans Using the No-Interface View] -*** link:ejb-intro004.adoc#GIPSE[32.4.3.2 Accessing Local Enterprise -Beans That Implement Business Interfaces] -** link:ejb-intro004.adoc#GIPIU[32.4.4 Remote Clients] -** link:ejb-intro004.adoc#GIPKD[32.4.5 Web Service Clients] -** link:ejb-intro004.adoc#GIPLY[32.4.6 Method Parameters and Access] -*** link:ejb-intro004.adoc#GIPLX[32.4.6.1 Isolation] -*** link:ejb-intro004.adoc#GIPKV[32.4.6.2 Granularity of Accessed Data] -* link:ejb-intro005.adoc#GIPIO[32.5 The Contents of an Enterprise Bean] -* link:ejb-intro006.adoc#GIPKS[32.6 Naming Conventions for Enterprise -Beans] -* link:ejb-intro007.adoc#GIPLJ[32.7 The Lifecycles of Enterprise Beans] -** link:ejb-intro007.adoc#GIPLN[32.7.1 The Lifecycle of a Stateful -Session Bean] -** link:ejb-intro007.adoc#GIPLM[32.7.2 The Lifecycle of a Stateless -Session Bean] -** link:ejb-intro007.adoc#GIPRX[32.7.3 The Lifecycle of a Singleton -Session Bean] -** link:ejb-intro007.adoc#GIPKW[32.7.4 The Lifecycle of a Message-Driven -Bean] -* link:ejb-intro008.adoc#GIPLG[32.8 Further Information about Enterprise -Beans] - -[[getting-started-with-enterprise-beans]] -link:ejb-gettingstarted.adoc#GIJRE[33 Getting Started with Enterprise Beans] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -* link:ejb-gettingstarted001.adoc#A1249349[33.1 Starting With Enterprise -Beans] -* link:ejb-gettingstarted002.adoc#GIPSS[33.2 Creating the Enterprise -Bean] -** link:ejb-gettingstarted002.adoc#GIPSX[33.2.1 Coding the Enterprise -Bean Class] -** link:ejb-gettingstarted002.adoc#GIPSI[33.2.2 Creating the converter -Web Client] -** link:ejb-gettingstarted002.adoc#GIPVV[33.2.3 Running the converter -Example] -*** link:ejb-gettingstarted002.adoc#GIPUM[33.2.3.1 To Run the converter -Example Using NetBeans IDE] -*** link:ejb-gettingstarted002.adoc#GIPVQ[33.2.3.2 To Run the converter -Example Using Maven] -* link:ejb-gettingstarted003.adoc#GIPTI[33.3 Modifying the Java EE -Application] -** link:ejb-gettingstarted003.adoc#GIPUK[33.3.1 To Modify a Class File] - -[[running-the-enterprise-bean-examples]] -link:ejb-basicexamples.adoc#GIJRB[34 Running the Enterprise Bean Examples] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -* link:ejb-basicexamples001.adoc#A1250776[34.1 Overview of the EJB -Examples] -* link:ejb-basicexamples002.adoc#BNBOD[34.2 The cart Example] -** link:ejb-basicexamples002.adoc#BNBOE[34.2.1 The Business Interface] -** link:ejb-basicexamples002.adoc#BNBOF[34.2.2 Session Bean Class] -*** link:ejb-basicexamples002.adoc#BNBOG[34.2.2.1 Lifecycle Callback -Methods] -*** link:ejb-basicexamples002.adoc#BNBOH[34.2.2.2 Business Methods] -** link:ejb-basicexamples002.adoc#BNBOI[34.2.3 The @Remove Method] -** link:ejb-basicexamples002.adoc#BNBOJ[34.2.4 Helper Classes] -** link:ejb-basicexamples002.adoc#BNBOK[34.2.5 Running the cart Example] -*** link:ejb-basicexamples002.adoc#BNBOL[34.2.5.1 To Run the cart Example -Using NetBeans IDE] -*** link:ejb-basicexamples002.adoc#BNBON[34.2.5.2 To Run the cart Example -Using Maven] -* link:ejb-basicexamples003.adoc#GIPVI[34.3 A Singleton Session Bean -Example: counter] -** link:ejb-basicexamples003.adoc#GIPVC[34.3.1 Creating a Singleton -Session Bean] -*** link:ejb-basicexamples003.adoc#GIPPQ[34.3.1.1 Initializing Singleton -Session Beans] -*** link:ejb-basicexamples003.adoc#GIPSZ[34.3.1.2 Managing Concurrent -Access in a Singleton Session Bean] -*** link:ejb-basicexamples003.adoc#GIPVD[34.3.1.3 Handling Errors in a -Singleton Session Bean] -** link:ejb-basicexamples003.adoc#GIPXL[34.3.2 The Architecture of the -counter Example] -** link:ejb-basicexamples003.adoc#GIPVL[34.3.3 Running the counter -Example] -*** link:ejb-basicexamples003.adoc#GIPXT[34.3.3.1 To Run the counter -Example Using NetBeans IDE] -*** link:ejb-basicexamples003.adoc#GIPZW[34.3.3.2 To Run the counter -Example Using Maven] -* link:ejb-basicexamples004.adoc#BNBOR[34.4 A Web Service Example: -helloservice] -** link:ejb-basicexamples004.adoc#BNBOS[34.4.1 The Web Service Endpoint -Implementation Class] -** link:ejb-basicexamples004.adoc#BNBOT[34.4.2 Stateless Session Bean -Implementation Class] -** link:ejb-basicexamples004.adoc#BNBOU[34.4.3 Running the helloservice -Example] -*** link:ejb-basicexamples004.adoc#BNBOV[34.4.3.1 To Build, Package, and -Deploy the helloservice Example Using NetBeans IDE] -*** link:ejb-basicexamples004.adoc#BNBOW[34.4.3.2 To Build, Package, and -Deploy the helloservice Example Using Maven] -*** link:ejb-basicexamples004.adoc#BNBOX[34.4.3.3 To Test the Service -without a Client] -* link:ejb-basicexamples005.adoc#BNBOY[34.5 Using the Timer Service] -** link:ejb-basicexamples005.adoc#GIQLK[34.5.1 Creating Calendar-Based -Timer Expressions] -*** link:ejb-basicexamples005.adoc#GIQMX[34.5.1.1 Specifying Multiple -Values in Calendar Expressions] -** link:ejb-basicexamples005.adoc#GIQLT[34.5.2 Programmatic Timers] -*** link:ejb-basicexamples005.adoc#BNBOZ[34.5.2.1 The @Timeout Method] -*** link:ejb-basicexamples005.adoc#BNBPA[34.5.2.2 Creating Programmatic -Timers] -** link:ejb-basicexamples005.adoc#GIQMB[34.5.3 Automatic Timers] -** link:ejb-basicexamples005.adoc#BNBPB[34.5.4 Canceling and Saving -Timers] -** link:ejb-basicexamples005.adoc#BNBPC[34.5.5 Getting Timer Information] -** link:ejb-basicexamples005.adoc#BNBPD[34.5.6 Transactions and Timers] -** link:ejb-basicexamples005.adoc#BNBPE[34.5.7 The timersession Example] -** link:ejb-basicexamples005.adoc#BNBPF[34.5.8 Running the timersession -Example] -*** link:ejb-basicexamples005.adoc#GIQNI[34.5.8.1 To Run the timersession -Example Using NetBeans IDE] -*** link:ejb-basicexamples005.adoc#GIQNQ[34.5.8.2 To Build, Package, and -Deploy the timersession Example Using Maven] -*** link:ejb-basicexamples005.adoc#GIQOP[34.5.8.3 To Run the Web Client] -* link:ejb-basicexamples006.adoc#BNBPJ[34.6 Handling Exceptions] - -[[using-the-embedded-enterprise-bean-container]] -link:ejb-embedded.adoc#GKCQZ[35 Using the Embedded Enterprise Bean Container] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -* link:ejb-embedded001.adoc#GKFAE[35.1 Overview of the Embedded -Enterprise Bean Container] -* link:ejb-embedded002.adoc#GKCRR[35.2 Developing Embeddable Enterprise -Bean Applications] -** link:ejb-embedded002.adoc#GKCQI[35.2.1 Running Embedded Applications] -** link:ejb-embedded002.adoc#GKCOV[35.2.2 Creating the Enterprise Bean -Container] -*** link:ejb-embedded002.adoc#GKCRP[35.2.2.1 Explicitly Specifying -Enterprise Bean Modules to Be Initialized] -** link:ejb-embedded002.adoc#GLHUR[35.2.3 Looking Up Session Bean -References] -** link:ejb-embedded002.adoc#GKCRE[35.2.4 Shutting Down the Enterprise -Bean Container] -* link:ejb-embedded003.adoc#GKCPV[35.3 The standalone Example -Application] -** link:ejb-embedded003.adoc#BEIDAJAC[35.3.1 Overview of the standalone -Example Application] -** link:ejb-embedded003.adoc#GKCQP[35.3.2 To Run the standalone Example -Application Using NetBeans IDE] -** link:ejb-embedded003.adoc#BEIGHEHJ[35.3.3 To Run the standalone -Example Application Using Maven] - -[[using-asynchronous-method-invocation-in-session-beans]] -link:ejb-async.adoc#GKIDZ[36 Using Asynchronous Method Invocation in Session Beans] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -* link:ejb-async001.adoc#GKKQG[36.1 Asynchronous Method Invocation] -** link:ejb-async001.adoc#GKIFJ[36.1.1 Creating an Asynchronous Business -Method] -** link:ejb-async001.adoc#GKIEM[36.1.2 Calling Asynchronous Methods from -Enterprise Bean Clients] -*** link:ejb-async001.adoc#GKICM[36.1.2.1 Retrieving the Final Result -from an Asynchronous Method Invocation] -*** link:ejb-async001.adoc#GKIDB[36.1.2.2 Cancelling an Asynchronous -Method Invocation] -*** link:ejb-async001.adoc#GKIEV[36.1.2.3 Checking the Status of an -Asynchronous Method Invocation] -* link:ejb-async002.adoc#GKIEZ[36.2 The async Example Application] -** link:ejb-async002.adoc#GKIQJ[36.2.1 Architecture of the async-war -Module] -** link:ejb-async002.adoc#sthref151[36.2.2 Running the async Example] -*** link:ejb-async002.adoc#GKINW[36.2.2.1 To Run the async Example -Application Using NetBeans IDE] -*** link:ejb-async002.adoc#GKRFB[36.2.2.2 To Run the async Example -Application Using Maven] - -[[part-viii-persistence]] -link:partpersist.adoc#BNBPY[Part VIII Persistence] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -[[introduction-to-the-java-persistence-api]] -link:persistence-intro.adoc#BNBPZ[37 Introduction to the Java Persistence API] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -* link:persistence-intro001.adoc#A1019685[37.1 Overview of the Java -Persistence API] -* link:persistence-intro002.adoc#BNBQA[37.2 Entities] -** link:persistence-intro002.adoc#BNBQB[37.2.1 Requirements for Entity -Classes] -** link:persistence-intro002.adoc#BNBQC[37.2.2 Persistent Fields and -Properties in Entity Classes] -*** link:persistence-intro002.adoc#BNBQD[37.2.2.1 Persistent Fields] -*** link:persistence-intro002.adoc#BNBQE[37.2.2.2 Persistent Properties] -*** link:persistence-intro002.adoc#GIQVN[37.2.2.3 Using Collections in -Entity Fields and Properties] -*** link:persistence-intro002.adoc#GKAHQ[37.2.2.4 Validating Persistent -Fields and Properties] -** link:persistence-intro002.adoc#BNBQF[37.2.3 Primary Keys in Entities] -** link:persistence-intro002.adoc#BNBQH[37.2.4 Multiplicity in Entity -Relationships] -** link:persistence-intro002.adoc#BNBQI[37.2.5 Direction in Entity -Relationships] -*** link:persistence-intro002.adoc#BNBQJ[37.2.5.1 Bidirectional -Relationships] -*** link:persistence-intro002.adoc#BNBQK[37.2.5.2 Unidirectional -Relationships] -*** link:persistence-intro002.adoc#BNBQL[37.2.5.3 Queries and -Relationship Direction] -*** link:persistence-intro002.adoc#BNBQM[37.2.5.4 Cascade Operations and -Relationships] -*** link:persistence-intro002.adoc#GIQXY[37.2.5.5 Orphan Removal in -Relationships] -** link:persistence-intro002.adoc#GJIWZ[37.2.6 Embeddable Classes in -Entities] -* link:persistence-intro003.adoc#BNBQN[37.3 Entity Inheritance] -** link:persistence-intro003.adoc#BNBQO[37.3.1 Abstract Entities] -** link:persistence-intro003.adoc#BNBQP[37.3.2 Mapped Superclasses] -** link:persistence-intro003.adoc#BNBQQ[37.3.3 Non-Entity Superclasses] -** link:persistence-intro003.adoc#BNBQR[37.3.4 Entity Inheritance Mapping -Strategies] -*** link:persistence-intro003.adoc#BNBQS[37.3.4.1 The Single Table per -Class Hierarchy Strategy] -*** link:persistence-intro003.adoc#BNBQU[37.3.4.2 The Table per Concrete -Class Strategy] -*** link:persistence-intro003.adoc#BNBQV[37.3.4.3 The Joined Subclass -Strategy] -* link:persistence-intro004.adoc#BNBQW[37.4 Managing Entities] -** link:persistence-intro004.adoc#BNBQY[37.4.1 The EntityManager -Interface] -*** link:persistence-intro004.adoc#BNBQZ[37.4.1.1 Container-Managed -Entity Managers] -*** link:persistence-intro004.adoc#BNBRA[37.4.1.2 Application-Managed -Entity Managers] -*** link:persistence-intro004.adoc#BNBRB[37.4.1.3 Finding Entities Using -the EntityManager] -*** link:persistence-intro004.adoc#BNBRC[37.4.1.4 Managing an Entity -Instance's Lifecycle] -*** link:persistence-intro004.adoc#BNBRD[37.4.1.5 Persisting Entity -Instances] -*** link:persistence-intro004.adoc#BNBRE[37.4.1.6 Removing Entity -Instances] -*** link:persistence-intro004.adoc#BNBRF[37.4.1.7 Synchronizing Entity -Data to the Database] -** link:persistence-intro004.adoc#BNBRJ[37.4.2 Persistence Units] -* link:persistence-intro005.adoc#GJISE[37.5 Querying Entities] -* link:persistence-intro006.adoc#CHDBEGIC[37.6 Database Schema Creation] -** link:persistence-intro006.adoc#sthref154[37.6.1 Configuring an -Application to Create or Drop Database Tables] -** link:persistence-intro006.adoc#sthref159[37.6.2 Loading Data Using SQL -Scripts] -* link:persistence-intro007.adoc#GKCLC[37.7 Further Information about -Persistence] - -[[running-the-persistence-examples]] -link:persistence-basicexamples.adoc#GIJST[38 Running the Persistence Examples] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -* link:persistence-basicexamples001.adoc#A1023268[38.1 Overview of the -Persistence Examples] -* link:persistence-basicexamples002.adoc#GIQST[38.2 The order -Application] -** link:persistence-basicexamples002.adoc#GIQRH[38.2.1 Entity -Relationships in the order Application] -*** link:persistence-basicexamples002.adoc#GIQQR[38.2.1.1 -Self-Referential Relationships] -*** link:persistence-basicexamples002.adoc#GIQSR[38.2.1.2 One-to-One -Relationships] -*** link:persistence-basicexamples002.adoc#GIQTJ[38.2.1.3 One-to-Many -Relationship Mapped to Overlapping Primary and Foreign Keys] -*** link:persistence-basicexamples002.adoc#GIQUD[38.2.1.4 Unidirectional -Relationships] -** link:persistence-basicexamples002.adoc#GIQQY[38.2.2 Primary Keys in -the order Application] -*** link:persistence-basicexamples002.adoc#GIQUV[38.2.2.1 Generated -Primary Keys] -*** link:persistence-basicexamples002.adoc#GIQUF[38.2.2.2 Compound -Primary Keys] -** link:persistence-basicexamples002.adoc#GIQTL[38.2.3 Entity Mapped to -More Than One Database Table] -** link:persistence-basicexamples002.adoc#GIQUE[38.2.4 Cascade Operations -in the order Application] -** link:persistence-basicexamples002.adoc#GIQSC[38.2.5 BLOB and CLOB -Database Types in the order Application] -** link:persistence-basicexamples002.adoc#GIQUM[38.2.6 Temporal Types in -the order Application] -** link:persistence-basicexamples002.adoc#GIQQV[38.2.7 Managing the order -Application's Entities] -*** link:persistence-basicexamples002.adoc#GIQRR[38.2.7.1 Creating -Entities] -*** link:persistence-basicexamples002.adoc#GIQQC[38.2.7.2 Finding -Entities] -*** link:persistence-basicexamples002.adoc#GIQUK[38.2.7.3 Setting Entity -Relationships] -*** link:persistence-basicexamples002.adoc#GIQSV[38.2.7.4 Using Queries] -*** link:persistence-basicexamples002.adoc#GIQTW[38.2.7.5 Removing -Entities] -** link:persistence-basicexamples002.adoc#GIQUP[38.2.8 Running the order -Example] -*** link:persistence-basicexamples002.adoc#GIQSG[38.2.8.1 To Run the -order Example Using NetBeans IDE] -*** link:persistence-basicexamples002.adoc#GIQTY[38.2.8.2 To Run the -order Example Using Maven] -* link:persistence-basicexamples003.adoc#GIQSQ[38.3 The roster -Application] -** link:persistence-basicexamples003.adoc#GIQSO[38.3.1 Relationships in -the roster Application] -*** link:persistence-basicexamples003.adoc#GIQQK[38.3.1.1 The -Many-To-Many Relationship in roster] -** link:persistence-basicexamples003.adoc#GIQRF[38.3.2 Entity Inheritance -in the roster Application] -** link:persistence-basicexamples003.adoc#GJJFL[38.3.3 Criteria Queries -in the roster Application] -*** link:persistence-basicexamples003.adoc#GJJEX[38.3.3.1 Metamodel -Classes in the roster Application] -*** link:persistence-basicexamples003.adoc#GJJFN[38.3.3.2 Obtaining a -CriteriaBuilder Instance in RequestBean] -*** link:persistence-basicexamples003.adoc#GJJFF[38.3.3.3 Creating -Criteria Queries in RequestBean's Business Methods] -** link:persistence-basicexamples003.adoc#GIQRX[38.3.4 Automatic Table -Generation in the roster Application] -** link:persistence-basicexamples003.adoc#GIQUZ[38.3.5 Running the roster -Example] -*** link:persistence-basicexamples003.adoc#GIQUG[38.3.5.1 To Run the -roster Example Using NetBeans IDE] -*** link:persistence-basicexamples003.adoc#GIQSJ[38.3.5.2 To Run the -roster Example Using Maven] -* link:persistence-basicexamples004.adoc#GKANQ[38.4 The address-book -Application] -** link:persistence-basicexamples004.adoc#GKAOJ[38.4.1 Bean Validation -Constraints in address-book] -** link:persistence-basicexamples004.adoc#GKANL[38.4.2 Specifying Error -Messages for Constraints in address-book] -** link:persistence-basicexamples004.adoc#GKAON[38.4.3 Validating Contact -Input from a JavaServer Faces Application] -** link:persistence-basicexamples004.adoc#GKAOP[38.4.4 Running the -address-book Example] -*** link:persistence-basicexamples004.adoc#GKAOD[38.4.4.1 To Run the -address-book Example Using NetBeans IDE] -*** link:persistence-basicexamples004.adoc#GKANZ[38.4.4.2 To Run the -address-book Example Using Maven] - -[[the-java-persistence-query-language]] -link:persistence-querylanguage.adoc#BNBTG[39 The Java Persistence Query Language] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -* link:persistence-querylanguage001.adoc#A1073303[39.1 Overview of the -Java Persistence Query Language] -* link:persistence-querylanguage002.adoc#BNBTH[39.2 Query Language -Terminology] -* link:persistence-querylanguage003.adoc#BNBRG[39.3 Creating Queries -Using the Java Persistence Query Language] -** link:persistence-querylanguage003.adoc#BNBRH[39.3.1 Named Parameters -in Queries] -** link:persistence-querylanguage003.adoc#BNBRI[39.3.2 Positional -Parameters in Queries] -* link:persistence-querylanguage004.adoc#BNBTI[39.4 Simplified Query -Language Syntax] -** link:persistence-querylanguage004.adoc#BNBTJ[39.4.1 Select Statements] -** link:persistence-querylanguage004.adoc#BNBTK[39.4.2 Update and Delete -Statements] -* link:persistence-querylanguage005.adoc#BNBTL[39.5 Example Queries] -** link:persistence-querylanguage005.adoc#BNBTM[39.5.1 Simple Queries] -*** link:persistence-querylanguage005.adoc#BNBTN[39.5.1.1 A Basic Select -Query] -*** link:persistence-querylanguage005.adoc#BNBTO[39.5.1.2 Eliminating -Duplicate Values] -*** link:persistence-querylanguage005.adoc#BNBTP[39.5.1.3 Using Named -Parameters] -** link:persistence-querylanguage005.adoc#BNBTQ[39.5.2 Queries That -Navigate to Related Entities] -*** link:persistence-querylanguage005.adoc#BNBTR[39.5.2.1 A Simple Query -with Relationships] -*** link:persistence-querylanguage005.adoc#BNBTS[39.5.2.2 Navigating to -Single-Valued Relationship Fields] -*** link:persistence-querylanguage005.adoc#BNBTT[39.5.2.3 Traversing -Relationships with an Input Parameter] -*** link:persistence-querylanguage005.adoc#BNBTU[39.5.2.4 Traversing -Multiple Relationships] -*** link:persistence-querylanguage005.adoc#BNBTV[39.5.2.5 Navigating -According to Related Fields] -** link:persistence-querylanguage005.adoc#BNBTW[39.5.3 Queries with Other -Conditional Expressions] -*** link:persistence-querylanguage005.adoc#BNBTX[39.5.3.1 The LIKE -Expression] -*** link:persistence-querylanguage005.adoc#BNBTY[39.5.3.2 The IS NULL -Expression] -*** link:persistence-querylanguage005.adoc#BNBTZ[39.5.3.3 The IS EMPTY -Expression] -*** link:persistence-querylanguage005.adoc#BNBUA[39.5.3.4 The BETWEEN -Expression] -*** link:persistence-querylanguage005.adoc#BNBUB[39.5.3.5 Comparison -Operators] -** link:persistence-querylanguage005.adoc#BNBUC[39.5.4 Bulk Updates and -Deletes] -*** link:persistence-querylanguage005.adoc#BNBUD[39.5.4.1 Update Queries] -*** link:persistence-querylanguage005.adoc#BNBUE[39.5.4.2 Delete Queries] -* link:persistence-querylanguage006.adoc#BNBUF[39.6 Full Query Language -Syntax] -** link:persistence-querylanguage006.adoc#BNBUG[39.6.1 BNF Symbols] -** link:persistence-querylanguage006.adoc#BNBUI[39.6.2 BNF Grammar of the -Java Persistence Query Language] -** link:persistence-querylanguage006.adoc#BNBUJ[39.6.3 FROM Clause] -*** link:persistence-querylanguage006.adoc#BNBUK[39.6.3.1 Identifiers] -*** link:persistence-querylanguage006.adoc#BNBUM[39.6.3.2 Identification -Variables] -*** link:persistence-querylanguage006.adoc#BNBUN[39.6.3.3 Range Variable -Declarations] -*** link:persistence-querylanguage006.adoc#BNBUO[39.6.3.4 Collection -Member Declarations] -*** link:persistence-querylanguage006.adoc#BNBUP[39.6.3.5 Joins] -** link:persistence-querylanguage006.adoc#BNBUQ[39.6.4 Path Expressions] -*** link:persistence-querylanguage006.adoc#BNBUR[39.6.4.1 Examples of -Path Expressions] -*** link:persistence-querylanguage006.adoc#BNBUS[39.6.4.2 Expression -Types] -*** link:persistence-querylanguage006.adoc#BNBUT[39.6.4.3 Navigation] -** link:persistence-querylanguage006.adoc#BNBUU[39.6.5 WHERE Clause] -*** link:persistence-querylanguage006.adoc#BNBUV[39.6.5.1 Literals] -*** link:persistence-querylanguage006.adoc#BNBVA[39.6.5.2 Input -Parameters] -*** link:persistence-querylanguage006.adoc#BNBVB[39.6.5.3 Conditional -Expressions] -*** link:persistence-querylanguage006.adoc#BNBVC[39.6.5.4 Operators and -Their Precedence] -*** link:persistence-querylanguage006.adoc#BNBVE[39.6.5.5 BETWEEN -Expressions] -*** link:persistence-querylanguage006.adoc#BNBVF[39.6.5.6 IN Expressions] -*** link:persistence-querylanguage006.adoc#BNBVG[39.6.5.7 LIKE -Expressions] -*** link:persistence-querylanguage006.adoc#BNBVI[39.6.5.8 NULL Comparison -Expressions] -*** link:persistence-querylanguage006.adoc#BNBVJ[39.6.5.9 Empty -Collection Comparison Expressions] -*** link:persistence-querylanguage006.adoc#BNBVK[39.6.5.10 Collection -Member Expressions] -*** link:persistence-querylanguage006.adoc#BNBVL[39.6.5.11 Subqueries] -*** link:persistence-querylanguage006.adoc#BNBVO[39.6.5.12 Functional -Expressions] -*** link:persistence-querylanguage006.adoc#GJJND[39.6.5.13 Case -Expressions] -*** link:persistence-querylanguage006.adoc#BNBVR[39.6.5.14 NULL Values] -*** link:persistence-querylanguage006.adoc#BNBVU[39.6.5.15 Equality -Semantics] -** link:persistence-querylanguage006.adoc#BNBVX[39.6.6 SELECT Clause] -*** link:persistence-querylanguage006.adoc#BNBVY[39.6.6.1 Return Types] -*** link:persistence-querylanguage006.adoc#BNBWB[39.6.6.2 The DISTINCT -Keyword] -*** link:persistence-querylanguage006.adoc#BNBWC[39.6.6.3 Constructor -Expressions] -** link:persistence-querylanguage006.adoc#BNBWD[39.6.7 ORDER BY Clause] -** link:persistence-querylanguage006.adoc#BNBWE[39.6.8 GROUP BY and -HAVING Clauses] - -[[using-the-criteria-api-to-create-queries]] -link:persistence-criteria.adoc#GJITV[40 Using the Criteria API to Create Queries] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -* link:persistence-criteria001.adoc#GJRIJ[40.1 Overview of the Criteria -and Metamodel APIs] -* link:persistence-criteria002.adoc#GJIUP[40.2 Using the Metamodel API to -Model Entity Classes] -** link:persistence-criteria002.adoc#GJIVL[40.2.1 Using Metamodel -Classes] -* link:persistence-criteria003.adoc#GJIVM[40.3 Using the Criteria API and -Metamodel API to Create Basic Typesafe Queries] -** link:persistence-criteria003.adoc#GJIVS[40.3.1 Creating a Criteria -Query] -** link:persistence-criteria003.adoc#GJIVQ[40.3.2 Query Roots] -** link:persistence-criteria003.adoc#GJIUV[40.3.3 Querying Relationships -Using Joins] -** link:persistence-criteria003.adoc#GJIVE[40.3.4 Path Navigation in -Criteria Queries] -** link:persistence-criteria003.adoc#GJIVI[40.3.5 Restricting Criteria -Query Results] -*** link:persistence-criteria003.adoc#GJIWN[40.3.5.1 The Expression -Interface Methods] -*** link:persistence-criteria003.adoc#GJIXA[40.3.5.2 Expression Methods -in the CriteriaBuilder Interface] -** link:persistence-criteria003.adoc#GJIXE[40.3.6 Managing Criteria Query -Results] -*** link:persistence-criteria003.adoc#GJIWO[40.3.6.1 Ordering Results] -*** link:persistence-criteria003.adoc#GJIXG[40.3.6.2 Grouping Results] -** link:persistence-criteria003.adoc#GJIVY[40.3.7 Executing Queries] -*** link:persistence-criteria003.adoc#GJIUR[40.3.7.1 Single-Valued Query -Results] -*** link:persistence-criteria003.adoc#GJIVP[40.3.7.2 Collection-Valued -Query Results] - -[[creating-and-using-string-based-criteria-queries]] -link:persistence-string-queries.adoc#GKJIQ[41 Creating and Using String-Based Criteria Queries] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -* link:persistence-string-queries001.adoc#GKJIV[41.1 Overview of -String-Based Criteria API Queries] -* link:persistence-string-queries002.adoc#GKJBQ[41.2 Creating -String-Based Queries] -* link:persistence-string-queries003.adoc#GKJDB[41.3 Executing -String-Based Queries] - -[[controlling-concurrent-access-to-entity-data-with-locking]] -link:persistence-locking.adoc#GKJJF[42 Controlling Concurrent Access to Entity Data with Locking] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -* link:persistence-locking001.adoc#GKJHZ[42.1 Overview of Entity Locking -and Concurrency] -** link:persistence-locking001.adoc#GKJJC[42.1.1 Using Optimistic -Locking] -* link:persistence-locking002.adoc#GKJIU[42.2 Lock Modes] -** link:persistence-locking002.adoc#GKJIK[42.2.1 Setting the Lock Mode] -** link:persistence-locking002.adoc#GKJIL[42.2.2 Using Pessimistic -Locking] -*** link:persistence-locking002.adoc#GKJLQ[42.2.2.1 Pessimistic Locking -Timeouts] - -[[creating-fetch-plans-with-entity-graphs]] -link:persistence-entitygraphs.adoc#BABIJIAC[43 Creating Fetch Plans with Entity Graphs] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -* link:persistence-entitygraphs001.adoc#A1153411[43.1 Overview of Using -Fetch Plans and Entity Graphs] -* link:persistence-entitygraphs002.adoc#BABCJBCG[43.2 Entity Graph -Basics] -** link:persistence-entitygraphs002.adoc#sthref177[43.2.1 The Default -Entity Graph] -** link:persistence-entitygraphs002.adoc#sthref178[43.2.2 Using Entity -Graphs in Persistence Operations] -*** link:persistence-entitygraphs002.adoc#BABGEFCG[43.2.2.1 Fetch Graphs] -*** link:persistence-entitygraphs002.adoc#BABHJBHG[43.2.2.2 Load Graphs] -* link:persistence-entitygraphs003.adoc#BABFIGEI[43.3 Using Named Entity -Graphs] -** link:persistence-entitygraphs003.adoc#sthref179[43.3.1 Applying Named -Entity Graph Annotations to Entity Classes] -** link:persistence-entitygraphs003.adoc#sthref180[43.3.2 Obtaining -EntityGraph Instances from Named Entity Graphs] -* link:persistence-entitygraphs004.adoc#BABGJDAJ[43.4 Using Entity Graphs -in Query Operations] - -[[using-a-second-level-cache-with-java-persistence-api-applications]] -link:persistence-cache.adoc#GKJIA[44 Using a Second-Level Cache with Java Persistence API Applications] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -* link:persistence-cache001.adoc#GKJIO[44.1 Overview of the Second-Level -Cache] -** link:persistence-cache001.adoc#GKJIW[44.1.1 Controlling whether -Entities May Be Cached] -* link:persistence-cache002.adoc#GKJJJ[44.2 Specifying the Cache Mode -Settings to Improve Performance] -** link:persistence-cache002.adoc#GKJDK[44.2.1 Setting the Cache -Retrieval and Store Modes] -*** link:persistence-cache002.adoc#GKJDR[44.2.1.1 Cache Retrieval Mode] -*** link:persistence-cache002.adoc#GKJDD[44.2.1.2 Cache Store Mode] -*** link:persistence-cache002.adoc#GKJDS[44.2.1.3 Setting the Cache -Retrieval or Store Mode] -** link:persistence-cache002.adoc#GKJEB[44.2.2 Controlling the -Second-Level Cache Programmatically] -*** link:persistence-cache002.adoc#CHDEECCF[44.2.2.1 Overview of the -javax.persistence.Cache Interface] -*** link:persistence-cache002.adoc#GKJDZ[44.2.2.2 Checking whether an -Entity's Data Is Cached] -*** link:persistence-cache002.adoc#GKJDQ[44.2.2.3 Removing an Entity from -the Cache] -*** link:persistence-cache002.adoc#GKJDA[44.2.2.4 Removing All Data from -the Cache] - -[[part-ix-messaging]] -link:partmessaging.adoc#GFIRP3[Part IX Messaging] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -[[java-message-service-concepts]] -link:jms-concepts.adoc#BNCDQ[45 Java Message Service Concepts] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -* link:jms-concepts001.adoc#BNCDR[45.1 Overview of the JMS API] -** link:jms-concepts001.adoc#BNCDS[45.1.1 What Is Messaging?] -** link:jms-concepts001.adoc#BNCDT[45.1.2 What Is the JMS API?] -** link:jms-concepts001.adoc#BNCDU[45.1.3 When Can You Use the JMS API?] -** link:jms-concepts001.adoc#BNCDW[45.1.4 How Does the JMS API Work with -the Java EE Platform?] -* link:jms-concepts002.adoc#BNCDX[45.2 Basic JMS API Concepts] -** link:jms-concepts002.adoc#BNCDY[45.2.1 JMS API Architecture] -** link:jms-concepts002.adoc#BNCEA[45.2.2 Messaging Styles] -*** link:jms-concepts002.adoc#BNCEB[45.2.2.1 Point-to-Point Messaging -Style] -*** link:jms-concepts002.adoc#BNCED[45.2.2.2 Publish/Subscribe Messaging -Style] -** link:jms-concepts002.adoc#BNCEG[45.2.3 Message Consumption] -* link:jms-concepts003.adoc#BNCEH[45.3 The JMS API Programming Model] -** link:jms-concepts003.adoc#BNCEJ[45.3.1 JMS Administered Objects] -*** link:jms-concepts003.adoc#BNCEK[45.3.1.1 JMS Connection Factories] -*** link:jms-concepts003.adoc#BNCEL[45.3.1.2 JMS Destinations] -** link:jms-concepts003.adoc#BNCEM[45.3.2 Connections] -** link:jms-concepts003.adoc#BNCEN[45.3.3 Sessions] -** link:jms-concepts003.adoc#BABGDFEA[45.3.4 JMSContext Objects] -** link:jms-concepts003.adoc#BNCEO[45.3.5 JMS Message Producers] -** link:jms-concepts003.adoc#BNCEP[45.3.6 JMS Message Consumers] -*** link:jms-concepts003.adoc#BNCEQ[45.3.6.1 JMS Message Listeners] -*** link:jms-concepts003.adoc#BNCER[45.3.6.2 JMS Message Selectors] -*** link:jms-concepts003.adoc#BABEEJJJ[45.3.6.3 Consuming Messages from -Topics] -*** link:jms-concepts003.adoc#BNCGD[45.3.6.4 Creating Durable -Subscriptions] -*** link:jms-concepts003.adoc#BABJCIGJ[45.3.6.5 Creating Shared -Subscriptions] -** link:jms-concepts003.adoc#BNCES[45.3.7 JMS Messages] -*** link:jms-concepts003.adoc#BNCET[45.3.7.1 Message Headers] -*** link:jms-concepts003.adoc#BNCEV[45.3.7.2 Message Properties] -*** link:jms-concepts003.adoc#BNCEW[45.3.7.3 Message Bodies] -** link:jms-concepts003.adoc#BNCEY[45.3.8 JMS Queue Browsers] -** link:jms-concepts003.adoc#BNCEZ[45.3.9 JMS Exception Handling] -* link:jms-concepts004.adoc#BNCFU[45.4 Using Advanced JMS Features] -** link:jms-concepts004.adoc#BNCFW[45.4.1 Controlling Message -Acknowledgment] -** link:jms-concepts004.adoc#BNCFV[45.4.2 Specifying Options for Sending -Messages] -*** link:jms-concepts004.adoc#BNCFY[45.4.2.1 Specifying Message -Persistence] -*** link:jms-concepts004.adoc#BNCFZ[45.4.2.2 Setting Message Priority -Levels] -*** link:jms-concepts004.adoc#BNCGA[45.4.2.3 Allowing Messages to Expire] -*** link:jms-concepts004.adoc#BABGEADH[45.4.2.4 Specifying a Delivery -Delay] -*** link:jms-concepts004.adoc#BABJFIAD[45.4.2.5 Using JMSProducer Method -Chaining] -** link:jms-concepts004.adoc#BNCGB[45.4.3 Creating Temporary -Destinations] -** link:jms-concepts004.adoc#BNCGH[45.4.4 Using JMS Local Transactions] -** link:jms-concepts004.adoc#BABFIFAJ[45.4.5 Sending Messages -Asynchronously] -* link:jms-concepts005.adoc#BNCGL[45.5 Using the JMS API in Java EE -Applications] -** link:jms-concepts005.adoc#CHDGICJB[45.5.1 Overview of Using the JMS -API] -** link:jms-concepts005.adoc#BABHFBDH[45.5.2 Creating Resources for Java -EE Applications] -** link:jms-concepts005.adoc#BNCGM[45.5.3 Using Resource Injection in -Enterprise Bean or Web Components] -*** link:jms-concepts005.adoc#CHDCHDIJ[45.5.3.1 Injecting a -ConnectionFactory, Queue, or Topic] -*** link:jms-concepts005.adoc#BABCJBEE[45.5.3.2 Injecting a JMSContext -Object] -** link:jms-concepts005.adoc#BNCGN[45.5.4 Using Java EE Components to -Produce and to Synchronously Receive Messages] -*** link:jms-concepts005.adoc#BNCGO[45.5.4.1 Managing JMS Resources in -Web and EJB Components] -*** link:jms-concepts005.adoc#BNCGP[45.5.4.2 Managing Transactions in -Session Beans] -** link:jms-concepts005.adoc#BNCGQ[45.5.5 Using Message-Driven Beans to -Receive Messages Asynchronously] -** link:jms-concepts005.adoc#BNCGS[45.5.6 Managing JTA Transactions] -* link:jms-concepts006.adoc#BNCGU[45.6 Further Information about JMS] - -[[java-message-service-examples]] -link:jms-examples.adoc#BNCGV[46 Java Message Service Examples] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -* link:jms-examples001.adoc#A1251921[46.1 Building and Running Java -Message Service Examples] -* link:jms-examples002.adoc#BABEFBHJ[46.2 Overview of the JMS Examples] -* link:jms-examples003.adoc#BNCFA[46.3 Writing Simple JMS Applications] -** link:jms-examples003.adoc#CHDCEFGA[46.3.1 Overview of Writing Simple -JMS Application] -** link:jms-examples003.adoc#BNCFD[46.3.2 Starting the JMS Provider] -** link:jms-examples003.adoc#GKTJS[46.3.3 Creating JMS Administered -Objects] -*** link:jms-examples003.adoc#BABHEFCB[46.3.3.1 To Create Resources for -the Simple Examples] -** link:jms-examples003.adoc#BABEEABE[46.3.4 Building All the Simple -Examples] -*** link:jms-examples003.adoc#CHDJEJCD[46.3.4.1 To Build All the Simple -Examples Using NetBeans IDE] -*** link:jms-examples003.adoc#CHDGHJAA[46.3.4.2 To Build All the Simple -Examples Using Maven] -** link:jms-examples003.adoc#BABIHCAE[46.3.5 Sending Messages] -*** link:jms-examples003.adoc#CHDGHJHH[46.3.5.1 General Steps Performed -in the Example] -*** link:jms-examples003.adoc#CHDFBABB[46.3.5.2 The Producer.java Client] -*** link:jms-examples003.adoc#CHDHIIHE[46.3.5.3 To Run the Producer -Client] -** link:jms-examples003.adoc#BNCFB[46.3.6 Receiving Messages -Synchronously] -*** link:jms-examples003.adoc#BNCFC[46.3.6.1 The SynchConsumer.java -Client] -*** link:jms-examples003.adoc#BNCFG[46.3.6.2 To Run the SynchConsumer and -Producer Clients] -** link:jms-examples003.adoc#BNCFH[46.3.7 Using a Message Listener for -Asynchronous Message Delivery] -*** link:jms-examples003.adoc#BNCFI[46.3.7.1 Writing the -AsynchConsumer.java and TextListener.java Clients] -*** link:jms-examples003.adoc#BNCFK[46.3.7.2 To Run the AsynchConsumer -and Producer Clients] -** link:jms-examples003.adoc#BNCFL[46.3.8 Browsing Messages on a Queue] -*** link:jms-examples003.adoc#BNCFM[46.3.8.1 The MessageBrowser.java -Client] -*** link:jms-examples003.adoc#BNCFN[46.3.8.2 To Run the QueueBrowser -Client] -** link:jms-examples003.adoc#BABDDHHC[46.3.9 Running Multiple Consumers -on the Same Destination] -** link:jms-examples003.adoc#BNCFX[46.3.10 Acknowledging Messages] -*** link:jms-examples003.adoc#GJSCG[46.3.10.1 To Run the -ClientAckConsumer Client] -* link:jms-examples004.adoc#GIWFH[46.4 Writing More Advanced JMS -Applications] -** link:jms-examples004.adoc#BNCGG[46.4.1 Using Durable Subscriptions] -*** link:jms-examples004.adoc#sthref199[46.4.1.1 To Create Resources for -the Durable Subscription Example] -*** link:jms-examples004.adoc#GJSCI[46.4.1.2 To Run the Durable -Subscription Example] -*** link:jms-examples004.adoc#sthref200[46.4.1.3 To Run the unsubscriber -Example] -** link:jms-examples004.adoc#BNCGJ[46.4.2 Using Local Transactions] -*** link:jms-examples004.adoc#sthref202[46.4.2.1 To Create Resources for -the transactedexample Example] -*** link:jms-examples004.adoc#GJSHA[46.4.2.2 To Run the transactedexample -Clients] -* link:jms-examples005.adoc#BABGEFHC[46.5 Writing High Performance and -Scalable JMS Applications] -** link:jms-examples005.adoc#BABIBEAC[46.5.1 Using Shared Nondurable -Subscriptions] -*** link:jms-examples005.adoc#sthref203[46.5.1.1 Writing the Clients for -the Shared Consumer Example] -*** link:jms-examples005.adoc#sthref204[46.5.1.2 To Run the -SharedConsumer and Producer Clients] -** link:jms-examples005.adoc#BABEJBHA[46.5.2 Using Shared Durable -Subscriptions] -*** link:jms-examples005.adoc#sthref205[46.5.2.1 To Run the -SharedDurableConsumer and Producer Clients] -* link:jms-examples006.adoc#BABBABFC[46.6 Sending and Receiving Messages -Using a Simple Web Application] -** link:jms-examples006.adoc#sthref208[46.6.1 The websimplemessage -Facelets Pages] -** link:jms-examples006.adoc#sthref209[46.6.2 The websimplemessage -Managed Beans] -** link:jms-examples006.adoc#sthref210[46.6.3 Running the -websimplemessage Example] -*** link:jms-examples006.adoc#CHDHEHAB[46.6.3.1 Creating Resources for -the websimplemessage Example] -*** link:jms-examples006.adoc#CHDBADGA[46.6.3.2 To Package and Deploy -websimplemessage Using NetBeans IDE] -*** link:jms-examples006.adoc#CHDBBBEI[46.6.3.3 To Package and Deploy -websimplemessage Using Maven] -*** link:jms-examples006.adoc#CHDIFEHC[46.6.3.4 To Run the -websimplemessage Example] -* link:jms-examples007.adoc#BNBPK[46.7 Receiving Messages Asynchronously -Using a Message-Driven Bean] -** link:jms-examples007.adoc#BNBPL[46.7.1 Overview of the simplemessage -Example] -** link:jms-examples007.adoc#BNBPN[46.7.2 The simplemessage Application -Client] -** link:jms-examples007.adoc#BNBPO[46.7.3 The simplemessage -Message-Driven Bean Class] -*** link:jms-examples007.adoc#BNBPP[46.7.3.1 The onMessage Method] -** link:jms-examples007.adoc#BNBPQ[46.7.4 Running the simplemessage -Example] -*** link:jms-examples007.adoc#BNBPR[46.7.4.1 Creating Resources for the -simplemessage Example] -*** link:jms-examples007.adoc#CHDFBDDA[46.7.4.2 To Run the simplemessage -Example Using NetBeans IDE] -*** link:jms-examples007.adoc#BNBPT[46.7.4.3 To Run the simplemessage -Example Using Maven] -* link:jms-examples008.adoc#BNCGW[46.8 Sending Messages from a Session -Bean to an MDB] -** link:jms-examples008.adoc#BNCGX[46.8.1 Writing the Application -Components for the clientsessionmdb Example] -*** link:jms-examples008.adoc#BNCGZ[46.8.1.1 Coding the Application -Client: MyAppClient.java] -*** link:jms-examples008.adoc#BNCHA[46.8.1.2 Coding the Publisher Session -Bean] -*** link:jms-examples008.adoc#BNCHB[46.8.1.3 Coding the Message-Driven -Bean: MessageBean.java] -** link:jms-examples008.adoc#CHDDFAHA[46.8.2 Running the clientsessionmdb -Example] -*** link:jms-examples008.adoc#CHDGGAIB[46.8.2.1 To Run clientsessionmdb -Using NetBeans IDE] -*** link:jms-examples008.adoc#CHDDDHBE[46.8.2.2 To Run clientsessionmdb -Using Maven] -* link:jms-examples009.adoc#BNCHF[46.9 Using an Entity to Join Messages -from Two MDBs] -** link:jms-examples009.adoc#BNCHG[46.9.1 Overview of the clientmdbentity -Example Application] -** link:jms-examples009.adoc#BNCHI[46.9.2 Writing the Application -Components for the clientmdbentity Example] -*** link:jms-examples009.adoc#BNCHJ[46.9.2.1 Coding the Application -Client: HumanResourceClient.java] -*** link:jms-examples009.adoc#BNCHK[46.9.2.2 Coding the Message-Driven -Beans for the clientmdbentity Example] -*** link:jms-examples009.adoc#BNCHL[46.9.2.3 Coding the Entity Class for -the clientmdbentity Example] -** link:jms-examples009.adoc#CHDEEDJH[46.9.3 Running the clientmdbentity -Example] -*** link:jms-examples009.adoc#CHDIJDEE[46.9.3.1 To Run clientmdbentity -Using NetBeans IDE] -*** link:jms-examples009.adoc#CHDICHGH[46.9.3.2 To Run clientmdbentity -Using Maven] -*** link:jms-examples009.adoc#CHDCDEEF[46.9.3.3 Viewing the Application -Output] -* link:jms-examples010.adoc#BABDFDJC[46.10 Using NetBeans IDE to Create -JMS Resources] -** link:jms-examples010.adoc#CHDFIJBJ[46.10.1 To Create JMS Resources -Using NetBeans IDE] -** link:jms-examples010.adoc#CHDCFADI[46.10.2 To Delete JMS Resources -Using NetBeans IDE] - -[[part-x-security]] -link:partsecurity.adoc#GIJRP[Part X Security] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -[[introduction-to-security-in-the-java-ee-platform]] -link:security-intro.adoc#BNBWJ[47 Introduction to Security in the Java EE Platform] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -* link:security-intro001.adoc#BNBWK[47.1 Overview of Java EE Security] -** link:security-intro001.adoc#BNBWL[47.1.1 A Simple Application Security -Walkthrough] -*** link:security-intro001.adoc#BNBWM[47.1.1.1 Step 1: Initial Request] -*** link:security-intro001.adoc#BNBWO[47.1.1.2 Step 2: Initial -Authentication] -*** link:security-intro001.adoc#BNBWQ[47.1.1.3 Step 3: URL Authorization] -*** link:security-intro001.adoc#BNBWS[47.1.1.4 Step 4: Fulfilling the -Original Request] -*** link:security-intro001.adoc#BNBWU[47.1.1.5 Step 5: Invoking -Enterprise Bean Business Methods] -** link:security-intro001.adoc#BNBWW[47.1.2 Features of a Security -Mechanism] -** link:security-intro001.adoc#BNBWX[47.1.3 Characteristics of -Application Security] -* link:security-intro002.adoc#BNBWY[47.2 Security Mechanisms] -** link:security-intro002.adoc#BNBWZ[47.2.1 Java SE Security Mechanisms] -** link:security-intro002.adoc#BNBXA[47.2.2 Java EE Security Mechanisms] -*** link:security-intro002.adoc#BNBXB[47.2.2.1 Application-Layer -Security] -*** link:security-intro002.adoc#BNBXC[47.2.2.2 Transport-Layer Security] -*** link:security-intro002.adoc#BNBXD[47.2.2.3 Message-Layer Security] -* link:security-intro003.adoc#BNBXE[47.3 Securing Containers] -** link:security-intro003.adoc#BNBXG[47.3.1 Using Annotations to Specify -Security Information] -** link:security-intro003.adoc#BNBXF[47.3.2 Using Deployment Descriptors -for Declarative Security] -** link:security-intro003.adoc#BNBXH[47.3.3 Using Programmatic Security] -* link:security-intro004.adoc#BNBXI[47.4 Securing GlassFish Server] -* link:security-intro005.adoc#BNBXJ[47.5 Working with Realms, Users, -Groups, and Roles] -** link:security-intro005.adoc#BNBXK[47.5.1 What Are Realms, Users, -Groups, and Roles?] -*** link:security-intro005.adoc#BNBXM[47.5.1.1 What Is a Realm?] -*** link:security-intro005.adoc#BNBXN[47.5.1.2 What Is a User?] -*** link:security-intro005.adoc#BNBXO[47.5.1.3 What Is a Group?] -*** link:security-intro005.adoc#BNBXP[47.5.1.4 What Is a Role?] -*** link:security-intro005.adoc#BNBXQ[47.5.1.5 Some Other Terminology] -** link:security-intro005.adoc#BNBXR[47.5.2 Managing Users and Groups in -GlassFish Server] -*** link:security-intro005.adoc#BNBXS[47.5.2.1 To Add Users to GlassFish -Server] -** link:security-intro005.adoc#BNBXU[47.5.3 Setting Up Security Roles] -** link:security-intro005.adoc#BNBXV[47.5.4 Mapping Roles to Users and -Groups] -* link:security-intro006.adoc#BNBXW[47.6 Establishing a Secure Connection -Using SSL] -** link:security-intro006.adoc#BNBXX[47.6.1 Verifying and Configuring SSL -Support] -* link:security-intro007.adoc#BNBYJ[47.7 Further Information about -Security] - -[[getting-started-securing-web-applications]] -link:security-webtier.adoc#BNCAS[48 Getting Started Securing Web Applications] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -* link:security-webtier001.adoc#BNCAT[48.1 Overview of Web Application -Security] -* link:security-webtier002.adoc#GKBAA[48.2 Securing Web Applications] -** link:security-webtier002.adoc#CHDBIBHI[48.2.1 Overview of Securing Web -Applications] -** link:security-webtier002.adoc#BNCBK[48.2.2 Specifying Security -Constraints] -*** link:security-webtier002.adoc#GJJCD[48.2.2.1 Specifying a Web -Resource Collection] -*** link:security-webtier002.adoc#GJJCG[48.2.2.2 Specifying an -Authorization Constraint] -*** link:security-webtier002.adoc#BNCBM[48.2.2.3 Specifying a Secure -Connection] -*** link:security-webtier002.adoc#BNCBL[48.2.2.4 Specifying Security -Constraints for Resources] -** link:security-webtier002.adoc#GKBSA[48.2.3 Specifying Authentication -Mechanisms] -*** link:security-webtier002.adoc#BNCBO[48.2.3.1 HTTP Basic -Authentication] -*** link:security-webtier002.adoc#BNCBQ[48.2.3.2 Form-Based -Authentication] -*** link:security-webtier002.adoc#BNCBW[48.2.3.3 Digest Authentication] -** link:security-webtier002.adoc#BNCBN[48.2.4 Specifying an -Authentication Mechanism in the Deployment Descriptor] -** link:security-webtier002.adoc#BNCAV[48.2.5 Declaring Security Roles] -* link:security-webtier003.adoc#GJIIE[48.3 Using Programmatic Security -with Web Applications] -** link:security-webtier003.adoc#GIRCJ[48.3.1 Authenticating Users -Programmatically] -** link:security-webtier003.adoc#BNCBA[48.3.2 Checking Caller Identity -Programmatically] -** link:security-webtier003.adoc#GJJLQ[48.3.3 Example Code for -Programmatic Security] -** link:security-webtier003.adoc#BNCBB[48.3.4 Declaring and Linking Role -References] -* link:security-webtier004.adoc#BNCBX[48.4 Examples: Securing Web -Applications] -** link:security-webtier004.adoc#CHDEBCHG[48.4.1 Overview of Examples of -Securing Web Applications] -** link:security-webtier004.adoc#GJJLK[48.4.2 To Set Up Your System for -Running the Security Examples] -** link:security-webtier004.adoc#BNCCK[48.4.3 The hello2-basicauth -Example: Basic Authentication with a Servlet] -*** link:security-webtier004.adoc#GJRMH[48.4.3.1 Specifying Security for -Basic Authentication Using Annotations] -*** link:security-webtier004.adoc#GJQYS[48.4.3.2 To Build, Package, and -Deploy the hello2-basicauth Example Using NetBeans IDE] -*** link:security-webtier004.adoc#GJQZH[48.4.3.3 To Build, Package, and -Deploy the hello2-basicauth Example Using Maven] -*** link:security-webtier004.adoc#GJQZF[48.4.3.4 To Run the -hello2-basicauth Example] -** link:security-webtier004.adoc#BNCBY[48.4.4 The hello1-formauth -Example: Form-Based Authentication with a JavaServer Faces Application] -*** link:security-webtier004.adoc#BNCCA[48.4.4.1 Creating the Login Form -and the Error Page] -*** link:security-webtier004.adoc#BNCCB[48.4.4.2 Specifying Security for -the Form-Based Authentication Example] -*** link:security-webtier004.adoc#GJRBA[48.4.4.3 To Build, Package, and -Deploy the hello1-formauth Example Using NetBeans IDE] -*** link:security-webtier004.adoc#GJRAZ[48.4.4.4 To Build, Package, and -Deploy the hello1-formauth Example Using Maven and the asadmin Command] -*** link:security-webtier004.adoc#GJRAL[48.4.4.5 To Run the -hello1-formauth Example] - -[[getting-started-securing-enterprise-applications]] -link:security-javaee.adoc#BNBYK[49 Getting Started Securing Enterprise Applications] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -* link:security-javaee001.adoc#CACGIFHJ[49.1 Basic Security Tasks for -Enterprise Applications] -* link:security-javaee002.adoc#BNBYL[49.2 Securing Enterprise Beans] -** link:security-javaee002.adoc#GJGDI[49.2.1 Securing an Enterprise Bean -Using Declarative Security] -*** link:security-javaee002.adoc#GJGCQ[49.2.1.1 Specifying Authorized -Users by Declaring Security Roles] -*** link:security-javaee002.adoc#BNBYU[49.2.1.2 Specifying an -Authentication Mechanism and Secure Connection] -** link:security-javaee002.adoc#GJGCS[49.2.2 Securing an Enterprise Bean -Programmatically] -*** link:security-javaee002.adoc#GJGCR[49.2.2.1 Accessing an Enterprise -Bean Caller's Security Context] -** link:security-javaee002.adoc#BNBYR[49.2.3 Propagating a Security -Identity (Run-As)] -*** link:security-javaee002.adoc#BNBZB[49.2.3.1 Configuring a Component's -Propagated Security Identity] -*** link:security-javaee002.adoc#BNBZC[49.2.3.2 Trust between Containers] -** link:security-javaee002.adoc#BNBZG[49.2.4 Deploying Secure Enterprise -Beans] -* link:security-javaee003.adoc#GKBSZ[49.3 Examples: Securing Enterprise -Beans] -** link:security-javaee003.adoc#BNBZK[49.3.1 The cart-secure Example: -Securing an Enterprise Bean with Declarative Security] -*** link:security-javaee003.adoc#BNBZL[49.3.1.1 Annotating the Bean] -*** link:security-javaee003.adoc#BNBZN[49.3.1.2 To Run the cart-secure -Example Using NetBeans IDE] -*** link:security-javaee003.adoc#BNBZO[49.3.1.3 To Run the cart-secure -Example Using Maven] -** link:security-javaee003.adoc#BNCAA[49.3.2 The converter-secure -Example: Securing an Enterprise Bean with Programmatic Security] -*** link:security-javaee003.adoc#BNCAB[49.3.2.1 Modifying ConverterBean] -*** link:security-javaee003.adoc#GKBSI[49.3.2.2 Modifying -ConverterServlet] -*** link:security-javaee003.adoc#BNCAD[49.3.2.3 To Run the -converter-secure Example Using NetBeans IDE] -*** link:security-javaee003.adoc#BNCAE[49.3.2.4 To Run the -converter-secure Example Using Maven] -*** link:security-javaee003.adoc#GJTDP[49.3.2.5 To Run the -converter-secure Example] - -[[java-ee-security-advanced-topics]] -link:security-advanced.adoc#GJJWX[50 Java EE Security: Advanced Topics] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -* link:security-advanced001.adoc#BNBYB[50.1 Working with Digital -Certificates] -** link:security-advanced001.adoc#BNBYC[50.1.1 Creating a Server -Certificate] -*** link:security-advanced001.adoc#GJRGY[50.1.1.1 To Use keytool to -Create a Server Certificate] -** link:security-advanced001.adoc#GLIFW[50.1.2 Adding Users to the -Certificate Realm] -** link:security-advanced001.adoc#BNBYF[50.1.3 Using a Different Server -Certificate with GlassFish Server] -*** link:security-advanced001.adoc#sthref223[50.1.3.1 To Specify a -Different Server Certificate] -* link:security-advanced002.adoc#GLIEN[50.2 Authentication Mechanisms] -** link:security-advanced002.adoc#GLIEQ[50.2.1 Client Authentication] -** link:security-advanced002.adoc#GLIEL[50.2.2 Mutual Authentication] -*** link:security-advanced002.adoc#BNBYH[50.2.2.1 Enabling Mutual -Authentication over SSL] -*** link:security-advanced002.adoc#BNBYI[50.2.2.2 Creating a Client -Certificate for Mutual Authentication] -* link:security-advanced003.adoc#BABEJJDE[50.3 Using the JDBC Realm for -User Authentication] -** link:security-advanced003.adoc#sthref226[50.3.1 To Configure a JDBC -Authentication Realm] -* link:security-advanced004.adoc#BABGEJJJ[50.4 Securing HTTP Resources] -* link:security-advanced005.adoc#GLIGC[50.5 Securing Application Clients] -** link:security-advanced005.adoc#GLIDW[50.5.1 Using Login Modules] -** link:security-advanced005.adoc#GLIHQ[50.5.2 Using Programmatic Login] -* link:security-advanced006.adoc#GLIFD[50.6 Securing Enterprise -Information Systems Applications] -** link:security-advanced006.adoc#BABBJHIC[50.6.1 Overview of Securing -Enterprise Information Systems Applications] -** link:security-advanced006.adoc#GLIHL[50.6.2 Container-Managed Sign-On] -** link:security-advanced006.adoc#GLIDP[50.6.3 Component-Managed Sign-On] -** link:security-advanced006.adoc#GLIGS[50.6.4 Configuring Resource -Adapter Security] -** link:security-advanced006.adoc#GLIGW[50.6.5 Mapping an Application -Principal to EIS Principals] -* link:security-advanced007.adoc#GKHRL[50.7 Configuring Security Using -Deployment Descriptors] -** link:security-advanced007.adoc#BNCCM[50.7.1 Specifying Security for -Basic Authentication in the Deployment Descriptor] -** link:security-advanced007.adoc#GKAFQ[50.7.2 Specifying Non-Default -Principal-to-Role Mapping in the Deployment Descriptor] -* link:security-advanced008.adoc#BABBGBBF[50.8 Further Information about -Advanced Security Topics] - -[[part-xi-java-ee-supporting-technologies]] -link:partsupporttechs.adoc#GIJUE[Part XI Java EE Supporting Technologies] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -[[transactions]] -link:transactions.adoc#BNCIH[51 Transactions] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -* link:transactions001.adoc#A1024277[51.1 Overview of Transactions] -* link:transactions002.adoc#GIJRG[51.2 Transactions in Java EE -Applications] -* link:transactions003.adoc#BNCII[51.3 What Is a Transaction?] -* link:transactions004.adoc#BNCIJ[51.4 Container-Managed Transactions] -** link:transactions004.adoc#BNCIK[51.4.1 Transaction Attributes] -*** link:transactions004.adoc#BNCIM[51.4.1.1 Required Attribute] -*** link:transactions004.adoc#BNCIN[51.4.1.2 RequiresNew Attribute] -*** link:transactions004.adoc#BNCIO[51.4.1.3 Mandatory Attribute] -*** link:transactions004.adoc#BNCIP[51.4.1.4 NotSupported Attribute] -*** link:transactions004.adoc#BNCIQ[51.4.1.5 Supports Attribute] -*** link:transactions004.adoc#BNCIR[51.4.1.6 Never Attribute] -*** link:transactions004.adoc#BNCIS[51.4.1.7 Summary of Transaction -Attributes] -*** link:transactions004.adoc#BNCIU[51.4.1.8 Setting Transaction -Attributes] -** link:transactions004.adoc#BNCIV[51.4.2 Rolling Back a -Container-Managed Transaction] -** link:transactions004.adoc#BNCIW[51.4.3 Synchronizing a Session Bean's -Instance Variables] -** link:transactions004.adoc#BNCIX[51.4.4 Methods Not Allowed in -Container-Managed Transactions] -* link:transactions005.adoc#BNCIY[51.5 Bean-Managed Transactions] -** link:transactions005.adoc#BNCIZ[51.5.1 JTA Transactions] -** link:transactions005.adoc#BNCJA[51.5.2 Returning without Committing] -** link:transactions005.adoc#BNCJB[51.5.3 Methods Not Allowed in -Bean-Managed Transactions] -* link:transactions006.adoc#BNCJC[51.6 Transaction Timeouts] -** link:transactions006.adoc#sthref230[51.6.1 To Set a Transaction -Timeout] -* link:transactions007.adoc#BNCJD[51.7 Updating Multiple Databases] -* link:transactions008.adoc#BNCJG[51.8 Transactions in Web Components] -* link:transactions009.adoc#GKCMI[51.9 Further Information about -Transactions] - -[[resource-adapters-and-contracts]] -link:resources.adoc#BNCJH[52 Resource Adapters and Contracts] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -* link:resources001.adoc#GIPGL[52.1 What Is a Resource Adapter?] -** link:resources001.adoc#GIPGY[52.1.1 Management Contracts] -*** link:resources001.adoc#GIPHT[52.1.1.1 Lifecycle Management] -*** link:resources001.adoc#GIPIG[52.1.1.2 Work Management Contract] -** link:resources001.adoc#GIPMK[52.1.2 Generic Work Context Contract] -** link:resources001.adoc#GKCKI[52.1.3 Outbound and Inbound Contracts] -* link:resources002.adoc#GIRDD[52.2 Metadata Annotations] -* link:resources003.adoc#GIPJU[52.3 Common Client Interface] -* link:resources004.adoc#CHDJFIGB[52.4 Using Resource Adapters with -Contexts and Dependency Injection for Java EE (CDI)] -* link:resources005.adoc#BNCJW[52.5 Further Information about Resource -Adapters] - -[[the-resource-adapter-examples]] -link:connectorexample.adoc#GLODB[53 The Resource Adapter Examples] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -* link:connectorexample001.adoc#A1253757[53.1 Overview of the Resource -Adapter Examples] -* link:connectorexample002.adoc#CHDFHAID[53.2 The trading Example] -** link:connectorexample002.adoc#CHDFADJD[53.2.1 Using the Outbound -Resource Adapter] -** link:connectorexample002.adoc#sthref236[53.2.2 Implementing the -Outbound Resource Adapter] -** link:connectorexample002.adoc#sthref239[53.2.3 Running the trading -Example] -*** link:connectorexample002.adoc#BABCHDDC[53.2.3.1 To Run the trading -Example Using NetBeans IDE] -*** link:connectorexample002.adoc#BABFJAAG[53.2.3.2 To Run the trading -Example Using Maven] -* link:connectorexample003.adoc#CHDJEADB[53.3 The traffic Example] -** link:connectorexample003.adoc#sthref241[53.3.1 Using the Inbound -Resource Adapter] -** link:connectorexample003.adoc#sthref242[53.3.2 Implementing the -Inbound Resource Adapter] -** link:connectorexample003.adoc#sthref245[53.3.3 Running the traffic -Example] -*** link:connectorexample003.adoc#BABIJJEH[53.3.3.1 To Run the traffic -Example Using NetBeans IDE] -*** link:connectorexample003.adoc#BABBBGBA[53.3.3.2 To Run the traffic -Example Using Maven] - -[[using-java-ee-interceptors]] -link:interceptors.adoc#GKEED[54 Using Java EE Interceptors] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -* link:interceptors001.adoc#GKIGQ[54.1 Overview of Interceptors] -** link:interceptors001.adoc#GKECK[54.1.1 Interceptor Classes] -** link:interceptors001.adoc#GKEDY[54.1.2 Interceptor Lifecycle] -** link:interceptors001.adoc#GKHSN[54.1.3 Interceptors and CDI] -* link:interceptors002.adoc#GKEDM[54.2 Using Interceptors] -** link:interceptors002.adoc#GKECY[54.2.1 Intercepting Method -Invocations] -*** link:interceptors002.adoc#GKHMH[54.2.1.1 Using Multiple Method -Interceptors] -*** link:interceptors002.adoc#GKHOV[54.2.1.2 Accessing Target Method -Parameters from an Interceptor Class] -** link:interceptors002.adoc#GKECR[54.2.2 Intercepting Lifecycle Callback -Events] -*** link:interceptors002.adoc#sthref247[54.2.2.1 Using AroundConstruct -Interceptor Methods] -*** link:interceptors002.adoc#GKHNI[54.2.2.2 Using Multiple Lifecycle -Callback Interceptors] -** link:interceptors002.adoc#GKEDU[54.2.3 Intercepting Timeout Events] -*** link:interceptors002.adoc#GKHLA[54.2.3.1 Using Multiple Timeout -Interceptors] -** link:interceptors002.adoc#sthref248[54.2.4 Binding Interceptors to -Components] -*** link:interceptors002.adoc#sthref249[54.2.4.1 Declaring the -Interceptor Bindings on an Interceptor Class] -*** link:interceptors002.adoc#sthref250[54.2.4.2 Binding a Component to -an Interceptor] -** link:interceptors002.adoc#sthref251[54.2.5 Ordering Interceptors] -* link:interceptors003.adoc#GKECI[54.3 The interceptor Example -Application] -** link:interceptors003.adoc#sthref253[54.3.1 Running the interceptor -Example] -*** link:interceptors003.adoc#GKEDF[54.3.1.1 To Run the interceptor -Example Using NetBeans IDE] -*** link:interceptors003.adoc#GKECT[54.3.1.2 To Run the interceptor -Example Using Maven] - -[[batch-processing]] -link:batch-processing.adoc#GKJIQ6[55 Batch Processing] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -* link:batch-processing001.adoc#BCGJDEEH[55.1 Introduction to Batch -Processing] -** link:batch-processing001.adoc#sthref254[55.1.1 Steps in Batch Jobs] -** link:batch-processing001.adoc#sthref256[55.1.2 Parallel Processing] -** link:batch-processing001.adoc#sthref257[55.1.3 Status and Decision -Elements] -** link:batch-processing001.adoc#sthref259[55.1.4 Batch Framework -Functionality] -* link:batch-processing002.adoc#BCGGIBHA[55.2 Batch Processing in Java -EE] -** link:batch-processing002.adoc#BABEAFJI[55.2.1 The Batch Processing -Framework] -** link:batch-processing002.adoc#BABCGDHJ[55.2.2 Creating Batch -Applications] -** link:batch-processing002.adoc#BABDGDJB[55.2.3 Elements of a Batch Job] -** link:batch-processing002.adoc#BABHJEJC[55.2.4 Properties and -Parameters] -** link:batch-processing002.adoc#BABHJGDH[55.2.5 Job Instances and Job -Executions] -** link:batch-processing002.adoc#BABBFGEF[55.2.6 Batch and Exit Status] -* link:batch-processing003.adoc#BCGHBJIG[55.3 Simple Use Case] -** link:batch-processing003.adoc#sthref261[55.3.1 Chunk Step] -** link:batch-processing003.adoc#sthref262[55.3.2 Task Step] -* link:batch-processing004.adoc#BCGDDBBG[55.4 Using the Job Specification -Language] -** link:batch-processing004.adoc#sthref263[55.4.1 The job Element] -** link:batch-processing004.adoc#sthref264[55.4.2 The step Element] -*** link:batch-processing004.adoc#sthref265[55.4.2.1 The chunk Element] -*** link:batch-processing004.adoc#sthref267[55.4.2.2 The batchlet -Element] -*** link:batch-processing004.adoc#sthref268[55.4.2.3 The partition -Element] -** link:batch-processing004.adoc#sthref269[55.4.3 The flow Element] -** link:batch-processing004.adoc#sthref270[55.4.4 The split Element] -** link:batch-processing004.adoc#sthref271[55.4.5 The decision Element] -* link:batch-processing005.adoc#BCGHDHGH[55.5 Creating Batch Artifacts] -** link:batch-processing005.adoc#BABDAIBI[55.5.1 Batch Artifact -Interfaces] -** link:batch-processing005.adoc#BCGIFJBB[55.5.2 Dependency Injection in -Batch Artifacts] -** link:batch-processing005.adoc#BCGCJEEF[55.5.3 Using the Context -Objects from the Batch Runtime] -* link:batch-processing006.adoc#BCGCAHCB[55.6 Submitting Jobs to the -Batch Runtime] -** link:batch-processing006.adoc#sthref275[55.6.1 Starting a Job] -** link:batch-processing006.adoc#BCGIBGFC[55.6.2 Checking the Status of a -Job] -** link:batch-processing006.adoc#sthref276[55.6.3 Invoking the Batch -Runtime in Your Application] -* link:batch-processing007.adoc#BCGBBGJI[55.7 Packaging Batch -Applications] -* link:batch-processing008.adoc#BCGJHEHJ[55.8 The webserverlog Example -Application] -** link:batch-processing008.adoc#BABCHDFB[55.8.1 Architecture of the -webserverlog Example Application] -*** link:batch-processing008.adoc#BABFGCEC[55.8.1.1 The Job Definition -File] -*** link:batch-processing008.adoc#BABIHBFF[55.8.1.2 The LogLine and -LogFilteredLine Items] -*** link:batch-processing008.adoc#sthref277[55.8.1.3 The Chunk Step Batch -Artifacts] -*** link:batch-processing008.adoc#BCGCCFAC[55.8.1.4 The Listener Batch -Artifacts] -*** link:batch-processing008.adoc#sthref278[55.8.1.5 The Task Step Batch -Artifact] -*** link:batch-processing008.adoc#sthref279[55.8.1.6 The JavaServer Faces -Pages] -*** link:batch-processing008.adoc#sthref280[55.8.1.7 The Managed Bean] -** link:batch-processing008.adoc#BABFIHJA[55.8.2 Running the webserverlog -Example Application] -*** link:batch-processing008.adoc#BABHIJBE[55.8.2.1 To Run the -webserverlog Example Application Using NetBeans IDE] -*** link:batch-processing008.adoc#BABGACCD[55.8.2.2 To Run the -webserverlog Example Application Using Maven] -* link:batch-processing009.adoc#BCGFCACD[55.9 The phonebilling Example -Application] -** link:batch-processing009.adoc#BABDEIFG[55.9.1 Architecture of the -phonebilling Example Application] -*** link:batch-processing009.adoc#sthref281[55.9.1.1 The Job Definition -File] -*** link:batch-processing009.adoc#sthref282[55.9.1.2 The CallRecord and -PhoneBill Entities] -*** link:batch-processing009.adoc#sthref283[55.9.1.3 The Call Records -Chunk Step] -*** link:batch-processing009.adoc#BCGGGAHB[55.9.1.4 The Phone Billing -Chunk Step] -*** link:batch-processing009.adoc#sthref284[55.9.1.5 The JavaServer Faces -Pages] -*** link:batch-processing009.adoc#sthref285[55.9.1.6 The Managed Bean] -** link:batch-processing009.adoc#BABBGDAA[55.9.2 Running the phonebilling -Example Application] -*** link:batch-processing009.adoc#BABIBBBG[55.9.2.1 To Run the -phonebilling Example Application Using NetBeans IDE] -*** link:batch-processing009.adoc#BABFHIIB[55.9.2.2 To Run the -phonebilling Example Application Using Maven] -* link:batch-processing010.adoc#BCGHCHAJ[55.10 Further Information about -Batch Processing] - -[[concurrency-utilities-for-java-ee]] -link:concurrency-utilities.adoc#GKJIQ8[56 Concurrency Utilities for Java EE] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -* link:concurrency-utilities001.adoc#CIHDFGGG[56.1 Concurrency Basics] -** link:concurrency-utilities001.adoc#sthref286[56.1.1 Threads and -Processes] -* link:concurrency-utilities002.adoc#CIHFBCFH[56.2 Main Components of the -Concurrency Utilities] -* link:concurrency-utilities003.adoc#CIHIDBDG[56.3 Concurrency and -Transactions] -* link:concurrency-utilities004.adoc#CIHCACAA[56.4 Concurrency and -Security] -* link:concurrency-utilities005.adoc#CIHCGGEG[56.5 The jobs Concurrency -Example] -** link:concurrency-utilities005.adoc#sthref287[56.5.1 Running the jobs -Example] -*** link:concurrency-utilities005.adoc#CHDCIBBD[56.5.1.1 To Configure -GlassFish Server for the Basic Concurrency Example] -*** link:concurrency-utilities005.adoc#CHDFBAHJ[56.5.1.2 To Build, -Package, and Deploy the jobs Example Using NetBeans IDE] -*** link:concurrency-utilities005.adoc#CHDECFFF[56.5.1.3 To Build, -Package, and Deploy the jobs Example Using Maven] -*** link:concurrency-utilities005.adoc#CHDFHHAF[56.5.1.4 To Run the jobs -Example and Submit Jobs with Low Priority] -*** link:concurrency-utilities005.adoc#CHDHEABJ[56.5.1.5 To Run the jobs -Example and Submit Jobs with High Priority] -* link:concurrency-utilities006.adoc#CIHBFEAE[56.6 The taskcreator -Concurrency Example] -** link:concurrency-utilities006.adoc#sthref289[56.6.1 Running the -taskcreator Example] -*** link:concurrency-utilities006.adoc#CHDCCJHB[56.6.1.1 To Build, -Package, and Deploy the taskcreator Example Using NetBeans IDE] -*** link:concurrency-utilities006.adoc#CHDHJBDD[56.6.1.2 To Build, -Package, and Deploy the taskcreator Example Using Maven] -*** link:concurrency-utilities006.adoc#CHDBJGID[56.6.1.3 To Run the -taskcreator Example] -* link:concurrency-utilities007.adoc#CHDBIHAA[56.7 Further Information -about the Concurrency Utilities] - -[[part-xii-case-studies]] -link:partcasestudies.adoc#GKGJW[Part XII Case Studies] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -[[dukes-bookstore-case-study-example]] -link:dukes-bookstore.adoc#GLNVI[57 Duke's Bookstore Case Study Example] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -* link:dukes-bookstore001.adoc#GLOAW[57.1 Design and Architecture of -Duke's Bookstore] -* link:dukes-bookstore002.adoc#GLQFD[57.2 The Duke's Bookstore Interface] -** link:dukes-bookstore002.adoc#GLQER[57.2.1 The Book Java Persistence -API Entity] -** link:dukes-bookstore002.adoc#GLQEU[57.2.2 Enterprise Beans Used in -Duke's Bookstore] -** link:dukes-bookstore002.adoc#GLQDP[57.2.3 Facelets Pages and Managed -Beans Used in Duke's Bookstore] -** link:dukes-bookstore002.adoc#GLQDX[57.2.4 Custom Components and Other -Custom Objects Used in Duke's Bookstore] -** link:dukes-bookstore002.adoc#GLQDG[57.2.5 Properties Files Used in -Duke's Bookstore] -** link:dukes-bookstore002.adoc#GLQED[57.2.6 Deployment Descriptors Used -in Duke's Bookstore] -* link:dukes-bookstore003.adoc#GLPPQ[57.3 Running the Duke's Bookstore -Case Study Application] -** link:dukes-bookstore003.adoc#GLPQG[57.3.1 To Build and Deploy Duke's -Bookstore Using NetBeans IDE] -** link:dukes-bookstore003.adoc#GLPQN[57.3.2 To Build and Deploy Duke's -Bookstore Using Maven] -** link:dukes-bookstore003.adoc#BABEHDEG[57.3.3 To Run Duke's Bookstore] - -[[dukes-tutoring-case-study-example]] -link:dukes-tutoring.adoc#GKAEE[58 Duke's Tutoring Case Study Example] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -* link:dukes-tutoring001.adoc#GKAEI[58.1 Design and Architecture of -Duke's Tutoring] -* link:dukes-tutoring002.adoc#GKAFH[58.2 Main Interface] -** link:dukes-tutoring002.adoc#GKAFJ[58.2.1 Java Persistence API Entities -Used in the Main Interface] -** link:dukes-tutoring002.adoc#GKAFC[58.2.2 Enterprise Beans Used in the -Main Interface] -** link:dukes-tutoring002.adoc#BCGHHCDA[58.2.3 WebSocket Endpoint Used in -the Main Interface] -** link:dukes-tutoring002.adoc#GKAET[58.2.4 Facelets Files Used in the -Main Interface] -** link:dukes-tutoring002.adoc#GKADH[58.2.5 Helper Classes Used in the -Main Interface] -** link:dukes-tutoring002.adoc#GKADA[58.2.6 Properties Files] -** link:dukes-tutoring002.adoc#GKAEV[58.2.7 Deployment Descriptors Used -in Duke's Tutoring] -* link:dukes-tutoring003.adoc#GKAFW[58.3 Administration Interface] -** link:dukes-tutoring003.adoc#GKAEN[58.3.1 Enterprise Beans Used in the -Administration Interface] -** link:dukes-tutoring003.adoc#GKACB[58.3.2 Facelets Files Used in the -Administration Interface] -** link:dukes-tutoring003.adoc#BCGHIDEG[58.3.3 CDI Managed Beans Used in -the Administration Interface] -** link:dukes-tutoring003.adoc#BCGFFFCA[58.3.4 Helper Classes Used in the -Administration Interface] -* link:dukes-tutoring004.adoc#GKJNN[58.4 Running the Duke's Tutoring Case -Study Application] -** link:dukes-tutoring004.adoc#GKJOA[58.4.1 Running Duke's Tutoring] -*** link:dukes-tutoring004.adoc#GKJNR[58.4.1.1 To Build and Deploy Duke's -Tutoring Using NetBeans IDE] -*** link:dukes-tutoring004.adoc#GKJOG[58.4.1.2 To Build and Deploy Duke's -Tutoring Using Maven] -*** link:dukes-tutoring004.adoc#GKJOC[58.4.1.3 Using Duke's Tutoring] - -[[dukes-forest-case-study-example]] -link:dukes-forest.adoc#GLNPW[59 Duke's Forest Case Study Example] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -* link:dukes-forest001.adoc#A1256074[59.1 Overview of the Duke's Forest -Case Study Example] -* link:dukes-forest002.adoc#GLNRJ[59.2 Design and Architecture of Duke's -Forest] -** link:dukes-forest002.adoc#CIHHJEGA[59.2.1 The events Project] -** link:dukes-forest002.adoc#CIHFCIAC[59.2.2 The entities Project] -** link:dukes-forest002.adoc#sthref294[59.2.3 The dukes-payment Project] -** link:dukes-forest002.adoc#sthref295[59.2.4 The dukes-resources -Project] -** link:dukes-forest002.adoc#sthref296[59.2.5 The Duke's Store Project] -*** link:dukes-forest002.adoc#sthref297[59.2.5.1 Enterprise Beans Used in -Duke's Store] -*** link:dukes-forest002.adoc#sthref298[59.2.5.2 Facelets Files Used in -the Main Interface of Duke's Store] -*** link:dukes-forest002.adoc#CIHHDHIH[59.2.5.3 Facelets Files Used in -the Administration Interface of Duke's Store] -*** link:dukes-forest002.adoc#sthref299[59.2.5.4 Managed Beans Used in -Duke's Store] -*** link:dukes-forest002.adoc#sthref300[59.2.5.5 Helper Classes Used in -Duke's Store] -*** link:dukes-forest002.adoc#CIHEBAFD[59.2.5.6 Qualifiers Used in Duke's -Store] -*** link:dukes-forest002.adoc#sthref301[59.2.5.7 Event Handlers Used in -Duke's Store] -*** link:dukes-forest002.adoc#sthref302[59.2.5.8 Deployment Descriptors -Used in Duke's Store] -** link:dukes-forest002.adoc#sthref303[59.2.6 The Duke's Shipment -Project] -*** link:dukes-forest002.adoc#sthref304[59.2.6.1 Enterprise Beans Used in -Duke's Shipment] -*** link:dukes-forest002.adoc#sthref305[59.2.6.2 Facelets Files Used in -Duke's Shipment] -*** link:dukes-forest002.adoc#sthref306[59.2.6.3 Managed Beans Used in -Duke's Shipment] -*** link:dukes-forest002.adoc#sthref307[59.2.6.4 Helper Class Used in -Duke's Shipment] -*** link:dukes-forest002.adoc#sthref308[59.2.6.5 Qualifier Used in Duke's -Shipment] -*** link:dukes-forest002.adoc#sthref309[59.2.6.6 Deployment Descriptors -Used in Duke's Shipment] -* link:dukes-forest003.adoc#GLNQP[59.3 Building and Deploying the Duke's -Forest Case Study Application] -** link:dukes-forest003.adoc#CHDJDIFH[59.3.1 To Build and Deploy the -Duke's Forest Application Using NetBeans IDE] -** link:dukes-forest003.adoc#CHDEJHBJ[59.3.2 To Build and Deploy the -Duke's Forest Application Using Maven] -* link:dukes-forest004.adoc#GLNSX[59.4 Running the Duke's Forest -Application] -** link:dukes-forest004.adoc#CHDBDEHH[59.4.1 To Register as a Duke's -Store Customer] -** link:dukes-forest004.adoc#CHDCEJIC[59.4.2 To Purchase Products] -** link:dukes-forest004.adoc#CHDICAIJ[59.4.3 To Approve Shipment of a -Product] -** link:dukes-forest004.adoc#CHDIFEGC[59.4.4 To Create a New Product] - -++++ -
- ---- - - - - -
- ---- - - - -
 Next
-Next
-
Oracle Logo
-Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

-
- - - - - -
 Go To Table Of Contents
-Contents
-
-

-++++ \ No newline at end of file diff --git a/src/main/jbake/jbake.properties b/src/main/jbake/jbake.properties deleted file mode 100644 index 04823fb..0000000 --- a/src/main/jbake/jbake.properties +++ /dev/null @@ -1,7 +0,0 @@ -site.host=http://jbake.org -render.tags=false -render.sitemap=false -render.archive=false -render.feed=false -asciidoctor.option.safe=0 -asciidoctor.attributes.export=true \ No newline at end of file diff --git a/src/main/jbake/templates/footer.ftl b/src/main/jbake/templates/footer.ftl deleted file mode 100644 index 3cedb39..0000000 --- a/src/main/jbake/templates/footer.ftl +++ /dev/null @@ -1,3 +0,0 @@ -<#-- a footer template fragment included in the page template --> - - \ No newline at end of file diff --git a/src/main/jbake/templates/header.ftl b/src/main/jbake/templates/header.ftl deleted file mode 100644 index 1007f78..0000000 --- a/src/main/jbake/templates/header.ftl +++ /dev/null @@ -1,10 +0,0 @@ -<#-- a header template fragment included in the page template --> - - - - - <#if (content.title)??><#escape x as x?xml>${content.title}</#escape></#if> - - - - \ No newline at end of file diff --git a/src/main/jbake/templates/menu.ftl b/src/main/jbake/templates/menu.ftl deleted file mode 100644 index 888c03d..0000000 --- a/src/main/jbake/templates/menu.ftl +++ /dev/null @@ -1 +0,0 @@ -<#-- a menu bar template fragment included in the page template --> \ No newline at end of file diff --git a/src/main/jbake/templates/page.ftl b/src/main/jbake/templates/page.ftl deleted file mode 100644 index eca51db..0000000 --- a/src/main/jbake/templates/page.ftl +++ /dev/null @@ -1,8 +0,0 @@ -<#-- a top level page layout template --> - -<#include "header.ftl"> -<#include "menu.ftl"> - -${content.body} - -<#include "footer.ftl"> \ No newline at end of file From 95ec464bccf9ed58f6a0791f6765f2f637916ad1 Mon Sep 17 00:00:00 2001 From: "joe.ruzzi" Date: Wed, 12 Jul 2017 16:38:54 -0400 Subject: [PATCH 2/8] Update site --- css/style.css | 1 + empty_file | 0 img/jeett_dt_001.png | Bin 0 -> 26697 bytes img/jeett_dt_002.png | Bin 0 -> 18758 bytes img/jeett_dt_003.png | Bin 0 -> 26289 bytes img/jeett_dt_004.png | Bin 0 -> 32799 bytes img/jeett_dt_005.png | Bin 0 -> 22811 bytes img/jeett_dt_006.png | Bin 0 -> 17191 bytes img/jeett_dt_007.png | Bin 0 -> 22583 bytes img/jeett_dt_008.png | Bin 0 -> 18396 bytes img/jeett_dt_009.png | Bin 0 -> 14522 bytes img/leftnav.gif | Bin 0 -> 290 bytes img/oracle.gif | Bin 0 -> 2122 bytes img/rightnav.gif | Bin 0 -> 294 bytes img/toc.gif | Bin 0 -> 261 bytes overview.html | 123 + overview001.html | 130 + overview002.html | 127 + overview003.html | 119 + overview004.html | 373 +++ overview005.html | 193 ++ overview006.html | 184 ++ overview007.html | 101 + overview008.html | 623 ++++ overview009.html | 257 ++ overview010.html | 171 + partintro.html | 99 + preface.html | 328 ++ title.html | 213 ++ toc.html | 7427 ++++++++++++++++++++++++++++++++++++++++++ 30 files changed, 10469 insertions(+) create mode 100644 css/style.css delete mode 100644 empty_file create mode 100644 img/jeett_dt_001.png create mode 100644 img/jeett_dt_002.png create mode 100644 img/jeett_dt_003.png create mode 100644 img/jeett_dt_004.png create mode 100644 img/jeett_dt_005.png create mode 100644 img/jeett_dt_006.png create mode 100644 img/jeett_dt_007.png create mode 100644 img/jeett_dt_008.png create mode 100644 img/jeett_dt_009.png create mode 100644 img/leftnav.gif create mode 100644 img/oracle.gif create mode 100644 img/rightnav.gif create mode 100644 img/toc.gif create mode 100644 overview.html create mode 100644 overview001.html create mode 100644 overview002.html create mode 100644 overview003.html create mode 100644 overview004.html create mode 100644 overview005.html create mode 100644 overview006.html create mode 100644 overview007.html create mode 100644 overview008.html create mode 100644 overview009.html create mode 100644 overview010.html create mode 100644 partintro.html create mode 100644 preface.html create mode 100644 title.html create mode 100644 toc.html diff --git a/css/style.css b/css/style.css new file mode 100644 index 0000000..c8d1736 --- /dev/null +++ b/css/style.css @@ -0,0 +1 @@ +/* CSS */ \ No newline at end of file diff --git a/empty_file b/empty_file deleted file mode 100644 index e69de29..0000000 diff --git a/img/jeett_dt_001.png b/img/jeett_dt_001.png new file mode 100644 index 0000000000000000000000000000000000000000..d906ad92d4367cfee0f568cfcfac6a2285d2eaa9 GIT binary patch literal 26697 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
JH~j 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 NSIbbdLc=cRe*h=u$87)r literal 0 HcmV?d00001 diff --git a/img/jeett_dt_002.png b/img/jeett_dt_002.png new file mode 100644 index 0000000000000000000000000000000000000000..2bfc90800350a9c05e647f8c38ee449650c2e5d9 GIT binary patch literal 18758 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%0DlI|R#Z|$q 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 literal 0 HcmV?d00001 diff --git a/img/jeett_dt_003.png b/img/jeett_dt_003.png new file mode 100644 index 0000000000000000000000000000000000000000..103748108d992441c910d0539532ab87f61c2989 GIT binary patch literal 26289 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�f=&z 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 t`Nwe`9Iy6_p<;1 literal 0 HcmV?d00001 diff --git a/img/jeett_dt_004.png b/img/jeett_dt_004.png new file mode 100644 index 0000000000000000000000000000000000000000..3ab53284d5ae4b8c9455168845062ef23be2b2a3 GIT binary patch literal 32799 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 UOc4-opK^{5KnZF@+!uT1~mk43dE5$H5^vH zt-?-eMoXo@SH}UPJ{za8m&zAcq%P#WKoihJ_%3m3&SkG7VcUVRnLSsy>#K|D1!kXI z{9M69>V)k3tOT^@WnkA#Y2Xyx@0clC$wmi9Is7jz7FN^Sx$PDkQxX=<#p$TNe;29; zO0{0rm@N~L5fq|oR{$wDQcf=1O>dD)<;rg?$yEd&Hx1bh21(%lBQhc5Q+tRbR~I0j zth16d@N9(p^zD+?_)9s1r#`aR`M?jFgzx|*_9hbA3AV)kxoicd@>^r?%MyvG(g&`@ zR|4mo?Ps7M5d_*}MWnfEOFdMlC%;rNI2FwRazTx*quirE;`Mmn+JcLcZCz?3(XVp@ zp`|HZ(+#P*3(w6i>>SjPx84lu%LB&y2=g^dN{EeNsjmq~Tch2IOu%^EzFry>^M6Ma$jp0^!o?Co{b5OrtPeGmN}_8ihNgzI}s1$#&aK#cqlKuzPO z{`)nf7tkc_(jeIvp-&$qJ=lg_%Yn14!14GuQb^pN*yY-1dA#0v2J@Oh3^Xzu-x1sV-)nUm!;cs!&j8<0aNlD9 z9ZEzGL$1Qwb?@)!;Gj8qMvN80LM|ubXRpP39R%ydXP0zzQ8Ddvyfkgidb2$rNYI0x z%d_K~HdmKIZybR?PIR+v%*LtPboQ?>iXuvFt5TaxbdEPc%}UzzwaVU-d5= zL|67(ywQC#u>H;0uZdYoZBn||dSFBQfm+!`-pyk*^`w-M?|QtX!6O9*4IDT+4jFnk zpBj6SsuiMcq~|(e@{|8>FJ8FenXw_X`3Zi3A2eqf|Kg`Q;Nrc0z2JHBXp=J*yvR2r z4T!$a8+kSh`4T5wS^F?(eR1$K1xOKQMkMP_YRbWwYXZfv=oML8I!~=J896|Fjq5m+N4|uua zVEGJ1mILqlA{n`wz}d*=tmOCIUvj%p)@43OHr#^aTPCRXpiK|afFEtmD941MG_nq` z0PeLjDE}pSVJzk_AtBv{@EA{rL!4#WxUCcb^*PtMA$))9HO>1pW2(YH27um z!^ThN=!aXPYHQDW?4?hX9Pa%jqJH9L%W-r+k=lhLZ>OIGa)07yi@|L0=Y_b6!kE?R z?8&K$6h*Dm&lClbFwS|34Vyl^qvjxvk zhx`tKajw)tia^S5QnThGr6u|)9lzn@s4`qbrRr9`dJSo_?!@2W8>&U$o=jY(p^iy} zRN;(nJ+=m{CqzBSkOv0_Zk9hkjM8zYt$a7bry*qrTzwJ`G_k_{BzI|{h5`kbJSkcJ zz!YxVy`tmK90t%39yBy7OXfac;eE@x~VWZcB)1$Z}$jdfzh>W!4bdc1Ju)}(| zG#dq(?#(yP_2nH$PZKW+Q+1h9mLy4a4H@YZO-3INUeMQmqie{AW8Y~TqXnJx_$(H@ z8d>ys{N`J2fxa#5r($#^dLp(4eY=Sco#D7oD|^)9_>#;wBIW*6r{@Q5W>}-DAPIMr zT&hS3;YezrB&si~aTtYU!rO_xtU)WR^zL-f6mZzd3l<^95X6RF_}# zZu7m(-{7}e<{1x@tD0+hk>JDR`u~f8bN+Yubi)S)fp7Qs7RQ|_uLpRKT{ez8%dHr3 F{|~?fnF0U+ literal 0 HcmV?d00001 diff --git a/img/jeett_dt_005.png b/img/jeett_dt_005.png new file mode 100644 index 0000000000000000000000000000000000000000..873de0fe4fe842b13955f81d983e4e2c6cae8ef5 GIT binary patch literal 22811 zcmW(+cUTk6*QF@E3n-9;(4_Ycp@Rv%cci1JNHdfm9YFy}0@6f~R|87#(vc#N(2I2G zgx(||y?p$>Kla&Y_u1WFKxT;jOK$?d|QIot>8XmfhXmy}iAWrTu^Z{_XGYZ*Fd;rKh_; z@%;Pu@A2`m|7-t)gM*`^qp_90KIjUq=jhuG5D0|B!^4@GnUj-~w{PEiWO{6DY-m2x z#2?@TV0;Ayg)P4~8b{V;6lKrP&kv5z)5>x8VTjp{Lk0$hAA@V7qob>P#|^U$W1C~P zcD8on_Y|HfSiiI0KHBc>?QL6Z8=YH+1;f5!zYWaq?H!#RonEw0Z1s-LaB*`z4SG7V zG4kuzugtls;V#Fjsb>;g6davZUAI|RJ+Rt4yNmL%aeh;P2r7<gwk3K%=HV=4Sshv%TG(G`8<-IV&@FH5K7XC8Z){#WxN>=U3A6V$4$PM3 zVQu}rR$5gjCNDOAI^Ht0vU+eMAtAZ8e>}gs(>dF@f3p8)^W;@#^U1}@(Bl5$?nS7r zYE}Qz#_r+J#N7VLO)Tm^N3W0?Y)wIG91e%8A70Oj^d1{%Y3c0I<-D6$*0`|o7dy6y zYp&{9IEtr|9*qy+12+ni?Nv zWirn$&MKNaHV$t%!JPB+liOR{PEJLaSLZ9+gteW+t)0E@&Te`JhOxQvy1KfGp^8uS zxw*MtihljkRFG(?E`_M5wom^pD=V9rnAljuuWxKk4)w0AtXyAT_aEHau-rD)w!X6+ zA0NMdxIR6%*wD~;e15gP_jmX2?$*ZYZP49@-Rjor!2uyCK4@=me`9O&@85lDTAI4y zIvgJ7>GHU(GJk$yAtR%|b!z|O;$mib>*C_nN>{_!)Y!+zr*Wq7HdsZZ6gF129*F_k z4%&8hc0=Mm?CcZZrKnv3!RB?&=>8}gjsEfD$MMO@r^uJGL`0UAy4o5R!81E^^v?EO zIpXJ$JU6DiB7Oe69k8lZ$C@Ug^jR?9}?Kjh(j(C|N)FuyndFjoL0+ zumAcP`ym5s{Mk(fm8Mjd$%R#ka{e#w1%x4(u4j&=r2U(uYAVa+zXUeF=C)-Y?~4YD zml5b~{w}Ov!~A5LzF1IYv;SGbYI5-p8(`N~YO$$(VnRTPjdI{lCNog&p5yS}L)Ra& z8AbUP6K2!B9^z>j3$cu{gZv5M8K-Mn=2oq<41p`w%muA~O{o!VM}OYy$2$-V_WuXUx~DlUC<@Glt6S z1C$ekS>s?+u#3@X#_Zlv7UDVsmj2kU*BIm(s2r(rOC-8{j-^pIPID9aOdNvsB%w&> zD!;EC`nPZ=*2KWe8BDHT^4)TrG^x_G@FO|#$bn6%Qk5|}v47R{WT5v|QsUNBI*GH% zt^&nQd-Dt<4H-cRN?nonHU0ryB$z<#Azs5u9U)Pl_co>k6Wf?|EMq= zaK}oY+nlJ7=v|yBQ3}g{ZX!TqtOJ-eK3V}_*^Zv2#xXvsYGv3QikX5lzafB${_xv4 zb1YR$FQ}=^Lef%9-0vcixmeam2EQLo+HdldVKT z-nQARfnIsajZX(9sV>7AUdFi<2QVNjtWJfLX5JJGfDApzNk0Zfkuv}12H0v>`)|=d zCi+hfxpx}I`HJ}>jr)*BN93pX&!RXL z`dTk~;74coMLg@*)4HBQj+IU{$vJT!``s$-U41F;#Iv^WJkVB2RwSb1b;puKwh&S2 zUa&*rp`1w3DY*N`eG+vN-wSCd{754MmnoTniRvT=SRxWS4zoV15^p`(ftu;n~_8iNp+1$mE`I zN%R-*Q{&&hUr00Z)4QK#LQl!P-?jP7+?^~P{tG^ro}oXd7b79>YYk5WG{}Klrfb)7 z7pj9#_U1Tav2pk1RjT&`q>=16olwLM@1A46GV6u*Y+Oyp8RO5aDarM&{b7xW&DW7j z8Cb>IfdY*3pHaf$TQoNuVA~w5l!kk1xI;O7B~&4Uz|R^FZU_WW;beaOBx3uZY=b}s z!=)~dSroITB2$?s`#;IkE0#SAfp<~NhRFH4$Bp4D?Xb$e$WUdQ$KA*@jdbAsY$B-j z#Pi3#*IA{9wF&PNIj;sbJReHR3jcZj+<82ygm^O>7yt@m;fyFT#CB5w4Sj;^zqtO< zdQt1GlVBet9`5ep8=|B-&HmTJ-jKFL3D-t-a9K=?s#hE$H`%SOkyff@0Pbo->ja^0 zxGm+BhcN4jCl^=0o7CooSo@b7`xoI4huJefAG0e;X?}&I08~nliL5OV+<;<6m`?Ra zpz!Qp->18^YLJ=>w|Kvkta4SQM)?2*26|)TlO14hNWYRC69G2$*EyOOUpepwgV96A z`M7TcKavG(-pdnyQFpV{GN&B0H`{nmstf_gFSf^gY;$*(7?*zeBS46Nqn&;?!1Iez zDJO6LP_>-rS9IFT=p%#k7>Cy%^=ajOOM2tp3UB*fF0~+(gY=M1oL8Tks0t|nrYC#A zooAK6Pvgn5N@P70g#$cc(YzWnhRRYRZ~=StPp$}wd&{(W7FsNdQljwxmiHGv1x?sK zjYl?>JAksY{JZTj63M?sUt*sCsg=@@mr)`<^0%=`x$X(TEz3*wy1fbjuCAR`T{{oW zs@JEfp?R^jLP}2_m*qMjnROmzc6kO1Nzb!qW__CeGde-Zf*Cw0DgTk8o_>dUMX2wN z?&;^_USPw0rLW6R*Kdbgbjn^WK{wEmH_P?{RHqOkf1R6V! zu5{ZEd62*g<*!QLUdi0;$%cN8rSphB(&+Nb?7CSFl?uRvZ>(y%E4Mg6CL>oL`sy6T zrT4Bo9!L2qFl}ZE8F(DCvXs7kGLVHkhp><{u{80}n&o1tX#faTCGY-9PSb;%>ul+d zHHLLr(b~wT5{d*d_^g)WiC@7xD!skyEvFOKj^u-hgTl}4EfZ_5tfuV{sXL<&{23G7 zibtNsWB9@qs}G5S z&=|_9hJp2qf!-V#qsHLH`KKrWi=Dr3S7KBG4O#sVGPLo2GQ`i^0=)`x2L-pS_bX@( zsH|C021BK(b6opA-4BLD)Kfn>fJh?ko#5n}Jq_1`0tWchmi$)}be6382zN?%eq)ei zlm)6JZ!Y5@z|a6~BKe=0fzdhrz;mO3%xDWGE4S#HS_Gu^W6RlhH|`aLeZ;B?fNJ-j z{JEBC-ju?&je1U(8R#R)bWbXl;|MvW&IFD}etQUmgR@ylVcv3Zp!-UnY#N74Isd-lJ396o@xFKwS{CM-x^Z zCyzX2mvD5?fR^r(&DO~}7S!3Q<~iy(%yjJFY>V1{G}74ns^K+cqyIGKdc+-)5^JlS zAlKm`iH9%&KXQ?_aN}u*8Z3mh9KiOBKW{6fx-&C;FC=ZP82 zS_kgNC@V%KI;paIGFSigx~);_Mit1*}nbl;<)uTrQTbj~A0=iL;V zX_uK~a(|8bf(LrtCvA}K9|;x0bgzTK`YJ9vIOz(|Gn9PuMvU$ICmiPO&J<#n95hu0 zy*$&&v{l(qJFp5_j*K*t)_f((;%EJ%IqLfgAE+gKHpMvaGKt3*H6rQseYx3bkWY4} zon@H)r<1A+26@Qc`BhLg>LC!A@xtIH+&h|`At z_8T_6Z_9p{?}`HR0!Yhv;>60QOsDsPVm^$xKm0`V$fmkr0CRrdnZu$0>Agjs?W-2I zhU38X(3oA$(&t_}@ZL-K{%w&vAp1NW8Daze0X%5E9YkbS9Q|&n7u*b#bc$@%0!Dk` z^!8vuYPt7rlxB@yNkjZ$J0@o_u3Y`7qOWeoM1t2DLt$c{DZ|7@?;+okkZGBxmU7lS zc9~&RtFU{-FBRon@wDvspx?*elxY}Um<2mDW4TK9O0qmS>3t;hW7y&tp40LlfLv5V z;VXBSdli-qNlqGPZjkEdZWa_Lhhm{CkwASIapvuXd}Te{aC@5vyUpNC6cRE@57Nc$ z?`@D(qT$o*#F3i`Ktc52&ygk6;yd;mTLHGu{$%uQfn6qJzesJj=#8M5D3&!zPQxF* zj)4!>l1X|PbxSc6h0R_`B_KH9R$+K6-vDvRru5Wry=kY&3Q|Mb4 z0DidXkT>9vPspr3dB8QktupZQ^kRmvzr$A`Lg2&y>L(b*%NdA>IWKt}9lu062B?+! zL+u4oONH*Zj|Oqapvw_1Ij9}9#%c|xT49%RYro4yx}?IoMQgkj|FAzeX;Pd;dD zl^fCHS;L=Rw4smGd6}!)Am@6Bu}g!J6%y$vX5g=nEy|fqB#LIQqt$i&WTY#s(9nDP zTF*g!XoAO!`BXqlG@m=;!!KZfyGG48rufNkWR`jd#3&YeeEAL|tPLf_O|ZQZG2BVd zJA<&xwEoJhk_6A4uUxJJgkT3%vSRRQ^CKEQb5J?7>#e`5Zu(9Fof~^Ok^I_PeHGyzd|ztSROvW_ z_?deq8KWid(${g}7Jo(mGPsujN@XSVadMK`q;njS_I3yX-EUuDH+n!2&}1dTH9FW5 zQ5C^Dl3+GxL|mx=Bv}+Z@Oze!UuWsJ%J-kY{0Ts^(AcP9+(%(nP8&}7X1boN4RI- zr#bY5BGWT}CD*EBwZ$BX4s4X%iM7D2f{_d}O)+J7PR+?(W4uZ?a#k3)amv{cvdjQK zI)Bfn(h0HhaF)%1#>jsenYbs1@>B-6tAmN0sLC_}Ga9-lCaRHQQc1_9Ut8dRQAAGE znuxP%^`-i*wqy|OY2AmuN*91)2pf0dZraW&Y6D>CtvS;Psm;6{B^xTR?8RruV-jDA zk%GlYr0*R=b!9}jg`!@@E>^kd5XTBD9zEckYWgCoESvUz`Qc0Y1_6W&Ck*N|>kex9 z#+8;yy!o(iUG1r`(u`QII)p%$!jGcv{@$??>)Goo zf48=Z58F#_HH8R!LQs&LYa_6F$(BXJTfOq#$Rhhq@iy=9>coR7iY~CFcR$f(e}*!k z-_$`tf%hK(ZwO}wL#NI)EpO{zzUUZ%gC9R6D2%MoNF(_GNG5l(som&B-^lksWO4cf zhmA<>&RDT|dhWlL=dQ43Z#8p}BI)K1$ld=^Urv^!dg}9+y?g~1q?~fyiuRDp_n|&W zdWEv<;GkLv^Xq|^b7des&>6`y@d^dG>%D;Wu@#d_XyLnsIc-0YvRCZEa$J0x2Pv*2g!;(c4?puEAUS`?lfwv~@{)}Sb$^%;!6r%FUy)lU zq)8<^*rQ<4>QVnvf)m;Ng+ECC>c&FSlZ}mkU*I|G9rx0?3Nzr% ztP9}7VEn+F2yI&fG85Lv^|muGvpIPQ6pL~?7fNESvIO^+?5M(A54k-UG1wa%Wh3%% zE}0*l3Q4aHwzzO4ROzQTQmo#7ohSTW3O_n*X~iIcQ639(t(Vuzg`Q($4pQ@&9qR9wadpBcNNnDb9N=Kd8mPn24Em1hMTel-OjAQQPmT_+)! z6?Jr=w9HeOHfGNRI3ta>El;o&5n}fm3Q-i0MLI-{p-O5XMJ$FI=fOZqYf0b5gkQ;Q zX3AL9K}jE~-mk2z%Ys zW7!^8Q0pHrc;}}_g#oi)ecj)t5`u%hC!dT!Qm& zX4;aa(YqYbd=V=bs}q7bS$dn0q8V?g1Ja%X`GiZ6XH#n1Qx$!YBUrr;Df5sU@asuQ z;V~S2K2aHUMQZpBT#3~d4#dC7^Y*i5Wb!EtvXC{0K9gPb^mg~yf6x(6^$;LzyOsGC zez1=uFadNEU$pR&efV|oMsrkv5=qN)Ck4|YX5FRCYMJeUl@rqqXrcvj2&uaKITc_( z5Rph(NqdA8iOMV4X#fxCC*;F<>(Vp@C-MgU61$Tr*l4n1@#xNgdp(sQQ6(h2()qo~ z52riUgNdh2RjR1k%Fq1<*oISxi#}6gz1aR!=8=A<+LWPbouFatvES(?k~Msw#{+eP zync~%hhH8S%iD-%pSwuBQpZj0Vqa;p z1{x^E0bD@48+sCS2d!U=?@K5-KEr#`G^k}%oNI7Dp^g^tlJ$zE&0E?}{xMx*N_4PD z9f|nyWldRqKAD^t+L5B$7N>;#dhO3^)xJORk|nAAQ%kk6-Geb~ppRLydj2xPqu2a!&j0}cIK-8z&0Is86r!O|5;(F zplnuC2FT7Xwq!F?14O5~SY*y3`N$KA`c^ihhcTWOEWl59PuFhCf?p>0^e|s6-*w2> zOHfqRl7xJUX@0y(u`r7ydG9(ARmS30vmvPH_-v-K0iyBE|C#WE8VX;}*jKCnMRr?G zIj2GoI`#rjYp6{h7*45^zvl}v{9g63#3ZshGO{e+<+-)m{B5}OZ@=r|@pey&7mj)& z11$pB4{x<6C~-#tN-OO1<~6RQ-vMF)y>1T^$_%)Uk#NyaXwS&Il;v9jluKOOezf61 zHYneU8Q68kh%B~%4MhEximeWJ?LK)P4wlWGsqyy z;+4HcWch%AUy55|sd#KUy$;qD)TLVWr}JzCq_2+*WJtnFvnKJ3r>w#3widxB>vtID z>Fwzk5MZkNa;#`gQId2A-+2KK9r1mc4P*X}k@!krYW(<6aM` z43tC$bHt0c?vc#EX)o=69Kxe{viVB8&P>D0$>}<&3S}tzkPS8u?Ly4R(Iun21O(+fgsN$&wmr3n(m0B|; z7sL+>JIuEqjE{=6Jn8&bq(-~wPKurR`QR^qWOMY7cN{4jsBw1VU%S}%!TAqP>1_}6 zBs{gGNUJE-ub4?=c*uFP!LK~whBl?xs{)q45t#J!T26B-w1zx$rENXY%hl7$Gr(a`B@@xVdc_wka!xk%6jY3~Vl;wtb{}?D35lX=Q z|By+cdZjLG3WE~7uXx$`(vWc7tW^f@@a*hNVp#XRQ-$07%%mM>X9=6UIw~J{dn5X3E zkNkw!+zGF1Goj~VF=L|;fg7?b%O?0`>;zlar%=gm16))B)#`&1tHewu>BrE3|C8v<#ZL*0O_3{i} zY}n&8iy@KhmGrvyTwOR-i@#{6rq!}dy2V6VW{9?}lDZe0A}d#UDP0~HpFhOSDnM^D zSe(fDKwc5xhi)qC(67?0Qp$>QH^l!~x7HuU5&ETz_fH4HH-gm^(YZxS>Z)cyY!Q9g zqfF_gda~v)qUNhEJ@Sdi!PprJ-oq(74;a%Lje?`^N>ceHVjy?F<-d-oe?|9La0y^x z!#qJ8XN$>YsyghsHqc z2PPaF$hKIn#!7>LSCA@$KjB4N0&J(b%5$FeY~4}>W@EXZwgNO?9Mf9*8x$QM@;2UH z6+fMLZxLeEqDpBQRH8glyk}G1=+@HNc=%i==k>pyvP2`RunYWHzNPCaP-#=QAP5$4zPaB=eYx)gnyCSU9&{;3xB>4t^XR^@(FIyF0L8(a8FUVBX%dQHArSl;@3 z;)ZAP1^-MkNS0|unZMUG2f)P3B|Pq{{oWln;|DQCG@ma(L5b*c6^NthkN$d055)0m zp9jT1Tq&_+azV$#iatT~{jh47tEMMcTv+E7w5sA1KC!B4az3#B8%*dT-Wm2Sa;Mk!})CxB%c6A5& z^pz5bNBJ{50%CO+Dxc_vrBOIGBWx6=-v&yp1%AUNP((HdJK`7s4SN*~c>O{i)s2h- z5Jh|7@^@P((8}V>=31lQd7Is+rzMG~#H>NufHE00P($0BvhjraU95qEScgJZq==GZ zSk*ez4Qr#sB!2Y$hoGk@4hiC4q~xu`XyMu)MK<^G;S-Q|3;8|^P{eXyNgm%VE)yIC2Ay1;b0bt{v*mfyB8hVJx;=K zNTE+*$V&2?Rf6`RT@IM2+aBAlpf6xD0;J^%(p}%l4*M6s(AtZJdVqlviBXy&rs#dX zHxHqU{n+74fjOsw9Z!k|*!q;$&W3uBx<5u4+%QJ~qTQi>;ctqw-x0kDAEQ&SR?e4` z1og!ti-Uo$$B_j^8w#X|R1!+(JF|ic6*`(+iJ2r$Wy*~Iz*tWKnU_&llfCt~nF@A4 z^Pc)F3yX=?FffUm6-_{3H2uPl5b8h2Ny#Y{etvfr`u;(;PhndF@q>rQ-Dee1hU*@HVwrHYNL|w&G%A5gFRm;YrnOca zW-PP2`2Nw@E(ZC8#I~lS&Ciqtph&>gXkk5_Edv3qZfCtqrz$1B9IWX>L2Z=QMFww) z`)H-$d78)U3R#LyNO=^?p7XzhozGS^xr?wIFfAa_&<_-8U;qATGV7#fq%>0i(+^=W zQRCY_p1~9gxjAXKv(+|^#MTz{)YDluSlC~QKvUv)6CJlQ*}t}BGM!B9ub9Yl@y@XY zV)ep#HD*lFN=8En9ClqBm+Nr2qhbhzplzUmFf!=!*!v+2p%Loz(1C!1gFXh{t!TM# zsKjoBHaU=Q%DNtB^W+Zno4ng})HiK z6UW4d*ICE;Oqd$bxcvHO%ULv4Zwdw*3g+Mt?&nFw{F+5F6KXnlaB>xmRTH%tS+#>& z$i&up2;C^LfebE%3JSt~!VJ&icv*YRN9PqSsKwR!+?EAw&@$13F zgUu(cFGt-d3O(tkM;MsKH8;(a^`Q6Amc4FwNrk1|`MZ-PG^FTCybC-pekCT>ea)&n z9qHMCyL(DOl;U^IMBOWOv`$Kj@A!X#5Abey4wFiMz{>q56@C^c6PFsn@gCCJ&M!6=*+dYXk?mt`k^NS&S(O{1X%y8oJF1YR`gEJ zZC$Mj6}eRpsD%$L=Ty{sKR(>ZJao=;k%H9mF9sNgKmh3HP*FS)6eJuO+S-UThzebC zdjH5uiMOjVc206z;d(i%TDyA=rK&O^t)L22o4R)pILJ;_%fzMp7s;Y7MDUyg znf1>BY3f3Up3JbSyn&iqD_I1~oVHhDb|eDv95&V71;H)2`iqhKA7U-Q3|V^rg4v&n z!W8YF+$~HRk;USY#TrZ+rSLh{)rO+{xMbCe>*a(WFD4gcZoa)OSH7xo$_`vF4=q6# zIo)z!6|MpF4GXPL2mVdw-sN&({je0X68_Y9s6JIkcqie%GRc_<_$_d)wU;9HuP}hu zSX6o&Cvp45r!OYUTAp2Bp1p8+IO%h5yW`VB!}(x!CA#yc7Sfs(s7P-0_BC!h*zfQk z_sU-RyfpjVCofoB&VeiIQ$fJ9B*8jppoM1iY@0e2o}BEfbG``WBOF3Ir3zzAl<1%-gOj{mC}2wtx^cUoZteL*I%YCK2m7K`L*uPe#kR2Vn3{}pCR7e*l!YM-3SS~?)SpZaVujKbC(EGe zoZ+Ww`bif?yEsTi<6DT&^%JjcL`B&`qrbp|t?54uNr|=&=q-Yh4)mOG?pk1j(GN2y4dPK{lVn&gHH?dhndXg&zG#P(`OJ~$gMzy(d+K8 zg_~!g=Ou@#*P*Y#n>6pgX?{GACtb2C<@UGGe9mkC45@>=aBVm`G;NRm20bIq(1D8P z4<=Jr*-Qv2JhxWznMF7NaXrU-9$skuj6tWS^I!HpSG@~n{{Q*8bJ*PSOoJmP%}=-8 z_2KZMFQS=>kUeS|rPuI;ueX|$-z{47rN1@kNV$|G$T~L}wXw@Qtmx=sYvO7_GkLD~wpmW%E>o3F}_kbRMs(h-0kc#shTsq~5K^e6Oi-9a}e5PZ51eII(&GaBiY=e?l z8Z+It#B5~hZ=tcpXP<_o-vV2cNRUCTnLDB`TzPmlNHcuH`?u>v$OAVCF#Bq2yu#Z7 z)19{5j;{5sm#v{rvjbG~4xAD69knQ}^DIsOCMK+tJ6EZS+HTNX44?eQw zU)dBBSElT>?}pK!^Bv<5V_H-s?2p@D7n70AYjM^)2!=2EN3Lz~T`D|;rC~_S5VKpW z8MJ`DsM#Ar?MwMzNtbT}K7quSsEq)&p{Mgv-TcfvC!l6^>V`qurVYcJC?)7gQ33||+ytf+#(Rj24egykt zZl--H*yU#C{vw7`>EX=(T3GVDO1lS4u@lx*HGs@6#-*6AzJko=liGa7JJYTDKT9^% z<6X;;3LGORc)pg{?04@7chmWSp)-Tp!t=DsTzhytUcIdes*4dtIek9-o85O!(U#$a zwkmxC`3lN*Yz_ZZf5D-7P2J82JXHueD!3^4vpbQavvqiu(~y+G%qDJIyYq|Qr_0MS z4X8*meXGC>y2uGH2*z!sf72*OiEXwkmNnCt>6<_Asm!ENB7vnAK}Kusl|9F$3gIGJ z;kK1m2mW98sV+k-8F6YhHx$1GID2ev^fC8@9c*AI?57<)CvL3YG@pE!4NV@QZpBwb zqXW|YIy$)_&NdY=j#lXLm)A$?TY+FS-}gwL<6OYs{X9OW>IHxrj(Po*gzCWhh_RQ= z|4Kv^%OaL8?4WY6@>7k(_Przu#tAb^aALl%J3X(%I$Y-?vkp{Fw@}dxw102jp0L<> zlsj2!@JqBSpp8Tw&XHIJoYyvxHbJpWsK+H46QE`EDt3h1)m1yuYe z$fW98nLHK+d6%T!ZUZVYn3b2KS-kh;@Mq-(9So`#r{R@}zFn}R$8i`rbZ(rVHuSsq z`AYpih1JMr;ym7uHE;~XvFdt_-swfYq7L6^RqJ9Ws~|ZXl7rD25Rr}phToBg7x{KXU&aE9AFg`it!Qk&yFxp@V!J) zk8UFq&@a?3|8k=Qp@!hyCx9PlRWs1YKsnv)TS7g*5{>i2x5N(|`IX8NJMw?-yj#;h zTO_y1f5m&1Jz+(rm%S3}b*oYEesjn(+j(bD)cb)VKI}7zk^he8O!`nhF7Iq|bbeXZjVkxB^;46t9CItQp*b+<%47H~P}{kh6$1KD^N4#87^r`C93*^)ir_ z0n0$2k@}hQpcmx_GLzkB(kHVavFy|*A^Od!?g7!Rz z7EJecZ3X5!K#HSa73qxvDqe?-5~tRe#DT)I0QX-ZaGHJr6kfe(-Z&JQl^#3|utW#z zUR^iFaiSwjJ_-l75OcJqKSI5>q&2W1_(eqvO;BfZL9hV zdodX=hRU8{6~C^q=D2Ypuy^#NJOtETj$^*9&+m8?l`clI~tN9h?-Q=bw?ruw164px? zKDd%k0JASOp=z-})1#eE*O;O&fjxg(8~0=td5bDEuAbKz(Z%Jzf7)-aZ7cO*+6*O`}oey-}5ABlH0UEMheYATBfLMj9CBV5KDJ zwmEvX?emB;?)Cb@-k5iIr;|#lf8VAcYQ|gArq@PJ1 zk4%}&yzi+^oGz(FtPWNWiD_O3ZvFNpdwlh>Bo7k_SWiq5cRs-gAL7_ypDNuH6Ww*? z+mk68v~!_`f`B<8EQ1nPCpkeiR|ox*)rV8KA*x`cUJssaKDfe~?PhOZTmJf^NCTWr zDZ=!;qWk>ihFem>PycOelbkTN^Eb1%2};C8-2<2;ifJX^(ZNaR5Js8DK8j-$oC$D? z`P6O(=hbH-ybBPC@Y%@3#ZrOCfQM&qLR(LN7&oeX#!o$;H~nxcbvjuOyieL-Q6&;a zc(Qx`NlhDBmtcHUX(iBb{ww0Q9!N!LR&>qp`tttYxecq;WX4f2>cht}W^Xh@TRk03_wbWnEIad=lu9vqy?-8?bE{26Oh3V6-?4!Ut!bfp}#q+gQlq{EbYvnZq~=l zzRiMEC6(+hvAVLpEE2VI)Q#mal4^PL^TIL^Qo8eiJk}(L`wmqy0Iq%OomR2c5yd<6 zItUt5pe`aC)5jC8d}*!1(IhUYHz=;p^n7>V=G$hw)0=Sp?MITRx>TSb&x=DrbSX_)!dA{tC78eT22!Z!i0l#c{vTu;TQ83& z^~FhDC-v^~_oNJ_YK3dnT56yL)_x3;C#xCfrRF*AVcK-^8EQ5Hc<*MLqJlav`Hjku zRC2_nLuVw(8>nM`4~FK33P$E|NK@^r9+Qdgn2>f3r@`?G}qF z9y1G&VX;NZhJYUX`oRzV5iNfaEwW+T0Y8jeZoXY)fcCbf189AbfRiXlqgS5tvYL8f zl$hGJk_GD2+fp)vH;)dR&Lw=sl;Fs9^YawA^?pH$0QxDFaNZQwxcBsKzX9_l#C6KK0@_SxB=1<}RTlqs`_J1brRoPqF#x4YYH@FD(TIw*weMO&`N=(j}GVq)}Kdz+v5W(C~*^MehtHq1VdaIfrphf zT|nYw6I@63Eg0R5=0T-tEeq}f5Hg;3?1gt`Q@^gzdLcS9(*dXgvKL%d@9vMzHQ4Yn zCB`HDh`7D$oa0+xJHMN|C9T%LA9({F>-M`@f?o!z>ItH>bsa#K$Xp?%BK~=WY|hx( zVTSXm7vN~XT=ZgKlO`qlU43%F^ADYH5Wj)e=s8-TaA(jJ#4m_+K#TbBV<1d?w1oOE z_~1ADz8@Rw0W1hWZh_eYcnVz4q6=bVWI^)G)%m}5M)7Bpi6FCv5T1n0+J4_3=Ad77 z?~q};KTLlaFZhz$j%tIRU91)_+YDkH?h9;vN;psb#=7JfM*g`y#^7*HPkqDau#lcMZd_oT7a;AR6e^1TARqIw}5*^*n;syn(pM6)1ESol(Oq{2u8PKvov$5gzP zNby9Z_z=Pt9%{RKx+82^G#!U}`c&R6KF@cWbPA+npWTg6xNQ|aaH>qq-sD3ZBr z6#%qcYyd-z&tZEn+}(B34spS?Y>6wJUlv%pTGyQuD0JOBmCeBW1!DMTmPWTp<2$J^ zIrFd!x_jSKACy@ykU6m$e~O71a)CFO3F!JlOrvCIds1MbyoIUjRZ26bLxO^dOn{5F zTOU*_O@x4pKftbGS^Ydsc{X>j!t?1yblk7JgQXRR6mUB0rdD3Pwm1!cZtu1n1{apyo+8JNRFqS z&UYGuv7@-l<}rCs%@@DOz02(?{hk`*{WL~9Y4Ce!Nc(3nJ7tV^#8A&o)Lw%Mdo#f0 zn(CD*E&tuSLQ}t%YF899LT^+;z&d!)<093A@;EkhSJ`+UeXUlo;jlu?ihe zVjd;NGf&+-8k|p3&to+lAFQh53X&t^>7S=~9v?Bz<4nzuC(e=K>`%4lsh3B7#~R5a z0g~XzMp>-)C&+ocYo*zG96d`9?)rT3L8|9O#Lqu&^na(V*U?ja6#p`;Z21Wv<)^Z~ zZq{)H-H}I9>A1R_#|ySx@KL`@_s=KvWON;(&Qu@b(T`qLu@8yVb z7`AUndeGZOXqdiLq!V1F79CNR@}p7Nd+?6SjUACB&5@aslEUP!X zK&`U@Z-?&U=Ncc;lz3-%lGw;CnArm zj*CupN9TcPtPhMb=Fv)}w6V{Rt7|Ner?%tr-sSha4FI6ekg7ZyND?vM*RONxd90pe zZ*L!Tbh0@fx3WoMIcqzQjiY1%s&Mp9ui{|IWF&Yg2#J%X^^|5!_XIXV-urrcsgUG6 z@=$6WS99l4c8q1BAPn-hSUQ|bIDin%f#WlNR6vxzU_}UFa+_;V90JgCG~q33(9ACkh$q`d$T)i{}Ivy0TXRxCKk7 z00L68#5{UhC%a>0=5CQqfP{b<~JidZ}9K{L+z<6r_B%R~a??T6h zPA9+*tc$oErD?kW{PscEE}H;HeDV5TcKFAU1rdNQ_ytFb?$l6ZNNSdtNAYq|(+mpdUJRb`TvG@j6<>X?qY@ZK7lG`d$u40l>)-wNP|SB>>3D&64NGWFAPI z&Kz9xAjd|9qyC*mb7X+rC7rT`^4LO`q*?0nxEhzo21*{~aaGP^24uoviJ4VCdjAc-C%(~)e#1I|x0XVuw zp^xkGTwV%z$hHWW^tx5gp-*I^X~i7utS|i|bXnS;g(gREOBC4hs;v4s^p* zHiEt67GWKuU>H>|Ok@-~=EsuGSU)zD`aJSb7Hd+w{kWQv#|3&v{9!|JGY!s~UKa zdE}>5IYa!Q+rj@0OfHx99Ng)=0}yI{){CKOSPlHb_Z_3igmPC-%%L=^Nywm zR(8h$<$84t43BjumP>hz8RW6qNRpyiK^~1A9n6kQkfn~}bF6S+HG~|xXO-Sj-hLcG zw{jd?E`FVU+&GU+lsHaJ9!c{fc>|KNU@ZsoKYi~TpZ)A-zxAze{nrV$8M3oNN45!a z;(Oowme{WE{nML<18XO%BWCX$amS86kL;AH(mP`FXnMhVbo?7%J4abx`^Ll!IdV;q zj_-X|(I)ukv;Sli$WF53Dr3jxhK|kZs?3ovKQcS27dn&QI!D!866v=l6^@7uyowI4vc3AL>-x<%4oz-?M zK^~n_H3~NIwu@o2;Jh1cTj(TjyX~AJ+ZXS zFP-yQk8vP7tLCT)g9DA5r@ zu0%WAQ)uz;KRnW(9|o~uOdgpjb*2?Lk|#(ymwd_29NhH$L5irQmi42<74I=RgkIe+Y@(}4a*&N+c}%yI_Id$ z(EzfO&yhN?zPjm4uwA!p(l_h2O>mv#r9yVl9EJN3<4ANEz`uq87#@%uqv&KU$+5J% z4h)wMPcGEu(G2AfYaTflI?fO7hKbw+XQFZ%<;Cl!;`B%xS+!lJc6>zZ$U3mPUQK)e zo3&j9DL1RQjHb1!gY0;pI6ubHFpmQRD31dJA|J>XgDE*i$Ht~DddI6zZ`0QduPVmznCV+`3ra$G6I zhEv^OY?VAe%8p|oKax{8=3*lwu^29o4Q*}aDS7kA8pzbE=sk`k#TU7^AR|oU*UCpd zC?hLzK4Nsl4y^CLDsFLXms?hRbBWD5XOyj39eBr8V{n}s8-d%A(s~ts1xDUWz#$Y^ zVgPPGqD{yV@Q`>)*ND%Zpkdd>Bi zp`-D@niqF2!FFvz4ZBz_)U0#XsE9br)ix?%B~fzSGb~FVlIPs9=J$QaSQNE|e}6di6W% zTjX(SvgeUAkVDii`9L|w>V1?}(k9NcD4{`H$`=8!*{?k!>yF7TwRs%;)NPQm7P;%sv z+YueTnmp)4bujd%;y!mwkgZh5N08$r)4;0VZFuB}J)T0%N`?G(`%&$gV1|(Dwuz1^ zNG{2R(v{IQdE~XMavt%gTWL;!EZ_Cspu-FtCnwkr$k0z9I*MtS&seft*?ZP8K@O0| zRrt{7k;{^v$H~eAsk&_lLw_+y;`7K8NYbg&>829~jz*eQ%cHqKmivqL&c``EqRV50 ziO+-?5BX|I56zJgQbSqJqwXT79GqNvoPj{HL8>u}j`%CRa-Gu052%AAtJoY-DIHBvQu5emnbB$|J>(~`EW_ee=Rece zUK{0HvaS+Hyd$qAF^?Bqu;qg4+>iVk=~1fhh!6ao18%wH7Tlez(L;0J0D~J?6K`J4 zbQ1{deW{nIZz1q?>FxpWRdItB6Ov>{9!qi_E4{CLRc`-q%av?5WI5x^3T^>m4pMPD z2s-4dN*q}+$@3$ZBQ=m5j$hz#e8h|+0g}ma1KE)dxvD}(226uIk|2#8cU8ynmdYH@ zJW+u(fLz7k_?HHjGMC4yOprA-urdd-B1nuRfpV4Xc*i>poK=lH*2Dx^&4JbA$jSwY zr!41jqQQJ+hjfk`o9b0@y~6zbqS-teIexl!YcA_U^{nlBc&74*YMb~pDEYoE<(h*Y z4EHpr-qu`wN9@y;H^SEb>pRL@VxRsq)ormAPsKmV52HI}v)naXcNcBxVYaHDMqsB=5+|3fT`5r<;VFK}lxJJ5ER*%_Z`( z69{<)0O0TpLRKQlf_cX~lQZmC?Lby(iquGMgpTJz!qd%7k~1%9z=+P;O|c-CbAlkRiPw!-tn`1B{jE^VZAzIfuuTeC30@}-=F)-jh12{ z%|M=5Np0P6(V-ot>(HS?vsfLg8OSO@Dhej?T=BJnM4nX1J1&}4ouY0(o}4L?Z;m`y z*Qs5Jlkr0jSLxB!Gpk-wrR!Z#cdS?4 zv0in@det54j`gb53LHX?fkXA4IJGMki>CwWXuTs&@p2phZv&96cf_e)c>sW=-VLXG zWuard-VL9CYC(gB5fCwvm>fTP|ApNJW<-UX+0{qMW(TD+&JscH7?+0Wkf z%zIz2_sA(%e{EW`dGnezYZfowv$&~gpD20PUC(^yy><1zIc4ghJ@Yn;ihD#wkr63A zbNlVjUH;w~FV%bKRH(ZUqL{@!i%}MvFH}1)w`+I6*p@Y$7ZV) zU;6sGRqLMqb-k-!PBZ#T8Gic;bnN>U~y= zl`knasT9#7RZ=XDs4$FAz`C~HXSG=ON{dvu*{@T4aGf%XBH|NIJpX9D&uVdcd`jGT zqu=a*=|QweEoQOE`26$Ff3@CewOCJW7I(po={Nh)24hk2iK623Klsn}KC8(*p4C*` zk*eKbRA=#d#Q1|BoKbhI%{-p9wLCGtr&L^_%Ayp;A3XApb;labSOao(E6yCg;B2IGnqD^!Zt zF5bPS?pVutgpN(me)s$zKd9SzQ&Rlu?A=@E)g5a-k4>{5_|BOdRxQ`;ypa?iSUm5n zogZ)ADmwnJdZ*Q5-CuS*Xz_YJ3Enc&E-qw$cj$$4!XsUNw4c7EWXYIUqH=CoB$2C8y z_gd}MkDi*xm&boh)jO>w*Q<*^W_1+vc<=wJ&yTgaKWE=Of@2dVkN2*rZ+Fz__T#*L zoAHjbq2n5L9?x>tw;yXYk2`mdEoRB%$Md${*i_#SP{aFkHqRa-{j2pptHBEL?qB`KHT6!b!D{%3>^Qr=fAtjFe%wrS)NMZ^$H(gXS8H>A zT=Nmvxcbz8tM6Z}#cDrmHtYUXl*jvL|F?Rd)#iHjz{xxX-YTdC$=SOk9`s`i%#=c9*Uo7ZfWw;#V*@3UH*AItk!zi{Ra8!jIm8Ais$O^B!w4jw>x^vF^{2^SGzpYc*Jb8`1dyJm;@&u6J4u=5ay#e$G7B_pjDu z-FH9V@s2gi>wQ*>f%K;>Jb7FkuJ>7ORx14zdmeWW){l17YE7r_f0FI^8$jJf8K`#`@HF3T#LArEmOb&+UXf-hY2zpZ`#O zOg#l6IqOjP-R^YXXHp|$w=44a(Y;SS)z@ta)eTRj@&&pq-QDT#bhNv?FPlP z)~og$yWoo*IJ2ND*bcH_uJnZy1BqTXS(>{D6sU+VXxuVu$9=$X|AKtFPnz7Xd};FSJxE*x&1PP8H_PM`Iv zNyjd5BnYNv^&m&-3n#G83Igft?A%#Fl*({0*j~?LO|Mty9tr|yI0o$Cu=K@Y&=>5B zNnZ!yKf?J@Xos)%dXLrk_G3E`4hy+H04GGDOAtUeh-GJqU-zL^>(s1ZKYFcK4OjVa rBksUs{a|Fh>Q%3L)vF5ie*_o+j)5f+BLVas00000NkvXXu0mjfn|84& literal 0 HcmV?d00001 diff --git a/img/jeett_dt_006.png b/img/jeett_dt_006.png new file mode 100644 index 0000000000000000000000000000000000000000..c919ca5c4b246f9a5f2f145f515b084ed1f859d1 GIT binary patch literal 17191 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 literal 0 HcmV?d00001 diff --git a/img/jeett_dt_008.png b/img/jeett_dt_008.png new file mode 100644 index 0000000000000000000000000000000000000000..82f238cd3e086d4327787e81f3798b2a656914b1 GIT binary patch literal 18396 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 literal 0 HcmV?d00001 diff --git a/img/oracle.gif b/img/oracle.gif new file mode 100644 index 0000000000000000000000000000000000000000..41bbefe53467521abc45b16f7b794e2dcd9c77ea GIT binary patch literal 2122 zcmchW`#;lr1HeBvW}B(q+@+ZrbD6p164f@d<%C12bGkVbo>CH0uTYN7CW~r&)Jdhz zl1_V_bWxN_Jq+2fLYzbjElZ8&Qsnl1&iN2E(ZcZHVtw? z0q+(-YXuG(;5ZVp75e;2OJOR3<1^r_2DbgqtdW?wcHq+r9Q(`|(9(Dd@cbVjyx+f1 z32e12=3g)>qO~Q z0g{f(8DvK^19UqeKz+@ST=e~FG4!hQjkB*IM>6)PW;{ot23An>?E!A&q^5rC<^8b- zH-`N;b(wo;fcy8B8fZb=y^Pv{bJ1t-)jz7~4p`p_D7r1lWAf``b+wBc)sp7%E86OD z$*(%M(9zW6dO^b_2hM&RD3H&R)ug#s;9i2OTz^8epq2@_B7Z(Ey76!s!9>`uR~!JMh!( zJ}{p3tD)-b_{EYpsTsZT|LNVH&|@Fe3cN!alsn=bLWBs3G zg*~RLpid(MzH1w?1Gi^@_IY>Q7jez@~x$R%KeG{!RP0n7yBxSiKO=1M#+ zf~IuY`{f{H)qd^}M;T@l;xLf8+M8U!GhrqI86#SavGe+YzUrY!Qbavy>XQ*)Zd`)P zgPS4BoKyri|JQ-AVI}t+{+QFb(jCfzBAgVTMPc{+8HwmDm8v>D+z}*d#-PeQx~~ZD z#6~6>5J*DH8RvCRamW;8w@*f>13k#}h9H4mXC2>IkfwGn&e<{Xhlzxk_On@;u-v`0 zauaV!r4HWBkyvq4y42}UPF*6?$MY6TNv0|GtE%COoS%MmAl*rpAJ2uK6|&u(3Rxsj zRe>GYyYbM7%$8|jwUQ-+J_V5vduN37#}pX{OZo3Cj6#)W2$7>Ja7~+XJX9;=Dkltm z$U2XYoy&uJc@|h_giYcymojNSHZ-E?JSq&(5~alr_d~M-R(Qiu)C$CvNG{397?l|G zJrNt;Ar~=y@d^=vMGO*_{rv5rMsOx4 zYNMOTTfKKVU{4<5w46QFe*KpVm1~5y6uY_b6BsWrtfSt3A|+nATq97KFVTrKca%Q^ z$Dyq}zw0gXdTBKqm%D}`b#eiM6Q{~XER;wpNp`~R2FHD@`bLU(VI&U|8sUA(njoOo zirmL*FL3z9NV*i;DE1+sg>K)CcZ6M?3^ADTcPTHYqSbDre~w#rFjY= z^(5=rt)$YSW}BRQV_~i8y9Li~B`c~Bc4vPd3bTVhoDksB^tMg{UR}K@_85{QTIqD; zek`a*ObEjB-dH1nP@jF1_oR{AA{6z8CB%u5=`g~vIa)qytMsN5$+gTX)4sa@))~8~ zq@ia#S%jOKSyCbQa(39v{tK+8zFWEPH%1PMx+$?7T3Yz>rD3_l1gA6gzMKs{o5T#o zjeVMy5M76tVTU zzJX8~fZI~7T)y27lwbJ)P{Pbz>0T% zV3F|r;!4D5DK3yjI)F7t3k7U*bm+Q3gVd%SnU??>Y&x@8Xr@dUm3_CQ?5N;0|9Zvh z3tAg#2j4O`K;~J>JDL@vT+#KRcmcygmZ!5U{nhFpv+*V!(YxT=_^`F2E9ah0e<0)< z0jEIW8ajY^m5i#B`Vx(Jg)EC=pFdMGN{AH-HrxSMEislGZM{&iQNc7PSc`25z0L4H zelkbwaRGb%(p>PBj?#S?!7>Kp1g7qFBq2865{83gHX26>mrY-(sOS2(pEuu60ondXNk%w1VHf}y0P_Gb|NsC0_y6zb-skuK-sktu*4Dk==dHcot+mFKjJ=Gd zwQGc&T7;ZhYkNXtdjJ3cEC2ui02lxm06+xW5XcD#Dd!+;DJ_Tx6b-W!;?N}1<`oV@ zh{DpK(tsed=phN5L@^M-77KvC>9C3g<}!&=`;gE5il4W3PIn_Lpb>a z3f8bWAtg-$kD`&sh!7203mp?G3u6KZ2XuKJa7scRVFe0EfeQ)+bUq^*1_uTOQyOBN z0E#GMY-m-EJf=TsIj6g5l2tjLmR4GrdOQ{@W@NH#0drULu|shkl2J6o7;M*si- literal 0 HcmV?d00001 diff --git a/img/toc.gif b/img/toc.gif new file mode 100644 index 0000000000000000000000000000000000000000..e4836e615961c938a05e266b23507346122f7f43 GIT binary patch literal 261 zcmZ?wbhEHblwgox_{?DV|NsB*|Np;#|Nh*y=f{qnTe|h!(zSbgmTs+{vNXB6C#rg> zS9XtAc8g(9HUk*wfJl&D2bNs|Cp=fL^;X@|qtIed({fRv>1gWQ30_W{be?Kab|e}tCHs` zma3($D^yuG*|2eQFgwrV-k_*AIm4ODb9dk*1%|cajmG)*#;ul}!c6C-LwLF6FZJHJ JD=f%h4FD91W(NQO literal 0 HcmV?d00001 diff --git a/overview.html b/overview.html new file mode 100644 index 0000000..4be97e1 --- /dev/null +++ b/overview.html @@ -0,0 +1,123 @@ + + + + + + Overview + + + + + + + + + +
Java Platform, Enterprise Edition The Java EE Tutorial
+Release 7 Java Platform, Enterprise Edition
+E39031-02
+ + + + + +
 Go To Table Of Contents
+Contents
+
+
+ + + + + + +
Previous
+Previous
 
Next
+Next
 
+
+ + + \ No newline at end of file diff --git a/overview001.html b/overview001.html new file mode 100644 index 0000000..029c129 --- /dev/null +++ b/overview001.html @@ -0,0 +1,130 @@ + + + + + + Overview001 + + + + + + + + + +
Java Platform, Enterprise Edition The Java EE Tutorial
+Release 7 Java Platform, Enterprise Edition
+E39031-02
+ + + + + +
 Go To Table Of Contents
+Contents
+
+
+ + + + + + +
Previous
+Previous
 
Next
+Next
 
+
+

1.1 Introduction to Java EE

+
+
+

Developers today increasingly recognize the need for distributed, +transactional, and portable applications that leverage the speed, +security, and reliability of server-side technology. Enterprise +applications provide the business logic for an enterprise. They are +centrally managed and often interact with other enterprise software. In +the world of information technology, enterprise applications must be +designed, built, and produced for less money, with greater speed, and +with fewer resources.

+
+
+

With the Java Platform, Enterprise Edition (Java EE), development of +Java enterprise applications has never been easier or faster. The aim of +the Java EE platform is to provide developers with a powerful set of +APIs while shortening development time, reducing application complexity, +and improving application performance.

+
+
+

The Java EE platform is developed through the Java Community Process +(JCP), which is responsible for all Java technologies. Expert groups +composed of interested parties have created Java Specification Requests +(JSRs) to define the various Java EE technologies. The work of the Java +Community under the JCP program helps to ensure Java technology’s +standards of stability and cross-platform compatibility.

+
+
+

The Java EE platform uses a simplified programming model. XML deployment +descriptors are optional. Instead, a developer can simply enter the +information as an annotation directly into a Java source file, and the +Java EE server will configure the component at deployment and runtime. +These annotations are generally used to embed in a program data that +would otherwise be furnished in a deployment descriptor. With +annotations, you put the specification information in your code next to +the program element affected.

+
+
+

In the Java EE platform, dependency injection can be applied to all +resources a component needs, effectively hiding the creation and lookup +of resources from application code. Dependency injection can be used in +Enterprise JavaBeans (EJB) containers, web containers, and application +clients. Dependency injection allows the Java EE container to +automatically insert references to other required components or +resources, using annotations.

+
+
+

This tutorial uses examples to describe the features available in the +Java EE platform for developing enterprise applications. Whether you are +a new or experienced enterprise developer, you should find the examples +and accompanying text a valuable and accessible knowledge base for +creating your own solutions.

+
+
+ ++++ + + + + +
+ ++++ + + + + +
 Previous
+Previous
 
Next
+Next
+
Oracle Logo
+Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

+
+ + + + + +
 Go To Table Of Contents
+Contents
+
+

+
+
+ + + \ No newline at end of file diff --git a/overview002.html b/overview002.html new file mode 100644 index 0000000..8aa021a --- /dev/null +++ b/overview002.html @@ -0,0 +1,127 @@ + + + + + + Overview002 + + + + + + + + + +
Java Platform, Enterprise Edition The Java EE Tutorial
+Release 7 Java Platform, Enterprise Edition
+E39031-02
+ + + + + +
 Go To Table Of Contents
+Contents
+
+
+ + + + + + +
Previous
+Previous
 
Next
+Next
 
+
+

1.2 Java EE 7 Platform Highlights

+
+
+

The most important goal of the Java EE 7 platform is to simplify +development by providing a common foundation for the various kinds of +components in the Java EE platform. Developers benefit from productivity +improvements with more annotations and less XML configuration, more +Plain Old Java Objects (POJOs), and simplified packaging. The Java EE 7 +platform includes the following new features:

+
+
+ +
+
+ ++++ + + + + +
+ ++++ + + + + +
 Previous
+Previous
 
Next
+Next
+
Oracle Logo
+Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

+
+ + + + + +
 Go To Table Of Contents
+Contents
+
+

+
+
+ + + \ No newline at end of file diff --git a/overview003.html b/overview003.html new file mode 100644 index 0000000..9e28132 --- /dev/null +++ b/overview003.html @@ -0,0 +1,119 @@ + + + + + + Overview003 + + + + + + + + + +
Java Platform, Enterprise Edition The Java EE Tutorial
+Release 7 Java Platform, Enterprise Edition
+E39031-02
+ + + + + +
 Go To Table Of Contents
+Contents
+
+
+ + + + + + +
Previous
+Previous
 
Next
+Next
 
+
+

1.3 Java EE Application Model

+
+
+

The Java EE application model begins with the Java programming language +and the Java virtual machine. The proven portability, security, and +developer productivity they provide form the basis of the application +model. Java EE is designed to support applications that implement +enterprise services for customers, employees, suppliers, partners, and +others who make demands on or contributions to the enterprise. Such +applications are inherently complex, potentially accessing data from a +variety of sources and distributing applications to a variety of +clients.

+
+
+

To better control and manage these applications, the business functions +to support these various users are conducted in the middle tier. The +middle tier represents an environment that is closely controlled by an +enterprise’s information technology department. The middle tier is +typically run on dedicated server hardware and has access to the full +services of the enterprise.

+
+
+

The Java EE application model defines an architecture for implementing +services as multitier applications that deliver the scalability, +accessibility, and manageability needed by enterprise-level +applications. This model partitions the work needed to implement a +multitier service into the following parts:

+
+
+
    +
  • +

    The business and presentation logic to be implemented by the developer

    +
  • +
  • +

    The standard system services provided by the Java EE platform

    +
  • +
+
+
+

The developer can rely on the platform to provide solutions for the hard +systems-level problems of developing a multitier service.

+
+
+ ++++ + + + + +
+ ++++ + + + + +
 Previous
+Previous
 
Next
+Next
+
Oracle Logo
+Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

+
+ + + + + +
 Go To Table Of Contents
+Contents
+
+

+
+
+ + + \ No newline at end of file diff --git a/overview004.html b/overview004.html new file mode 100644 index 0000000..09bdc86 --- /dev/null +++ b/overview004.html @@ -0,0 +1,373 @@ + + + + + + Overview004 + + + + + + + + + +
Java Platform, Enterprise Edition The Java EE Tutorial
+Release 7 Java Platform, Enterprise Edition
+E39031-02
+ + + + + +
 Go To Table Of Contents
+Contents
+
+
+ + + + + + +
Previous
+Previous
 
Next
+Next
 
+
+

1.4 Distributed Multitiered Applications

+
+
+

The Java EE platform uses a distributed multitiered application model +for enterprise applications. Application logic is divided into +components according to function, and the application components that +make up a Java EE application are installed on various machines +depending on the tier in the multitiered Java EE environment to which +the application component belongs.

+
+
+

Figure 1-1 shows two multitiered Java EE applications +divided into the tiers described in the following list. The Java EE +application parts shown in Figure 1-1 are presented in +Java EE Components.

+
+
+
    +
  • +

    Client-tier components run on the client machine.

    +
  • +
  • +

    Web-tier components run on the Java EE server.

    +
  • +
  • +

    Business-tier components run on the Java EE server.

    +
  • +
  • +

    Enterprise information system (EIS)-tier software runs on the EIS +server.

    +
  • +
+
+
+

Although a Java EE application can consist of all tiers shown in +Figure 1-1, Java EE multitiered applications are generally +considered to be three-tiered applications because they are distributed +over three locations: client machines, the Java EE server machine, and +the database or legacy machines at the back end. Three-tiered +applications that run in this way extend the standard two-tiered +client-and-server model by placing a multithreaded application server +between the client application and back-end storage.

+
+
+

Figure 1-1 Multitiered Applications

+
+ +
+

1.4.1 Security

+
+

Although other enterprise application models require platform-specific +security measures in each application, the Java EE security environment +enables security constraints to be defined at deployment time. The Java +EE platform makes applications portable to a wide variety of security +implementations by shielding application developers from the complexity +of implementing security features.

+
+
+

The Java EE platform provides standard declarative access control rules +that are defined by the developer and interpreted when the application +is deployed on the server. Java EE also provides standard login +mechanisms so that application developers do not have to implement these +mechanisms in their applications. The same application works in a +variety of security environments without changing the source code.

+
+
+
+

1.4.2 Java EE Components

+
+

Java EE applications are made up of components. A Java EE component is a +self-contained functional software unit that is assembled into a Java EE +application with its related classes and files and that communicates +with other components.

+
+
+

The Java EE specification defines the following Java EE components:

+
+
+
    +
  • +

    Application clients and applets are components that run on the client.

    +
  • +
  • +

    Java Servlet, JavaServer Faces, and JavaServer Pages (JSP) technology +components are web components that run on the server.

    +
  • +
  • +

    EJB components (enterprise beans) are business components that run on +the server.

    +
  • +
+
+
+

Java EE components are written in the Java programming language and are +compiled in the same way as any program in the language. The differences +between Java EE components and "standard" Java classes are that Java EE +components are assembled into a Java EE application, they are verified +to be well formed and in compliance with the Java EE specification, and +they are deployed to production, where they are run and managed by the +Java EE server.

+
+
+
+

1.4.3 Java EE Clients

+
+

A Java EE client is usually either a web client or an application +client.

+
+
+

1.4.3.1 Web Clients

+
+

A web client consists of two parts:

+
+
+
    +
  • +

    Dynamic web pages containing various types of markup language (HTML, +XML, and so on), which are generated by web components running in the +web tier

    +
  • +
  • +

    A web browser, which renders the pages received from the server

    +
  • +
+
+
+

A web client is sometimes called a thin client. Thin clients usually do +not query databases, execute complex business rules, or connect to +legacy applications. When you use a thin client, such heavyweight +operations are off-loaded to enterprise beans executing on the Java EE +server, where they can leverage the security, speed, services, and +reliability of Java EE server-side technologies.

+
+
+
+

1.4.3.2 Application Clients

+
+

An application client runs on a client machine and provides a way for +users to handle tasks that require a richer user interface than can be +provided by a markup language. An application client typically has a +graphical user interface (GUI) created from the Swing API or the +Abstract Window Toolkit (AWT) API, but a command-line interface is +certainly possible.

+
+
+

Application clients directly access enterprise beans running in the +business tier. However, if application requirements warrant it, an +application client can open an HTTP connection to establish +communication with a servlet running in the web tier. Application +clients written in languages other than Java can interact with Java EE +servers, enabling the Java EE platform to interoperate with legacy +systems, clients, and non-Java languages.

+
+
+
+

1.4.3.3 Applets

+
+

A web page received from the web tier can include an embedded applet. +Written in the Java programming language, an applet is a small client +application that executes in the Java virtual machine installed in the +web browser. However, client systems will likely need the Java Plug-in +and possibly a security policy file for the applet to successfully +execute in the web browser.

+
+
+

Web components are the preferred API for creating a web client program +because no plug-ins or security policy files are needed on the client +systems. Also, web components enable cleaner and more modular +application design because they provide a way to separate applications +programming from web page design. Personnel involved in web page design +thus do not need to understand Java programming language syntax to do +their jobs.

+
+
+
+

1.4.3.4 The JavaBeans Component Architecture

+
+

The server and client tiers might also include components based on the +JavaBeans component architecture (JavaBeans components) to manage the +data flow between the following:

+
+
+
    +
  • +

    An application client or applet and components running on the Java EE +server

    +
  • +
  • +

    Server components and a database

    +
  • +
+
+
+

JavaBeans components are not considered Java EE components by the Java +EE specification.

+
+
+

JavaBeans components have properties and have get and set methods +for accessing those properties. JavaBeans components used in this way +are typically simple in design and implementation but should conform to +the naming and design conventions outlined in the JavaBeans component +architecture.

+
+
+
+

1.4.3.5 Java EE Server Communications

+
+

Figure 1-2 shows the various elements that can make up the +client tier. The client communicates with the business tier running on +the Java EE server either directly or, as in the case of a client +running in a browser, by going through web pages or servlets running in +the web tier.

+
+
+

Figure 1-2 Server Communication

+
+ +
+
+
+

1.4.4 Web Components

+
+

Java EE web components are either servlets or web pages created using +JavaServer Faces technology and/or JSP technology (JSP pages). Servlets +are Java programming language classes that dynamically process requests +and construct responses. JSP pages are text-based documents that execute +as servlets but allow a more natural approach to creating static +content. JavaServer Faces technology builds on servlets and JSP +technology and provides a user interface component framework for web +applications.

+
+
+

Static HTML pages and applets are bundled with web components during +application assembly but are not considered web components by the Java +EE specification. Server-side utility classes can also be bundled with +web components and, like HTML pages, are not considered web components.

+
+
+

As shown in Figure 1-3, the web tier, like the client tier, +might include a JavaBeans component to manage the user input and send +that input to enterprise beans running in the business tier for +processing.

+
+
+

Figure 1-3 Web Tier and Java EE Applications

+
+ +
+
+

1.4.5 Business Components

+
+

Business code, which is logic that solves or meets the needs of a +particular business domain such as banking, retail, or finance, is +handled by enterprise beans running in either the business tier or the +web tier. Figure 1-4 shows how an enterprise bean receives +data from client programs, processes it (if necessary), and sends it to +the enterprise information system tier for storage. An enterprise bean +also retrieves data from storage, processes it (if necessary), and sends +it back to the client program.

+
+
+

Figure 1-4 Business and EIS Tiers

+
+ +
+
+

1.4.6 Enterprise Information System Tier

+
+

The enterprise information system tier handles EIS software and includes +enterprise infrastructure systems, such as enterprise resource planning +(ERP), mainframe transaction processing, database systems, and other +legacy information systems. For example, Java EE application components +might need access to enterprise information systems for database +connectivity.

+
+
+ ++++ + + + + +
+ ++++ + + + + +
 Previous
+Previous
 
Next
+Next
+
Oracle Logo
+Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

+
+ + + + + +
 Go To Table Of Contents
+Contents
+
+

+
+
+
+ + + \ No newline at end of file diff --git a/overview005.html b/overview005.html new file mode 100644 index 0000000..0ad98ef --- /dev/null +++ b/overview005.html @@ -0,0 +1,193 @@ + + + + + + Overview005 + + + + + + + + + +
Java Platform, Enterprise Edition The Java EE Tutorial
+Release 7 Java Platform, Enterprise Edition
+E39031-02
+ + + + + +
 Go To Table Of Contents
+Contents
+
+
+ + + + + + +
Previous
+Previous
 
Next
+Next
 
+
+

1.5 Java EE Containers

+
+
+

Normally, thin-client multitiered applications are hard to write because +they involve many lines of intricate code to handle transaction and +state management, multithreading, resource pooling, and other complex +low-level details. The component-based and platform-independent Java EE +architecture makes applications easy to write because business logic is +organized into reusable components. In addition, the Java EE server +provides underlying services in the form of a container for every +component type. Because you do not have to develop these services +yourself, you are free to concentrate on solving the business problem at +hand.

+
+
+

1.5.1 Container Services

+
+

Containers are the interface between a component and the low-level, +platform-specific functionality that supports the component. Before it +can be executed, a web, enterprise bean, or application client component +must be assembled into a Java EE module and deployed into its container.

+
+
+

The assembly process involves specifying container settings for each +component in the Java EE application and for the Java EE application +itself. Container settings customize the underlying support provided by +the Java EE server, including such services as security, transaction +management, Java Naming and Directory Interface (JNDI) API lookups, and +remote connectivity. Here are some of the highlights.

+
+
+
    +
  • +

    The Java EE security model lets you configure a web component or +enterprise bean so that system resources are accessed only by authorized +users.

    +
  • +
  • +

    The Java EE transaction model lets you specify relationships among +methods that make up a single transaction so that all methods in one +transaction are treated as a single unit.

    +
  • +
  • +

    JNDI lookup services provide a unified interface to multiple naming +and directory services in the enterprise so that application components +can access these services.

    +
  • +
  • +

    The Java EE remote connectivity model manages low-level communications +between clients and enterprise beans. After an enterprise bean is +created, a client invokes methods on it as if it were in the same +virtual machine.

    +
  • +
+
+
+

Because the Java EE architecture provides configurable services, +components within the same application can behave differently based on +where they are deployed. For example, an enterprise bean can have +security settings that allow it a certain level of access to database +data in one production environment and another level of database access +in another production environment.

+
+
+

The container also manages nonconfigurable services, such as enterprise +bean and servlet lifecycles, database connection resource pooling, data +persistence, and access to the Java EE platform APIs (see +Java EE 7 APIs).

+
+
+
+

1.5.2 Container Types

+
+

The deployment process installs Java EE application components in the +Java EE containers, as illustrated in Figure 1-5.

+
+
+

Figure 1-5 Java EE Server and Containers

+
+ +
+

The server and containers are as follows:

+
+
+
    +
  • +

    Java EE server: The runtime portion of a Java EE product. A Java EE +server provides EJB and web containers.

    +
  • +
  • +

    EJB container: Manages the execution of enterprise beans for Java EE +applications. Enterprise beans and their container run on the Java EE +server.

    +
  • +
  • +

    Web container: Manages the execution of web pages, servlets, and some +EJB components for Java EE applications. Web components and their +container run on the Java EE server.

    +
  • +
  • +

    Application client container: Manages the execution of application +client components. Application clients and their container run on the +client.

    +
  • +
  • +

    Applet container: Manages the execution of applets. Consists of a web +browser and a Java Plug-in running on the client together.

    +
  • +
+
+
+ ++++ + + + + +
+ ++++ + + + + +
 Previous
+Previous
 
Next
+Next
+
Oracle Logo
+Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

+
+ + + + + +
 Go To Table Of Contents
+Contents
+
+

+
+
+
+ + + \ No newline at end of file diff --git a/overview006.html b/overview006.html new file mode 100644 index 0000000..3611813 --- /dev/null +++ b/overview006.html @@ -0,0 +1,184 @@ + + + + + + Overview006 + + + + + + + + + +
Java Platform, Enterprise Edition The Java EE Tutorial
+Release 7 Java Platform, Enterprise Edition
+E39031-02
+ + + + + +
 Go To Table Of Contents
+Contents
+
+
+ + + + + + +
Previous
+Previous
 
Next
+Next
 
+
+

1.6 Web Services Support

+
+
+

Web services are web-based enterprise applications that use open, +XML-based standards and transport protocols to exchange data with +calling clients. The Java EE platform provides the XML APIs and tools +you need to quickly design, develop, test, and deploy web services and +clients that fully interoperate with other web services and clients +running on Java-based or non-Java-based platforms.

+
+
+

To write web services and clients with the Java EE XML APIs, all you +need to do is pass parameter data to the method calls and process the +data returned; for document-oriented web services, you send documents +containing the service data back and forth. No low-level programming is +needed because the XML API implementations do the work of translating +the application data to and from an XML-based data stream that is sent +over the standardized XML-based transport protocols. These XML-based +standards and protocols are introduced in the following sections.

+
+
+

The translation of data to a standardized XML-based data stream is what +makes web services and clients written with the Java EE XML APIs fully +interoperable. This does not necessarily mean that the data being +transported includes XML tags, because the transported data can itself +be plain text, XML data, or any kind of binary data, such as audio, +video, maps, program files, computer-aided design (CAD) documents, and +the like. The next section introduces XML and explains how parties doing +business can use XML tags and schemas to exchange data in a meaningful +way.

+
+
+

1.6.1 XML

+
+

Extensible Markup Language (XML) is a cross-platform, extensible, +text-based standard for representing data. Parties that exchange XML +data can create their own tags to describe the data, set up schemas to +specify which tags can be used in a particular kind of XML document, and +use XML style sheets to manage the display and handling of the data.

+
+
+

For example, a web service can use XML and a schema to produce price +lists, and companies that receive the price lists and schema can have +their own style sheets to handle the data in a way that best suits their +needs. Here are examples.

+
+
+
    +
  • +

    One company might put XML pricing information through a program to +translate the XML into HTML so that it can post the price lists to its +intranet.

    +
  • +
  • +

    A partner company might put the XML pricing information through a tool +to create a marketing presentation.

    +
  • +
  • +

    Another company might read the XML pricing information into an +application for processing.

    +
  • +
+
+
+
+

1.6.2 SOAP Transport Protocol

+
+

Client requests and web service responses are transmitted as Simple +Object Access Protocol (SOAP) messages over HTTP to enable a completely +interoperable exchange between clients and web services, all running on +different platforms and at various locations on the Internet. HTTP is a +familiar request-and-response standard for sending messages over the +Internet, and SOAP is an XML-based protocol that follows the HTTP +request-and-response model.

+
+
+

The SOAP portion of a transported message does the following:

+
+
+
    +
  • +

    Defines an XML-based envelope to describe what is in the message and +explain how to process the message

    +
  • +
  • +

    Includes XML-based encoding rules to express instances of +application-defined data types within the message

    +
  • +
  • +

    Defines an XML-based convention for representing the request to the +remote service and the resulting response

    +
  • +
+
+
+
+

1.6.3 WSDL Standard Format

+
+

The Web Services Description Language (WSDL) is a standardized XML +format for describing network services. The description includes the +name of the service, the location of the service, and ways to +communicate with the service. WSDL service descriptions can be published +on the Web. GlassFish Server provides a tool for generating the WSDL +specification of a web service that uses remote procedure calls to +communicate with clients.

+
+
+ ++++ + + + + +
+ ++++ + + + + +
 Previous
+Previous
 
Next
+Next
+
Oracle Logo
+Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

+
+ + + + + +
 Go To Table Of Contents
+Contents
+
+

+
+
+
+ + + \ No newline at end of file diff --git a/overview007.html b/overview007.html new file mode 100644 index 0000000..fd0f436 --- /dev/null +++ b/overview007.html @@ -0,0 +1,101 @@ + + + + + + Overview007 + + + + + + + + + +
Java Platform, Enterprise Edition The Java EE Tutorial
+Release 7 Java Platform, Enterprise Edition
+E39031-02
+ + + + + +
 Go To Table Of Contents
+Contents
+
+
+ + + + + + +
Previous
+Previous
 
Next
+Next
 
+
+

1.7 Java EE Application Assembly and Deployment

+
+
+

A Java EE application is packaged into one or more standard units for +deployment to any Java EE platform-compliant system. Each unit contains

+
+
+
    +
  • +

    A functional component or components, such as an enterprise bean, web +page, servlet, or applet

    +
  • +
  • +

    An optional deployment descriptor that describes its content

    +
  • +
+
+
+

Once a Java EE unit has been produced, it is ready to be deployed. +Deployment typically involves using a platform’s deployment tool to +specify location-specific information, such as a list of local users who +can access it and the name of the local database. Once deployed on a +local platform, the application is ready to run.

+
+
+ ++++ + + + + +
+ ++++ + + + + +
 Previous
+Previous
 
Next
+Next
+
Oracle Logo
+Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

+
+ + + + + +
 Go To Table Of Contents
+Contents
+
+

+
+
+ + + \ No newline at end of file diff --git a/overview008.html b/overview008.html new file mode 100644 index 0000000..8062f54 --- /dev/null +++ b/overview008.html @@ -0,0 +1,623 @@ + + + + + + Overview008 + + + + + + + + + +
Java Platform, Enterprise Edition The Java EE Tutorial
+Release 7 Java Platform, Enterprise Edition
+E39031-02
+ + + + + +
 Go To Table Of Contents
+Contents
+
+
+ + + + + + +
Previous
+Previous
 
Next
+Next
 
+
+

1.8 Java EE 7 APIs

+
+
+

Figure 1-6 shows the relationships among the Java EE +containers.

+
+
+

Figure 1-6 Java EE Containers

+
+ +
+

Figure 1-7 shows the availability of the Java EE 7 APIs in +the web container.

+
+
+

Figure 1-7 Java EE APIs in the Web Container

+
+ +
+

Figure 1-8 shows the availability of the Java EE 7 APIs in +the EJB container.

+
+
+

Figure 1-8 Java EE APIs in the EJB Container

+
+ +
+

Figure 1-9 shows the availability of the Java EE 7 APIs in +the application client container.

+
+
+

Figure 1-9 Java EE APIs in the Application Client Container

+
+ +
+

The following sections give a brief summary of the technologies required +by the Java EE platform and the APIs used in Java EE applications.

+
+
+

1.8.1 Enterprise JavaBeans Technology

+
+

An Enterprise JavaBeans (EJB) component, or enterprise bean, is a body +of code that has fields and methods to implement modules of business +logic. You can think of an enterprise bean as a building block that can +be used alone or with other enterprise beans to execute business logic +on the Java EE server.

+
+
+

Enterprise beans are either session beans or message-driven beans.

+
+
+
    +
  • +

    A session bean represents a transient conversation with a client. When +the client finishes executing, the session bean and its data are gone.

    +
  • +
  • +

    A message-driven bean combines features of a session bean and a +message listener, allowing a business component to receive messages +asynchronously. Commonly, these are Java Message Service (JMS) messages.

    +
  • +
+
+
+

In the Java EE 7 platform, new enterprise bean features include the +following:

+
+
+
    +
  • +

    Asynchronous local session beans in EJB Lite

    +
  • +
  • +

    Nonpersistent timers in EJB Lite

    +
  • +
+
+
+

The Java EE 7 platform requires Enterprise JavaBeans 3.2 and +Interceptors 1.2. The Interceptors specification is part of the EJB +specification.

+
+
+
+

1.8.2 Java Servlet Technology

+
+

Java Servlet technology lets you define HTTP-specific servlet classes. A +servlet class extends the capabilities of servers that host applications +accessed by way of a request-response programming model. Although +servlets can respond to any type of request, they are commonly used to +extend the applications hosted by web servers.

+
+
+

In the Java EE 7 platform, new Java Servlet technology features include +the following:

+
+
+
    +
  • +

    Nonblocking I/O

    +
  • +
  • +

    HTTP protocol upgrade

    +
  • +
+
+
+

The Java EE 7 platform requires Servlet 3.1.

+
+
+
+

1.8.3 JavaServer Faces Technology

+
+

JavaServer Faces technology is a user interface framework for building +web applications. The main components of JavaServer Faces technology are +as follows:

+
+
+
    +
  • +

    A GUI component framework.

    +
  • +
  • +

    A flexible model for rendering components in different kinds of HTML +or different markup languages and technologies. A Renderer object +generates the markup to render the component and converts the data +stored in a model object to types that can be represented in a view.

    +
  • +
  • +

    A standard RenderKit for generating HTML 4.01 markup.

    +
  • +
+
+
+

The following features support the GUI components:

+
+
+
    +
  • +

    Input validation

    +
  • +
  • +

    Event handling

    +
  • +
  • +

    Data conversion between model objects and components

    +
  • +
  • +

    Managed model object creation

    +
  • +
  • +

    Page navigation configuration

    +
  • +
  • +

    Expression Language (EL)

    +
  • +
+
+
+

All this functionality is available using standard Java APIs and +XML-based configuration files.

+
+
+

In the Java EE 7 platform, new features of JavaServer Faces technology +include the following:

+
+
+
    +
  • +

    HTML5-friendly markup

    +
  • +
  • +

    Faces Flows

    +
  • +
  • +

    Resource library contracts

    +
  • +
+
+
+

The Java EE 7 platform requires JavaServer Faces 2.2 and Expression +Language 3.0.

+
+
+
+

1.8.4 JavaServer Pages Technology

+
+

JavaServer Pages (JSP) technology lets you put snippets of servlet code +directly into a text-based document. A JSP page is a text-based document +that contains two types of text:

+
+
+
    +
  • +

    Static data, which can be expressed in any text-based format, such as +HTML or XML

    +
  • +
  • +

    JSP elements, which determine how the page constructs dynamic content

    +
  • +
+
+
+

For information about JSP technology, see the The Java EE 5 Tutorial at +http://docs.oracle.com/javaee/5/tutorial/doc/.

+
+
+

The Java EE 7 platform requires JavaServer Pages 2.3 for compatibility +with earlier releases but recommends the use of Facelets as the display +technology in new applications.

+
+
+
+

1.8.5 JavaServer Pages Standard Tag Library

+
+

The JavaServer Pages Standard Tag Library (JSTL) encapsulates core +functionality common to many JSP applications. Instead of mixing tags +from numerous vendors in your JSP applications, you use a single, +standard set of tags. This standardization allows you to deploy your +applications on any JSP container that supports JSTL and makes it more +likely that the implementation of the tags is optimized.

+
+
+

JSTL has iterator and conditional tags for handling flow control, tags +for manipulating XML documents, internationalization tags, tags for +accessing databases using SQL, and tags for commonly used functions.

+
+
+

The Java EE 7 platform requires JSTL 1.2.

+
+
+
+

1.8.6 Java Persistence API

+
+

The Java Persistence API (JPA) is a Java standards–based solution for +persistence. Persistence uses an object/relational mapping approach to +bridge the gap between an object-oriented model and a relational +database. The Java Persistence API can also be used in Java SE +applications outside of the Java EE environment. Java Persistence +consists of the following areas:

+
+
+
    +
  • +

    The Java Persistence API

    +
  • +
  • +

    The query language

    +
  • +
  • +

    Object/relational mapping metadata

    +
  • +
+
+
+

The Java EE 7 platform requires Java Persistence API 2.1.

+
+
+
+

1.8.7 Java Transaction API

+
+

The Java Transaction API (JTA) provides a standard interface for +demarcating transactions. The Java EE architecture provides a default +auto commit to handle transaction commits and rollbacks. An auto commit +means that any other applications that are viewing data will see the +updated data after each database read or write operation. However, if +your application performs two separate database access operations that +depend on each other, you will want to use the JTA API to demarcate +where the entire transaction, including both operations, begins, rolls +back, and commits.

+
+
+

The Java EE 7 platform requires Java Transaction API 1.2.

+
+
+
+

1.8.8 Java API for RESTful Web Services

+
+

The Java API for RESTful Web Services (JAX-RS) defines APIs for the +development of web services built according to the Representational +State Transfer (REST) architectural style. A JAX-RS application is a web +application that consists of classes packaged as a servlet in a WAR file +along with required libraries.

+
+
+

The Java EE 7 platform requires JAX-RS 2.0.

+
+
+
+

1.8.9 Managed Beans

+
+

Managed Beans, lightweight container-managed objects (POJOs) with +minimal requirements, support a small set of basic services, such as +resource injection, lifecycle callbacks, and interceptors. Managed Beans +represent a generalization of the managed beans specified by JavaServer +Faces technology and can be used anywhere in a Java EE application, not +just in web modules.

+
+
+

The Managed Beans specification is part of the Java EE 7 platform +specification (JSR 342). The Java EE 7 platform requires Managed Beans +1.0.

+
+
+
+

1.8.10 Contexts and Dependency Injection for Java EE

+
+

Contexts and Dependency Injection for Java EE (CDI) defines a set of +contextual services, provided by Java EE containers, that make it easy +for developers to use enterprise beans along with JavaServer Faces +technology in web applications. Designed for use with stateful objects, +CDI also has many broader uses, allowing developers a great deal of +flexibility to integrate different kinds of components in a loosely +coupled but typesafe way.

+
+
+

The Java EE 7 platform requires CDI 1.1.

+
+
+
+

1.8.11 Dependency Injection for Java

+
+

Dependency Injection for Java defines a standard set of annotations (and +one interface) for use on injectable classes.

+
+
+

In the Java EE platform, CDI provides support for Dependency Injection. +Specifically, you can use injection points only in a CDI-enabled +application.

+
+
+

The Java EE 7 platform requires Dependency Injection for Java 1.0.

+
+
+
+

1.8.12 Bean Validation

+
+

The Bean Validation specification defines a metadata model and API for +validating data in JavaBeans components. Instead of distributing +validation of data over several layers, such as the browser and the +server side, you can define the validation constraints in one place and +share them across the different layers.

+
+
+

The Java EE 7 platform requires Bean Validation 1.1.

+
+
+
+

1.8.13 Java Message Service API

+
+

The Java Message Service (JMS) API is a messaging standard that allows +Java EE application components to create, send, receive, and read +messages. It enables distributed communication that is loosely coupled, +reliable, and asynchronous.

+
+
+

In the platform, new features of JMS include the following.

+
+
+
    +
  • +

    A new, simplified API offers a simpler alternative to the previous +API. This API includes a JMSContext object that combines the functions +of a Connection and a Session.

    +
  • +
  • +

    All objects with a close method implement the +java.lang.Autocloseable interface so that they can be used in a Java +SE 7 try-with-resources statement.

    +
  • +
+
+
+

The Java EE 7 platform requires JMS 2.0.

+
+
+
+

1.8.14 Java EE Connector Architecture

+
+

The Java EE Connector Architecture is used by tools vendors and system +integrators to create resource adapters that support access to +enterprise information systems that can be plugged in to any Java EE +product. A resource adapter is a software component that allows Java EE +application components to access and interact with the underlying +resource manager of the EIS. Because a resource adapter is specific to +its resource manager, a different resource adapter typically exists for +each type of database or enterprise information system.

+
+
+

The Java EE Connector Architecture also provides a performance-oriented, +secure, scalable, and message-based transactional integration of Java EE +platform–based web services with existing EISs that can be either +synchronous or asynchronous. Existing applications and EISs integrated +through the Java EE Connector Architecture into the Java EE platform can +be exposed as XML-based web services by using JAX-WS and Java EE +component models. Thus JAX-WS and the Java EE Connector Architecture are +complementary technologies for enterprise application integration (EAI) +and end-to-end business integration.

+
+
+

The Java EE 7 platform requires Java EE Connector Architecture 1.7.

+
+
+
+

1.8.15 JavaMail API

+
+

Java EE applications use the JavaMail API to send email notifications. +The JavaMail API has two parts:

+
+
+
    +
  • +

    An application-level interface used by the application components to +send mail

    +
  • +
  • +

    A service provider interface

    +
  • +
+
+
+

The Java EE platform includes the JavaMail API with a service provider +that allows application components to send Internet mail.

+
+
+

The Java EE 7 platform requires JavaMail 1.5.

+
+
+
+

1.8.16 Java Authorization Contract for Containers

+
+

The Java Authorization Contract for Containers (JACC) specification +defines a contract between a Java EE application server and an +authorization policy provider. All Java EE containers support this +contract.

+
+
+

The JACC specification defines java.security.Permission classes that +satisfy the Java EE authorization model. The specification defines the +binding of container-access decisions to operations on instances of +these permission classes. It defines the semantics of policy providers +that use the new permission classes to address the authorization +requirements of the Java EE platform, including the definition and use +of roles.

+
+
+

The Java EE 7 platform requires JACC 1.5.

+
+
+
+

1.8.17 Java Authentication Service Provider Interface for Containers

+
+

The Java Authentication Service Provider Interface for Containers +(JASPIC) specification defines a service provider interface (SPI) by +which authentication providers that implement message authentication +mechanisms may be integrated in client or server message-processing +containers or runtimes. Authentication providers integrated through this +interface operate on network messages provided to them by their calling +containers. The authentication providers transform outgoing messages so +that the source of each message can be authenticated by the receiving +container, and the recipient of the message can be authenticated by the +message sender. Authentication providers authenticate each incoming +message and return to their calling containers the identity established +as a result of the message authentication.

+
+
+

The Java EE 7 platform requires JASPIC 1.1.

+
+
+
+

1.8.18 Java API for WebSocket

+
+

WebSocket is an application protocol that provides full-duplex +communications between two peers over TCP. The Java API for WebSocket +enables Java EE applications to create endpoints using annotations that +specify the configuration parameters of the endpoint and designate its +lifecycle callback methods.

+
+
+

The WebSocket API is new to the Java EE 7 platform. The Java EE 7 +platform requires Java API for WebSocket 1.0.

+
+
+
+

1.8.19 Java API for JSON Processing

+
+

JSON is a text-based data exchange format derived from JavaScript that +is used in web services and other connected applications. The Java API +for JSON Processing (JSON-P) enables Java EE applications to parse, +transform, and query JSON data using the object model or the streaming +model.

+
+
+

JSON-P is new to the Java EE 7 platform. The Java EE 7 platform requires +JSON-P 1.0.

+
+
+
+

1.8.20 Concurrency Utilities for Java EE

+
+

Concurrency Utilities for Java EE is a standard API for providing +asynchronous capabilities to Java EE application components through the +following types of objects: managed executor service, managed scheduled +executor service, managed thread factory, and context service.

+
+
+

Concurrency Utilities for Java EE is new to the Java EE 7 platform. The +Java EE 7 platform requires Concurrency Utilities for Java EE 1.0.

+
+
+
+

1.8.21 Batch Applications for the Java Platform

+
+

Batch jobs are tasks that can be executed without user interaction. The +Batch Applications for the Java Platform specification is a batch +framework that provides support for creating and running batch jobs in +Java applications. The batch framework consists of a batch runtime, a +job specification language based on XML, a Java API to interact with the +batch runtime, and a Java API to implement batch artifacts.

+
+
+

Batch Applications for the Java Platform is new to the Java EE 7 +platform. The Java EE 7 platform requires Batch Applications for the +Java Platform 1.0.

+
+
+ ++++ + + + + +
+ ++++ + + + + +
 Previous
+Previous
 
Next
+Next
+
Oracle Logo
+Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

+
+ + + + + +
 Go To Table Of Contents
+Contents
+
+

+
+
+
+ + + \ No newline at end of file diff --git a/overview009.html b/overview009.html new file mode 100644 index 0000000..3f75da2 --- /dev/null +++ b/overview009.html @@ -0,0 +1,257 @@ + + + + + + Overview009 + + + + + + + + + +
Java Platform, Enterprise Edition The Java EE Tutorial
+Release 7 Java Platform, Enterprise Edition
+E39031-02
+ + + + + +
 Go To Table Of Contents
+Contents
+
+
+ + + + + + +
Previous
+Previous
 
Next
+Next
 
+
+

1.9 Java EE 7 APIs in the Java Platform, Standard Edition 7

+
+
+

Several APIs that are required by the Java EE 7 platform are included in +the Java Platform, Standard Edition 7 (Java SE 7) and are thus available +to Java EE applications.

+
+
+

1.9.1 Java Database Connectivity API

+
+

The Java Database Connectivity (JDBC) API lets you invoke SQL commands +from Java programming language methods. You use the JDBC API in an +enterprise bean when you have a session bean access the database. You +can also use the JDBC API from a servlet or a JSP page to access the +database directly without going through an enterprise bean.

+
+
+

The JDBC API has two parts:

+
+
+
    +
  • +

    An application-level interface used by the application components to +access a database

    +
  • +
  • +

    A service provider interface to attach a JDBC driver to the Java EE +platform

    +
  • +
+
+
+

The Java SE 7 platform requires JDBC 4.1.

+
+
+
+

1.9.2 Java Naming and Directory Interface API

+
+

The Java Naming and Directory Interface (JNDI) API provides naming and +directory functionality, enabling applications to access multiple naming +and directory services, such as LDAP, DNS, and NIS. The JNDI API +provides applications with methods for performing standard directory +operations, such as associating attributes with objects and searching +for objects using their attributes. Using JNDI, a Java EE application +can store and retrieve any type of named Java object, allowing Java EE +applications to coexist with many legacy applications and systems.

+
+
+

Java EE naming services provide application clients, enterprise beans, +and web components with access to a JNDI naming environment. A naming +environment allows a component to be customized without the need to +access or change the component’s source code. A container implements the +component’s environment and provides it to the component as a JNDI +naming context.

+
+
+

The naming environment provides four logical namespaces: java:comp, +java:module, java:app, and java:global for objects available to +components, modules, or applications or shared by all deployed +applications. A Java EE component can access named system-provided and +user-defined objects. The names of some system-provided objects, such as +a default JDBC DataSource object, a default JMS connection factory, +and a JTA UserTransaction object, are stored in the java:comp +namespace. The Java EE platform allows a component to name user-defined +objects, such as enterprise beans, environment entries, JDBC +DataSource objects, and messaging destinations.

+
+
+

A Java EE component can also locate its environment naming context by +using JNDI interfaces. A component can create a +javax.naming.InitialContext object and look up the environment naming +context in InitialContext under the name java:comp/env. A +component’s naming environment is stored directly in the environment +naming context or in any of its direct or indirect subcontexts.

+
+
+
+

1.9.3 JavaBeans Activation Framework

+
+

The JavaBeans Activation Framework (JAF) is used by the JavaMail API. +JAF provides standard services to determine the type of an arbitrary +piece of data, encapsulate access to it, discover the operations +available on it, and create the appropriate JavaBeans component to +perform those operations.

+
+
+
+

1.9.4 Java API for XML Processing

+
+

The Java API for XML Processing (JAXP), part of the Java SE platform, +supports the processing of XML documents using Document Object Model +(DOM), Simple API for XML (SAX), and Extensible Stylesheet Language +Transformations (XSLT). JAXP enables applications to parse and transform +XML documents independently of a particular XML-processing +implementation.

+
+
+

JAXP also provides namespace support, which lets you work with schemas +that might otherwise have naming conflicts. Designed to be flexible, +JAXP lets you use any XML-compliant parser or XSL processor from within +your application and supports the Worldwide Web Consortium (W3C) schema. +You can find information on the W3C schema at +http://www.w3.org/XML/Schema.

+
+
+
+

1.9.5 Java Architecture for XML Binding

+
+

The Java Architecture for XML Binding (JAXB) provides a convenient way +to bind an XML schema to a representation in Java language programs. +JAXB can be used independently or in combination with JAX-WS, in which +case it provides a standard data binding for web service messages. All +Java EE application client containers, web containers, and EJB +containers support the JAXB API.

+
+
+

The Java EE 7 platform requires JAXB 2.2.

+
+
+
+

1.9.6 Java API for XML Web Services

+
+

The Java API for XML Web Services (JAX-WS) specification provides +support for web services that use the JAXB API for binding XML data to +Java objects. The JAX-WS specification defines client APIs for accessing +web services as well as techniques for implementing web service +endpoints. The Implementing Enterprise Web Services specification +describes the deployment of JAX-WS-based services and clients. The EJB +and Java Servlet specifications also describe aspects of such +deployment. JAX-WS-based applications can be deployed using any of these +deployment models.

+
+
+

The JAX-WS specification describes the support for message handlers that +can process message requests and responses. In general, these message +handlers execute in the same container and with the same privileges and +execution context as the JAX-WS client or endpoint component with which +they are associated. These message handlers have access to the same JNDI +namespace as their associated component. Custom serializers and +deserializers, if supported, are treated in the same way as message +handlers.

+
+
+

The Java EE 7 platform requires JAX-WS 2.2.

+
+
+
+

1.9.7 SOAP with Attachments API for Java

+
+

The SOAP with Attachments API for Java (SAAJ) is a low-level API on +which JAX-WS depends. SAAJ enables the production and consumption of +messages that conform to the SOAP 1.1 and 1.2 specifications and the +SOAP with Attachments note. Most developers do not use the SAAJ API, +instead using the higher-level JAX-WS API.

+
+
+
+

1.9.8 Java Authentication and Authorization Service

+
+

The Java Authentication and Authorization Service (JAAS) provides a way +for a Java EE application to authenticate and authorize a specific user +or group of users to run it.

+
+
+

JAAS is a Java programming language version of the standard Pluggable +Authentication Module (PAM) framework, which extends the Java platform +security architecture to support user-based authorization.

+
+
+
+

1.9.9 Common Annotations for the Java Platform

+
+

Annotations enable a declarative style of programming in the Java +platform.

+
+
+

The Java EE 7 platform requires Common Annotations for the Java Platform +1.2.

+
+
+ ++++ + + + + +
+ ++++ + + + + +
 Previous
+Previous
 
Next
+Next
+
Oracle Logo
+Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

+
+ + + + + +
 Go To Table Of Contents
+Contents
+
+

+
+
+
+ + + \ No newline at end of file diff --git a/overview010.html b/overview010.html new file mode 100644 index 0000000..465e493 --- /dev/null +++ b/overview010.html @@ -0,0 +1,171 @@ + + + + + + Overview010 + + + + + + + + + +
Java Platform, Enterprise Edition The Java EE Tutorial
+Release 7 Java Platform, Enterprise Edition
+E39031-02
+ + + + + +
 Go To Table Of Contents
+Contents
+
+
+ + + + + + +
Previous
+Previous
 
Next
+Next
 
+
+

1.10 GlassFish Server Tools

+
+
+

GlassFish Server is a compliant implementation of the Java EE 7 +platform. In addition to supporting all the APIs described in the +previous sections, GlassFish Server includes a number of Java EE tools +that are not part of the Java EE 7 platform but are provided as a +convenience to the developer.

+
+
+

This section briefly summarizes the tools that make up GlassFish Server. +Instructions for starting and stopping GlassFish Server, starting the +Administration Console, and starting and stopping the Java DB server are +in Chapter 2, "Using the Tutorial +Examples".

+
+
+

GlassFish Server contains the tools listed in Table 1-1. +Basic usage information for many of the tools appears throughout the +tutorial. For detailed information, see the online help in the GUI +tools.

+
+
+

Table 1-1 GlassFish Server Tools

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ToolDescription

Administration Console

A web-based GUI GlassFish Server administration utility. Used to stop +GlassFish Server and to manage users, resources, and applications.

asadmin

A command-line GlassFish Server administration utility. Used +to start and stop GlassFish Server and to manage users, resources, and +applications.

appclient

A command-line tool that launches the application client +container and invokes the client application packaged in the application +client JAR file.

capture-schema

A command-line tool to extract schema information +from a database, producing a schema file that GlassFish Server can use +for container-managed persistence.

package-appclient

A command-line tool to package the application +client container libraries and JAR files.

Java DB database

A copy of the Java DB server.

xjc

A command-line tool to transform, or bind, a source XML schema +to a set of JAXB content classes in the Java programming language.

schemagen

A command-line tool to create a schema file for each +namespace referenced in your Java classes.

wsimport

A command-line tool to generate JAX-WS portable artifacts +for a given WSDL file. After generation, these artifacts can be packaged +in a WAR file with the WSDL and schema documents, along with the +endpoint implementation, and then deployed.

wsgen

A command-line tool to read a web service endpoint class and +generate all the required JAX-WS portable artifacts for web service +deployment and invocation.

+
+ ++++ + + + + +
+ ++++ + + + + +
 Previous
+Previous
 
Next
+Next
+
Oracle Logo
+Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

+
+ + + + + +
 Go To Table Of Contents
+Contents
+
+

+
+
+ + + \ No newline at end of file diff --git a/partintro.html b/partintro.html new file mode 100644 index 0000000..0f89756 --- /dev/null +++ b/partintro.html @@ -0,0 +1,99 @@ + + + + + + Introduction + + + + + + + + + +
Java Platform, Enterprise Edition The Java EE Tutorial
+Release 7 Java Platform, Enterprise Edition
+E39031-02
+ + + + + +
 Go To Table Of Contents
+Contents
+
+
+ + + + + + +
Previous
+Previous
 
Next
+Next
 
+
+

Part I

+
+ +
+
+
+

Introduction

+
+
+

Part I introduces the platform, the tutorial, and the examples. This +part contains the following chapters:

+
+ +
+ ++++ + + + + +
+ ++++ + + + + +
 Previous
+Previous
 
Next
+Next
+
Oracle Logo
+Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

+
+ + + + + +
 Go To Table Of Contents
+Contents
+
+

+
+
+ + + \ No newline at end of file diff --git a/preface.html b/preface.html new file mode 100644 index 0000000..4dc64b4 --- /dev/null +++ b/preface.html @@ -0,0 +1,328 @@ + + + + + + Preface + + + + + + + + + +
Java Platform, Enterprise Edition The Java EE Tutorial
+Release 7 Java Platform, Enterprise Edition
+E39031-02
+ + + + + +
 Go To Table Of Contents
+Contents
+
+
+ + + + + + +
Previous
+Previous
 
Next
+Next
 
+
+

Preface

+
+
+

This tutorial is a guide to developing enterprise applications for the +Java Platform, Enterprise Edition 7 (Java EE 7), using GlassFish Server +Open Source Edition.

+
+
+

GlassFish Server Open Source Edition is the leading open-source and +open-community platform for building and deploying next-generation +applications and services. GlassFish Server Open Source Edition, +developed by the GlassFish project open-source community at +https://glassfish.java.net/, is the first compatible implementation of +the Java EE 7 platform specification. This lightweight, flexible, and +open-source application server enables organizations not only to +leverage the new capabilities introduced within the Java EE 7 +specification, but also to add to their existing capabilities through a +faster and more streamlined development and deployment cycle. GlassFish +Server Open Source Edition is hereafter referred to as GlassFish Server.

+
+
+

The following topics are addressed here:

+
+ +
+

Audience

+
+

This tutorial is intended for programmers interested in developing and +deploying Java EE 7 applications. It covers the technologies comprising +the Java EE platform and describes how to develop Java EE components and +deploy them on the Java EE Software Development Kit (SDK).

+
+
+
+

Documentation Accessibility

+
+

For information about Oracle’s commitment to accessibility, visit the +Oracle Accessibility Program website at +http://www.oracle.com/pls/topic/lookup?ctx=acc&id=docacc.

+
+
+

Access to Oracle Support

+
+
+

Oracle customers that have purchased support have access to electronic +support through My Oracle Support. For information, visit +http://www.oracle.com/pls/topic/lookup?ctx=acc&id=info or visit +http://www.oracle.com/pls/topic/lookup?ctx=acc&id=trs if you are +hearing impaired.

+
+
+
+

Before You Read This Book

+
+

Before proceeding with this tutorial, you should have a good knowledge +of the Java programming language. A good way to get to that point is to +work through the Java Tutorials +(http://docs.oracle.com/javase/tutorial/index.html).

+
+
+
+ +
+

The GlassFish Server documentation set describes deployment planning and +system installation. To obtain documentation for GlassFish Server Open +Source Edition, go to https://glassfish.java.net/docs/.

+
+
+

The Java EE 7 API specification can be viewed at +http://docs.oracle.com/javaee/7/api/ and is also provided in the Java +EE 7 SDK.

+
+
+

Additionally, the Java EE Specifications at +http://www.oracle.com/technetwork/java/javaee/tech/index.html might be +useful.

+
+
+

For information about creating enterprise applications in the NetBeans +Integrated Development Environment (IDE), see +https://netbeans.org/kb/.

+
+
+

For information about the Java DB database for use with GlassFish +Server, see +http://www.oracle.com/technetwork/java/javadb/overview/index.html.

+
+
+

The GlassFish Samples project is a collection of sample applications +that demonstrate a broad range of Java EE technologies. The GlassFish +Samples are bundled with the Java EE Software Development Kit (SDK) and +are also available from the GlassFish Samples project page at +https://glassfish-samples.java.net/.

+
+
+
+

Conventions

+
+

The following table describes the typographic conventions that are used +in this book.

+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + +
ConventionMeaningExample

Boldface

Boldface type indicates graphical user interface elements +associated with an action or terms defined in text.

+

From the File menu, choose Open Project.

+
+
+

A cache is a copy that is stored locally.

+

Monospace

Monospace type indicates the names of files and +directories, commands within a paragraph, URLs, code in examples, text +that appears on the screen, or text that you enter.

+

Edit your .login file.

+
+
+

Use ls -a to list all files.

+
+
+

machine_name% you have mail.

+

Italic

Italic type indicates book titles, emphasis, or placeholder +variables for which you supply particular values.

+

Read Chapter 6 in the User’s Guide.

+
+
+

Do not save the file.

+
+
+

The command to remove a file is rm filename.

+
+
+
+

Default Paths and File Names

+
+

The following table describes the default paths and file names that are +used in this book.

+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PlaceholderDescriptionDefault Value

as-install

Represents the base installation directory for GlassFish +Server or the SDK of which GlassFish Server is a part.

+

Installations on the Solaris operating system, Linux operating system, +and Mac operating system:

+
+
+

user’s-home-directory`/glassfish4/glassfish`

+
+
+

Windows, all installations:

+
+
+

SystemDrive`:\glassfish4\glassfish`

+

as-install-parent

Represents the parent of the base installation +directory for GlassFish Server.

+

Installations on the Solaris operating system, Linux operating system, +and Mac operating system:

+
+
+

user’s-home-directory`/glassfish4`

+
+
+

Windows, all installations:

+
+
+

SystemDrive`:\glassfish4`

+

tut-install

Represents the base installation directory for the Java EE +Tutorial after you install GlassFish Server or the SDK and run the +Update Tool.

as-install-parent`/docs/javaee-tutorial`

domain-dir

Represents the directory in which a domain’s configuration +is stored.

as-install`/domains/domain1`

+
+ ++++ + + + + +
+ ++++ + + + + +
 Previous
+Previous
 
Next
+Next
+
Oracle Logo
+Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

+
+ + + + + +
 Go To Table Of Contents
+Contents
+
+

+
+
+
+ + + \ No newline at end of file diff --git a/title.html b/title.html new file mode 100644 index 0000000..130c4e9 --- /dev/null +++ b/title.html @@ -0,0 +1,213 @@ + + + + + + Java EE Tutorial + + + + + + + + + +
Java Platform, Enterprise Edition The Java EE Tutorial
+Release 7 Java Platform, Enterprise Edition
+E39031-02
+ + + + + +
 Go To Table Of Contents
+Contents
+
+
+ + + + + + +
Previous
+Previous
 
Next
+Next
 
+
+

Java Platform, Enterprise Edition

+
+
+

The Java EE Tutorial

+
+
+

Release 7

+
+
+

E39031-02

+
+
+

September 2014

+
+
+

Beta Draft

+
+
+
+

Java Platform, Enterprise Edition The Java EE Tutorial, Release 7

+
+
+

E39031-02

+
+
+

Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

+
+
+

Primary Author:  Eric Jendrock, Ricardo Cervera-Navarro, Ian Evans, Kim +Haase, William Markito

+
+
+

Contributing Author:  

+
+
+

Contributor:  

+
+
+

This software and related documentation are provided under a license +agreement containing restrictions on use and disclosure and are +protected by intellectual property laws. Except as expressly permitted +in your license agreement or allowed by law, you may not use, copy, +reproduce, translate, broadcast, modify, license, transmit, distribute, +exhibit, perform, publish, or display any part, in any form, or by any +means. Reverse engineering, disassembly, or decompilation of this +software, unless required by law for interoperability, is prohibited.

+
+
+

The information contained herein is subject to change without notice and +is not warranted to be error-free. If you find any errors, please report +them to us in writing.

+
+
+

If this is software or related documentation that is delivered to the +U.S. Government or anyone licensing it on behalf of the U.S. Government, +then the following notice is applicable:

+
+
+

U.S. GOVERNMENT END USERS: Oracle programs, including any operating +system, integrated software, any programs installed on the hardware, +and/or documentation, delivered to U.S. Government end users are +"commercial computer software" pursuant to the applicable Federal +Acquisition Regulation and agency-specific supplemental regulations. As +such, use, duplication, disclosure, modification, and adaptation of the +programs, including any operating system, integrated software, any +programs installed on the hardware, and/or documentation, shall be +subject to license terms and license restrictions applicable to the +programs. No other rights are granted to the U.S. Government.

+
+
+

This software or hardware is developed for general use in a variety of +information management applications. It is not developed or intended for +use in any inherently dangerous applications, including applications +that may create a risk of personal injury. If you use this software or +hardware in dangerous applications, then you shall be responsible to +take all appropriate fail-safe, backup, redundancy, and other measures +to ensure its safe use. Oracle Corporation and its affiliates disclaim +any liability for any damages caused by use of this software or hardware +in dangerous applications.

+
+
+

Oracle and Java are registered trademarks of Oracle and/or its +affiliates. Other names may be trademarks of their respective owners.

+
+
+

Intel and Intel Xeon are trademarks or registered trademarks of Intel +Corporation. All SPARC trademarks are used under license and are +trademarks or registered trademarks of SPARC International, Inc. AMD, +Opteron, the AMD logo, and the AMD Opteron logo are trademarks or +registered trademarks of Advanced Micro Devices. UNIX is a registered +trademark of The Open Group.

+
+
+

This software or hardware and documentation may provide access to or +information about content, products, and services from third parties. +Oracle Corporation and its affiliates are not responsible for and +expressly disclaim all warranties of any kind with respect to +third-party content, products, and services unless otherwise set forth +in an applicable agreement between you and Oracle. Oracle Corporation +and its affiliates will not be responsible for any loss, costs, or +damages incurred due to your access to or use of third-party content, +products, or services, except as set forth in an applicable agreement +between you and Oracle.

+
+
+

This documentation is in preproduction status and is intended for +demonstration and preliminary use only. It may not be specific to the +hardware on which you are using the software. Oracle Corporation and its +affiliates are not responsible for and expressly disclaim all warranties +of any kind with respect to this documentation and will not be +responsible for any loss, costs, or damages incurred due to the use of +this documentation.

+
+
+

The information contained in this document is for informational sharing +purposes only and should be considered in your capacity as a customer +advisory board member or pursuant to your beta trial agreement only. It +is not a commitment to deliver any material, code, or functionality, and +should not be relied upon in making purchasing decisions. The +development, release, and timing of any features or functionality +described in this document remains at the sole discretion of Oracle.

+
+
+

This document in any form, software or printed matter, contains +proprietary information that is the exclusive property of Oracle. Your +access to and use of this confidential material is subject to the terms +and conditions of your Oracle Master Agreement, Oracle License and +Services Agreement, Oracle PartnerNetwork Agreement, Oracle distribution +agreement, or other license agreement which has been executed by you and +Oracle and with which you agree to comply. This document and information +contained herein may not be disclosed, copied, reproduced, or +distributed to anyone outside Oracle without prior written consent of +Oracle. This document is not part of your license agreement nor can it +be incorporated into any contractual agreement with Oracle or its +subsidiaries or affiliates.

+
+
+ ++++ + + + + +
+ ++++ + + + + +
 Previous
+Previous
 
Next
+Next
+
Oracle Logo
+Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

+
+ + + + + +
 Go To Table Of Contents
+Contents
+
+

+
+
+ + + \ No newline at end of file diff --git a/toc.html b/toc.html new file mode 100644 index 0000000..ad057e3 --- /dev/null +++ b/toc.html @@ -0,0 +1,7427 @@ + + + + + + Table Of Content + + + + + + + + + +
Java Platform, Enterprise Edition The Java EE Tutorial
+Release 7 Java Platform, Enterprise Edition
+E39031-02
+ + + + + +
 Go To Table Of Contents
+Contents
+
+
+ + + + + +
Next
+Next
 
+
+

Contents

+
+ + + +
+

1 Overview

+
+ +
+
+
+

2 Using the Tutorial Examples

+
+ +
+
+ + + + + +
+

6 Getting Started with Web Applications

+
+ +
+
+ +
+

8 Introduction to Facelets

+
+ +
+
+ +
+

10 Using JavaServer Faces Technology in Web Pages

+
+ +
+
+ + + + +
+

15 Creating Custom UI Components and Other Custom Objects

+
+ +
+
+
+

16 Configuring JavaServer Faces Applications

+
+ +
+
+
+

17 Java Servlet Technology

+
+ +
+
+
+

18 Java API for WebSocket

+
+ +
+
+ + + + + + + + + +
+

26 Running the Advanced Contexts and Dependency Injection Examples

+
+ +
+
+ + + + + + + +
+

32 Enterprise Beans

+
+ +
+
+ +
+

34 Running the Enterprise Bean Examples

+
+ +
+
+ + + +
+

37 Introduction to the Java Persistence API

+
+ +
+
+
+

38 Running the Persistence Examples

+
+ +
+
+
+

39 The Java Persistence Query Language

+
+ +
+
+ + + + + + +
+

45 Java Message Service Concepts

+
+ +
+
+
+

46 Java Message Service Examples

+
+ +
+
+ +
+

47 Introduction to Security in the Java EE Platform

+
+ +
+
+
+

48 Getting Started Securing Web Applications

+
+ +
+
+ +
+

50 Java EE Security: Advanced Topics

+
+ +
+
+ + + + + +
+

55 Batch Processing

+
+ +
+
+ + + + +
+

59 Duke’s Forest Case Study Example

+
+ +
+
+ ++++ + + + + +
+ ++++ + + + +
 Next
+Next
+
Oracle Logo
+Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

+
+ + + + + +
 Go To Table Of Contents
+Contents
+
+

+
+
+
+ + + \ No newline at end of file From 111da09b4cb0fd9a3880a3a18996fbea36eec9d1 Mon Sep 17 00:00:00 2001 From: "joe.ruzzi" Date: Wed, 19 Jul 2017 13:36:20 -0400 Subject: [PATCH 3/8] Update site --- batch-processing.html | 133 ++ batch-processing001.html | 310 +++ batch-processing002.html | 387 ++++ batch-processing003.html | 286 +++ batch-processing004.html | 812 ++++++++ batch-processing005.html | 592 ++++++ batch-processing006.html | 178 ++ batch-processing007.html | 116 ++ batch-processing008.html | 609 ++++++ batch-processing009.html | 706 +++++++ batch-processing010.html | 90 + bean-validation-advanced.html | 110 + bean-validation-advanced001.html | 194 ++ bean-validation-advanced002.html | 117 ++ bean-validation-advanced003.html | 162 ++ bean-validation-advanced004.html | 214 ++ bean-validation.html | 112 + bean-validation001.html | 101 + bean-validation002.html | 350 ++++ bean-validation003.html | 145 ++ bean-validation004.html | 224 ++ bean-validation005.html | 102 + cdi-adv-examples.html | 118 ++ cdi-adv-examples001.html | 130 ++ cdi-adv-examples002.html | 511 +++++ cdi-adv-examples003.html | 328 +++ cdi-adv-examples004.html | 582 ++++++ cdi-adv-examples005.html | 612 ++++++ cdi-adv-examples006.html | 330 +++ cdi-adv.html | 123 ++ cdi-adv001.html | 127 ++ cdi-adv002.html | 267 +++ cdi-adv003.html | 231 ++ cdi-adv004.html | 230 ++ cdi-adv005.html | 270 +++ cdi-adv006.html | 215 ++ cdi-adv007.html | 181 ++ cdi-adv008.html | 189 ++ cdi-basic.html | 143 ++ cdi-basic001.html | 198 ++ cdi-basic002.html | 203 ++ cdi-basic003.html | 145 ++ cdi-basic004.html | 122 ++ cdi-basic005.html | 143 ++ cdi-basic006.html | 154 ++ cdi-basic007.html | 120 ++ cdi-basic008.html | 228 ++ cdi-basic009.html | 126 ++ cdi-basic010.html | 136 ++ cdi-basic011.html | 110 + cdi-basic012.html | 146 ++ cdi-basic013.html | 105 + cdi-basic014.html | 200 ++ cdi-basic015.html | 115 + cdi-basicexamples.html | 104 + cdi-basicexamples001.html | 121 ++ cdi-basicexamples002.html | 418 ++++ cdi-basicexamples003.html | 591 ++++++ concurrency-utilities.html | 120 ++ concurrency-utilities001.html | 157 ++ concurrency-utilities002.html | 133 ++ concurrency-utilities003.html | 133 ++ concurrency-utilities004.html | 91 + concurrency-utilities005.html | 456 ++++ concurrency-utilities006.html | 335 +++ concurrency-utilities007.html | 108 + connectorexample.html | 105 + connectorexample001.html | 92 + connectorexample002.html | 607 ++++++ connectorexample003.html | 571 +++++ css/style.css | 178 +- dukes-bookstore.html | 109 + dukes-bookstore001.html | 194 ++ dukes-bookstore002.html | 481 +++++ dukes-bookstore003.html | 199 ++ dukes-forest.html | 110 + dukes-forest001.html | 149 ++ dukes-forest002.html | 1032 +++++++++ dukes-forest003.html | 184 ++ dukes-forest004.html | 243 +++ dukes-tutoring.html | 111 + dukes-tutoring001.html | 227 ++ dukes-tutoring002.html | 426 ++++ dukes-tutoring003.html | 236 +++ dukes-tutoring004.html | 339 +++ ejb-async.html | 100 + ejb-async001.html | 254 +++ ejb-async002.html | 383 ++++ ejb-basicexamples.html | 116 ++ ejb-basicexamples001.html | 107 + ejb-basicexamples002.html | 589 ++++++ ejb-basicexamples003.html | 665 ++++++ ejb-basicexamples004.html | 360 ++++ ejb-basicexamples005.html | 953 +++++++++ ejb-basicexamples006.html | 114 + ejb-embedded.html | 106 + ejb-embedded001.html | 98 + ejb-embedded002.html | 323 +++ ejb-embedded003.html | 258 +++ ejb-gettingstarted.html | 109 + ejb-gettingstarted001.html | 134 ++ ejb-gettingstarted002.html | 326 +++ ejb-gettingstarted003.html | 140 ++ ejb-intro.html | 125 ++ ejb-intro001.html | 203 ++ ejb-intro002.html | 279 +++ ejb-intro003.html | 207 ++ ejb-intro004.html | 619 ++++++ ejb-intro005.html | 111 + ejb-intro006.html | 130 ++ ejb-intro007.html | 251 +++ ejb-intro008.html | 102 + img/javaeett_dt_001.png | Bin 0 -> 26697 bytes img/javaeett_dt_002.png | Bin 0 -> 18758 bytes img/javaeett_dt_003.png | Bin 0 -> 26289 bytes img/javaeett_dt_004.png | Bin 0 -> 32799 bytes img/javaeett_dt_005.png | Bin 0 -> 22811 bytes img/javaeett_dt_006.png | Bin 0 -> 17191 bytes img/javaeett_dt_007.png | Bin 0 -> 22583 bytes img/javaeett_dt_008.png | Bin 0 -> 18396 bytes img/javaeett_dt_009.png | Bin 0 -> 14522 bytes img/javaeett_dt_010.png | Bin 0 -> 10618 bytes img/javaeett_dt_011.png | Bin 0 -> 8485 bytes img/javaeett_dt_012.png | Bin 0 -> 11864 bytes img/javaeett_dt_013.png | Bin 0 -> 15868 bytes img/javaeett_dt_014.png | Bin 0 -> 11079 bytes img/javaeett_dt_015.png | Bin 0 -> 7185 bytes img/javaeett_dt_016.png | Bin 0 -> 17291 bytes img/javaeett_dt_017.png | Bin 0 -> 24440 bytes img/javaeett_dt_018.png | Bin 0 -> 8796 bytes img/javaeett_dt_019.png | Bin 0 -> 6210 bytes img/javaeett_dt_020.png | Bin 0 -> 10890 bytes img/javaeett_dt_021.png | Bin 0 -> 8265 bytes img/javaeett_dt_022.png | Bin 0 -> 5055 bytes img/javaeett_dt_023.png | Bin 0 -> 8221 bytes img/javaeett_dt_024.png | Bin 0 -> 48301 bytes img/javaeett_dt_025.png | Bin 0 -> 23330 bytes img/javaeett_dt_026.png | Bin 0 -> 7830 bytes img/javaeett_dt_027.png | Bin 0 -> 8046 bytes img/javaeett_dt_028.png | Bin 0 -> 6344 bytes img/javaeett_dt_029.png | Bin 0 -> 12354 bytes img/javaeett_dt_030.png | Bin 0 -> 14574 bytes img/javaeett_dt_031.png | Bin 0 -> 2596 bytes img/javaeett_dt_032.png | Bin 0 -> 2860 bytes img/javaeett_dt_033.png | Bin 0 -> 5070 bytes img/javaeett_dt_034.png | Bin 0 -> 12474 bytes img/javaeett_dt_035.png | Bin 0 -> 17691 bytes img/javaeett_dt_036.png | Bin 0 -> 9729 bytes img/javaeett_dt_037.png | Bin 0 -> 13442 bytes img/javaeett_dt_038.png | Bin 0 -> 17116 bytes img/javaeett_dt_039.png | Bin 0 -> 4210 bytes img/javaeett_dt_040.png | Bin 0 -> 4491 bytes img/javaeett_dt_041.png | Bin 0 -> 7192 bytes img/javaeett_dt_042.png | Bin 0 -> 6846 bytes img/javaeett_dt_043.png | Bin 0 -> 14021 bytes img/javaeett_dt_044.png | Bin 0 -> 28096 bytes img/javaeett_dt_045.png | Bin 0 -> 11573 bytes img/javaeett_dt_046.png | Bin 0 -> 17268 bytes img/javaeett_dt_047.png | Bin 0 -> 9207 bytes img/javaeett_dt_048.png | Bin 0 -> 18457 bytes img/javaeett_dt_049.png | Bin 0 -> 16055 bytes img/javaeett_dt_050.png | Bin 0 -> 9767 bytes img/javaeett_dt_051.png | Bin 0 -> 15554 bytes img/javaeett_dt_052.png | Bin 0 -> 16009 bytes img/javaeett_dt_053.png | Bin 0 -> 19137 bytes img/javaeett_dt_054.png | Bin 0 -> 7937 bytes img/javaeett_dt_055.png | Bin 0 -> 31289 bytes img/javaeett_dt_056.png | Bin 0 -> 12498 bytes img/javaeett_dt_057.png | Bin 0 -> 30142 bytes img/javaeett_dt_058.png | Bin 0 -> 12623 bytes img/javaeett_dt_059.png | Bin 0 -> 22237 bytes img/javaeett_dt_060.png | Bin 0 -> 9797 bytes img/javaeett_dt_061.png | Bin 0 -> 24408 bytes img/javaeett_dt_062.png | Bin 0 -> 32154 bytes img/javaeett_dt_063.png | Bin 0 -> 30976 bytes img/javaeett_dt_064.png | Bin 0 -> 63105 bytes img/javaeett_dt_065_frmcmpnt.png | Bin 0 -> 3101 bytes img/javaeett_dt_066_slctmny.png | Bin 0 -> 8007 bytes img/javaeett_dt_067_slctn.png | Bin 0 -> 12295 bytes img/javaeett_dt_068_txtcmpnts.png | Bin 0 -> 4510 bytes img_text/javaeett_dt_001.html | 23 + img_text/javaeett_dt_002.html | 24 + img_text/javaeett_dt_003.html | 23 + img_text/javaeett_dt_004.html | 23 + img_text/javaeett_dt_005.html | 23 + img_text/javaeett_dt_006.html | 22 + img_text/javaeett_dt_007.html | 22 + img_text/javaeett_dt_008.html | 22 + img_text/javaeett_dt_009.html | 22 + img_text/javaeett_dt_010.html | 23 + img_text/javaeett_dt_011.html | 23 + img_text/javaeett_dt_012.html | 23 + img_text/javaeett_dt_013.html | 23 + img_text/javaeett_dt_014.html | 24 + img_text/javaeett_dt_015.html | 24 + img_text/javaeett_dt_016.html | 24 + img_text/javaeett_dt_017.html | 25 + img_text/javaeett_dt_018.html | 23 + img_text/javaeett_dt_019.html | 23 + img_text/javaeett_dt_020.html | 23 + img_text/javaeett_dt_021.html | 22 + img_text/javaeett_dt_022.html | 22 + img_text/javaeett_dt_023.html | 22 + img_text/javaeett_dt_024.html | 22 + img_text/javaeett_dt_025.html | 22 + img_text/javaeett_dt_026.html | 22 + img_text/javaeett_dt_027.html | 23 + img_text/javaeett_dt_028.html | 23 + img_text/javaeett_dt_029.html | 23 + img_text/javaeett_dt_030.html | 24 + img_text/javaeett_dt_031.html | 23 + img_text/javaeett_dt_032.html | 23 + img_text/javaeett_dt_033.html | 23 + img_text/javaeett_dt_034.html | 22 + img_text/javaeett_dt_035.html | 24 + img_text/javaeett_dt_036.html | 23 + img_text/javaeett_dt_037.html | 23 + img_text/javaeett_dt_038.html | 23 + img_text/javaeett_dt_039.html | 23 + img_text/javaeett_dt_040.html | 23 + img_text/javaeett_dt_041.html | 22 + img_text/javaeett_dt_042.html | 23 + img_text/javaeett_dt_043.html | 23 + img_text/javaeett_dt_044.html | 23 + img_text/javaeett_dt_045.html | 23 + img_text/javaeett_dt_046.html | 23 + img_text/javaeett_dt_047.html | 23 + img_text/javaeett_dt_048.html | 22 + img_text/javaeett_dt_049.html | 23 + img_text/javaeett_dt_050.html | 22 + img_text/javaeett_dt_051.html | 23 + img_text/javaeett_dt_052.html | 23 + img_text/javaeett_dt_053.html | 22 + img_text/javaeett_dt_054.html | 23 + img_text/javaeett_dt_055.html | 23 + img_text/javaeett_dt_056.html | 24 + img_text/javaeett_dt_057.html | 23 + img_text/javaeett_dt_058.html | 26 + img_text/javaeett_dt_059.html | 27 + img_text/javaeett_dt_060.html | 26 + img_text/javaeett_dt_061.html | 26 + img_text/javaeett_dt_062.html | 23 + img_text/javaeett_dt_063.html | 24 + img_text/javaeett_dt_064.html | 23 + img_text/javaeett_dt_065_frmcmpnt.html | 22 + img_text/javaeett_dt_066_slctmny.html | 22 + img_text/javaeett_dt_067_slctn.html | 22 + img_text/javaeett_dt_068_txtcmpnts.html | 23 + injection.html | 114 + injection001.html | 137 ++ injection002.html | 134 ++ injection003.html | 134 ++ interceptors.html | 104 + interceptors001.html | 237 +++ interceptors002.html | 733 +++++++ interceptors003.html | 258 +++ jaxrs-advanced.html | 130 ++ jaxrs-advanced001.html | 319 +++ jaxrs-advanced002.html | 335 +++ jaxrs-advanced003.html | 213 ++ jaxrs-advanced004.html | 154 ++ jaxrs-advanced005.html | 139 ++ jaxrs-advanced006.html | 232 +++ jaxrs-advanced007.html | 499 +++++ jaxrs-advanced008.html | 602 ++++++ jaxrs-client.html | 108 + jaxrs-client001.html | 347 ++++ jaxrs-client002.html | 287 +++ jaxrs-client003.html | 523 +++++ jaxrs.html | 110 + jaxrs001.html | 154 ++ jaxrs002.html | 1377 ++++++++++++ jaxrs003.html | 513 +++++ jaxrs004.html | 114 + jaxws.html | 112 + jaxws001.html | 139 ++ jaxws002.html | 861 ++++++++ jaxws003.html | 321 +++ jaxws004.html | 95 + jaxws005.html | 120 ++ jms-concepts.html | 115 + jms-concepts001.html | 311 +++ jms-concepts002.html | 314 +++ jms-concepts003.html | 1307 ++++++++++++ jms-concepts004.html | 684 ++++++ jms-concepts005.html | 832 ++++++++ jms-concepts006.html | 102 + jms-examples.html | 131 ++ jms-examples001.html | 113 + jms-examples002.html | 220 ++ jms-examples003.html | 1643 +++++++++++++++ jms-examples004.html | 785 +++++++ jms-examples005.html | 382 ++++ jms-examples006.html | 382 ++++ jms-examples007.html | 441 ++++ jms-examples008.html | 462 ++++ jms-examples009.html | 598 ++++++ jms-examples010.html | 203 ++ jsf-advanced-cc.html | 108 + jsf-advanced-cc001.html | 187 ++ jsf-advanced-cc002.html | 109 + jsf-advanced-cc003.html | 135 ++ jsf-advanced-cc004.html | 366 ++++ jsf-ajax.html | 137 ++ jsf-ajax001.html | 145 ++ jsf-ajax002.html | 124 ++ jsf-ajax003.html | 276 +++ jsf-ajax004.html | 269 +++ jsf-ajax005.html | 155 ++ jsf-ajax006.html | 163 ++ jsf-ajax007.html | 137 ++ jsf-ajax008.html | 118 ++ jsf-ajax009.html | 138 ++ jsf-ajax010.html | 284 +++ jsf-ajax011.html | 361 ++++ jsf-ajax012.html | 100 + jsf-configure.html | 138 ++ jsf-configure001.html | 117 ++ jsf-configure002.html | 180 ++ jsf-configure003.html | 322 +++ jsf-configure004.html | 882 ++++++++ jsf-configure005.html | 659 ++++++ jsf-configure006.html | 308 +++ jsf-configure007.html | 103 + jsf-configure008.html | 138 ++ jsf-configure009.html | 129 ++ jsf-configure010.html | 260 +++ jsf-configure011.html | 218 ++ jsf-configure012.html | 141 ++ jsf-configure013.html | 492 +++++ jsf-custom.html | 142 ++ jsf-custom001.html | 166 ++ jsf-custom002.html | 352 ++++ jsf-custom003.html | 444 ++++ jsf-custom004.html | 142 ++ jsf-custom005.html | 676 ++++++ jsf-custom006.html | 245 +++ jsf-custom007.html | 233 +++ jsf-custom008.html | 156 ++ jsf-custom009.html | 147 ++ jsf-custom010.html | 185 ++ jsf-custom011.html | 401 ++++ jsf-custom012.html | 435 ++++ jsf-custom013.html | 508 +++++ jsf-custom014.html | 172 ++ jsf-develop.html | 106 + jsf-develop001.html | 318 +++ jsf-develop002.html | 721 +++++++ jsf-develop003.html | 380 ++++ jsf-el.html | 125 ++ jsf-el001.html | 137 ++ jsf-el002.html | 182 ++ jsf-el003.html | 644 ++++++ jsf-el004.html | 227 ++ jsf-el005.html | 174 ++ jsf-el006.html | 108 + jsf-el007.html | 212 ++ jsf-el008.html | 102 + jsf-facelets.html | 129 ++ jsf-facelets001.html | 302 +++ jsf-facelets002.html | 136 ++ jsf-facelets003.html | 550 +++++ jsf-facelets004.html | 262 +++ jsf-facelets005.html | 272 +++ jsf-facelets006.html | 153 ++ jsf-facelets007.html | 123 ++ jsf-facelets008.html | 385 ++++ jsf-facelets009.html | 727 +++++++ jsf-intro.html | 124 ++ jsf-intro001.html | 139 ++ jsf-intro002.html | 162 ++ jsf-intro003.html | 154 ++ jsf-intro004.html | 216 ++ jsf-intro005.html | 588 ++++++ jsf-intro006.html | 306 +++ jsf-intro007.html | 437 ++++ jsf-intro008.html | 104 + jsf-intro009.html | 102 + jsf-page-core.html | 128 ++ jsf-page-core001.html | 594 ++++++ jsf-page-core002.html | 294 +++ jsf-page-core003.html | 294 +++ jsf-page-core004.html | 276 +++ jsf-page.html | 119 ++ jsf-page001.html | 155 ++ jsf-page002.html | 2544 +++++++++++++++++++++++ jsf-page003.html | 493 +++++ jsonp.html | 121 ++ jsonp001.html | 223 ++ jsonp002.html | 225 ++ jsonp003.html | 339 +++ jsonp004.html | 250 +++ jsonp005.html | 109 + jsonp006.html | 270 +++ jsonp007.html | 270 +++ jsonp008.html | 90 + overview.html | 118 +- overview001.html | 112 +- overview002.html | 112 +- overview003.html | 112 +- overview004.html | 128 +- overview005.html | 116 +- overview006.html | 112 +- overview007.html | 112 +- overview008.html | 155 +- overview009.html | 114 +- overview010.html | 135 +- packaging.html | 109 + packaging001.html | 169 ++ packaging002.html | 196 ++ packaging003.html | 171 ++ packaging004.html | 110 + partbeanvalidation.html | 108 + partcasestudies.html | 112 + partcdi.html | 116 ++ partentbeans.html | 119 ++ partintro.html | 113 +- partmessaging.html | 107 + partpersist.html | 132 ++ partplatform.html | 109 + partsecurity.html | 116 ++ partsupporttechs.html | 121 ++ partwebsvcs.html | 119 ++ partwebtier.html | 154 ++ persistence-basicexamples.html | 108 + persistence-basicexamples001.html | 92 + persistence-basicexamples002.html | 1015 +++++++++ persistence-basicexamples003.html | 645 ++++++ persistence-basicexamples004.html | 406 ++++ persistence-cache.html | 103 + persistence-cache001.html | 268 +++ persistence-cache002.html | 445 ++++ persistence-criteria.html | 108 + persistence-criteria001.html | 218 ++ persistence-criteria002.html | 226 ++ persistence-criteria003.html | 743 +++++++ persistence-entitygraphs.html | 109 + persistence-entitygraphs001.html | 107 + persistence-entitygraphs002.html | 213 ++ persistence-entitygraphs003.html | 193 ++ persistence-entitygraphs004.html | 116 ++ persistence-intro.html | 116 ++ persistence-intro001.html | 104 + persistence-intro002.html | 942 +++++++++ persistence-intro003.html | 409 ++++ persistence-intro004.html | 518 +++++ persistence-intro005.html | 129 ++ persistence-intro006.html | 291 +++ persistence-intro007.html | 115 + persistence-locking.html | 102 + persistence-locking001.html | 228 ++ persistence-locking002.html | 346 +++ persistence-querylanguage.html | 119 ++ persistence-querylanguage001.html | 99 + persistence-querylanguage002.html | 126 ++ persistence-querylanguage003.html | 192 ++ persistence-querylanguage004.html | 188 ++ persistence-querylanguage005.html | 645 ++++++ persistence-querylanguage006.html | 2257 ++++++++++++++++++++ persistence-string-queries.html | 106 + persistence-string-queries001.html | 112 + persistence-string-queries002.html | 172 ++ persistence-string-queries003.html | 99 + preface.html | 156 +- resource-creation.html | 110 + resource-creation001.html | 122 ++ resource-creation002.html | 148 ++ resource-creation003.html | 110 + resources.html | 111 + resources001.html | 279 +++ resources002.html | 217 ++ resources003.html | 149 ++ resources004.html | 124 ++ resources005.html | 114 + security-advanced.html | 122 ++ security-advanced001.html | 420 ++++ security-advanced002.html | 384 ++++ security-advanced003.html | 241 +++ security-advanced004.html | 269 +++ security-advanced005.html | 174 ++ security-advanced006.html | 352 ++++ security-advanced007.html | 201 ++ security-advanced008.html | 116 ++ security-intro.html | 118 ++ security-intro001.html | 412 ++++ security-intro002.html | 366 ++++ security-intro003.html | 206 ++ security-intro004.html | 129 ++ security-intro005.html | 548 +++++ security-intro006.html | 205 ++ security-intro007.html | 126 ++ security-javaee.html | 104 + security-javaee001.html | 110 + security-javaee002.html | 733 +++++++ security-javaee003.html | 617 ++++++ security-webtier.html | 112 + security-webtier001.html | 186 ++ security-webtier002.html | 805 +++++++ security-webtier003.html | 423 ++++ security-webtier004.html | 773 +++++++ servlets.html | 150 ++ servlets001.html | 100 + servlets002.html | 250 +++ servlets003.html | 209 ++ servlets004.html | 125 ++ servlets005.html | 264 +++ servlets006.html | 377 ++++ servlets007.html | 169 ++ servlets008.html | 111 + servlets009.html | 207 ++ servlets010.html | 261 +++ servlets011.html | 216 ++ servlets012.html | 347 ++++ servlets013.html | 327 +++ servlets014.html | 259 +++ servlets015.html | 259 +++ servlets016.html | 475 +++++ servlets017.html | 445 ++++ servlets018.html | 87 + target.html | 19 + title.html | 160 +- toc.html | 343 +-- transactions.html | 121 ++ transactions001.html | 96 + transactions002.html | 111 + transactions003.html | 120 ++ transactions004.html | 542 +++++ transactions005.html | 177 ++ transactions006.html | 117 ++ transactions007.html | 125 ++ transactions008.html | 91 + transactions009.html | 87 + usingexamples.html | 125 ++ usingexamples001.html | 260 +++ usingexamples002.html | 165 ++ usingexamples003.html | 127 ++ usingexamples004.html | 136 ++ usingexamples005.html | 89 + usingexamples006.html | 142 ++ usingexamples007.html | 148 ++ usingexamples008.html | 141 ++ usingexamples009.html | 182 ++ webapp.html | 114 + webapp001.html | 171 ++ webapp002.html | 148 ++ webapp003.html | 667 ++++++ webapp004.html | 395 ++++ webapp005.html | 493 +++++ webapp006.html | 102 + webi18n.html | 112 + webi18n001.html | 115 + webi18n002.html | 296 +++ webi18n003.html | 106 + webi18n004.html | 166 ++ webservices-intro.html | 105 + webservices-intro001.html | 95 + webservices-intro002.html | 232 +++ webservices-intro003.html | 111 + websocket.html | 137 ++ websocket001.html | 175 ++ websocket002.html | 201 ++ websocket003.html | 136 ++ websocket004.html | 187 ++ websocket005.html | 236 +++ websocket006.html | 116 ++ websocket007.html | 322 +++ websocket008.html | 132 ++ websocket009.html | 112 + websocket010.html | 165 ++ websocket011.html | 397 ++++ websocket012.html | 580 ++++++ websocket013.html | 90 + 572 files changed, 115655 insertions(+), 1013 deletions(-) create mode 100644 batch-processing.html create mode 100644 batch-processing001.html create mode 100644 batch-processing002.html create mode 100644 batch-processing003.html create mode 100644 batch-processing004.html create mode 100644 batch-processing005.html create mode 100644 batch-processing006.html create mode 100644 batch-processing007.html create mode 100644 batch-processing008.html create mode 100644 batch-processing009.html create mode 100644 batch-processing010.html create mode 100644 bean-validation-advanced.html create mode 100644 bean-validation-advanced001.html create mode 100644 bean-validation-advanced002.html create mode 100644 bean-validation-advanced003.html create mode 100644 bean-validation-advanced004.html create mode 100644 bean-validation.html create mode 100644 bean-validation001.html create mode 100644 bean-validation002.html create mode 100644 bean-validation003.html create mode 100644 bean-validation004.html create mode 100644 bean-validation005.html create mode 100644 cdi-adv-examples.html create mode 100644 cdi-adv-examples001.html create mode 100644 cdi-adv-examples002.html create mode 100644 cdi-adv-examples003.html create mode 100644 cdi-adv-examples004.html create mode 100644 cdi-adv-examples005.html create mode 100644 cdi-adv-examples006.html create mode 100644 cdi-adv.html create mode 100644 cdi-adv001.html create mode 100644 cdi-adv002.html create mode 100644 cdi-adv003.html create mode 100644 cdi-adv004.html create mode 100644 cdi-adv005.html create mode 100644 cdi-adv006.html create mode 100644 cdi-adv007.html create mode 100644 cdi-adv008.html create mode 100644 cdi-basic.html create mode 100644 cdi-basic001.html create mode 100644 cdi-basic002.html create mode 100644 cdi-basic003.html create mode 100644 cdi-basic004.html create mode 100644 cdi-basic005.html create mode 100644 cdi-basic006.html create mode 100644 cdi-basic007.html create mode 100644 cdi-basic008.html create mode 100644 cdi-basic009.html create mode 100644 cdi-basic010.html create mode 100644 cdi-basic011.html create mode 100644 cdi-basic012.html create mode 100644 cdi-basic013.html create mode 100644 cdi-basic014.html create mode 100644 cdi-basic015.html create mode 100644 cdi-basicexamples.html create mode 100644 cdi-basicexamples001.html create mode 100644 cdi-basicexamples002.html create mode 100644 cdi-basicexamples003.html create mode 100644 concurrency-utilities.html create mode 100644 concurrency-utilities001.html create mode 100644 concurrency-utilities002.html create mode 100644 concurrency-utilities003.html create mode 100644 concurrency-utilities004.html create mode 100644 concurrency-utilities005.html create mode 100644 concurrency-utilities006.html create mode 100644 concurrency-utilities007.html create mode 100644 connectorexample.html create mode 100644 connectorexample001.html create mode 100644 connectorexample002.html create mode 100644 connectorexample003.html create mode 100644 dukes-bookstore.html create mode 100644 dukes-bookstore001.html create mode 100644 dukes-bookstore002.html create mode 100644 dukes-bookstore003.html create mode 100644 dukes-forest.html create mode 100644 dukes-forest001.html create mode 100644 dukes-forest002.html create mode 100644 dukes-forest003.html create mode 100644 dukes-forest004.html create mode 100644 dukes-tutoring.html create mode 100644 dukes-tutoring001.html create mode 100644 dukes-tutoring002.html create mode 100644 dukes-tutoring003.html create mode 100644 dukes-tutoring004.html create mode 100644 ejb-async.html create mode 100644 ejb-async001.html create mode 100644 ejb-async002.html create mode 100644 ejb-basicexamples.html create mode 100644 ejb-basicexamples001.html create mode 100644 ejb-basicexamples002.html create mode 100644 ejb-basicexamples003.html create mode 100644 ejb-basicexamples004.html create mode 100644 ejb-basicexamples005.html create mode 100644 ejb-basicexamples006.html create mode 100644 ejb-embedded.html create mode 100644 ejb-embedded001.html create mode 100644 ejb-embedded002.html create mode 100644 ejb-embedded003.html create mode 100644 ejb-gettingstarted.html create mode 100644 ejb-gettingstarted001.html create mode 100644 ejb-gettingstarted002.html create mode 100644 ejb-gettingstarted003.html create mode 100644 ejb-intro.html create mode 100644 ejb-intro001.html create mode 100644 ejb-intro002.html create mode 100644 ejb-intro003.html create mode 100644 ejb-intro004.html create mode 100644 ejb-intro005.html create mode 100644 ejb-intro006.html create mode 100644 ejb-intro007.html create mode 100644 ejb-intro008.html create mode 100644 img/javaeett_dt_001.png create mode 100644 img/javaeett_dt_002.png create mode 100644 img/javaeett_dt_003.png create mode 100644 img/javaeett_dt_004.png create mode 100644 img/javaeett_dt_005.png create mode 100644 img/javaeett_dt_006.png create mode 100644 img/javaeett_dt_007.png create mode 100644 img/javaeett_dt_008.png create mode 100644 img/javaeett_dt_009.png create mode 100644 img/javaeett_dt_010.png create mode 100644 img/javaeett_dt_011.png create mode 100644 img/javaeett_dt_012.png create mode 100644 img/javaeett_dt_013.png create mode 100644 img/javaeett_dt_014.png create mode 100644 img/javaeett_dt_015.png create mode 100644 img/javaeett_dt_016.png create mode 100644 img/javaeett_dt_017.png create mode 100644 img/javaeett_dt_018.png create mode 100644 img/javaeett_dt_019.png create mode 100644 img/javaeett_dt_020.png create mode 100644 img/javaeett_dt_021.png create mode 100644 img/javaeett_dt_022.png create mode 100644 img/javaeett_dt_023.png create mode 100644 img/javaeett_dt_024.png create mode 100644 img/javaeett_dt_025.png create mode 100644 img/javaeett_dt_026.png create mode 100644 img/javaeett_dt_027.png create mode 100644 img/javaeett_dt_028.png create mode 100644 img/javaeett_dt_029.png create mode 100644 img/javaeett_dt_030.png create mode 100644 img/javaeett_dt_031.png create mode 100644 img/javaeett_dt_032.png create mode 100644 img/javaeett_dt_033.png create mode 100644 img/javaeett_dt_034.png create mode 100644 img/javaeett_dt_035.png create mode 100644 img/javaeett_dt_036.png create mode 100644 img/javaeett_dt_037.png create mode 100644 img/javaeett_dt_038.png create mode 100644 img/javaeett_dt_039.png create mode 100644 img/javaeett_dt_040.png create mode 100644 img/javaeett_dt_041.png create mode 100644 img/javaeett_dt_042.png create mode 100644 img/javaeett_dt_043.png create mode 100644 img/javaeett_dt_044.png create mode 100644 img/javaeett_dt_045.png create mode 100644 img/javaeett_dt_046.png create mode 100644 img/javaeett_dt_047.png create mode 100644 img/javaeett_dt_048.png create mode 100644 img/javaeett_dt_049.png create mode 100644 img/javaeett_dt_050.png create mode 100644 img/javaeett_dt_051.png create mode 100644 img/javaeett_dt_052.png create mode 100644 img/javaeett_dt_053.png create mode 100644 img/javaeett_dt_054.png create mode 100644 img/javaeett_dt_055.png create mode 100644 img/javaeett_dt_056.png create mode 100644 img/javaeett_dt_057.png create mode 100644 img/javaeett_dt_058.png create mode 100644 img/javaeett_dt_059.png create mode 100644 img/javaeett_dt_060.png create mode 100644 img/javaeett_dt_061.png create mode 100644 img/javaeett_dt_062.png create mode 100644 img/javaeett_dt_063.png create mode 100644 img/javaeett_dt_064.png create mode 100644 img/javaeett_dt_065_frmcmpnt.png create mode 100644 img/javaeett_dt_066_slctmny.png create mode 100644 img/javaeett_dt_067_slctn.png create mode 100644 img/javaeett_dt_068_txtcmpnts.png create mode 100644 img_text/javaeett_dt_001.html create mode 100644 img_text/javaeett_dt_002.html create mode 100644 img_text/javaeett_dt_003.html create mode 100644 img_text/javaeett_dt_004.html create mode 100644 img_text/javaeett_dt_005.html create mode 100644 img_text/javaeett_dt_006.html create mode 100644 img_text/javaeett_dt_007.html create mode 100644 img_text/javaeett_dt_008.html create mode 100644 img_text/javaeett_dt_009.html create mode 100644 img_text/javaeett_dt_010.html create mode 100644 img_text/javaeett_dt_011.html create mode 100644 img_text/javaeett_dt_012.html create mode 100644 img_text/javaeett_dt_013.html create mode 100644 img_text/javaeett_dt_014.html create mode 100644 img_text/javaeett_dt_015.html create mode 100644 img_text/javaeett_dt_016.html create mode 100644 img_text/javaeett_dt_017.html create mode 100644 img_text/javaeett_dt_018.html create mode 100644 img_text/javaeett_dt_019.html create mode 100644 img_text/javaeett_dt_020.html create mode 100644 img_text/javaeett_dt_021.html create mode 100644 img_text/javaeett_dt_022.html create mode 100644 img_text/javaeett_dt_023.html create mode 100644 img_text/javaeett_dt_024.html create mode 100644 img_text/javaeett_dt_025.html create mode 100644 img_text/javaeett_dt_026.html create mode 100644 img_text/javaeett_dt_027.html create mode 100644 img_text/javaeett_dt_028.html create mode 100644 img_text/javaeett_dt_029.html create mode 100644 img_text/javaeett_dt_030.html create mode 100644 img_text/javaeett_dt_031.html create mode 100644 img_text/javaeett_dt_032.html create mode 100644 img_text/javaeett_dt_033.html create mode 100644 img_text/javaeett_dt_034.html create mode 100644 img_text/javaeett_dt_035.html create mode 100644 img_text/javaeett_dt_036.html create mode 100644 img_text/javaeett_dt_037.html create mode 100644 img_text/javaeett_dt_038.html create mode 100644 img_text/javaeett_dt_039.html create mode 100644 img_text/javaeett_dt_040.html create mode 100644 img_text/javaeett_dt_041.html create mode 100644 img_text/javaeett_dt_042.html create mode 100644 img_text/javaeett_dt_043.html create mode 100644 img_text/javaeett_dt_044.html create mode 100644 img_text/javaeett_dt_045.html create mode 100644 img_text/javaeett_dt_046.html create mode 100644 img_text/javaeett_dt_047.html create mode 100644 img_text/javaeett_dt_048.html create mode 100644 img_text/javaeett_dt_049.html create mode 100644 img_text/javaeett_dt_050.html create mode 100644 img_text/javaeett_dt_051.html create mode 100644 img_text/javaeett_dt_052.html create mode 100644 img_text/javaeett_dt_053.html create mode 100644 img_text/javaeett_dt_054.html create mode 100644 img_text/javaeett_dt_055.html create mode 100644 img_text/javaeett_dt_056.html create mode 100644 img_text/javaeett_dt_057.html create mode 100644 img_text/javaeett_dt_058.html create mode 100644 img_text/javaeett_dt_059.html create mode 100644 img_text/javaeett_dt_060.html create mode 100644 img_text/javaeett_dt_061.html create mode 100644 img_text/javaeett_dt_062.html create mode 100644 img_text/javaeett_dt_063.html create mode 100644 img_text/javaeett_dt_064.html create mode 100644 img_text/javaeett_dt_065_frmcmpnt.html create mode 100644 img_text/javaeett_dt_066_slctmny.html create mode 100644 img_text/javaeett_dt_067_slctn.html create mode 100644 img_text/javaeett_dt_068_txtcmpnts.html create mode 100644 injection.html create mode 100644 injection001.html create mode 100644 injection002.html create mode 100644 injection003.html create mode 100644 interceptors.html create mode 100644 interceptors001.html create mode 100644 interceptors002.html create mode 100644 interceptors003.html create mode 100644 jaxrs-advanced.html create mode 100644 jaxrs-advanced001.html create mode 100644 jaxrs-advanced002.html create mode 100644 jaxrs-advanced003.html create mode 100644 jaxrs-advanced004.html create mode 100644 jaxrs-advanced005.html create mode 100644 jaxrs-advanced006.html create mode 100644 jaxrs-advanced007.html create mode 100644 jaxrs-advanced008.html create mode 100644 jaxrs-client.html create mode 100644 jaxrs-client001.html create mode 100644 jaxrs-client002.html create mode 100644 jaxrs-client003.html create mode 100644 jaxrs.html create mode 100644 jaxrs001.html create mode 100644 jaxrs002.html create mode 100644 jaxrs003.html create mode 100644 jaxrs004.html create mode 100644 jaxws.html create mode 100644 jaxws001.html create mode 100644 jaxws002.html create mode 100644 jaxws003.html create mode 100644 jaxws004.html create mode 100644 jaxws005.html create mode 100644 jms-concepts.html create mode 100644 jms-concepts001.html create mode 100644 jms-concepts002.html create mode 100644 jms-concepts003.html create mode 100644 jms-concepts004.html create mode 100644 jms-concepts005.html create mode 100644 jms-concepts006.html create mode 100644 jms-examples.html create mode 100644 jms-examples001.html create mode 100644 jms-examples002.html create mode 100644 jms-examples003.html create mode 100644 jms-examples004.html create mode 100644 jms-examples005.html create mode 100644 jms-examples006.html create mode 100644 jms-examples007.html create mode 100644 jms-examples008.html create mode 100644 jms-examples009.html create mode 100644 jms-examples010.html create mode 100644 jsf-advanced-cc.html create mode 100644 jsf-advanced-cc001.html create mode 100644 jsf-advanced-cc002.html create mode 100644 jsf-advanced-cc003.html create mode 100644 jsf-advanced-cc004.html create mode 100644 jsf-ajax.html create mode 100644 jsf-ajax001.html create mode 100644 jsf-ajax002.html create mode 100644 jsf-ajax003.html create mode 100644 jsf-ajax004.html create mode 100644 jsf-ajax005.html create mode 100644 jsf-ajax006.html create mode 100644 jsf-ajax007.html create mode 100644 jsf-ajax008.html create mode 100644 jsf-ajax009.html create mode 100644 jsf-ajax010.html create mode 100644 jsf-ajax011.html create mode 100644 jsf-ajax012.html create mode 100644 jsf-configure.html create mode 100644 jsf-configure001.html create mode 100644 jsf-configure002.html create mode 100644 jsf-configure003.html create mode 100644 jsf-configure004.html create mode 100644 jsf-configure005.html create mode 100644 jsf-configure006.html create mode 100644 jsf-configure007.html create mode 100644 jsf-configure008.html create mode 100644 jsf-configure009.html create mode 100644 jsf-configure010.html create mode 100644 jsf-configure011.html create mode 100644 jsf-configure012.html create mode 100644 jsf-configure013.html create mode 100644 jsf-custom.html create mode 100644 jsf-custom001.html create mode 100644 jsf-custom002.html create mode 100644 jsf-custom003.html create mode 100644 jsf-custom004.html create mode 100644 jsf-custom005.html create mode 100644 jsf-custom006.html create mode 100644 jsf-custom007.html create mode 100644 jsf-custom008.html create mode 100644 jsf-custom009.html create mode 100644 jsf-custom010.html create mode 100644 jsf-custom011.html create mode 100644 jsf-custom012.html create mode 100644 jsf-custom013.html create mode 100644 jsf-custom014.html create mode 100644 jsf-develop.html create mode 100644 jsf-develop001.html create mode 100644 jsf-develop002.html create mode 100644 jsf-develop003.html create mode 100644 jsf-el.html create mode 100644 jsf-el001.html create mode 100644 jsf-el002.html create mode 100644 jsf-el003.html create mode 100644 jsf-el004.html create mode 100644 jsf-el005.html create mode 100644 jsf-el006.html create mode 100644 jsf-el007.html create mode 100644 jsf-el008.html create mode 100644 jsf-facelets.html create mode 100644 jsf-facelets001.html create mode 100644 jsf-facelets002.html create mode 100644 jsf-facelets003.html create mode 100644 jsf-facelets004.html create mode 100644 jsf-facelets005.html create mode 100644 jsf-facelets006.html create mode 100644 jsf-facelets007.html create mode 100644 jsf-facelets008.html create mode 100644 jsf-facelets009.html create mode 100644 jsf-intro.html create mode 100644 jsf-intro001.html create mode 100644 jsf-intro002.html create mode 100644 jsf-intro003.html create mode 100644 jsf-intro004.html create mode 100644 jsf-intro005.html create mode 100644 jsf-intro006.html create mode 100644 jsf-intro007.html create mode 100644 jsf-intro008.html create mode 100644 jsf-intro009.html create mode 100644 jsf-page-core.html create mode 100644 jsf-page-core001.html create mode 100644 jsf-page-core002.html create mode 100644 jsf-page-core003.html create mode 100644 jsf-page-core004.html create mode 100644 jsf-page.html create mode 100644 jsf-page001.html create mode 100644 jsf-page002.html create mode 100644 jsf-page003.html create mode 100644 jsonp.html create mode 100644 jsonp001.html create mode 100644 jsonp002.html create mode 100644 jsonp003.html create mode 100644 jsonp004.html create mode 100644 jsonp005.html create mode 100644 jsonp006.html create mode 100644 jsonp007.html create mode 100644 jsonp008.html create mode 100644 packaging.html create mode 100644 packaging001.html create mode 100644 packaging002.html create mode 100644 packaging003.html create mode 100644 packaging004.html create mode 100644 partbeanvalidation.html create mode 100644 partcasestudies.html create mode 100644 partcdi.html create mode 100644 partentbeans.html create mode 100644 partmessaging.html create mode 100644 partpersist.html create mode 100644 partplatform.html create mode 100644 partsecurity.html create mode 100644 partsupporttechs.html create mode 100644 partwebsvcs.html create mode 100644 partwebtier.html create mode 100644 persistence-basicexamples.html create mode 100644 persistence-basicexamples001.html create mode 100644 persistence-basicexamples002.html create mode 100644 persistence-basicexamples003.html create mode 100644 persistence-basicexamples004.html create mode 100644 persistence-cache.html create mode 100644 persistence-cache001.html create mode 100644 persistence-cache002.html create mode 100644 persistence-criteria.html create mode 100644 persistence-criteria001.html create mode 100644 persistence-criteria002.html create mode 100644 persistence-criteria003.html create mode 100644 persistence-entitygraphs.html create mode 100644 persistence-entitygraphs001.html create mode 100644 persistence-entitygraphs002.html create mode 100644 persistence-entitygraphs003.html create mode 100644 persistence-entitygraphs004.html create mode 100644 persistence-intro.html create mode 100644 persistence-intro001.html create mode 100644 persistence-intro002.html create mode 100644 persistence-intro003.html create mode 100644 persistence-intro004.html create mode 100644 persistence-intro005.html create mode 100644 persistence-intro006.html create mode 100644 persistence-intro007.html create mode 100644 persistence-locking.html create mode 100644 persistence-locking001.html create mode 100644 persistence-locking002.html create mode 100644 persistence-querylanguage.html create mode 100644 persistence-querylanguage001.html create mode 100644 persistence-querylanguage002.html create mode 100644 persistence-querylanguage003.html create mode 100644 persistence-querylanguage004.html create mode 100644 persistence-querylanguage005.html create mode 100644 persistence-querylanguage006.html create mode 100644 persistence-string-queries.html create mode 100644 persistence-string-queries001.html create mode 100644 persistence-string-queries002.html create mode 100644 persistence-string-queries003.html create mode 100644 resource-creation.html create mode 100644 resource-creation001.html create mode 100644 resource-creation002.html create mode 100644 resource-creation003.html create mode 100644 resources.html create mode 100644 resources001.html create mode 100644 resources002.html create mode 100644 resources003.html create mode 100644 resources004.html create mode 100644 resources005.html create mode 100644 security-advanced.html create mode 100644 security-advanced001.html create mode 100644 security-advanced002.html create mode 100644 security-advanced003.html create mode 100644 security-advanced004.html create mode 100644 security-advanced005.html create mode 100644 security-advanced006.html create mode 100644 security-advanced007.html create mode 100644 security-advanced008.html create mode 100644 security-intro.html create mode 100644 security-intro001.html create mode 100644 security-intro002.html create mode 100644 security-intro003.html create mode 100644 security-intro004.html create mode 100644 security-intro005.html create mode 100644 security-intro006.html create mode 100644 security-intro007.html create mode 100644 security-javaee.html create mode 100644 security-javaee001.html create mode 100644 security-javaee002.html create mode 100644 security-javaee003.html create mode 100644 security-webtier.html create mode 100644 security-webtier001.html create mode 100644 security-webtier002.html create mode 100644 security-webtier003.html create mode 100644 security-webtier004.html create mode 100644 servlets.html create mode 100644 servlets001.html create mode 100644 servlets002.html create mode 100644 servlets003.html create mode 100644 servlets004.html create mode 100644 servlets005.html create mode 100644 servlets006.html create mode 100644 servlets007.html create mode 100644 servlets008.html create mode 100644 servlets009.html create mode 100644 servlets010.html create mode 100644 servlets011.html create mode 100644 servlets012.html create mode 100644 servlets013.html create mode 100644 servlets014.html create mode 100644 servlets015.html create mode 100644 servlets016.html create mode 100644 servlets017.html create mode 100644 servlets018.html create mode 100644 target.html create mode 100644 transactions.html create mode 100644 transactions001.html create mode 100644 transactions002.html create mode 100644 transactions003.html create mode 100644 transactions004.html create mode 100644 transactions005.html create mode 100644 transactions006.html create mode 100644 transactions007.html create mode 100644 transactions008.html create mode 100644 transactions009.html create mode 100644 usingexamples.html create mode 100644 usingexamples001.html create mode 100644 usingexamples002.html create mode 100644 usingexamples003.html create mode 100644 usingexamples004.html create mode 100644 usingexamples005.html create mode 100644 usingexamples006.html create mode 100644 usingexamples007.html create mode 100644 usingexamples008.html create mode 100644 usingexamples009.html create mode 100644 webapp.html create mode 100644 webapp001.html create mode 100644 webapp002.html create mode 100644 webapp003.html create mode 100644 webapp004.html create mode 100644 webapp005.html create mode 100644 webapp006.html create mode 100644 webi18n.html create mode 100644 webi18n001.html create mode 100644 webi18n002.html create mode 100644 webi18n003.html create mode 100644 webi18n004.html create mode 100644 webservices-intro.html create mode 100644 webservices-intro001.html create mode 100644 webservices-intro002.html create mode 100644 webservices-intro003.html create mode 100644 websocket.html create mode 100644 websocket001.html create mode 100644 websocket002.html create mode 100644 websocket003.html create mode 100644 websocket004.html create mode 100644 websocket005.html create mode 100644 websocket006.html create mode 100644 websocket007.html create mode 100644 websocket008.html create mode 100644 websocket009.html create mode 100644 websocket010.html create mode 100644 websocket011.html create mode 100644 websocket012.html create mode 100644 websocket013.html diff --git a/batch-processing.html b/batch-processing.html new file mode 100644 index 0000000..8107f11 --- /dev/null +++ b/batch-processing.html @@ -0,0 +1,133 @@ + + + + + + Batch Processing + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

55 Batch Processing

+
+
+

This chapter describes Batch Applications for the Java Platform (JSR +352), which provides support for defining, implementing, and running +batch jobs. Batch jobs are tasks that can be executed without user +interaction. The batch framework is composed of a job specification +language based on XML, a Java API, and a batch runtime.

+
+
+

The following topics are addressed here:

+
+ +
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/batch-processing001.html b/batch-processing001.html new file mode 100644 index 0000000..a188435 --- /dev/null +++ b/batch-processing001.html @@ -0,0 +1,310 @@ + + + + + + Introduction to Batch Processing + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

55.1 Introduction to Batch Processing

+
+
+

Some enterprise applications contain tasks that can be executed without +user interaction. These tasks are executed periodically or when resource +usage is low, and they often process large amounts of information such +as log files, database records, or images. Examples include billing, +report generation, data format conversion, and image processing. These +tasks are called batch jobs.

+
+
+

Batch processing refers to running batch jobs on a computer system. Java +EE includes a batch processing framework that provides the batch +execution infrastructure common to all batch applications, enabling +developers to concentrate on the business logic of their batch +applications. The batch framework consists of a job specification +language based on XML, a set of batch annotations and interfaces for +application classes that implement the business logic, a batch container +that manages the execution of batch jobs, and supporting classes and +interfaces to interact with the batch container.

+
+
+

A batch job can be completed without user intervention. For example, +consider a telephone billing application that reads phone call records +from the enterprise information systems and generates a monthly bill for +each account. Since this application does not require any user +interaction, it can run as a batch job.

+
+
+

The phone billing application consists of two phases: The first phase +associates each call from the registry with a monthly bill, and the +second phase calculates the tax and total amount due for each bill. Each +of these phases is a step of the batch job.

+
+
+

Batch applications specify a set of steps and their execution order. +Different batch frameworks may specify additional elements, like +decision elements or groups of steps that run in parallel. The following +sections describe steps in more detail and provide information about +other common characteristics of batch frameworks.

+
+
+

55.1.1 Steps in Batch Jobs

+
+

A step is an independent and sequential phase of a batch job. Batch jobs +contain chunk-oriented steps and task-oriented steps.

+
+
+
    +
  • +

    Chunk-oriented steps (chunk steps) process data by reading items from +a data source, applying some business logic to each item, and storing +the results. Chunk steps read and process one item at a time and group +the results into a chunk. The results are stored when the chunk reaches +a configurable size. Chunk-oriented processing makes storing results +more efficient and facilitates transaction demarcation.

    +
    +

    Chunk steps have three parts.

    +
    +
    +
      +
    • +

      The input retrieval part reads one item at a time from a data source, +such as entries on a database, files in a directory, or entries in a log +file.

      +
    • +
    • +

      The business processing part manipulates one item at a time using the +business logic defined by the application. Examples include filtering, +formatting, and accessing data from the item for computing a result.

      +
    • +
    • +

      The output writing part stores a chunk of processed items at a time.

      +
      +

      Chunk steps are often long-running because they process large amounts of +data. Batch frameworks enable chunk steps to bookmark their progress +using checkpoints. A chunk step that is interrupted can be restarted +from the last checkpoint. The input retrieval and output writing parts +of a chunk step save their current position after the processing of each +chunk, and can recover it when the step is restarted.

      +
      +
      +

      Figure 55-1 shows the three parts of two steps in a +batch job.

      +
      +
      +

      Figure 55-1 Chunk Steps in a Batch Job

      +
      +
    • +
    +
    +
  • +
+
+
+

Description of Figure 55-1 follows
+Description of "Figure 55-1 Chunk Steps +in a Batch Job"
+
+* Task-oriented steps (task steps) execute tasks other than processing +items from a data source. Examples include creating or removing +directories, moving files, creating or dropping database tables, +configuring resources, and so on. Task steps are not usually +long-running compared to chunk steps.

+
+
+

For example, the phone billing application consists of two chunk steps.

+
+
+
    +
  • +

    In the first step, the input retrieval part reads call records from +the registry; the business processing part associates each call with a +bill and creates a bill if one does not exist for an account; and the +output writing part stores each bill in a database.

    +
  • +
  • +

    In the second step, the input retrieval part reads bills from the +database; the business processing part calculates the tax and total +amount due for each bill; and the output writing part updates the +database records and generates printable versions of each bill.

    +
  • +
+
+
+

This application could also contain a task step that cleaned up the +files from the bills generated for the previous month.

+
+
+
+

55.1.2 Parallel Processing

+
+

Batch jobs often process large amounts of data or perform +computationally expensive operations. Batch applications can benefit +from parallel processing in two scenarios.

+
+
+
    +
  • +

    Steps that do not depend on each other can run on different threads.

    +
  • +
  • +

    Chunk-oriented steps where the processing of each item does not depend +on the results of processing previous items can run on more than one +thread.

    +
  • +
+
+
+

Batch frameworks provide mechanisms for developers to define groups of +independent steps and to split chunk-oriented steps in parts that can +run in parallel.

+
+
+
+

55.1.3 Status and Decision Elements

+
+

Batch frameworks keep track of a status for every step in a job. The +status indicates if a step is running or if it has completed. If the +step has completed, the status indicates one of the following.

+
+
+
    +
  • +

    The execution of the step was successful.

    +
  • +
  • +

    The step was interrupted.

    +
  • +
  • +

    An error occurred in the execution of the step.

    +
  • +
+
+
+

In addition to steps, batch jobs can also contain decision elements. +Decision elements use the exit status of the previous step to determine +the next step or to terminate the batch job. Decision elements set the +status of the batch job when terminating it. Like a step, a batch job +can terminate successfully, be interrupted, or fail.

+
+
+

Figure 55-2 shows an example of a job that contains +chunk steps, task steps and a decision element.

+
+
+

Figure 55-2 Steps and Decision Elements in a Job

+
+ +
+
+

55.1.4 Batch Framework Functionality

+
+

Batch applications have the following common requirements.

+
+
+
    +
  • +

    Define jobs, steps, decision elements, and the relationships between +them.

    +
  • +
  • +

    Execute some groups of steps or parts of a step in parallel.

    +
  • +
  • +

    Maintain state information for jobs and steps.

    +
  • +
  • +

    Launch jobs and resume interrupted jobs.

    +
  • +
  • +

    Handle errors.

    +
  • +
+
+
+

Batch frameworks provide the batch execution infrastructure that +addresses the common requirements of all batch applications, enabling +developers to concentrate on the business logic of their applications. +Batch frameworks consist of a format to specify jobs and steps, an +application programming interface (API), and a service available at +runtime that manages the execution of batch jobs.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/batch-processing002.html b/batch-processing002.html new file mode 100644 index 0000000..32348eb --- /dev/null +++ b/batch-processing002.html @@ -0,0 +1,387 @@ + + + + + + Batch Processing in Java EE + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

55.2 Batch Processing in Java EE

+
+
+

This section lists the components of the batch processing framework in +Java EE and provides an overview of the steps you have to follow to +create a batch application.

+
+
+

The following topics are addressed here:

+
+ +
+

55.2.1 The Batch Processing Framework

+
+

Java EE includes a batch processing framework that consists of the +following elements:

+
+
+
    +
  • +

    A batch runtime that manages the execution of jobs

    +
  • +
  • +

    A job specification language based on XML

    +
  • +
  • +

    A Java API to interact with the batch runtime

    +
  • +
  • +

    A Java API to implement steps, decision elements, and other batch +artifacts

    +
  • +
+
+
+

Batch applications in Java EE contain XML files and Java classes. The +XML files define the structure of a job in terms of batch artifacts and +the relationships between them. (A batch artifact is a part of a +chunk-oriented step, a task-oriented step, a decision element, or +another component of a batch application). The Java classes implement +the application logic of the batch artifacts defined in the XML files. +The batch runtime parses the XML files and loads the batch artifacts as +Java classes to run the jobs in a batch application.

+
+
+
+

55.2.2 Creating Batch Applications

+
+

The process for creating a batch application in Java EE is the +following.

+
+
+
    +
  1. +

    Design the batch application.

    +
  2. +
  3. +

    Identify the input sources, the format of the input data, the +desired final result, and the required processing phases.

    +
  4. +
  5. +

    Organize the application as a job with chunk-oriented steps, +task-oriented steps, and decision elements. Determine the dependencies +between them.

    +
  6. +
  7. +

    Determine the order of execution in terms of transitions between +steps.

    +
  8. +
  9. +

    Identify steps that can run in parallel and steps that can run in +more than one thread.

    +
  10. +
  11. +

    Create the batch artifacts as Java classes by implementing the +interfaces specified by the framework for steps, decision elements, and +so on. These Java classes contain the code to read data from input +sources, format items, process items, and store results. Batch artifacts +can access context objects from the batch runtime using dependency +injection.

    +
  12. +
  13. +

    Define jobs, steps, and their execution flow in XML files using the +Job Specification Language. The elements in the XML files reference +batch artifacts implemented as Java classes. The batch artifacts can +access properties declared in the XML files, such as names of files and +databases.

    +
  14. +
  15. +

    Use the Java API provided by the batch runtime to launch the batch +application.

    +
  16. +
+
+
+

The following sections describe in detail how to use the components of +the batch processing framework in Java EE to create batch applications.

+
+
+
+

55.2.3 Elements of a Batch Job

+
+

A batch job can contain one or more of the following elements:

+
+
+
    +
  • +

    Steps

    +
  • +
  • +

    Flows

    +
  • +
  • +

    Splits

    +
  • +
  • +

    Decision elements

    +
  • +
+
+
+

Steps are described in +Introduction to Batch Processing, +and can be chunk-oriented or task-oriented. Chunk-oriented steps can be +partitioned steps. In a partitioned chunk step, the processing of one +item does not depend on other items, so these steps can run in more than +one thread.

+
+
+

A flow is a sequence of steps that execute as a unit. A sequence of +related steps can be grouped together into a flow. The steps in a flow +cannot transition to steps outside the flow. The flow transitions to the +next element when its last step completes.

+
+
+

A split is a set of flows that execute in parallel; each flow runs on a +separate thread. The split transitions to the next element when all its +flows complete.

+
+
+

Decision elements use the exit status of the previous step to determine +the next step or to terminate the batch job.

+
+
+
+

55.2.4 Properties and Parameters

+
+

Jobs and steps can have a number of properties associated with them. You +define properties in the job definition file, and batch artifacts access +these properties using context objects from the batch runtime. Using +properties in this manner enables you to decouple static parameters of +the job from the business logic and to reuse batch artifacts in +different job definition files.

+
+
+

Specifying properties is described in +Using the Job Specification +Language, and accessing properties in batch artifacts is described in +Creating Batch Artifacts.

+
+
+

Java EE applications can also pass parameters to a job when they submit +it to the batch runtime. This enables you to specify dynamic parameters +that are only known at runtime. Parameters are also necessary for +partitioned steps, since each partition needs to know, for example, what +range of items to process.

+
+
+

Specifying parameters when submitting jobs is described in +Submitting Jobs to the Batch +Runtime. Specifying parameters for partitioned steps and accessing them +in batch artifacts is demonstrated in +The phonebilling Example +Application.

+
+
+
+

55.2.5 Job Instances and Job Executions

+
+

A job definition can have multiple instances, each with different +parameters. A job execution is an attempt to run a job instance. The +batch runtime maintains information about job instances and job +executions, as described in +Checking the Status of a Job.

+
+
+
+

55.2.6 Batch and Exit Status

+
+

The state of jobs, steps, splits, and flows is represented in the batch +runtime as a batch status value. Batch status values are listed +Table 55-1. They are represented as strings.

+
+
+

+
+
+

Table 55-1 Batch Status Values

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ValueDescription

STARTING

The job has been submitted to the batch runtime.

STARTED

The job is running.

STOPPING

The job has been requested to stop.

STOPPED

The job has stopped.

FAILED

The job finished executing because of an error.

COMPLETED

The job finished executing successfully.

ABANDONED

The job was marked abandoned.

+
+
+
+
+
+
+
+

Java EE applications can submit jobs and access the batch status of a +job using the JobOperator interface, as described in +Submitting Jobs to the Batch +Runtime. Job definition files can refer to batch status values using +the Job Specification Language (JSL), as described in +Using the Job Specification +Language. Batch artifacts can access batch status values using context +objects, as described in Using the +Context Objects from the Batch Runtime.

+
+
+

For flows, the batch status is that of its last step. For splits, the +batch status is the following:

+
+
+
    +
  • +

    COMPLETED: If all its flows have a batch status of COMPLETED

    +
  • +
  • +

    FAILED: If any flow has a batch status of FAILED

    +
  • +
  • +

    STOPPED: If any flow has a batch status of STOPPED, and no flows +have a batch status of FAILED

    +
  • +
+
+
+

The batch status for jobs, steps, splits, and flows is set by the batch +runtime. Jobs, steps, splits, and flows also have an exit status, which +is a user-defined value based on the batch status. You can set the exit +status inside batch artifacts or in the job definition file. You can +access the exit status in the same manner as the batch status, described +above. The default value for the exit status is the same as the batch +status.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/batch-processing003.html b/batch-processing003.html new file mode 100644 index 0000000..6ee2f0e --- /dev/null +++ b/batch-processing003.html @@ -0,0 +1,286 @@ + + + + + + Simple Use Case + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

55.3 Simple Use Case

+
+
+

This section demonstrates how to define a simple job using the Job +Specification Language (JSL) and how to implement the corresponding +batch artifacts. Refer to the rest of the sections in this chapter for +detailed descriptions of the elements in the batch framework.

+
+
+

The following job definition specifies a chunk step and a task step as +follows:

+
+
+
+
<?xml version="1.0" encoding="UTF-8"?>
+<job id="simplejob" xmlns="http://xmlns.jcp.org/xml/ns/javaee"
+                    version="1.0">
+  <properties>
+    <property name="input_file" value="input.txt"/>
+    <property name="output_file" value="output.txt"/>
+  </properties>
+  <step id="mychunk" next="mytask">
+    <chunk>
+      <reader ref="MyReader"></reader>
+      <processor ref="MyProcessor"></processor>
+      <writer ref="MyWriter"></writer>
+    </chunk>
+  </step>
+  <step id="mytask">
+    <batchlet ref="MyBatchlet"></batchlet>
+    <end on="COMPLETED"/>
+  </step>
+</job>
+
+
+
+

55.3.1 Chunk Step

+
+

In most cases, you have to implement a checkpoint class for +chunk-oriented steps. The following class just keeps track of the line +number in a text file:

+
+
+
+
public class MyCheckpoint implements Serializable {
+    private long lineNum = 0;
+    public void increase() { lineNum++; }
+    public long getLineNum() { return lineNum; }
+}
+
+
+
+

The following item reader implementation continues reading the input +file from the provided checkpoint if the job was restarted. The items +consist of each line in the text file (in more complex scenarios, the +items are custom Java types and the input source can be a database):

+
+
+
+
@Dependent
+@Named("MyReader")
+public class MyReader implements javax.batch.api.chunk.ItemReader {
+    private MyCheckpoint checkpoint;
+    private BufferedReader breader;
+    @Inject
+    JobContext jobCtx;
+
+    public MyReader() {}
+
+    @Override
+    public void open(Serializable ckpt) throws Exception {
+        if (ckpt == null)
+            checkpoint = new MyCheckpoint();
+        else
+            checkpoint = (MyCheckpoint) ckpt;
+        String fileName = jobCtx.getProperties()
+                                .getProperty("input_file");
+        breader = new BufferedReader(new FileReader(fileName));
+        for (long i = 0; i < checkpoint.getLineNum(); i++)
+            breader.readLine();
+    }
+
+    @Override
+    public void close() throws Exception {
+        breader.close();
+    }
+
+    @Override
+    public Object readItem() throws Exception {
+        String line = breader.readLine();
+        return line;
+    }
+}
+
+
+
+

In the following case, the item processor only converts the line to +uppercase. More complex examples can process items in different ways or +transform them into custom output Java types:

+
+
+
+
@Dependent
+@Named("MyProcessor")
+public class MyProcessor implements javax.batch.api.chunk.ItemProcessor {
+    public MyProcessor() {}
+
+    @Override
+    public Object processItem(Object obj) throws Exception {
+        String line = (String) obj;
+        return line.toUpperCase();
+    }
+}
+
+
+
+
+
+
+
+
+ +++ + + + + + +
+

Note:

+
+
+

The batch processing API does not support generics. In most cases, you +need to cast items to their specific type before processing them.

+
+
+
+
+
+
+
+
+

The item writer writes the processed items to the output file. It +overwrites the output file if no checkpoint is provided; otherwise, it +resumes writing at the end of the file. Items are written in chunks:

+
+
+
+
@Dependent
+@Named("MyWriter")
+public class MyWriter implements javax.batch.api.chunk.ItemWriter {
+    private BufferedWriter bwriter;
+    @Inject
+    private JobContext jobCtx;
+
+    @Override
+    public void open(Serializable ckpt) throws Exception {
+        String fileName = jobCtx.getProperties()
+                                .getProperty("output_file");
+        bwriter = new BufferedWriter(new FileWriter(fileName,
+                                                    (ckpt != null)));
+    }
+
+    @Override
+    public void writeItems(List<Object> items) throws Exception {
+        for (int i = 0; i < items.size(); i++) {
+            String line = (String) items.get(i);
+            bwriter.write(line);
+            bwriter.newLine();
+        }
+    }
+
+    @Override
+    public Serializable checkpointInfo() throws Exception {
+        return new MyCheckpoint();
+}
+
+
+
+
+

55.3.2 Task Step

+
+

The task step displays the length of the output file. In more complex +scenarios, task steps perform any task that does not fit the chunk +processing programming model:

+
+
+
+
@Dependent
+@Named("MyBatchlet")
+public class MyBatchlet implements javax.batch.api.chunk.Batchlet {
+    @Inject
+    private JobContext jobCtx;
+
+    @Override
+    public String process() throws Exception {
+        String fileName = jobCtx.getProperties()
+                                .getProperty("output_file");
+        System.out.println(""+(new File(fileName)).length());
+        return "COMPLETED";
+    }
+}
+
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/batch-processing004.html b/batch-processing004.html new file mode 100644 index 0000000..ba537e2 --- /dev/null +++ b/batch-processing004.html @@ -0,0 +1,812 @@ + + + + + + Using the Job Specification Language + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

55.4 Using the Job Specification Language

+
+
+

The Job Specification Language (JSL) enables you to define the steps in +a job and their execution order using an XML file. The following example +shows how to define a simple job that contains one chunk step and one +task step:

+
+
+
+
<job id="loganalysis" xmlns="http://xmlns.jcp.org/xml/ns/javaee"
+                      version="1.0">
+  <properties>
+    <property name="input_file" value="input1.txt"/>
+    <property name="output_file" value="output2.txt"/>
+  </properties>
+
+  <step id="logprocessor" next="cleanup">
+    <chunk checkpoint-policy="item" item-count="10">
+      <reader ref="com.example.pkg.LogItemReader"></reader>
+      <processor ref="com.example.pkg.LogItemProcessor"></processor>
+      <writer ref="com.example.pkg.LogItemWriter"></writer>
+    </chunk>
+  </step>
+
+  <step id="cleanup">
+    <batchlet ref="com.example.pkg.CleanUp"></batchlet>
+    <end on="COMPLETED"/>
+  </step>
+</job>
+
+
+
+

This example defines the loganalysis batch job, which consists of the +logprocessor chunk step and the cleanup task step. The +logprocessor step transitions to the cleanup step, which terminates +the job when completed.

+
+
+

The job element defines two properties, input_file and +output_file. Specifying properties in this manner enables you to run a +batch job with different configuration parameters without having to +recompile its Java batch artifacts. The batch artifacts can access these +properties using the context objects from the batch runtime.

+
+
+

The logprocessor step is a chunk step that specifies batch artifacts +for the reader (LogItemReader), the processor (LogItemProcessor), +and the writer (LogItemWriter). This step creates a checkpoint for +every ten items processed.

+
+
+

The cleanup step is a task step that specifies the CleanUp class as +its batch artifact. The job terminates when this step completes.

+
+
+

The following sections describe the elements of the Job Specification +Language (JSL) in more detail and show the most common attributes and +child elements.

+
+
+

55.4.1 The job Element

+
+

The job element is always the top-level element in a job definition +file. Its main attributes are id and restartable. The job element +can contain one properties element and zero or more of each of the +following elements: listener, step, flow, and split. For +example:

+
+
+
+
<job id="jobname" restartable="true">
+  <listeners>
+    <listener ref="com.example.pkg.ListenerBatchArtifact"/>
+  </listeners>
+  <properties>
+    <property name="propertyName1" value="propertyValue1"/>
+    <property name="propertyName2" value="propertyValue2"/>
+  </properties>
+  <step ...> ... </step>
+  <step ...> ... </step>
+  <decision ...> ... </decision>
+  <flow ...> ... </flow>
+  <split ...> ... </split>
+</job>
+
+
+
+

The listener element specifies a batch artifact whose methods are +invoked before and after the execution of the job. The batch artifact is +an implementation of the javax.batch.api.listener.JobListener +interface. See The Listener Batch +Artifacts for an example of a job listener implementation.

+
+
+

The first step, flow, or split element inside the job element +executes first.

+
+
+
+

55.4.2 The step Element

+
+

The step element can be a child of the job and flow elements. Its +main attributes are id and next. The step element can contain the +following elements.

+
+
+
    +
  • +

    One chunk element for chunk-oriented steps or one batchlet element +for task-oriented steps.

    +
  • +
  • +

    One properties element (optional).

    +
    +

    This element specifies a set of properties that batch artifacts can +access using batch context objects.

    +
    +
  • +
  • +

    One listener element (optional); one listeners element if more +than one listener is specified.

    +
    +

    This element specifies listener artifacts that intercept various phases +of step execution.

    +
    +
    +

    For chunk steps, the batch artifacts for these listeners can be +implementations of the following interfaces: StepListener, +ItemReadListener, ItemProcessListener, ItemWriteListener, +ChunkListener, RetryReadListener, RetryProcessListener, +RetryWriteListener, SkipReadListener, SkipProcessListener, and +SkipWriteListener.

    +
    +
    +

    For task steps, the batch artifact for these listeners must be an +implementation of the StepListener interface.

    +
    +
    +

    See The Listener Batch Artifacts +for an example of an item processor listener implementation.

    +
    +
  • +
  • +

    One partition element (optional).

    +
    +

    This element is used in partitioned steps which execute in more than one +thread.

    +
    +
  • +
  • +

    One end element if this is the last step in a job.

    +
    +

    This element sets the batch status to COMPLETED.

    +
    +
  • +
  • +

    One stop element (optional) to stop a job at this step.

    +
    +

    This element sets the batch status to STOPPED.

    +
    +
  • +
  • +

    One fail element (optional) to terminate a job at this step.

    +
    +

    This element sets the batch status to FAILED.

    +
    +
  • +
  • +

    One or more next elements if the next attribute is not specified.

    +
    +

    This element is associated with an exit status and refers to another +step, a flow, a split, or a decision element.

    +
    +
  • +
+
+
+

The following is an example of a chunk step:

+
+
+
+
<step id="stepA" next="stepB">
+  <properties> ... </properties>
+  <listeners>
+    <listener ref="MyItemReadListenerImpl"/>
+    ...
+  </listeners>
+  <chunk ...> ... </chunk>
+  <partition> ... </partition>
+  <end on="COMPLETED" exit-status="MY_COMPLETED_EXIT_STATUS"/>
+  <stop on="MY_TEMP_ISSUE_EXIST_STATUS" restart="step0"/>
+  <fail on="MY_ERROR_EXIT_STATUS" exit-status="MY_ERROR_EXIT_STATUS"/>
+</step>
+
+
+
+

The following is an example of a task step:

+
+
+
+
<step id="stepB" next="stepC">
+  <batchlet ...> ... </batchlet>
+  <properties> ... </properties>
+  <listener ref="MyStepListenerImpl"/>
+</step>
+
+
+
+

55.4.2.1 The chunk Element

+
+

The chunk element is a child of the step element for chunk-oriented +steps. The attributes of this element are listed in Table +55-2.

+
+
+

+
+
+

Table 55-2 Attributes of the chunk Element

+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Attribute NameDescriptionDefault Value

checkpoint-policy

+

Specifies how to commit the results of processing each chunk:

+
+
+
    +
  • +

    "item": the chunk is committed after processing item-count items

    +
  • +
  • +

    "custom": the chunk is committed according to a checkpoint algorithm +specified with the checkpoint-algorithm element

    +
  • +
+
+
+

The checkpoint is updated when the results of a chunk are committed.

+
+
+

Every chunk is processed in a global Java EE transaction. If the +processing of one item in the chunk fails, the transaction is rolled +back and no processed items from this chunk are stored.

+

"item"

item-count

Specifies the number of items to process before +committing the chunk and taking a checkpoint.

10

time-limit

+

Specifies the number of seconds before committing the chunk and taking a +checkpoint when checkpoint-policy="item".

+
+
+

If item-count items have not been processed by time-limit seconds, +the chunk is committed and a checkpoint is taken.

+

0 (no limit)

buffer-items

Specifies if processed items are buffered until it is +time to take a checkpoint. If true, a single call to the item writer is +made with a list of the buffered items before committing the chunk and +taking a checkpoint.

true

skip-limit

Specifies the number of skippable exceptions to skip in +this step during chunk processing. Skippable exception classes are +specified with the skippable-exception-classes element.

No limit

retry-limit

Specifies the number of attempts to execute this step if +retryable exceptions occur. Retryable exception classes are specified +with the retryable-exception-classes element.

No limit

+
+
+
+
+
+
+
+

The chunk element can contain the following elements.

+
+
+
    +
  • +

    One reader element.

    +
    +

    This element specifies a batch artifact that implements the ItemReader +interface.

    +
    +
  • +
  • +

    One processor element.

    +
    +

    This element specifies a batch artifact that implements the +ItemProcessor interface.

    +
    +
  • +
  • +

    One writer element.

    +
    +

    This element specifies a batch artifact that implements the ItemWriter +interface.

    +
    +
  • +
  • +

    One checkpoint-algorithm element (optional).

    +
    +

    This element specifies a batch artifact that implements the +CheckpointAlgorithm interface and provides a custom checkpoint policy.

    +
    +
  • +
  • +

    One skippable-exception-classes element (optional).

    +
    +

    This element specifies a set of exceptions thrown from the reader, +writer, and processor batch artifacts that chunk processing should skip. +The skip-limit attribute from the chunk element specifies the +maximum number of skipped exceptions.

    +
    +
  • +
  • +

    One retryable-exception-classes element (optional).

    +
    +

    This element specifies a set of exceptions thrown from the reader, +writer, and processor batch artifacts that chunk processing will retry. +The retry-limit attribute from the chunk element specifies the +maximum number of attempts.

    +
    +
  • +
  • +

    One no-rollback-exception-classes element (optional).

    +
    +

    This element specifies a set of exceptions thrown from the reader, +writer, and processor batch artifacts that should not cause the batch +runtime to roll back the current chunk, but to retry the current +operation without a rollback instead.

    +
    +
    +

    For exception types not specified in this element, the current chunk is +rolled back by default when an exception occurs.

    +
    +
  • +
+
+
+

The following is an example of a chunk-oriented step:

+
+
+
+
<step id="stepC" next="stepD">
+  <chunk checkpoint-policy="item" item-count="5" time-limit="180"
+         buffer-items="true" skip-limit="10" retry-limit="3">
+    <reader ref="pkg.MyItemReaderImpl"></reader>
+    <processor ref="pkg.MyItemProcessorImpl"></processor>
+    <writer ref="pkg.MyItemWriterImpl"></writer>
+    <skippable-exception-classes>
+      <include class="pkg.MyItemException"/>
+      <exclude class="pkg.MyItemSeriousSubException"/>
+    </skippable-exception-classes>
+    <retryable-exception-classes>
+      <include class="pkg.MyResourceTempUnavailable"/>
+    </retryable-exception-classes>
+  </chunk>
+</step>
+
+
+
+

This example defines a chunk step and specifies its reader, processor, +and writer artifacts. The step updates a checkpoint and commits each +chunk after processing five items. It skips all MyItemException +exceptions and all its subtypes, except for MyItemSeriousSubException, +up to a maximum of ten skipped exceptions. The step retries a chunk when +a MyResourceTempUnavailable exception occurs, up to a maximum of three +attempts.

+
+
+
+

55.4.2.2 The batchlet Element

+
+

The batchlet element is a child of the step element for +task-oriented steps. This element only has the ref attribute, which +specifies a batch artifact that implements the Batchlet interface. The +batch element can contain a properties element.

+
+
+

The following is an example of a task-oriented step:

+
+
+
+
<step id="stepD" next="stepE">
+  <batchlet ref="pkg.MyBatchletImpl">
+    <properties>
+      <property name="pname" value="pvalue"/>
+    </properties>
+  </batchlet>
+</step>
+
+
+
+

This example defines a batch step and specifies its batch artifact.

+
+
+
+

55.4.2.3 The partition Element

+
+

The partition element is a child of the step element. It indicates +that a step is partitioned. Most partitioned steps are chunk steps where +the processing of each item does not depend on the results of processing +previous items. You specify the number of partitions in a step and +provide each partition with specific information on which items to +process, such as the following.

+
+
+
    +
  • +

    A range of items. For example, partition 1 processes items 1 through +500, and partition 2 processes items 501 through 1000.

    +
  • +
  • +

    An input source. For example, partition 1 processes the items in +input1.txt and partition 2 processes the items in input2.txt.

    +
  • +
+
+
+

When the number of partitions, the number of items, and the input +sources for a partitioned step are known at development or deployment +time, you can use partition properties in the job definition file to +specify partition-specific information and access these properties from +the step batch artifacts. The runtime creates as many instances of the +step batch artifacts (reader, processor, and writer) as partitions, and +each artifact instance receives the properties specific to its +partition.

+
+
+

In most cases, the number of partitions, the number of items, or the +input sources for a partitioned step can only be determined at runtime. +Instead of specifying partition-specific properties statically in the +job definition file, you provide a batch artifact that can access your +data sources at runtime and determine how many partitions are needed and +what range of items each partition should process. This batch artifact +is an implementation of the PartitionMapper interface. The batch +runtime invokes this artifact and then uses the information it provides +to instantiate the step batch artifacts (reader, writer, and processor) +for each partition and to pass them partition-specific data as +parameters.

+
+
+

The rest of this section describes the partition element in detail and +shows two examples of job definition files: one that uses partition +properties to specify a range of items for each partition, and one that +relies on a PartitionMapper implementation to determine +partition-specific information.

+
+
+

See The Phone Billing Chunk Step +in The phonebilling Example +Application for a complete example of a partitioned chunk step.

+
+
+

The partition element can contain the following elements.

+
+
+
    +
  • +

    One plan element, if the mapper element is not specified.

    +
    +

    This element defines the number of partitions, the number of threads, +and the properties for each partition in the job definition file. The +plan element is useful when this information is known at development +or deployment time.

    +
    +
  • +
  • +

    One mapper element, if the plan element is not specified.

    +
    +

    This element specifies a batch artifact that provides the number of +partitions, the number of threads, and the properties for each +partition. The batch artifact is an implementation of the +PartitionMapper interface. You use this option when the information +required for each partition is only known at runtime.

    +
    +
  • +
  • +

    One reducer element (optional).

    +
    +

    This element specifies a batch artifact that receives control when a +partitioned step begins, ends, or rolls back. The batch artifact enables +you to merge results from different partitions and perform other related +operations. The batch artifact is an implementation of the +PartitionReducer interface.

    +
    +
  • +
  • +

    One collector element (optional).

    +
    +

    This element specifies a batch artifact that sends intermediary results +from each partition to a partition analyzer. The batch artifact sends +the intermediary results after each checkpoint for chunk steps and at +the end of the step for task steps. The batch artifact is an +implementation of the PartitionCollector interface.

    +
    +
  • +
  • +

    One analyzer element (optional).

    +
    +

    This element specifies a batch artifact that analyzes the intermediary +results from the partition collector instances. The batch artifact is an +implementation of the PartitionAnalyzer interface.

    +
    +
  • +
+
+
+

The following is an example of a partitioned step using the plan +element:

+
+
+
+
<step id="stepE" next="stepF">
+  <chunk>
+    <reader ...></reader>
+    <processor ...></processor>
+    <writer ...></writer>
+  </chunk>
+  <partition>
+    <plan partitions="2" threads="2">
+      <properties partition="0">
+        <property name="firstItem" value="0"/>
+        <property name="lastItem" value="500"/>
+      </properties>
+      <properties partition="1">
+        <property name="firstItem" value="501"/>
+        <property name="lastItem" value="999"/>
+      </properties>
+    </plan>
+  </partition>
+  <reducer ref="MyPartitionReducerImpl"/>
+  <collector ref="MyPartitionCollectorImpl"/>
+  <analyzer ref="MyPartitionAnalyzerImpl"/>
+</step>
+
+
+
+

In this example, the plan element specifies the properties for each +partition in the job definition file.

+
+
+

The following example uses a mapper element instead of a plan +element. The PartitionMapper implementation dynamically provides the +same information as the plan element provides in the job definition +file:

+
+
+
+
<step id="stepE" next="stepF">
+  <chunk>
+    <reader ...></reader>
+    <processor ...></processor>
+    <writer ...></writer>
+  </chunk>
+  <partition>
+    <mapper ref="MyPartitionMapperImpl"/>
+    <reducer ref="MyPartitionReducerImpl"/>
+    <collector ref="MyPartitionCollectorImpl"/>
+    <analyzer ref="MyPartitionAnalyzerImpl"/>
+  </partition>
+</step>
+
+
+
+

Refer to The phonebilling Example +Application for an example implementation of the PartitionMapper +interface.

+
+
+
+
+

55.4.3 The flow Element

+
+

The flow element can be a child of the job, flow, and split +elements. Its attributes are id and next. Flows can transition to +flows, steps, splits, and decision elements. The flow element can +contain the following elements:

+
+
+
    +
  • +

    One or more step elements

    +
  • +
  • +

    One or more flow elements (optional)

    +
  • +
  • +

    One or more split elements (optional)

    +
  • +
  • +

    One or more decision elements (optional)

    +
  • +
+
+
+

The last step in a flow is the one with no next attribute or next +element. Steps and other elements in a flow cannot transition to +elements outside the flow.

+
+
+

The following is an example of the flow element:

+
+
+
+
<flow id="flowA" next="stepE">
+  <step id="flowAstepA" next="flowAstepB">...</step>
+  <step id="flowAstepB" next="flowAflowC">...</step>
+  <flow id="flowAflowC" next="flowAsplitD">...</flow>
+  <split id="flowAsplitD" next="flowAstepE">...</split>
+  <step id="flowAstepE">...</step>
+</flow>
+
+
+
+

This example flow contains three steps, one flow, and one split. The +last step does not have the next attribute. The flow transitions to +stepE when its last step completes.

+
+
+
+

55.4.4 The split Element

+
+

The split element can be a child of the job and flow elements. Its +attributes are id and next. Splits can transition to splits, steps, +flows, and decision elements. The split element can only contain one +or more flow elements that can only transition to other flow +elements in the split.

+
+
+

The following is an example of a split with three flows that execute +concurrently:

+
+
+
+
<split id="splitA" next="stepB">
+  <flow id="splitAflowA">...</flow>
+  <flow id="splitAflowB">...</flow>
+  <flow id="splitAflowC">...</flow>
+</split>
+
+
+
+
+

55.4.5 The decision Element

+
+

The decision element can be a child of the job and flow elements. +Its attributes are id and next. Steps, flows, and splits can +transition to a decision element. This element specifies a batch +artifact that decides the next step, flow, or split to execute based on +information from the execution of the previous step, flow, or split. The +batch artifact implements the Decider interface. The decision +element can contain the following elements.

+
+
+
    +
  • +

    One or more end elements (optional).

    +
    +

    This element sets the batch status to COMPLETED.

    +
    +
  • +
  • +

    One or more stop elements (optional).

    +
    +

    This element sets the batch status to STOPPED.

    +
    +
  • +
  • +

    One or more fail elements (optional).

    +
    +

    This element sets the batch status to FAILED.

    +
    +
  • +
  • +

    One or more next elements (optional).

    +
  • +
  • +

    One properties element (optional).

    +
  • +
+
+
+

The following is an example of the decider element:

+
+
+
+
<decision id="decisionA" ref="MyDeciderImpl">
+  <fail on="FAILED" exit-status="FAILED_AT_DECIDER"/>
+  <end on="COMPLETED" exit-status="COMPLETED_AT_DECIDER"/>
+  <stop on="MY_TEMP_ISSUE_EXIST_STATUS" restart="step2"/>
+</decision>
+
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/batch-processing005.html b/batch-processing005.html new file mode 100644 index 0000000..fc8ee1a --- /dev/null +++ b/batch-processing005.html @@ -0,0 +1,592 @@ + + + + + + Creating Batch Artifacts + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

55.5 Creating Batch Artifacts

+
+
+

After you define a job in terms of its batch artifacts using the Job +Specification Language (JSL), you create these artifacts as Java classes +that implement the interfaces in the javax.batch.api package and its +subpackages.

+
+
+

This section lists the main batch artifact interfaces, demonstrates how +to access context objects from the batch runtime, and provides some +examples.

+
+
+

The following topics are addressed here:

+
+ +
+

55.5.1 Batch Artifact Interfaces

+
+

The following tables list the interfaces that you implement to create +batch artifacts. The interface implementations are referenced from the +elements described in Using the +Job Specification Language.

+
+
+

Table 55-3 lists the interfaces to implement batch +artifacts for chunk steps, task steps, and decision elements.

+
+
+

Table 55-4 lists the interfaces to implement batch +artifacts for partitioned steps.

+
+
+

Table 55-5 lists the interfaces to implement batch +artifacts for job and step listeners.

+
+
+

+
+
+

Table 55-3 Main Batch Artifact Interfaces

+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PackageInterfaceDescription

javax.batch.api

Batchlet

Implements the business logic of a +task-oriented step. It is referenced from the batchlet element.

javax.batch.api

Decider

Decides the next step, flow, or split to +execute based on information from the execution of the previous step, +flow, or split. It is referenced from the decision element.

javax.batch.api.chunk

CheckPointAlgorithm

Implements a custom +checkpoint policy for chunk steps. It is referenced from the +checkpoint-algorithm element inside the chunk element.

javax.batch.api.chunk

ItemReader

Reads items from an input source +in a chunk step. It is referenced from the reader element inside the +chunk element.

javax.batch.api.chunk

ItemProcessor

Processes input items to +obtain output items in chunk steps. It is referenced from the +processor element inside the chunk element.

javax.batch.api.chunk

ItemWriter

Writes output items in chunk +steps. It is referenced from the writer element inside the chunk +element.

+
+
+
+
+
+
+
+

+
+
+

Table 55-4 Partition Batch Artifact Interfaces

+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PackageInterfaceDescription

javax.batch.api.partition

PartitionPlan

Provides details on how +to execute a partitioned step, such as the number of partitions, the +number of threads, and the parameters for each partition. This artifact +is not referenced directly from the job definition file.

javax.batch.api.partition

PartitionMapper

Provides a +PartitionPlan object. It is referenced from the mapper element +inside the partition element.

javax.batch.api.partition

PartitionReducer

Receives control when +a partitioned step begins, ends, or rolls back. It is referenced from +the reducer element inside the partition element.

javax.batch.api.partition

PartitionCollector

Sends intermediary +results from each partition to a partition analyzer. It is referenced +from the collector element inside the partition element.

javax.batch.api.partition

PartitionAnalyzer

Processes data and +final results from each partition. It is referenced from the analyzer +element inside the partition element.

+
+
+
+
+
+
+
+

+
+
+

Table 55-5 Listener Batch Artifact Interfaces

+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PackageInterfaceDescription

javax.batch.api.listener

JobListener

Intercepts job execution +before and after running a job. It is referenced from the listener +element inside the job element.

javax.batch.api.listener

StepListener

Intercepts step execution +before and after running a step. It is referenced from the listener +element inside the step element

javax.batch.api.chunk.listener

ChunkListener

Intercepts chunk +processing in chunk steps before and after processing each chunk, and on +errors. It is referenced from the listener element inside the step +element.

javax.batch.api.chunk.listener

ItemReadListener

Intercepts item +reading in chunk steps before and after reading each item, and on +errors. It is referenced from the listener element inside the step +element.

javax.batch.api.chunk.listener

ItemProcessListener

Intercepts +item processing in chunk steps before and after processing each item, +and on errors. It is referenced from the listener element inside the +step element.

javax.batch.api.chunk.listener

ItemWriteListener

Intercepts item +writing in chunk steps before and after writing each item, and on +errors. It is referenced from the listener element inside the step +element.

javax.batch.api.chunk.listener

RetryReadListener

Intercepts retry +item reading in chunk steps when an exception occurs. It is referenced +from the listener element inside the step element.

javax.batch.api.chunk.listener

RetryProcessListener

Intercepts +retry item processing in chunk steps when an exception occurs. It is +referenced from the listener element inside the step element.

javax.batch.api.chunk.listener

RetryWriteListener

Intercepts +retry item writing in chunk steps when an exception occurs. It is +referenced from the listener element inside the step element.

javax.batch.api.chunk.listener

SkipReadListener

Intercepts +skippable exception handling for item readers in chunk steps. It is +referenced from the listener element inside the step element.

javax.batch.api.chunk.listener

SkipProcessListener

Intercepts +skippable exception handling for item processors in chunk steps. It is +referenced from the listener element inside the step element.

javax.batch.api.chunk.listener

SkipWriteListener

Intercepts +skippable exception handling for item writers in chunk steps. It is +referenced from the listener element inside the step element.

+
+
+
+
+
+
+
+
+

55.5.2 Dependency Injection in Batch Artifacts

+
+

To ensure that Contexts and Dependency Injection (CDI) works in your +batch artifacts, follow these steps.

+
+
+
    +
  1. +

    Define your batch artifact implementations as CDI named beans using +the Named annotation.

    +
    +

    For example, define an item reader implementation in a chunk step as +follows:

    +
    +
    +
    +
    @Named("MyItemReaderImpl")
    +public class MyItemReaderImpl implements ItemReader {
    +    /* ... Override the ItemReader interface methods ... */
    +}
    +
    +
    +
  2. +
  3. +

    Provide a public, empty, no-argument constructor for your batch +artifacts.

    +
    +

    For example, provide the following constructor for the artifact above:

    +
    +
    +
    +
    public MyItemReaderImpl() {}
    +
    +
    +
  4. +
  5. +

    Specify the CDI name for the batch artifacts in the job definition +file, instead of using the fully qualified name of the class.

    +
    +

    For example, define the step for the artifact above as follows:

    +
    +
    +
    +
    <step id="stepA" next="stepB">
    +  <chunk>
    +    <reader ref="MyItemReaderImpl"></reader>
    +    ...
    +  </chunk>
    +</step>
    +
    +
    +
    +

    This example uses the CDI name (MyItemReaderImpl) instead of the fully +qualified name of the class (com.example.pkg.MyItemReaderImpl) to +specify a batch artifact.

    +
    +
  6. +
  7. +

    Ensure that your module is a CDI bean archive by annotating your +batch artifacts with the javax.enterprise.context.Dependent annotation +or by including an empty beans.xml deployment description with your +application. For example, the following batch artifact is annotated with +@Dependent:

    +
    +
    +
    @Dependent
    +@Named("MyItemReaderImpl")
    +public class MyItemReaderImpl implements ItemReader { ... }
    +
    +
    + +
    +
    +
    +
    +
    +
    +
  8. +
+
+ +++ + + + + + +
+

Note:

+
+
+

Contexts and Dependency Injection (CDI) is required in order to access +context objects from the batch runtime in batch artifacts.

+
+
+
+
+
+
+
+
+

You may encounter the following errors if you do not follow this +procedure.

+
+
+
    +
  • +

    The batch runtime cannot locate some batch artifacts.

    +
  • +
  • +

    The batch artifacts throw null pointer exceptions when accessing +injected objects.

    +
  • +
+
+
+
+

55.5.3 Using the Context Objects from the Batch Runtime

+
+

The batch runtime provides context objects that implement the +JobContext and StepContext interfaces in the +javax.batch.runtime.context package. These objects are associated with +the current job and step, respectively, and enable you to do the +following:

+
+
+
    +
  • +

    Get information from the current job or step, such as its name, +instance ID, execution ID, batch status, and exit status

    +
  • +
  • +

    Set the user-defined exit status

    +
  • +
  • +

    Store user data

    +
  • +
  • +

    Get property values from the job or step definition

    +
  • +
+
+
+

You can inject context objects from the batch runtime inside batch +artifact implementations like item readers, item processors, item +writers, batchlets, listeners, and so on. The following example +demonstrates how to access property values from the job definition file +in an item reader implementation:

+
+
+
+
@Dependent
+@Named("MyItemReaderImpl")
+public class MyItemReaderImpl implements ItemReader {
+    @Inject
+    JobContext jobCtx;
+
+    public MyItemReaderImpl() {}
+
+    @Override
+    public void open(Serializable checkpoint) throws Exception {
+        String fileName = jobCtx.getProperties()
+                                .getProperty("log_file_name");
+        ...
+    }
+    ...
+}
+
+
+
+

See Dependency Injection in Batch Artifacts for +instructions on how to define your batch artifacts to use dependency +injection.

+
+
+
+
+
+
+
+ +++ + + + + + +
+

Note:

+
+
+

Do not access batch context objects inside artifact constructors.

+
+
+

Because the job does not run until you submit it to the batch runtime, +the batch context objects are not available when CDI instantiates your +artifacts upon loading your application. The instantiation of these +beans fails and the batch runtime cannot find your batch artifacts when +your application submits the job.

+
+
+
+
+
+
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/batch-processing006.html b/batch-processing006.html new file mode 100644 index 0000000..7ee26c2 --- /dev/null +++ b/batch-processing006.html @@ -0,0 +1,178 @@ + + + + + + Submitting Jobs to the Batch Runtime + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

55.6 Submitting Jobs to the Batch Runtime

+
+
+

The JobOperator interface in the javax.batch.operations package +enables you to submit jobs to the batch runtime and obtain information +about existing jobs. This interface provides the following +functionality.

+
+
+
    +
  • +

    Obtain the names of all known jobs.

    +
  • +
  • +

    Start, stop, restart, and abandon jobs.

    +
  • +
  • +

    Obtain job instances and job executions.

    +
  • +
+
+
+

The BatchRuntime class in the javax.batch.runtime package provides +the getJobOperator factory method to obtain JobOperator objects.

+
+
+

55.6.1 Starting a Job

+
+

The following example code demonstrates how to obtain a JobOperator +object and submit a batch job:

+
+
+
+
JobOperator jobOperator = BatchRuntime.getJobOperator();
+Properties props = new Properties();
+props.setProperty("parameter1", "value1");
+...
+long execID = jobOperator.start("simplejob", props);
+
+
+
+

The first argument of the JobOperator.start method is the name of the +job as specified in its job definition file. The second parameter is a +Properties object that represents the parameters for this job +execution. You can use job parameters to pass to a job information that +is only known at runtime.

+
+
+
+

55.6.2 Checking the Status of a Job

+
+

The JobExecution interface in the javax.batch.runtime package +provides methods to obtain information about submitted jobs. This +interface provides the following functionality.

+
+
+
    +
  • +

    Obtain the batch and exit status of a job execution.

    +
  • +
  • +

    Obtain the time the execution was started, updated, or ended.

    +
  • +
  • +

    Obtain the job name.

    +
  • +
  • +

    Obtain the execution ID.

    +
  • +
+
+
+

The following example code demonstrates how to obtain the batch status +of a job using its execution ID:

+
+
+
+
JobExecution jobExec = jobOperator.getJobExecution(execID);
+String status = jobExec.getBatchStatus().toString();
+
+
+
+
+

55.6.3 Invoking the Batch Runtime in Your Application

+
+

The component from which you invoke the batch runtime depends on the +architecture of your particular application. For example, you can invoke +the batch runtime from an enterprise bean, a servlet, a managed bean, +and so on.

+
+
+

See The webserverlog Example +Application and The phonebilling +Example Application for details on how to invoke the batch runtime from +a managed bean driven by a JavaServer Faces user interface.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/batch-processing007.html b/batch-processing007.html new file mode 100644 index 0000000..fd24d45 --- /dev/null +++ b/batch-processing007.html @@ -0,0 +1,116 @@ + + + + + + Packaging Batch Applications + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

55.7 Packaging Batch Applications

+
+
+

Job definition files and batch artifacts do not require separate +packaging and can be included in any Java EE application.

+
+
+

Package the batch artifact classes with the rest of the classes of your +application, and include the job definition files in one of the +following directories:

+
+
+
    +
  • +

    META-INF/batch-jobs/ for jar packages

    +
  • +
  • +

    WEB-INF/classes/META-INF/batch-jobs/ for war packages

    +
  • +
+
+
+

The name of each job definition file must match its job ID. For example, +if you define a job as follows, and you are packaging your application +as a WAR file, include the job definition file in +WEB-INF/classes/META-INF/batch-jobs/simplejob.xml:

+
+
+
+
<job id="simplejob" xmlns="http://xmlns.jcp.org/xml/ns/javaee"
+                    version="1.0">
+  ...
+</job>
+
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/batch-processing008.html b/batch-processing008.html new file mode 100644 index 0000000..4aecea7 --- /dev/null +++ b/batch-processing008.html @@ -0,0 +1,609 @@ + + + + + + The webserverlog Example Application + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

55.8 The webserverlog Example Application

+
+
+

The webserverlog example application, located in the +tut-install`/examples/batch/webserverlog/` directory, demonstrates how +to use the batch framework in Java EE to analyze the log file from a web +server. This example application reads a log file and finds what +percentage of page views from tablet devices are product sales.

+
+
+

The following topics are addressed here:

+
+ +
+

55.8.1 Architecture of the webserverlog Example Application

+
+

The webserverlog example application consists of the following +elements:

+
+
+
    +
  • +

    A job definition file (webserverlog.xml) that uses the Job +Specification Language (JSL) to define a batch job with a chunk step and +a task step. The chunk step acts as a filter, and the task step +calculates statistics on the remaining entries.

    +
  • +
  • +

    A log file (log1.txt) that serves as input data to the batch job.

    +
  • +
  • +

    Two Java classes (LogLine and LogFilteredLine) that represent +input items and output items for the chunk step.

    +
  • +
  • +

    Three batch artifacts (LogLineReader, LogLineProcessor, and +LogFilteredLineWriter) that implement the chunk step of the +application. This step reads items from the web server log file, filters +them by the web browser used by the client, and writes the results to a +text file.

    +
  • +
  • +

    Two batch artifacts (InfoJobListener and InfoItemProcessListener) +that implement two simple listeners.

    +
  • +
  • +

    A batch artifact (MobileBatchlet.java) that calculates statistics on +the filtered items.

    +
  • +
  • +

    Two Facelets pages (index.xhtml and jobstarted.xhtml) that provide +the front end of the batch application. The first page shows the log +file that will be processed by the batch job, and the second page +enables the user to check on the status of the job and shows the +results.

    +
  • +
  • +

    A managed bean (JsfBean) that is accessed from the Facelets pages. +The bean submits the job to the batch runtime, checks on the status of +the job, and reads the results from a text file.

    +
  • +
+
+
+

55.8.1.1 The Job Definition File

+
+

The webserverlog.xml job definition file is located in the +WEB-INF/classes/META-INF/batch-jobs/ directory. The file specifies +seven job-level properties and two steps:

+
+
+
+
<?xml version="1.0" encoding="UTF-8"?>
+<job id="webserverlog" xmlns="http://xmlns.jcp.org/xml/ns/javaee"
+     version="1.0">
+    <properties>
+        <property name="log_file_name" value="log1.txt"/>
+        <property name="filtered_file_name" value="filtered1.txt"/>
+        <property name="num_browsers" value="2"/>
+        <property name="browser_1" value="Tablet Browser D"/>
+        <property name="browser_2" value="Tablet Browser E"/>
+        <property name="buy_page" value="/auth/buy.html"/>
+        <property name="out_file_name" value="result1.txt"/>
+    </properties>
+    <listeners>
+        <listener ref="InfoJobListener"/>
+    </listeners>
+    <step id="mobilefilter" next="mobileanalyzer"> ... </step>
+    <step id="mobileanalyzer"> ... </step>
+</job>
+
+
+
+

The first step is defined as follows:

+
+
+
+
<step id="mobilefilter" next="mobileanalyzer">
+    <listeners>
+        <listener ref="InfoItemProcessListeners"/>
+    </listeners>
+    <chunk checkpoint-policy="item" item-count="10">
+        <reader ref="LogLineReader"></reader>
+        <processor ref="LogLineProcessor"></processor>
+        <writer ref="LogFilteredLineWriter"></writer>
+    </chunk>
+</step>
+
+
+
+

This step is a normal chunk step that specifies the batch artifacts that +implement each phase of the step. The batch artifact names are not fully +qualified class names, so the batch artifacts are CDI beans annotated +with @Named.

+
+
+

The second step is defined as follows:

+
+
+
+
<step id="mobileanalyzer">
+    <batchlet ref="MobileBatchlet"></batchlet>
+    <end on="COMPLETED"/>
+</step>
+
+
+
+

This step is a task step that specifies the batch artifact that +implements it. This is the last step of the job.

+
+
+
+

55.8.1.2 The LogLine and LogFilteredLine Items

+
+

The LogLine class represents entries in the web server log file and it +is defined as follows:

+
+
+
+
public class LogLine {
+    private final String datetime;
+    private final String ipaddr;
+    private final String browser;
+    private final String url;
+
+    /* ... Constructor, getters, and setters ... */
+}
+
+
+
+

The LogFileteredLine class is similar to this class but only has two +fields: the IP address of the client and the URL.

+
+
+
+

55.8.1.3 The Chunk Step Batch Artifacts

+
+

The first step is composed of the LogLineReader, LogLineProcessor, +and LogFilteredLineWriter batch artifacts.

+
+
+

The LogLineReader artifact reads records from the web server log file:

+
+
+
+
@Dependent
+@Named("LogLineReader")
+public class LogLineReader implements ItemReader {
+    private ItemNumberCheckpoint checkpoint;
+    private String fileName;
+    private BufferedReader breader;
+    @Inject
+    private JobContext jobCtx;
+
+    public LogLineReader() { }
+
+    /* ... Override the open, close, readItem, and
+     *     checkpointInfo methods ... */
+}
+
+
+
+

The open method reads the log_file_name property and opens the log +file with a buffered reader. In this example, the log file has been +included with the application under +webserverlog/WEB-INF/classes/log1.txt:

+
+
+
+
fileName = jobCtx.getProperties().getProperty("log_file_name");
+ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
+InputStream iStream = classLoader.getResourceAsStream(fileName);
+breader = new BufferedReader(new InputStreamReader(iStream));
+
+
+
+

If a checkpoint object is provided, the open method advances the +reader up to the last checkpoint. Otherwise, this method creates a new +checkpoint object. The checkpoint object keeps track of the line number +from the last committed chunk.

+
+
+

The readItem method returns a new LogLine object or null at the end +of the log file:

+
+
+
+
@Override
+public Object readItem() throws Exception {
+    String entry = breader.readLine();
+    if (entry != null) {
+        checkpoint.nextLine();
+        return new LogLine(entry);
+    } else {
+        return null;
+    }
+}
+
+
+
+

The LogLineProcessor artifact obtains a list of browsers from the job +properties and filters the log entries according to the list:

+
+
+
+
@Override
+public Object processItem(Object item) {
+    /* Obtain a list of browsers we are interested in */
+    if (nbrowsers == 0) {
+        Properties props = jobCtx.getProperties();
+        nbrowsers = Integer.parseInt(props.getProperty("num_browsers"));
+        browsers = new String[nbrowsers];
+        for (int i = 1; i < nbrowsers + 1; i++)
+            browsers[i - 1] = props.getProperty("browser_" + i);
+    }
+
+    LogLine logline = (LogLine) item;
+    /* Filter for only the mobile/tablet browsers as specified */
+    for (int i = 0; i < nbrowsers; i++) {
+        if (logline.getBrowser().equals(browsers[i])) {
+            return new LogFilteredLine(logline);
+        }
+    }
+    return null;
+}
+
+
+
+

The LogFilteredLineWriter artifact reads the name of the output file +from the job properties. The open method opens the file for writing. +If a checkpoint object is provided, the artifact continues writing at +the end of the file; otherwise, it overwrites the file if it exists. The +writeItems method writes filtered items to the output file:

+
+
+
+
@Override
+public void writeItems(List<Object> items) throws Exception {
+    /* Write the filtered lines to the output file */
+    for (int i = 0; i < items.size(); i++) {
+        LogFilteredLine filtLine = (LogFilteredLine) items.get(i);
+        bwriter.write(filtLine.toString());
+        bwriter.newLine();
+    }
+}
+
+
+
+
+

55.8.1.4 The Listener Batch Artifacts

+
+

The InfoJobListener batch artifact implements a simple listener that +writes log messages when the job starts and when it ends:

+
+
+
+
@Dependent
+@Named("InfoJobListener")
+public class InfoJobListener implements JobListener {
+    ...
+    @Override
+    public void beforeJob() throws Exception {
+        logger.log(Level.INFO, "The job is starting");
+    }
+
+    @Override
+    public void afterJob() throws Exception { ... }
+}
+
+
+
+

The InfoItemProcessListener batch artifact implements the +ItemProcessListener interface for chunk steps:

+
+
+
+
@Dependent
+@Named("InfoItemProcessListener")
+public class InfoItemProcessListener implements ItemProcessListener {
+    ...
+    @Override
+    public void beforeProcess(Object o) throws Exception {
+        LogLine logline = (LogLine) o;
+        llogger.log(Level.INFO, "Processing entry {0}", logline);
+    }
+    ...
+}
+
+
+
+
+

55.8.1.5 The Task Step Batch Artifact

+
+

The task step is implemented by the MobileBatchlet artifact, which +computes what percentage of the filtered log entries are purchases:

+
+
+
+
@Override
+public String process() throws Exception {
+    /* Get properties from the job definition file */
+    ...
+    /* Count from the output of the previous chunk step */
+    breader = new BufferedReader(new FileReader(fileName));
+    String line = breader.readLine();
+    while (line != null) {
+        String[] lineSplit = line.split(", ");
+        if (buyPage.compareTo(lineSplit[1]) == 0)
+            pageVisits++;
+        totalVisits++;
+        line = breader.readLine();
+    }
+    breader.close();
+    /* Write the result */
+    ...
+}
+
+
+
+
+

55.8.1.6 The JavaServer Faces Pages

+
+

The index.xhtml page contains a text area that shows the web server +log. The page provides a button for the user to submit the batch job and +navigate to the next page:

+
+
+
+
<body>
+    ...
+    <textarea cols="90" rows="25"
+              readonly="true">#{jsfBean.getInputLog()}</textarea>
+    <p> </p>
+    <h:form>
+        <h:commandButton value="Start Batch Job"
+                         action="#{jsfBean.startBatchJob()}" />
+    </h:form>
+</body>
+
+
+
+

This page calls the methods of the managed bean to show the log file and +submit the batch job.

+
+
+

The jobstarted.xhtml page provides a button to check the current +status of the batch job and displays the results when the job finishes:

+
+
+
+
<p>Current Status of the Job: <b>#{jsfBean.jobStatus}</b></p>
+<p>#{jsfBean.showResults()}</p>
+<h:form>
+    <h:commandButton value="Check Status"
+                     action="jobstarted"
+                     rendered="#{jsfBean.completed==false}" />
+</h:form>
+
+
+
+
+

55.8.1.7 The Managed Bean

+
+

The JsfBean managed bean submits the job to the batch runtime, checks +on the status of the job, and reads the results from a text file.

+
+
+

The startBatchJob method submits the job to the batch runtime:

+
+
+
+
/* Submit the batch job to the batch runtime.
+ * JSF Navigation method (return the name of the next page) */
+public String startBatchJob() {
+    jobOperator = BatchRuntime.getJobOperator();
+    execID = jobOperator.start("webserverlog", null);
+    return "jobstarted";
+}
+
+
+
+

The getJobStatus method checks the status of the job:

+
+
+
+
/* Get the status of the job from the batch runtime */
+public String getJobStatus() {
+    return jobOperator.getJobExecution(execID).getBatchStatus().toString();
+}
+
+
+
+

The showResults method reads the results from a text file.

+
+
+
+
+

55.8.2 Running the webserverlog Example Application

+
+

You can use either NetBeans IDE or Maven to build, package, deploy, and +run the webserverlog example application.

+
+
+

The following topics are addressed here:

+
+ +
+

55.8.2.1 To Run the webserverlog Example Application Using NetBeans IDE

+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    From the File menu, choose Open Project.

    +
  4. +
  5. +

    In the Open Project dialog box, navigate to:

    +
    +
    +
    tut-install/examples/batch
    +
    +
    +
  6. +
  7. +

    Select the webserverlog folder.

    +
  8. +
  9. +

    Click Open Project.

    +
  10. +
  11. +

    In the Projects tab, right-click the webserverlog project and +select Run.

    +
    +

    This command builds and packages the application into a WAR file, +webserverlog.war, located in the target/ directory; deploys it to +the server; and launches a web browser window at the following URL:

    +
    +
    +
    +
    http://localhost:8080/webserverlog/
    +
    +
    +
  12. +
+
+
+
+

55.8.2.2 To Run the webserverlog Example Application Using Maven

+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    In a terminal window, go to:

    +
    +
    +
    tut-install/examples/batch/webserverlog/
    +
    +
    +
  4. +
  5. +

    Enter the following command to deploy the application:

    +
    +
    +
    mvn install
    +
    +
    +
  6. +
  7. +

    Open a web browser window at the following URL:

    +
    +
    +
    http://localhost:8080/webserverlog/
    +
    +
    +
  8. +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+
+ + + \ No newline at end of file diff --git a/batch-processing009.html b/batch-processing009.html new file mode 100644 index 0000000..a33c1ac --- /dev/null +++ b/batch-processing009.html @@ -0,0 +1,706 @@ + + + + + + The phonebilling Example Application + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

55.9 The phonebilling Example Application

+
+
+

The phonebilling example application, located in the +tut-install`/examples/batch/phonebilling/` directory, demonstrates how +to use the batch framework in Java EE to implement a phone billing +system. This example application processes a log file of phone calls and +creates a bill for each customer.

+
+
+

The following topics are addressed here:

+
+ +
+

55.9.1 Architecture of the phonebilling Example Application

+
+

The phonebilling example application consists of the following +elements.

+
+
+
    +
  • +

    A job definition file (phonebilling.xml) that uses the Job +Specification Language (JSL) to define a batch job with two chunk steps. +The first step reads call records from a log file and associates them +with a bill. The second step computes the amount due and writes each +bill to a text file.

    +
  • +
  • +

    A Java class (CallRecordLogCreator) that creates the log file for +the batch job. This is an auxiliary component that does not demonstrate +any key functionality in this example.

    +
  • +
  • +

    Two Java Persistence API (JPA) entities (CallRecord and PhoneBill) +that represent call records and customer bills. The application uses a +JPA entity manager to store instances of these entities in a database.

    +
  • +
  • +

    Three batch artifacts (CallRecordReader, CallRecordProcessor, and +CallRecordWriter) that implement the first step of the application. +This step reads call records from the log file, associates them with a +bill, and stores them in a database.

    +
  • +
  • +

    Four batch artifacts (BillReader, BillProcessor, BillWriter, and +BillPartitionMapper) that implement the second step of the +application. This step is a partitioned step that gets each bill from +the database, calculates the amount due, and writes it to a text file.

    +
  • +
  • +

    Two Facelets pages (index.xhtml and jobstarted.xhtml) that provide +the front end of the batch application. The first page shows the log +file that will be processed by the batch job, and the second page +enables the user to check on the status of the job and shows the +resulting bill for each customer.

    +
  • +
  • +

    A managed bean (JsfBean) that is accessed from the Facelets pages. +The bean submits the job to the batch runtime, checks on the status of +the job, and reads the text files for each bill.

    +
  • +
+
+
+

55.9.1.1 The Job Definition File

+
+

The phonebilling.xml job definition file is located in the +WEB-INF/classes/META-INF/batch-jobs/ directory. The file specifies +three job-level properties and two steps:

+
+
+
+
<?xml version="1.0" encoding="UTF-8"?>
+<job id="phonebilling" xmlns="http://xmlns.jcp.org/xml/ns/javaee"
+     version="1.0">
+    <properties>
+        <property name="log_file_name" value="log1.txt"/>
+        <property name="airtime_price" value="0.08"/>
+        <property name="tax_rate" value="0.07"/>
+    </properties>
+    <step id="callrecords" next="bills"> ... </step>
+    <step id="bills"> ... </step>
+</job>
+
+
+
+

The first step is defined as follows:

+
+
+
+
<step id="callrecords" next="bills">
+    <chunk checkpoint-policy="item" item-count="10">
+        <reader ref="CallRecordReader"></reader>
+        <processor ref="CallRecordProcessor"></processor>
+        <writer ref="CallRecordWriter"></writer>
+    </chunk>
+</step>
+
+
+
+

This step is a normal chunk step that specifies the batch artifacts that +implement each phase of the step. The batch artifact names are not fully +qualified class names, so the batch artifacts are CDI beans annotated +with @Named.

+
+
+

The second step is defined as follows:

+
+
+
+
<step id="bills">
+    <chunk checkpoint-policy="item" item-count="2">
+        <reader ref="BillReader">
+            <properties>                <property name="firstItem" value="#{partitionPlan['firstItem']}"/>                <property name="numItems" value="#{partitionPlan['numItems']}"/>            </properties>        </reader>
+        <processor ref="BillProcessor"></processor>
+        <writer ref="BillWriter"></writer>
+    </chunk>
+    <partition>
+        <mapper ref="BillPartitionMapper"/>
+    </partition>
+    <end on="COMPLETED"/>
+</step>
+
+
+
+

This step is a partitioned chunk step. The partition plan is specified +through the BillPartitionMapper artifact instead of using the plan +element.

+
+
+
+

55.9.1.2 The CallRecord and PhoneBill Entities

+
+

The CallRecord entity is defined as follows:

+
+
+
+
@Entity
+public class CallRecord implements Serializable {
+    @Id @GeneratedValue
+    private Long id;
+    @Temporal(TemporalType.DATE)
+    private Date datetime;
+    private String fromNumber;
+    private String toNumber;
+    private int minutes;
+    private int seconds;
+    private BigDecimal price;
+
+    public CallRecord() { }
+
+    public CallRecord(String datetime, String from,
+            String to, int min, int sec)             throws ParseException { ... }
+
+    public CallRecord(String jsonData) throws ParseException { ... }
+
+    /* ... Getters and setters ... */
+}
+
+
+
+

The id field is generated automatically by the JPA implementation to +store and retrieve CallRecord objects to and from a database.

+
+
+

The second constructor creates a CallRecord object from an entry of +JSON data in the log file using the JSON Processing API. Log entries +look as follows:

+
+
+
+
{"datetime":"03/01/2013 04:03","from":"555-0101",
+"to":"555-0114","length":"03:39"}
+
+
+
+

The PhoneBill entity is defined as follows:

+
+
+
+
@Entity
+public class PhoneBill implements Serializable {
+    @Id
+    private String phoneNumber;
+    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.PERSIST)
+    @OrderBy("datetime ASC")
+    private List<CallRecord> calls;
+    private BigDecimal amountBase;
+    private BigDecimal taxRate;
+    private BigDecimal tax;
+    private BigDecimal amountTotal;
+
+    public PhoneBill() { }
+
+    public PhoneBill(String number) {
+        this.phoneNumber = number;
+        calls = new ArrayList<>();
+    }
+
+    public void addCall(CallRecord call) {
+        calls.add(call);
+    }
+
+    public void calculate(BigDecimal taxRate) { ... }
+
+    /* ... Getters and setters ... *
+}
+
+
+
+

The OneToMany annotation defines the relationship between a bill and +its call records. The FetchType.EAGER attribute specifies that the +collection should be retrieved eagerly. The CascadeType.PERSIST +attribute indicates that the elements in the call list should be +automatically persisted when the phone bill is persisted. The OrderBy +annotation defines an order for retrieving the elements of the call list +from the database.

+
+
+

The batch artifacts use instances of these two entities as items to +read, process, and write.

+
+
+

For more information on the Java Persistence API, see +Chapter 37, "Introduction to the Java +Persistence API". For more information on the JSON Processing API, see +Chapter 19, "JSON Processing".

+
+
+
+

55.9.1.3 The Call Records Chunk Step

+
+

The first step is composed of the CallRecordReader, +CallRecordProcessor, and CallRecordWriter batch artifacts.

+
+
+

The CallRecordReader artifact reads call records from the log file:

+
+
+
+
@Dependent
+@Named("CallRecordReader")
+public class CallRecordReader implements ItemReader {
+    private ItemNumberCheckpoint checkpoint;
+    private String fileName;
+    private BufferedReader breader;
+    @Inject
+    JobContext jobCtx;
+
+    /* ... Override the open, close, readItem,
+     *     and checkpointInfo methods ... */
+}
+
+
+
+

The open method reads the log_filename property and opens the log +file with a buffered reader:

+
+
+
+
fileName = jobCtx.getProperties().getProperty("log_file_name");
+breader = new BufferedReader(new FileReader(fileName));
+
+
+
+

If a checkpoint object is provided, the open method advances the +reader up to the last checkpoint. Otherwise, this method creates a new +checkpoint object. The checkpoint object keeps track of the line number +from the last committed chunk.

+
+
+

The readItem method returns a new CallRecord object or null at the +end of the log file:

+
+
+
+
@Override
+public Object readItem() throws Exception {
+    /* Read a line from the log file and
+     * create a CallRecord from JSON */
+    String callEntryJson = breader.readLine();
+    if (callEntryJson != null) {
+        checkpoint.nextItem();
+        return new CallRecord(callEntryJson);
+    } else
+        return null;
+}
+
+
+
+

The CallRecordProcessor artifact obtains the airtime price from the +job properties, calculates the price of each call, and returns the call +object. This artifact overrides only the processItem method.

+
+
+

The CallRecordWriter artifact associates each call record with a bill +and stores the bill in the database. This artifact overrides the open, +close, writeItems, and checkpointInfo methods. The writeItems +method looks like this:

+
+
+
+
@Override
+public void writeItems(List<Object> callList) throws Exception {
+
+    for (Object callObject : callList) {
+        CallRecord call = (CallRecord) callObject;
+        PhoneBill bill = em.find(PhoneBill.class, call.getFromNumber());
+        if (bill == null) {
+            /* No bill for this customer yet, create one */
+            bill = new PhoneBill(call.getFromNumber());
+            bill.addCall(call);
+            em.persist(bill);
+        } else {
+            /* Add call to existing bill */
+            bill.addCall(call);
+        }
+    }
+}
+
+
+
+
+

55.9.1.4 The Phone Billing Chunk Step

+
+

The second step is composed of the BillReader, BillProcessor, +BillWriter, and BillPartitionMapper batch artifacts. This step gets +the phone bills from the database, computes the tax and total amount +due, and writes each bill to a text file. Since the processing of each +bill is independent of the others, this step can be partitioned and run +in more than one thread.

+
+
+

The BillPartitionMapper artifact specifies the number of partitions +and the parameters for each partition. In this example, the parameters +represent the range of items each partition should process. The artifact +obtains the number of bills in the database to calculate these ranges. +It provides a partition plan object that overrides the getPartitions +and getPartitionProperties methods of the PartitionPlan interface. +The getPartitions method looks like this:

+
+
+
+
@Override
+public Properties[] getPartitionProperties() {
+    /* Assign an (approximately) equal number of elements
+     * to each partition. */
+    long totalItems = getBillCount();
+    long partItems = (long) totalItems / getPartitions();
+    long remItems = totalItems % getPartitions();
+
+    /* Populate a Properties array. Each Properties element
+     * in the array corresponds to a partition. */
+    Properties[] props = new Properties[getPartitions()];
+
+    for (int i = 0; i < getPartitions(); i++) {
+        props[i] = new Properties();
+        props[i].setProperty("firstItem",
+                String.valueOf(i * partItems));
+        /* Last partition gets the remainder elements */
+        if (i == getPartitions() - 1) {
+            props[i].setProperty("numItems",
+                    String.valueOf(partItems + remItems));
+        } else {
+            props[i].setProperty("numItems",
+                    String.valueOf(partItems));
+    }
+    return props;
+}
+
+
+
+

The BillReader artifact obtains the partition parameters as follows:

+
+
+
+
@Dependent
+@Named("BillReader")
+public class BillReader implements ItemReader {
+    @Inject    @BatchProperty(name = "firstItem")    private String firstItemValue;    @Inject    @BatchProperty(name = "numItems")    private String numItemsValue;
+    private ItemNumberCheckpoint checkpoint;    @PersistenceContext    private EntityManager em;    private Iterator iterator;
+
+    @Override
+    public void open(Serializable ckpt) throws Exception {
+        /* Get the range of items to work on in this partition */
+        long firstItem0 = Long.parseLong(firstItemValue);
+        long numItems0 = Long.parseLong(numItemsValue);
+
+        if (ckpt == null) {
+            /* Create a checkpoint object for this partition */
+            checkpoint = new ItemNumberCheckpoint();
+            checkpoint.setItemNumber(firstItem0);
+            checkpoint.setNumItems(numItems0);
+        } else {
+            checkpoint = (ItemNumberCheckpoint) ckpt;
+        }
+
+        /* Adjust range for this partition from the checkpoint */
+        long firstItem = checkpoint.getItemNumber();
+        long numItems = numItems0 - (firstItem - firstItem0);
+        ...
+    }
+    ...
+}
+
+
+
+

This artifact also obtains an iterator to read items from the JPA entity +manager:

+
+
+
+
/* Obtain an iterator for the bills in this partition */
+String query = "SELECT b FROM PhoneBill b ORDER BY b.phoneNumber";
+Query q = em.createQuery(query).setFirstResult((int) firstItem)
+        .setMaxResults((int) numItems);
+iterator = q.getResultList().iterator();
+
+
+
+

The BillProcessor artifact iterates over the list of call records in a +bill and calculates the tax and total amount due for each bill.

+
+
+

The BillWriter artifact writes each bill to a plain text file.

+
+
+
+

55.9.1.5 The JavaServer Faces Pages

+
+

The index.xhtml page contains a text area that shows the log file of +call records. The page provides a button for the user to submit the +batch job and navigate to the next page:

+
+
+
+
<body>
+    <h1>The Phone Billing Example Application</h1>
+    <h2>Log file</h2>
+    <p>The batch job analyzes the following log file:</p>
+    <textarea cols="90" rows="25"
+              readonly="true">#{jsfBean.createAndShowLog()}</textarea>
+    <p> </p>
+    <h:form>
+        <h:commandButton value="Start Batch Job"
+                         action="#{jsfBean.startBatchJob()}" />
+    </h:form>
+</body>
+
+
+
+

This page calls the methods of the managed bean to show the log file and +submit the batch job.

+
+
+

The jobstarted.xhtml page provides a button to check the current +status of the batch job and displays the bills when the job finishes:

+
+
+
+
<p>Current Status of the Job: <b>#{jsfBean.jobStatus}</b></p>
+<h:dataTable var="_row" value="#{jsfBean.rowList}"
+             border="1" rendered="#{jsfBean.completed}">
+    <!-- ... show results from jsfBean.rowList ... -->
+</h:dataTable>
+<!-- Render the check status button if the job has not finished -->
+<h:form>
+    <h:commandButton value="Check Status"
+                     rendered="#{jsfBean.completed==false}"
+                     action="jobstarted" />
+</h:form>
+
+
+
+
+

55.9.1.6 The Managed Bean

+
+

The JsfBean managed bean submits the job to the batch runtime, checks +on the status of the job, and reads the text files for each bill.

+
+
+

The startBatchJob method of the bean submits the job to the batch +runtime:

+
+
+
+
/* Submit the batch job to the batch runtime.
+ * JSF Navigation method (return the name of the next page) */
+public String startBatchJob() {
+    jobOperator = BatchRuntime.getJobOperator();
+    execID = jobOperator.start("phonebilling", null);
+    return "jobstarted";
+}
+
+
+
+

The getJobStatus method of the bean checks the status of the job:

+
+
+
+
/* Get the status of the job from the batch runtime */
+public String getJobStatus() {
+    return jobOperator.getJobExecution(execID).getBatchStatus().toString();
+}
+
+
+
+

The getRowList method of the bean creates a list of bills to be +displayed on the jobstarted.xhtml JSF page using a table.

+
+
+
+
+

55.9.2 Running the phonebilling Example Application

+
+

You can use either NetBeans IDE or Maven to build, package, deploy, and +run the phonebilling example application.

+
+
+

The following topics are addressed here:

+
+ +
+

55.9.2.1 To Run the phonebilling Example Application Using NetBeans IDE

+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    From the File menu, choose Open Project.

    +
  4. +
  5. +

    In the Open Project dialog box, navigate to:

    +
    +
    +
    tut-install/examples/batch
    +
    +
    +
  6. +
  7. +

    Select the phonebilling folder.

    +
  8. +
  9. +

    Click Open Project.

    +
  10. +
  11. +

    In the Projects tab, right-click the phonebilling project and +select Run.

    +
    +

    This command builds and packages the application into a WAR file, +phonebilling.war, located in the target/ directory; deploys it to +the server; and launches a web browser window at the following URL:

    +
    +
    +
    +
    http://localhost:8080/phonebilling/
    +
    +
    +
  12. +
+
+
+
+

55.9.2.2 To Run the phonebilling Example Application Using Maven

+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    In a terminal window, go to:

    +
    +
    +
    tut-install/examples/batch/phonebilling/
    +
    +
    +
  4. +
  5. +

    Enter the following command to deploy the application:

    +
    +
    +
    mvn install
    +
    +
    +
  6. +
  7. +

    Open a web browser window at the following URL:

    +
    +
    +
    http://localhost:8080/phonebilling/
    +
    +
    +
  8. +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+
+ + + \ No newline at end of file diff --git a/batch-processing010.html b/batch-processing010.html new file mode 100644 index 0000000..2bc372c --- /dev/null +++ b/batch-processing010.html @@ -0,0 +1,90 @@ + + + + + + Further Information about Batch Processing + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

55.10 Further Information about Batch Processing

+
+
+

For more information on batch processing in Java EE, see the Batch +Applications for the Java Platform specification:

+
+
+

http://www.jcp.org/en/jsr/detail?id=352

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/bean-validation-advanced.html b/bean-validation-advanced.html new file mode 100644 index 0000000..3d349f4 --- /dev/null +++ b/bean-validation-advanced.html @@ -0,0 +1,110 @@ + + + + + + Bean Validation: Advanced Topics + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

22 Bean Validation: Advanced Topics

+
+
+

This chapter describes how to create custom constraints, custom +validator messages, and constraint groups using the Java API for +JavaBeans Validation (Bean Validation).

+
+
+

The following topics are addressed here:

+
+ +
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/bean-validation-advanced001.html b/bean-validation-advanced001.html new file mode 100644 index 0000000..198deca --- /dev/null +++ b/bean-validation-advanced001.html @@ -0,0 +1,194 @@ + + + + + + Creating Custom Constraints + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

22.1 Creating Custom Constraints

+
+
+

Bean Validation defines annotations, interfaces, and classes to allow +developers to create custom constraints.

+
+
+

The following topics are addressed here:

+
+ +
+

22.1.1 Using the Built-In Constraints to Make a New Constraint

+
+

Bean Validation includes several built-in constraints that can be +combined to create new, reusable constraints. This can simplify +constraint definition by allowing developers to define a custom +constraint made up of several built-in constraints that may then be +applied to component attributes with a single annotation.

+
+
+
+
@Pattern.List({
+  @Pattern(regexp = "[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\."
+    +"[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*"
+    +"@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?")
+})
+@Constraint(validatedBy = {})
+@Documented
+@Target({ElementType.METHOD,
+    ElementType.FIELD,
+    ElementType.ANNOTATION_TYPE,
+    ElementType.CONSTRUCTOR,
+    ElementType.PARAMETER})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Email {
+
+    String message() default "{invalid.email}";
+
+    Class<?>[] groups() default {};
+
+    Class<? extends Payload>[] payload() default {};
+
+    @Target({ElementType.METHOD,
+        ElementType.FIELD,
+        ElementType.ANNOTATION_TYPE,
+        ElementType.CONSTRUCTOR,
+        ElementType.PARAMETER})
+    @Retention(RetentionPolicy.RUNTIME)
+    @Documented
+    @interface List {
+        Email[] value();
+    }
+}
+
+
+
+

This custom constraint can then be applied to an attribute.

+
+
+
+
...
+@Email
+protected String email;
+...
+
+
+
+
+

22.1.2 Removing Ambiguity in Constraint Targets

+
+

Custom constraints that can be applied to both return values and method +parameters require a validationAppliesTo element to identify the +target of the constraint.

+
+
+
+
@Constraint(validatedBy=MyConstraintValidator.class)
+@Target({ METHOD, FIELD, TYPE, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
+@Retention(RUNTIME)
+public @interface MyConstraint {
+  String message() default "{com.example.constraint.MyConstraint.message}";
+  Class<?>[] groups() default {};
+  ConstraintTarget validationAppliesTo() default ConstraintTarget.PARAMETERS;
+...
+}
+
+
+
+

This constraint sets the validationAppliesTo target by default to the +method parameters.

+
+
+
+
@MyConstraint(validationAppliesTo=ConstraintTarget.RETURN_TYPE)
+public String doSomething(String param1, String param2) { ... }
+
+
+
+

In the preceding example, the target is set to the return value of the +method.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/bean-validation-advanced002.html b/bean-validation-advanced002.html new file mode 100644 index 0000000..6126679 --- /dev/null +++ b/bean-validation-advanced002.html @@ -0,0 +1,117 @@ + + + + + + Customizing Validator Messages + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

22.2 Customizing Validator Messages

+
+
+

Bean Validation includes a resource bundle of default messages for the +built-in constraints. These messages can be customized and can be +localized for non-English-speaking locales.

+
+
+

The following topics are addressed here:

+
+ +
+

22.2.1 The ValidationMessages Resource Bundle

+
+

The ValidationMessages resource bundle and the locale variants of this +resource bundle contain strings that override the default validation +messages. The ValidationMessages resource bundle is typically a +properties file, ValidationMessages.properties, in the default package +of an application.

+
+
+

22.2.1.1 Localizing Validation Messages

+
+

Locale variants of ValidationMessages.properties are added by +appending an underscore and the locale prefix to the base name of the +file. For example, the Spanish locale variant resource bundle would be +ValidationMessages_es.properties.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+
+ + + \ No newline at end of file diff --git a/bean-validation-advanced003.html b/bean-validation-advanced003.html new file mode 100644 index 0000000..cf55bec --- /dev/null +++ b/bean-validation-advanced003.html @@ -0,0 +1,162 @@ + + + + + + Grouping Constraints + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

22.3 Grouping Constraints

+
+
+

Constraints may be added to one or more groups. Constraint groups are +used to create subsets of constraints so that only certain constraints +will be validated for a particular object. By default, all constraints +are included in the Default constraint group.

+
+
+

Constraint groups are represented by interfaces.

+
+
+
+
public interface Employee {}
+
+public interface Contractor {}
+
+
+
+

Constraint groups can inherit from other groups.

+
+
+
+
public interface Manager extends Employee {}
+
+
+
+

When a constraint is added to an element, the constraint declares the +groups to which that constraint belongs by specifying the class name of +the group interface name in the groups element of the constraint.

+
+
+
+
@NotNull(groups=Employee.class)
+Phone workPhone;
+
+
+
+

Multiple groups can be declared by surrounding the groups with braces +({ and }) and separating the groups' class names with commas.

+
+
+
+
@NotNull(groups={ Employee.class, Contractor.class })
+Phone workPhone;
+
+
+
+

If a group inherits from another group, validating that group results in +validating all constraints declared as part of the supergroup. For +example, validating the Manager group results in the workPhone field +being validated, because Employee is a superinterface of Manager.

+
+
+

22.3.1 Customizing Group Validation Order

+
+

By default, constraint groups are validated in no particular order. +There are cases in which some groups should be validated before others. +For example, in a particular class, basic data should be validated +before more advanced data.

+
+
+

To set the validation order for a group, add a +javax.validation.GroupSequence annotation to the interface definition, +listing the order in which the validation should occur.

+
+
+
+
@GroupSequence({Default.class, ExpensiveValidationGroup.class})
+public interface FullValidationGroup {}
+
+
+
+

When validating FullValidationGroup, first the Default group is +validated. If all the data passes validation, then the +ExpensiveValidationGroup group is validated. If a constraint is part +of both the Default and the ExpensiveValidationGroup groups, the +constraint is validated as part of the Default group and will not be +validated on the subsequent ExpensiveValidationGroup pass.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/bean-validation-advanced004.html b/bean-validation-advanced004.html new file mode 100644 index 0000000..8d377d4 --- /dev/null +++ b/bean-validation-advanced004.html @@ -0,0 +1,214 @@ + + + + + + Using Method Constraints in Type Hierarchies + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

22.4 Using Method Constraints in Type Hierarchies

+
+
+

If you add validation constraints to objects in an inheritance +hierarchy, take special care to avoid unintended errors when using +subtypes.

+
+
+

For a given type, subtypes should be able to be substituted without +encountering errors. For example, if you have a Person class and an +Employee subclass that extends Person, you should be able to use +Employee instances wherever you might use Person instances. If +Employee overrides a method in Person by adding method parameter +constraints, code that works correctly with Person objects may throw +validation exceptions with Employee objects.

+
+
+

The following code shows an incorrect use of method parameter +constraints within a class hierarchy:

+
+
+
+
public class Person {
+...
+  public void setEmail(String email) { ... }
+}
+
+public class Employee extends Person {
+...
+  @Override
+  public void setEmail(@Verified String email) { ... }
+}
+
+
+
+

By adding the @Verified constraint to Employee.setEmail, parameters +that were valid with Person.setEmail will not be valid with +Employee.setEmail. This is called strengthening the preconditions +(that is, the method parameters) of a subtype’s method. You may not +strengthen the preconditions of subtype method calls.

+
+
+

Similarly, the return values from method calls should not be weakened in +subtypes. The following code shows an incorrect use of constraints on +method return values in a class hierarchy:

+
+
+
+
public class Person {
+...
+  @Verified
+  public Email getEmail() { ... }
+}
+
+public class Employee extends Person {
+...
+  @Override
+  public Email getEmail() { ... }
+}
+
+
+
+

In this example, the Employee.getEmail method removes the @Verified +constraint on the return value. Return values that would be not pass +validation when calling Person.getEmail are allowed when calling +Employee.getEmail. This is called weakening the postconditions (that +is, return values) of a subtype. You may not weaken the postconditions +of a subtype method call.

+
+
+

If your type hierarchy strengthens the preconditions or weakens the +postconditions of subtype method calls, a +javax.validation.ConstraintDeclarationException will be thrown by the +Bean Validation runtime.

+
+
+

Classes that implement several interfaces that each have the same method +signature, known as parallel types, need to be aware of the constraints +applied to the interfaces that they implement to avoid strengthening the +preconditions. For example:

+
+
+
+
public interface PaymentService {
+  void processOrder(Order order, double amount);
+...
+}
+
+public interface CreditCardPaymentService {
+  void processOrder(@NotNull Order order, @NotNull double amount);
+...
+}
+
+public class MyPaymentService implements PaymentService,
+        CreditCardPaymentService {
+
+  @Override
+  public void processOrder(Order order, double amount) { ... }
+...
+}
+
+
+
+

In this case, MyPaymentService has the constraints from the +processOrder method in CreditCardPaymentService, but client code +that calls PaymentService.processOrder doesn’t expect these +constraints. This is another example of strengthening the preconditions +of a subtype and will result in a ConstraintDeclarationException.

+
+
+

22.4.1 Rules for Using Method Constraints in Type Hierarchies

+
+

The following rules define how method validation constraints should be +used in type hierarchies.

+
+
+
    +
  • +

    Do not add method parameter constraints to overridden or implemented +methods in a subtype.

    +
  • +
  • +

    Do not add method parameter constraints to overridden or implemented +methods in a subtype that was originally declared in several parallel +types.

    +
  • +
  • +

    You may add return value constraints to an overridden or implemented +method in a subtype.

    +
  • +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/bean-validation.html b/bean-validation.html new file mode 100644 index 0000000..dfbec64 --- /dev/null +++ b/bean-validation.html @@ -0,0 +1,112 @@ + + + + + + Introduction to Bean Validation + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

21 Introduction to Bean Validation

+
+
+

This chapter describes Bean Validation available as part of the Java EE +7 platform and the facility for validating objects, object members, +methods, and constructors.

+
+
+

The following topics are addressed here:

+
+ +
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/bean-validation001.html b/bean-validation001.html new file mode 100644 index 0000000..6eace2b --- /dev/null +++ b/bean-validation001.html @@ -0,0 +1,101 @@ + + + + + + Overview of Bean Validation + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

21.1 Overview of Bean Validation

+
+
+

Validating input received from the user to maintain data integrity is an +important part of application logic. Validation of data can take place +at different layers in even the simplest of applications, as shown in +Developing a Simple Facelets Application: +The guessnumber-jsf Example Application. The guessnumber-jsf example +application validates the user input (in the h:inputText tag) for +numerical data at the presentation layer and for a valid range of +numbers at the business layer.

+
+
+

The Java API for JavaBean Validation ("Bean Validation") provides a +facility for validating objects, object members, methods, and +constructors. In Java EE environments, Bean Validation integrates with +Java EE containers and services to allow developers to easily define and +enforce validation constraints. Bean Validation is available as part of +the Java EE 7 platform.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/bean-validation002.html b/bean-validation002.html new file mode 100644 index 0000000..0666bb9 --- /dev/null +++ b/bean-validation002.html @@ -0,0 +1,350 @@ + + + + + + Using Bean Validation Constraints + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

21.2 Using Bean Validation Constraints

+
+
+

The Bean Validation model is supported by constraints in the form of +annotations placed on a field, method, or class of a JavaBeans +component, such as a managed bean.

+
+
+

Constraints can be built in or user defined. User-defined constraints +are called custom constraints. Several built-in constraints are +available in the javax.validation.constraints package. +Table 21-1 lists all the built-in constraints. See +Creating Custom Constraints +for information on creating custom constraints.

+
+
+

+
+
+

Table 21-1 Built-In Bean Validation Constraints

+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ConstraintDescriptionExample

@AssertFalse

The value of the field or property must be false.

+
+
@AssertFalse
+boolean isUnsupported;
+
+

@AssertTrue

The value of the field or property must be true.

+
+
@AssertTrue
+boolean isActive;
+
+

@DecimalMax

The value of the field or property must be a decimal +value lower than or equal to the number in the value element.

+
+
@DecimalMax("30.00")
+BigDecimal discount;
+
+

@DecimalMin

The value of the field or property must be a decimal +value greater than or equal to the number in the value element.

+
+
@DecimalMin("5.00")
+BigDecimal discount;
+
+

@Digits

The value of the field or property must be a number within a +specified range. The integer element specifies the maximum integral +digits for the number, and the fraction element specifies the maximum +fractional digits for the number.

+
+
@Digits(integer=6, fraction=2)
+BigDecimal price;
+
+

@Future

The value of the field or property must be a date in the +future.

+
+
@Future
+Date eventDate;
+
+

@Max

The value of the field or property must be an integer value +lower than or equal to the number in the value element.

+
+
@Max(10)
+int quantity;
+
+

@Min

The value of the field or property must be an integer value +greater than or equal to the number in the value element.

+
+
@Min(5)
+int quantity;
+
+

@NotNull

The value of the field or property must not be null.

+
+
@NotNull
+String username;
+
+

@Null

The value of the field or property must be null.

+
+
@Null
+String unusedString;
+
+

@Past

The value of the field or property must be a date in the past.

+
+
@Past
+Date birthday;
+
+

@Pattern

The value of the field or property must match the regular +expression defined in the regexp element.

+
+
@Pattern(regexp="\\(\\d{3}\\)\\d{3}-\\d{4}")
+String phoneNumber;
+
+

@Size

The size of the field or property is evaluated and must match +the specified boundaries. If the field or property is a String, the +size of the string is evaluated. If the field or property is a +Collection, the size of the Collection is evaluated. If the field or +property is a Map, the size of the Map is evaluated. If the field or +property is an array, the size of the array is evaluated. Use one of the +optional max or min elements to specify the boundaries.

+
+
@Size(min=2, max=240)
+String briefMessage;
+
+
+
+
+
+
+
+
+
+

In the following example, a constraint is placed on a field using the +built-in @NotNull constraint:

+
+
+
+
public class Name {
+    @NotNull
+    private String firstname;
+
+    @NotNull
+    private String lastname;
+    ...
+}
+
+
+
+

You can also place more than one constraint on a single JavaBeans +component object. For example, you can place an additional constraint +for size of field on the firstname and the lastname fields:

+
+
+
+
public class Name {
+    @NotNull
+    @Size(min=1, max=16)
+    private String firstname;
+
+    @NotNull
+    @Size(min=1, max=16)
+    private String lastname;
+    ...
+}
+
+
+
+

The following example shows a method with a user-defined constraint that +checks for a predefined email address pattern, such as a corporate email +account:

+
+
+
+
@ValidEmail
+public String getEmailAddress() {
+    return emailAddress;
+}
+
+
+
+

For a built-in constraint, a default implementation is available. A +user-defined or custom constraint needs a validation implementation. In +the preceding example, the @ValidEmail custom constraint needs an +implementation class.

+
+
+

Any validation failures are gracefully handled and can be displayed by +the h:messages tag.

+
+
+

Any managed bean that contains Bean Validation annotations automatically +gets validation constraints placed on the fields on a JavaServer Faces +application’s web pages.

+
+
+

For more information on using validation constraints, see the following:

+
+ +
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/bean-validation003.html b/bean-validation003.html new file mode 100644 index 0000000..7644dcf --- /dev/null +++ b/bean-validation003.html @@ -0,0 +1,145 @@ + + + + + + Validating Null and Empty Strings + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

21.3 Validating Null and Empty Strings

+
+
+

The Java programming language distinguishes between null and empty +strings. An empty string is a string instance of zero length, whereas a +null string has no value at all.

+
+
+

An empty string is represented as "". It is a character sequence of +zero characters. A null string is represented by null. It can be +described as the absence of a string instance.

+
+
+

Managed bean elements represented as a JavaServer Faces text component +such as inputText are initialized with the value of the empty string +by the JavaServer Faces implementation. Validating these strings can be +an issue when user input for such fields is not required. Consider the +following example, in which the string testString is a bean variable +that will be set using input entered by the user. In this case, the user +input for the field is not required.

+
+
+
+
if (testString==null) {
+    doSomething();
+} else {
+    doAnotherThing();
+}
+
+
+
+

By default, the doAnotherThing method is called even when the user +enters no data, because the testString element has been initialized +with the value of an empty string.

+
+
+

In order for the Bean Validation model to work as intended, you must set +the context parameter +javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL to true +in the web deployment descriptor file, web.xml:

+
+
+
+
<context-param>
+    <param-name>
+        javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL
+    </param-name>
+    <param-value>true</param-value>
+</context-param>
+
+
+
+

This parameter enables the JavaServer Faces implementation to treat +empty strings as null.

+
+
+

Suppose, on the other hand, that you have a @NotNull constraint on an +element, meaning that input is required. In this case, an empty string +will pass this validation constraint. However, if you set the context +parameter javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL +to true, the value of the managed bean attribute is passed to the Bean +Validation runtime as a null value, causing the @NotNull constraint to +fail.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/bean-validation004.html b/bean-validation004.html new file mode 100644 index 0000000..15cd157 --- /dev/null +++ b/bean-validation004.html @@ -0,0 +1,224 @@ + + + + + + Validating Constructors and Methods + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

21.4 Validating Constructors and Methods

+
+
+

Bean Validation constraints may be placed on the parameters of nonstatic +methods and constructors and on the return values of nonstatic methods. +Static methods and constructors will not be validated.

+
+
+
+
public class Employee {
+...
+  public Employee (@NotNull String name) { ... }
+
+  public void setSalary(
+      @NotNull
+      @Digits(integer=6, fraction=2) BigDecimal salary,
+      @NotNull
+      @ValidCurrency
+      String currencyType) {
+    ...
+  }
+...
+}
+
+
+
+

In this example, the Employee class has a constructor constraint +requiring a name and has two sets of method parameter constraints. The +amount of the salary for the employee must not be null, cannot be +greater than six digits to the left of the decimal point, and cannot +have more than two digits to the right of the decimal place. The +currency type must not be null and is validated using a custom +constraint.

+
+
+

If you add method constraints to classes in an object hierarchy, special +care must be taken to avoid unintended behavior by subtypes. See +Using Method Constraints +in Type Hierarchies for more information.

+
+
+

21.4.1 Cross-Parameter Constraints

+
+

Constraints that apply to multiple parameters are called cross-parameter +constraints, and may be applied at the method or constructor level.

+
+
+
+
@ConsistentPhoneParameters
+@NotNull
+public Employee (String name, String officePhone, String mobilePhone) {
+  ...
+}
+
+
+
+

In this example, a custom cross-parameter constraint, +@ConsistentPhoneParameters, validates that the format of the phone +numbers passed into the constructor match. The @NotNull constraint +applies to all the parameters in the constructor.

+
+
+
+
+
+
+
+ +++ + + + + + +
+

Tip:

+
+
+

Cross-parameter constraint annotations are applied directly to the +method or constructor. Return value constraints are also applied +directly to the method or constructor. To avoid confusion as to where +the constraint applies, parameter or return value, choose a name for any +custom constraints that identifies where the constraint applies. For +instance, the preceding example applies a custom constraint, +@ConsistentPhoneParameters, that indicates that it applies to the +parameters of the method or constructor.

+
+
+

When you create a custom constraint that applies to both method +parameters and return values, the validationAppliesTo element of the +constraint annotation may be set to ConstraintTarget.RETURN_VALUE or +ConstraintTarget.PARAMETERS to explicitly set the target of the +validation constraint.

+
+
+
+
+
+
+
+
+
+

21.4.2 Identifying Parameter Constraint Violations

+
+

If a ConstraintViolationException occurs during a method call, the +Bean Validation runtime returns a parameter index to identify which +parameter caused the constraint violation. The parameter index is in the +form `arg`PARAMETER_INDEX, where PARAMETER_INDEX is an integer that +starts at 0 for the first parameter of the method or constructor.

+
+
+
+

21.4.3 Adding Constraints to Method Return Values

+
+

To validate the return value for a method, you can apply constraints +directly to the method or constructor declaration.

+
+
+
+
@NotNull
+public Employee getEmployee() { ... }
+
+
+
+

Cross-parameter constraints are also applied at the method level. Custom +constraints that could be applied to both the return value and the +method parameters have an ambiguous constraint target. To avoid this +ambiguity, add a validationAppliesTo element to the constraint +annotation definition with the default set to either +ConstraintTarget.RETURN_VALUE or ConstraintTarget.PARAMETERS to +explicitly set the target of the validation constraint.

+
+
+
+
@Manager(validationAppliesTo=ConstraintTarget.RETURN_VALUE)
+public Employee getManager(Employee employee) { ... }
+
+
+
+

See Removing Ambiguity in +Constraint Targets for more information.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/bean-validation005.html b/bean-validation005.html new file mode 100644 index 0000000..0895efe --- /dev/null +++ b/bean-validation005.html @@ -0,0 +1,102 @@ + + + + + + Further Information about Bean Validation + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

21.5 Further Information about Bean Validation

+
+
+

For more information on Bean Validation, see

+
+
+
    +
  • +

    Bean Validation 1.1 Specification:

    +
    +

    http://www.jcp.org/en/jsr/detail?id=349

    +
    +
  • +
  • +

    Bean Validation Specification website:

    +
    +

    http://beanvalidation.org/

    +
    +
  • +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/cdi-adv-examples.html b/cdi-adv-examples.html new file mode 100644 index 0000000..a3b057b --- /dev/null +++ b/cdi-adv-examples.html @@ -0,0 +1,118 @@ + + + + + + Running the Advanced Contexts and Dependency Injection Examples + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

26 Running the Advanced Contexts and Dependency Injection Examples

+ +
+ + + \ No newline at end of file diff --git a/cdi-adv-examples001.html b/cdi-adv-examples001.html new file mode 100644 index 0000000..f505edd --- /dev/null +++ b/cdi-adv-examples001.html @@ -0,0 +1,130 @@ + + + + + + Building and Running the CDI Advanced Examples + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

26.1 Building and Running the CDI Advanced Examples

+
+
+

The examples are in the tut-install`/examples/cdi/` directory. To build +and run the examples, you will do the following.

+
+
+
    +
  1. +

    Use NetBeans IDE or the Maven tool to compile, package, and deploy +the example.

    +
  2. +
  3. +

    Run the example in a web browser.

    +
  4. +
+
+
+

See Chapter 2, "Using the Tutorial +Examples", for basic information on installing, building, and running +the examples.

+
+
+

The following topics are addressed here:

+
+ +
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/cdi-adv-examples002.html b/cdi-adv-examples002.html new file mode 100644 index 0000000..b88c566 --- /dev/null +++ b/cdi-adv-examples002.html @@ -0,0 +1,511 @@ + + + + + + The encoder Example: Using Alternatives + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

26.2 The encoder Example: Using Alternatives

+
+
+

The encoder example shows how to use alternatives to choose between +two beans at deployment time, as described in +Using Alternatives in CDI Applications. The +example includes an interface and two implementations of it, a managed +bean, a Facelets page, and configuration files.

+
+
+

The source files are located in the +tut-install`/examples/cdi/encoder/src/main/java/javaeetutorial/encoder/` +directory.

+
+
+

The following topics are addressed here:

+
+ +
+

26.2.1 The Coder Interface and Implementations

+
+

The Coder interface contains just one method, codeString, that takes +two arguments: a string, and an integer value that specifies how the +letters in the string should be transposed.

+
+
+
+
public interface Coder {
+
+    public String codeString(String s, int tval);
+}
+
+
+
+

The interface has two implementation classes, CoderImpl and +TestCoderImpl. The implementation of codeString in CoderImpl +shifts the string argument forward in the alphabet by the number of +letters specified in the second argument; any characters that are not +letters are left unchanged. (This simple shift code is known as a Caesar +cipher because Julius Caesar reportedly used it to communicate with his +generals.) The implementation in TestCoderImpl merely displays the +values of the arguments. The TestCoderImpl implementation is annotated +@Alternative:

+
+
+
+
import javax.enterprise.inject.Alternative;
+
+@Alternative
+public class TestCoderImpl implements Coder {
+
+    @Override
+    public String codeString(String s, int tval) {
+        return ("input string is " + s + ", shift value is " + tval);
+    }
+}
+
+
+
+

The beans.xml file for the encoder example contains an +alternatives element for the TestCoderImpl class, but by default the +element is commented out:

+
+
+
+
<beans ...>
+    <!--<alternatives>
+        <class>javaeetutorial.encoder.TestCoderImpl</class>
+    </alternatives>-->
+</beans>
+
+
+
+

This means that by default, the TestCoderImpl class, annotated +@Alternative, will not be used. Instead, the CoderImpl class will be +used.

+
+
+
+

26.2.2 The encoder Facelets Page and Managed Bean

+
+

The simple Facelets page for the encoder example, index.xhtml, asks +the user to enter the string and integer values and passes them to the +managed bean, CoderBean, as coderBean.inputString and +coderBean.transVal:

+
+
+
+
<html lang="en"
+      xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:h="http://java.sun.com/jsf/html">
+    <h:head>
+        <h:outputStylesheet library="css" name="default.css"/>
+        <title>String Encoder</title>
+    </h:head>
+    <h:body>
+        <h2>String Encoder</h2>
+        <p>Type a string and an integer, then click Encode.</p>
+        <p>Depending on which alternative is enabled, the coder bean
+            will either display the argument values or return a string that
+            shifts the letters in the original string by the value you
+            specify. The value must be between 0 and 26.</p>
+        <h:form id="encodeit">
+            <p><h:outputLabel value="Enter a string: " for="inputString"/>
+                <h:inputText id="inputString"
+                             value="#{coderBean.inputString}"/>
+                <h:outputLabel value="Enter the number of letters to shift by: "
+                               for="transVal"/>
+                <h:inputText id="transVal" value="#{coderBean.transVal}"/></p>
+            <p><h:commandButton value="Encode"
+                                action="#{coderBean.encodeString()}"/></p>
+            <p><h:outputLabel value="Result: " for="outputString"/>
+                <h:outputText id="outputString"
+                              value="#{coderBean.codedString}"
+                              style="color:blue"/></p>
+            <p><h:commandButton value="Reset"
+                                action="#{coderBean.reset}"/></p>
+        </h:form>
+        ...
+    </h:body>
+</html>
+
+
+
+

When the user clicks the Encode button, the page invokes the managed +bean’s encodeString method and displays the result, +coderBean.codedString, in blue. The page also has a Reset button that +clears the fields.

+
+
+

The managed bean, CoderBean, is a @RequestScoped bean that declares +its input and output properties. The transVal property has three Bean +Validation constraints that enforce limits on the integer value, so that +if the user enters an invalid value, a default error message appears on +the Facelets page. The bean also injects an instance of the Coder +interface:

+
+
+
+
@Named
+@RequestScoped
+public class CoderBean {
+
+    private String inputString;
+    private String codedString;
+    @Max(26)
+    @Min(0)
+    @NotNull
+    private int transVal;
+
+    @Inject
+    Coder coder;
+    ...
+
+
+
+

In addition to simple getter and setter methods for the three +properties, the bean defines the encodeString action method called by +the Facelets page. This method sets the codedString property to the +value returned by a call to the codeString method of the Coder +implementation:

+
+
+
+
    public void encodeString() {
+        setCodedString(coder.codeString(inputString, transVal));
+    }
+
+
+
+

Finally, the bean defines the reset method to empty the fields of the +Facelets page:

+
+
+
+
    public void reset() {
+        setInputString("");
+        setTransVal(0);
+    }
+
+
+
+
+

26.2.3 Running the encoder Example

+
+

You can use either NetBeans IDE or Maven to build, package, deploy, and +run the encoder application.

+
+
+

26.2.3.1 To Build, Package, and Deploy the encoder Example Using +NetBeans IDE +^^^^^^^^^^^^^^^^^^^^^^^^^^^

+
+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    From the File menu, choose Open Project.

    +
  4. +
  5. +

    In the Open Project dialog box, navigate to:

    +
    +
    +
    tut-install/examples/cdi
    +
    +
    +
  6. +
  7. +

    Select the encoder folder.

    +
  8. +
  9. +

    Click Open Project.

    +
  10. +
  11. +

    In the Projects tab, right-click the encoder project and select +Build.

    +
    +

    This command builds and packages the application into a WAR file, +encoder.war, located in the target directory, and then deploys it to +GlassFish Server.

    +
    +
  12. +
+
+
+

26.2.3.2 To Run the encoder Example Using NetBeans IDE

+
+
    +
  1. +

    In a web browser, enter the following URL:

    +
    +
    +
    http://localhost:8080/encoder
    +
    +
    +
  2. +
  3. +

    On the String Encoder page, enter a string and the number of letters +to shift by, and then click Encode.

    +
    +

    The encoded string appears in blue on the Result line. For example, if +you enter Java and 4, the result is Neze.

    +
    +
  4. +
  5. +

    Now, edit the beans.xml file to enable the alternative +implementation of Coder.

    +
  6. +
  7. +

    In the Projects tab, under the encoder project, expand the Web +Pages node, then expand the WEB-INF node.

    +
  8. +
  9. +

    Double-click the beans.xml file to open it.

    +
  10. +
  11. +

    Remove the comment characters that surround the alternatives +element, so that it looks like this:

    +
    +
    +
    <alternatives>
    +    <class>javaeetutorial.encoder.TestCoderImpl</class>
    +</alternatives>
    +
    +
    +
  12. +
  13. +

    Save the file.

    +
  14. +
  15. +

    Right-click the encoder project and select Clean and Build.

    +
  16. +
  17. +

    In the web browser, reenter the URL to show the String Encoder page +for the redeployed project:

    +
    +
    +
    http://localhost:8080/encoder/
    +
    +
    +
  18. +
  19. +

    Enter a string and the number of letters to shift by, and then click +Encode.

    +
    +

    This time, the Result line displays your arguments. For example, if you +enter Java and 4, the result is:

    +
    +
    +
    +
    Result: input string is Java, shift value is 4
    +
    +
    +
  20. +
+
+
+
+

26.2.3.3 To Build, Package, and Deploy the encoder Example Using Maven

+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    In a terminal window, go to:

    +
    +
    +
    tut-install/examples/cdi/encoder/
    +
    +
    +
  4. +
  5. +

    Enter the following command to deploy the application:

    +
    +
    +
    mvn install
    +
    +
    +
    +

    This command builds and packages the application into a WAR file, +encoder.war, located in the target directory, and then deploys it to +GlassFish Server.

    +
    +
  6. +
+
+
+
+

26.2.3.4 To Run the encoder Example Using Maven

+
+
    +
  1. +

    In a web browser, enter the following URL:

    +
    +
    +
    http://localhost:8080/encoder/
    +
    +
    +
    +

    The String Encoder page opens.

    +
    +
  2. +
  3. +

    Enter a string and the number of letters to shift by, and then click +Encode.

    +
    +

    The encoded string appears in blue on the Result line. For example, if +you enter Java and 4, the result is Neze.

    +
    +
  4. +
  5. +

    Now, edit the beans.xml file to enable the alternative +implementation of Coder.

    +
  6. +
  7. +

    In a text editor, open the following file:

    +
    +
    +
    tut-install/examples/cdi/encoder/src/main/webapp/WEB-INF/beans.xml
    +
    +
    +
  8. +
  9. +

    Remove the comment characters that surround the alternatives +element, so that it looks like this:

    +
    +
    +
    <alternatives>
    +    <class>javaeetutorial.encoder.TestCoderImpl</class>
    +</alternatives>
    +
    +
    +
  10. +
  11. +

    Save and close the file.

    +
  12. +
  13. +

    Enter the following command:

    +
    +
    +
    mvn clean install
    +
    +
    +
  14. +
  15. +

    In the web browser, reenter the URL to show the String Encoder page +for the redeployed project:

    +
    +
    +
    http://localhost:8080/encoder
    +
    +
    +
  16. +
  17. +

    Enter a string and the number of letters to shift by, and then click +Encode.

    +
    +

    This time, the Result line displays your arguments. For example, if you +enter Java and 4, the result is:

    +
    +
    +
    +
    Result: input string is Java, shift value is 4
    +
    +
    +
  18. +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+
+ + + \ No newline at end of file diff --git a/cdi-adv-examples003.html b/cdi-adv-examples003.html new file mode 100644 index 0000000..235866c --- /dev/null +++ b/cdi-adv-examples003.html @@ -0,0 +1,328 @@ + + + + + + The producermethods Example: Using a Producer Method to Choose a Bean Implementation + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

26.3 The producermethods Example: Using a Producer Method to Choose aBean Implementation

+
+
+

The producermethods example shows how to use a producer method to +choose between two beans at runtime, as described in +Using Producer Methods, Producer Fields, and +Disposer Methods in CDI Applications. It is very similar to the +encoder example described in The +encoder Example: Using Alternatives. The example includes the same +interface and two implementations of it, a managed bean, a Facelets +page, and configuration files. It also contains a qualifier type. When +you run it, you do not need to edit the beans.xml file and redeploy +the application to change its behavior.

+
+
+

The following topics are addressed here:

+
+ +
+

26.3.1 Components of the producermethods Example

+
+

The components of producermethods are very much like those for +encoder, with some significant differences.

+
+
+

Neither implementation of the Coder bean is annotated @Alternative, +and there is no beans.xml file, because it is not needed.

+
+
+

The Facelets page and the managed bean, CoderBean, have an additional +property, coderType, that allows the user to specify at runtime which +implementation to use. In addition, the managed bean has a producer +method that selects the implementation using a qualifier type, +@Chosen.

+
+
+

The bean declares two constants that specify whether the coder type is +the test implementation or the implementation that actually shifts +letters:

+
+
+
+
    private final static int TEST = 1;
+    private final static int SHIFT = 2;
+    private int coderType = SHIFT; // default value
+
+
+
+

The producer method, annotated with @Produces and @Chosen as well as +@RequestScoped (so that it lasts only for the duration of a single +request and response), returns one of the two implementations based on +the coderType supplied by the user.

+
+
+
+
    @Produces
+    @Chosen
+    @RequestScoped
+    public Coder getCoder() {
+
+        switch (coderType) {
+            case TEST:
+                return new TestCoderImpl();
+            case SHIFT:
+                return new CoderImpl();
+            default:
+                return null;
+        }
+    }
+
+
+
+

Finally, the managed bean injects the chosen implementation, specifying +the same qualifier as that returned by the producer method to resolve +ambiguities:

+
+
+
+
    @Inject
+    @Chosen
+    @RequestScoped
+    Coder coder;
+
+
+
+

The Facelets page contains modified instructions and a pair of options +whose selected value is assigned to the property coderBean.coderType:

+
+
+
+
    <h2>String Encoder</h2>
+        <p>Select Test or Shift, type a string and an integer, then click
+            Encode.</p>
+        <p>If you select Test, the TestCoderImpl bean will display the
+            argument values.</p>
+        <p>If you select Shift, the CoderImpl bean will return a string that
+            shifts the letters in the original string by the value you specify.
+            The value must be between 0 and 26.</p>
+        <h:form id="encodeit">
+            <h:selectOneRadio id="coderType"
+                              required="true"
+                              value="#{coderBean.coderType}">
+                <f:selectItem
+                    itemValue="1"
+                    itemLabel="Test"/>
+                <f:selectItem
+                    itemValue="2"
+                    itemLabel="Shift Letters"/>
+            </h:selectOneRadio>
+            ...
+
+
+
+
+

26.3.2 Running the producermethods Example

+
+

You can use either NetBeans IDE or Maven to build, package, deploy, and +run the producermethods application.

+
+
+

The following topics are addressed here:

+
+ +
+

26.3.2.1 To Build, Package, and Deploy the producermethods Example Using +NetBeans IDE +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

+
+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    From the File menu, choose Open Project.

    +
  4. +
  5. +

    In the Open Project dialog box, navigate to:

    +
    +
    +
    tut-install/examples/cdi
    +
    +
    +
  6. +
  7. +

    Select the producermethods folder.

    +
  8. +
  9. +

    Click Open Project.

    +
  10. +
  11. +

    In the Projects tab, right-click the producermethods project and +select Build.

    +
    +

    This command builds and packages the application into a WAR file, +producermethods.war, located in the target directory, and then +deploys it to GlassFish Server.

    +
    +
  12. +
+
+
+

26.3.2.2 To Build, Package, and Deploy the producermethods Example Using +Maven +^^^^^^^^^^^^^^^^^^^^^^^^^^

+
+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    In a terminal window, go to:

    +
    +
    +
    tut-install/examples/cdi/producermethods/
    +
    +
    +
  4. +
  5. +

    Enter the following command to deploy the application:

    +
    +
    +
    mvn install
    +
    +
    +
    +

    This command builds and packages the application into a WAR file, +producermethods.war, located in the target directory, and then +deploys it to GlassFish Server.

    +
    +
  6. +
+
+
+

26.3.2.3 To Run the producermethods Example

+
+
    +
  1. +

    In a web browser, enter the following URL:

    +
    +
    +
    http://localhost:8080/producermethods
    +
    +
    +
  2. +
  3. +

    On the String Encoder page, select either the Test or Shift Letters +option, enter a string and the number of letters to shift by, and then +click Encode.

    +
    +

    Depending on your selection, the Result line displays either the encoded +string or the input values you specified.

    +
    +
  4. +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+
+ + + \ No newline at end of file diff --git a/cdi-adv-examples004.html b/cdi-adv-examples004.html new file mode 100644 index 0000000..a7b1436 --- /dev/null +++ b/cdi-adv-examples004.html @@ -0,0 +1,582 @@ + + + + + + The producerfields Example: Using Producer Fields to Generate Resources + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

26.4 The producerfields Example: Using Producer Fields to GenerateResources

+
+
+

The producerfields example, which allows you to create a to-do list, +shows how to use a producer field to generate objects that can then be +managed by the container. This example generates an EntityManager +object, but resources such as JDBC connections and datasources can also +be generated this way.

+
+
+

The producerfields example is the simplest possible entity example. It +also contains a qualifier and a class that generates the entity manager. +It also contains a single entity, a stateful session bean, a Facelets +page, and a managed bean.

+
+
+

The source files are located in the +tut-install`/examples/cdi/producerfields/src/main/java/javaeetutorial/producerfields/` +directory.

+
+
+

The following topics are addressed here:

+
+ +
+

26.4.1 The Producer Field for the producerfields Example

+
+

The most important component of the producerfields example is the +smallest, the db.UserDatabaseEntityManager class, which isolates the +generation of the EntityManager object so it can easily be used by +other components in the application. The class uses a producer field to +inject an EntityManager annotated with the @UserDatabase qualifier, +also defined in the db package:

+
+
+
+
@Singleton
+public class UserDatabaseEntityManager {
+
+    @Produces
+    @PersistenceContext
+    @UserDatabase
+    private EntityManager em;
+    ...
+}
+
+
+
+

The class does not explicitly produce a persistence unit field, but the +application has a persistence.xml file that specifies a persistence +unit. The class is annotated javax.inject.Singleton to specify that +the injector should instantiate it only once.

+
+
+

The db.UserDatabaseEntityManager class also contains commented-out +code that uses create and close methods to generate and remove the +producer field:

+
+
+
+
 /* @PersistenceContext
+    private EntityManager em;
+
+    @Produces
+    @UserDatabase
+    public EntityManager create() {
+        return em;
+    } */
+
+    public void close(@Disposes @UserDatabase EntityManager em) {
+        em.close();
+    }
+
+
+
+

You can remove the comment indicators from this code and place them +around the field declaration to test how the methods work. The behavior +of the application is the same with either mechanism.

+
+
+

The advantage of producing the EntityManager in a separate class +rather than simply injecting it into an enterprise bean is that the +object can easily be reused in a typesafe way. Also, a more complex +application can create multiple entity managers using multiple +persistence units, and this mechanism isolates this code for easy +maintenance, as in the following example:

+
+
+
+
@Singleton
+public class JPAResourceProducer {
+    @Produces
+    @PersistenceUnit(unitName="pu3")
+    @TestDatabase
+    EntityManagerFactory customerDatabasePersistenceUnit;
+
+    @Produces
+    @PersistenceContext(unitName="pu3")
+    @TestDatabase
+    EntityManager customerDatabasePersistenceContext;
+
+    @Produces
+    @PersistenceUnit(unitName="pu4")
+    @Documents
+    EntityManagerFactory customerDatabasePersistenceUnit;
+
+    @Produces
+    @PersistenceContext(unitName="pu4")
+    @Documents
+    EntityManager docDatabaseEntityManager;"
+}
+
+
+
+

The EntityManagerFactory declarations also allow applications to use +an application-managed entity manager.

+
+
+
+

26.4.2 The producerfields Entity and Session Bean

+
+

The producerfields example contains a simple entity class, +entity.ToDo, and a stateful session bean, ejb.RequestBean, that uses +it.

+
+
+

The entity class contains three fields: an autogenerated id field, a +string specifying the task, and a timestamp. The timestamp field, +timeCreated, is annotated with @Temporal, which is required for +persistent Date fields.

+
+
+
+
@Entity
+public class ToDo implements Serializable {
+
+    ...
+    @Id
+    @GeneratedValue(strategy = GenerationType.AUTO)
+    private Long id;
+    protected String taskText;
+    @Temporal(TIMESTAMP)
+    protected Date timeCreated;
+
+    public ToDo() {
+    }
+
+    public ToDo(Long id, String taskText, Date timeCreated) {
+        this.id = id;
+        this.taskText = taskText;
+        this.timeCreated = timeCreated;
+    }
+    ...
+
+
+
+

The remainder of the ToDo class contains the usual getters, setters, +and other entity methods.

+
+
+

The RequestBean class injects the EntityManager generated by the +producer method, annotated with the @UserDatabase qualifier:

+
+
+
+
@ConversationScoped
+@Stateful
+public class RequestBean {
+
+    @Inject
+    @UserDatabase
+    EntityManager em;
+
+
+
+

It then defines two methods, one that creates and persists a single +ToDo list item, and another that retrieves all the ToDo items +created so far by creating a query:

+
+
+
+
    public ToDo createToDo(String inputString) {
+        ToDo toDo = null;
+        Date currentTime = Calendar.getInstance().getTime();
+
+        try {
+            toDo = new ToDo();
+            toDo.setTaskText(inputString);
+            toDo.setTimeCreated(currentTime);
+            em.persist(toDo);
+            return toDo;
+        } catch (Exception e) {
+            throw new EJBException(e.getMessage());
+        }
+    }
+
+    public List<ToDo> getToDos() {
+        try {
+             List<ToDo> toDos =
+                    (List<ToDo>) em.createQuery(
+                    "SELECT t FROM ToDo t ORDER BY t.timeCreated")
+                    .getResultList();
+            return toDos;
+        } catch (Exception e) {
+            throw new EJBException(e.getMessage());
+        }
+    }
+}
+
+
+
+
+

26.4.3 The producerfields Facelets Pages and Managed Bean

+
+

The producerfields example has two Facelets pages, index.xhtml and +todolist.xhtml. The simple form on the index.xhtml page asks the +user only for the task. When the user clicks the Submit button, the +listBean.createTask method is called. When the user clicks the Show +Items button, the action specifies that the todolist.xhtml file should +be displayed:

+
+
+
+
    <h:body>
+        <h2>To Do List</h2>
+        <p>Enter a task to be completed.</p>
+        <h:form id="todolist">
+            <p><h:outputLabel value="Enter a string: " for="inputString"/>
+                <h:inputText id="inputString"
+                             value="#{listBean.inputString}"/></p>
+            <p><h:commandButton value="Submit"
+                                action="#{listBean.createTask()}"/></p>
+            <p><h:commandButton value="Show Items"
+                                action="todolist"/></p>
+        </h:form>
+        ...
+    </h:body>
+
+
+
+

The managed bean, web.ListBean, injects the ejb.RequestBean session +bean. It declares the entity.ToDo entity and a list of the entity +along with the input string that it passes to the session bean. The +inputString is annotated with the @NotNull Bean Validation +constraint, so an attempt to submit an empty string results in an error.

+
+
+
+
@Named
+@ConversationScoped
+public class ListBean implements Serializable {
+
+    ...
+    @EJB
+    private RequestBean request;
+    @NotNull
+    private String inputString;
+    private ToDo toDo;
+    private List<ToDo> toDos;
+
+
+
+

The createTask method called by the Submit button calls the +createToDo method of RequestBean:

+
+
+
+
    public void createTask() {
+        this.toDo = request.createToDo(inputString);
+    }
+
+
+
+

The getToDos method, which is called by the todolist.xhtml page, +calls the getToDos method of RequestBean:

+
+
+
+
public List<ToDo> getToDos() {
+        return request.getToDos();
+    }
+
+
+
+

To force the Facelets page to recognize an empty string as a null value +and return an error, the web.xml file sets the context parameter +javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL to true:

+
+
+
+
<context-param>
+  <param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name>
+  <param-value>true</param-value>
+</context-param>
+
+
+
+

The todolist.xhtml page is a little more complicated than the +index.html page. It contains a dataTable element that displays the +contents of the ToDo list. The body of the page looks like this:

+
+
+
+
    <body>
+        <h2>To Do List</h2>
+        <h:form id="showlist">
+            <h:dataTable var="toDo"
+                         value="#{listBean.toDos}"
+                         rules="all"
+                         border="1"
+                         cellpadding="5">
+                <h:column>
+                    <f:facet name="header">
+                        <h:outputText value="Time Stamp" />
+                    </f:facet>
+                    <h:outputText value="#{toDo.timeCreated}" />
+                </h:column>
+                <h:column>
+                    <f:facet name="header">
+                        <h:outputText value="Task" />
+                    </f:facet>
+                    <h:outputText value="#{toDo.taskText}" />
+                </h:column>
+            </h:dataTable>
+            <p><h:commandButton id="back" value="Back" action="index" /></p>
+        </h:form>
+    </body>
+
+
+
+

The value of the dataTable is listBean.toDos, the list returned by +the managed bean’s getToDos method, which in turn calls the session +bean’s getToDos method. Each row of the table displays the +timeCreated and taskText fields of the individual task. Finally, a +Back button returns the user to the index.xhtml page.

+
+
+
+

26.4.4 Running the producerfields Example

+
+

You can use either NetBeans IDE or Maven to build, package, deploy, and +run the producerfields application.

+
+
+

The following topics are addressed here:

+
+ +
+

26.4.4.1 To Build, Package, and Deploy the producerfields Example Using +NetBeans IDE +^^^^^^^^^^^^^^^^^^^^^^^^^^^^

+
+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    If the database server is not already running, start it by following +the instructions in Starting and +Stopping the Java DB Server.

    +
  4. +
  5. +

    From the File menu, choose Open Project.

    +
  6. +
  7. +

    In the Open Project dialog box, navigate to:

    +
    +
    +
    tut-install/examples/cdi
    +
    +
    +
  8. +
  9. +

    Select the producerfields folder.

    +
  10. +
  11. +

    Click Open Project.

    +
  12. +
  13. +

    In the Projects tab, right-click the producerfields project and +select Build.

    +
    +

    This command builds and packages the application into a WAR file, +producerfields.war, located in the target directory, and then +deploys it to GlassFish Server.

    +
    +
  14. +
+
+
+

26.4.4.2 To Build, Package, and Deploy the producerfields Example Using +Maven +^^^^^^^^^^^^^^^^^^^^^^^^^^^

+
+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    If the database server is not already running, start it by following +the instructions in Starting and +Stopping the Java DB Server.

    +
  4. +
  5. +

    In a terminal window, go to:

    +
    +
    +
    tut-install/examples/cdi/producerfields/
    +
    +
    +
  6. +
  7. +

    Enter the following command to deploy the application:

    +
    +
    +
    mvn install
    +
    +
    +
    +

    This command builds and packages the application into a WAR file, +producerfields.war, located in the target directory, and then +deploys it to GlassFish Server.

    +
    +
  8. +
+
+
+

26.4.4.3 To Run the producerfields Example

+
+
    +
  1. +

    In a web browser, enter the following URL:

    +
    +
    +
    http://localhost:8080/producerfields
    +
    +
    +
  2. +
  3. +

    On the Create To Do List page, enter a string in the field and click +Submit.

    +
    +

    You can enter additional strings and click Submit to create a task list +with multiple items.

    +
    +
  4. +
  5. +

    Click Show Items.

    +
    +

    The To Do List page opens, showing the timestamp and text for each item +you created.

    +
    +
  6. +
  7. +

    Click Back to return to the Create To Do List page.

    +
    +

    On this page, you can enter more items in the list.

    +
    +
  8. +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+
+ + + \ No newline at end of file diff --git a/cdi-adv-examples005.html b/cdi-adv-examples005.html new file mode 100644 index 0000000..b332a49 --- /dev/null +++ b/cdi-adv-examples005.html @@ -0,0 +1,612 @@ + + + + + + The billpayment Example: Using Events and Interceptors + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

26.5 The billpayment Example: Using Events and Interceptors

+
+
+

The billpayment example shows how to use both events and interceptors.

+
+
+

The source files are located in the +tut-install`/examples/cdi/billpayment/src/main/java/javaeetutorial/billpayment/` +directory.

+
+
+

The following topics are addressed here:

+
+ +
+

26.5.1 Overview of the billpayment Example

+
+

The example simulates paying an amount using a debit card or credit +card. When the user chooses a payment method, the managed bean creates +an appropriate event, supplies its payload, and fires it. A simple event +listener handles the event using observer methods.

+
+
+

The example also defines an interceptor that is set on a class and on +two methods of another class.

+
+
+
+

26.5.2 The PaymentEvent Event Class

+
+

The event class, event.PaymentEvent, is a simple bean class that +contains a no-argument constructor. It also has a toString method and +getter and setter methods for the payload components: a String for the +payment type, a BigDecimal for the payment amount, and a Date for +the timestamp.

+
+
+
+
public class PaymentEvent implements Serializable {
+
+    ...
+    public String paymentType;
+    public BigDecimal value;
+    public Date datetime;
+
+    public PaymentEvent() {
+    }
+
+    @Override
+    public String toString() {
+        return this.paymentType
+                + " = $" + this.value.toString()
+                + " at " + this.datetime.toString();
+    }
+    ...
+
+
+
+

The event class is a simple bean that is instantiated by the managed +bean using new and then populated. For this reason, the CDI container +cannot intercept the creation of the bean, and hence it cannot allow +interception of its getter and setter methods.

+
+
+
+

26.5.3 The PaymentHandler Event Listener

+
+

The event listener, listener.PaymentHandler, contains two observer +methods, one for each of the two event types:

+
+
+
+
@Logged
+@SessionScoped
+public class PaymentHandler implements Serializable {
+
+    ...
+    public void creditPayment(@Observes @Credit PaymentEvent event) {
+        logger.log(Level.INFO, "PaymentHandler - Credit Handler: {0}",
+                event.toString());
+
+        // call a specific Credit handler class...
+    }
+
+    public void debitPayment(@Observes @Debit PaymentEvent event) {
+        logger.log(Level.INFO, "PaymentHandler - Debit Handler: {0}",
+                event.toString());
+
+        // call a specific Debit handler class...
+    }
+}
+
+
+
+

Each observer method takes as an argument the event, annotated with +@Observes and with the qualifier for the type of payment. In a real +application, the observer methods would pass the event information on to +another component that would perform business logic on the payment.

+
+
+

The qualifiers are defined in the payment package, described in +The billpayment Facelets Pages and Managed Bean.

+
+
+

The PaymentHandler bean is annotated @Logged so that all its methods +can be intercepted.

+
+
+
+

26.5.4 The billpayment Facelets Pages and Managed Bean

+
+

The billpayment example contains two Facelets pages, index.xhtml and +the very simple response.xhtml. The body of index.xhtml looks like +this:

+
+
+
+
    <h:body>
+        <h3>Bill Payment Options</h3>
+        <p>Enter an amount, select Debit Card or Credit Card,
+            then click Pay.</p>
+        <h:form>
+            <p>
+            <h:outputLabel value="Amount: $" for="amt"/>
+            <h:inputText id="amt" value="#{paymentBean.value}"
+                         required="true"
+                         requiredMessage="An amount is required."
+                         maxlength="15" />
+            </p>
+            <h:outputLabel value="Options:" for="opt"/>
+            <h:selectOneRadio id="opt" value="#{paymentBean.paymentOption}">
+                <f:selectItem id="debit" itemLabel="Debit Card"
+                              itemValue="1"/>
+                <f:selectItem id="credit" itemLabel="Credit Card"
+                              itemValue="2" />
+            </h:selectOneRadio>
+            <p><h:commandButton id="submit" value="Pay"
+                                action="#{paymentBean.pay}" /></p>
+            <p><h:commandButton value="Reset"
+                                action="#{paymentBean.reset}" /></p>
+        </h:form>
+        ...
+    </h:body>
+
+
+
+

The input field takes a payment amount, passed to paymentBean.value. +Two options ask the user to select a Debit Card or Credit Card payment, +passing the integer value to paymentBean.paymentOption. Finally, the +Pay command button’s action is set to the method paymentBean.pay, and +the Reset button’s action is set to the paymentBean.reset method.

+
+
+

The payment.PaymentBean managed bean uses qualifiers to differentiate +between the two kinds of payment event:

+
+
+
+
@Named
+@SessionScoped
+public class PaymentBean implements Serializable {
+
+   ...
+    @Inject
+    @Credit
+    Event<PaymentEvent> creditEvent;
+
+    @Inject
+    @Debit
+    Event<PaymentEvent> debitEvent;
+
+
+
+

The qualifiers, @Credit and @Debit, are defined in the payment +package along with PaymentBean.

+
+
+

Next, the PaymentBean defines the properties it obtains from the +Facelets page and will pass on to the event:

+
+
+
+
    public static final int DEBIT = 1;
+    public static final int CREDIT = 2;
+    private int paymentOption = DEBIT;
+
+    @Digits(integer = 10, fraction = 2, message = "Invalid value")
+    private BigDecimal value;
+
+    private Date datetime;
+
+
+
+

The paymentOption value is an integer passed in from the option +component; the default value is DEBIT. The value is a BigDecimal +with a Bean Validation constraint that enforces a currency value with a +maximum number of digits. The timestamp for the event, datetime, is a +Date object initialized when the pay method is called.

+
+
+

The pay method of the bean first sets the timestamp for this payment +event. It then creates and populates the event payload, using the +constructor for the PaymentEvent and calling the event’s setter +methods, using the bean properties as arguments. It then fires the +event.

+
+
+
+
    @Logged
+    public String pay() {
+        this.setDatetime(Calendar.getInstance().getTime());
+        switch (paymentOption) {
+            case DEBIT:
+                PaymentEvent debitPayload = new PaymentEvent();
+                debitPayload.setPaymentType("Debit");
+                debitPayload.setValue(value);
+                debitPayload.setDatetime(datetime);
+                debitEvent.fire(debitPayload);
+                break;
+            case CREDIT:
+                PaymentEvent creditPayload = new PaymentEvent();
+                creditPayload.setPaymentType("Credit");
+                creditPayload.setValue(value);
+                creditPayload.setDatetime(datetime);
+                creditEvent.fire(creditPayload);
+                break;
+            default:
+                logger.severe("Invalid payment option!");
+        }
+        return "response";
+    }
+
+
+
+

The pay method returns the page to which the action is redirected, +response.xhtml.

+
+
+

The PaymentBean class also contains a reset method that empties the +value field on the index.xhtml page and sets the payment option to the +default:

+
+
+
+
    @Logged
+    public void reset() {
+        setPaymentOption(DEBIT);
+        setValue(BigDecimal.ZERO);
+    }
+
+
+
+

In this bean, only the pay and reset methods are intercepted.

+
+
+

The response.xhtml page displays the amount paid. It uses a rendered +expression to display the payment method:

+
+
+
+
    <h:body>
+        <h:form>
+            <h2>Bill Payment: Result</h2>
+            <h3>Amount Paid with
+                <h:outputText id="debit" value="Debit Card: "
+                              rendered="#{paymentBean.paymentOption eq 1}" />
+                <h:outputText id="credit" value="Credit Card: "
+                              rendered="#{paymentBean.paymentOption eq 2}" />
+                <h:outputText id="result" value="#{paymentBean.value}">
+                    <f:convertNumber type="currency"/>
+                </h:outputText>
+            </h3>
+            <p><h:commandButton id="back" value="Back" action="index" /></p>
+        </h:form>
+    </h:body>
+
+
+
+
+

26.5.5 The LoggedInterceptor Interceptor Class

+
+

The interceptor class, LoggedInterceptor, and its interceptor binding, +Logged, are both defined in the interceptor package. The Logged +interceptor binding is defined as follows:

+
+
+
+
@Inherited
+@InterceptorBinding
+@Retention(RUNTIME)
+@Target({METHOD, TYPE})
+public @interface Logged {
+}
+
+
+
+

The LoggedInterceptor class looks like this:

+
+
+
+
@Logged
+@Interceptor
+public class LoggedInterceptor implements Serializable {
+
+    ...
+
+    public LoggedInterceptor() {
+    }
+
+    @AroundInvoke
+    public Object logMethodEntry(InvocationContext invocationContext)
+            throws Exception {
+        System.out.println("Entering method: "
+                + invocationContext.getMethod().getName() + " in class "
+                + invocationContext.getMethod().getDeclaringClass().getName());
+
+        return invocationContext.proceed();
+    }
+}
+
+
+
+

The class is annotated with both the @Logged and the @Interceptor +annotations. The @AroundInvoke method, logMethodEntry, takes the +required InvocationContext argument and calls the required proceed +method. When a method is intercepted, logMethodEntry displays the name +of the method being invoked as well as its class.

+
+
+

To enable the interceptor, the beans.xml file defines it as follows:

+
+
+
+
<interceptors>
+    <class>javaeetutorial.billpayment.interceptor.LoggedInterceptor</class>
+</interceptors>
+
+
+
+

In this application, the PaymentEvent and PaymentHandler classes are +annotated @Logged, so all their methods are intercepted. In +PaymentBean, only the pay and reset methods are annotated +@Logged, so only those methods are intercepted.

+
+
+
+

26.5.6 Running the billpayment Example

+
+

You can use either NetBeans IDE or Maven to build, package, deploy, and +run the billpayment application.

+
+
+

The following topics are addressed here:

+
+ +
+

26.5.6.1 To Build, Package, and Deploy the billpayment Example Using +NetBeans IDE +^^^^^^^^^^^^^^^^^^^^^^^^^^^

+
+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    From the File menu, choose Open Project.

    +
  4. +
  5. +

    In the Open Project dialog box, navigate to:

    +
    +
    +
    tut-install/examples/cdi
    +
    +
    +
  6. +
  7. +

    Select the billpayment folder.

    +
  8. +
  9. +

    Click Open Project.

    +
  10. +
  11. +

    In the Projects tab, right-click the billpayment project and +select Build.

    +
    +

    This command builds and packages the application into a WAR file, +billpayment.war, located in the target directory, and then deploys +it to GlassFish Server.

    +
    +
  12. +
+
+
+

26.5.6.2 To Build, Package, and Deploy the billpayment Example Using +Maven +^^^^^^^^^^^^^^^^^^^^^^^^^^

+
+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    In a terminal window, go to:

    +
    +
    +
    tut-install/examples/cdi/billpayment/
    +
    +
    +
  4. +
  5. +

    Enter the following command to deploy the application:

    +
    +
    +
    mvn install
    +
    +
    +
    +

    This command builds and packages the application into a WAR file, +billpayment.war, located in the target directory, and then deploys +it to GlassFish Server.

    +
    +
  6. +
+
+
+

26.5.6.3 To Run the billpayment Example

+
+
    +
  1. +

    In a web browser, enter the following URL:

    +
    +
    +
    http://localhost:8080/billpayment
    +
    +
    +
  2. +
  3. +

    On the Bill Payment Options page, enter a value in the Amount field.

    +
    +

    The amount can contain up to 10 digits and include up to two decimal +places. For example:

    +
    +
    +
    +
    9876.54
    +
    +
    +
  4. +
  5. +

    Select Debit Card or Credit Card and click Pay.

    +
    +

    The Bill Payment: Result page opens, displaying the amount paid and the +method of payment:

    +
    +
    +
    +
    Amount Paid with Credit Card: $9,876.34
    +
    +
    +
  6. +
  7. +

    Click Back to return to the Bill Payment Options page.

    +
    +

    You can also click Reset to return to the initial page values.

    +
    +
  8. +
  9. +

    Examine the server log output.

    +
    +

    In NetBeans IDE, the output is visible in the GlassFish Server Output +tab. Otherwise, view domain-dir`/logs/server.log`.

    +
    +
    +

    The output from each interceptor appears in the log, followed by the +additional logger output defined by the constructor and methods:

    +
    +
    +
    +
    INFO: Entering method: pay in class billpayment.payment.PaymentBean
    +INFO: PaymentHandler created.
    +INFO: Entering method: debitPayment in class billpayment.listener.PaymentHandler
    +INFO: PaymentHandler - Debit Handler: Debit = $1234.56 at Tue Dec 14 14:50:28 EST 2010
    +
    +
    +
  10. +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+
+ + + \ No newline at end of file diff --git a/cdi-adv-examples006.html b/cdi-adv-examples006.html new file mode 100644 index 0000000..defa76e --- /dev/null +++ b/cdi-adv-examples006.html @@ -0,0 +1,330 @@ + + + + + + The decorators Example: Decorating a Bean + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

26.6 The decorators Example: Decorating a Bean

+
+
+

The decorators example, which is yet another variation on the +encoder example, shows how to use a decorator to implement additional +business logic for a bean.

+
+
+

The source files are located in the +tut-install`/examples/cdi/decorators/src/main/java/javaeetutorial/decorators/` +directory.

+
+
+

The following topics are addressed here:

+
+ +
+

26.6.1 Overview of the decorators Example

+
+

Instead of having the user choose between two alternative +implementations of an interface at deployment time or runtime, a +decorator adds some additional logic to a single implementation of the +interface.

+
+
+

The example includes an interface, an implementation of it, a decorator, +an interceptor, a managed bean, a Facelets page, and configuration +files.

+
+
+
+

26.6.2 Components of the decorators Example

+
+

The decorators example is very similar to the encoder example +described in The encoder Example: +Using Alternatives. Instead of providing two implementations of the +Coder interface, however, this example provides only the CoderImpl +class. The decorator class, CoderDecorator, rather than simply return +the coded string, displays the input and output strings' values and +length.

+
+
+

The CoderDecorator class, like CoderImpl, implements the business +method of the Coder interface, codeString:

+
+
+
+
@Decorator
+public abstract class CoderDecorator implements Coder {
+
+    @Inject
+    @Delegate
+    @Any
+    Coder coder;
+
+    public String codeString(String s, int tval) {
+        int len = s.length();
+
+        return "\"" + s + "\" becomes " + "\"" + coder.codeString(s, tval)
+                + "\", " + len + " characters in length";
+    }
+}
+
+
+
+

The decorator’s codeString method calls the delegate object’s +codeString method to perform the actual encoding.

+
+
+

The decorators example includes the Logged interceptor binding and +LoggedInterceptor class from the billpayment example. For this +example, the interceptor is set on the CoderBean.encodeString method +and the CoderImpl.codeString method. The interceptor code is +unchanged; interceptors are usually reusable for different applications.

+
+
+

Except for the interceptor annotations, the CoderBean and CoderImpl +classes are identical to the versions in the encoder example.

+
+
+

The beans.xml file specifies both the decorator and the interceptor:

+
+
+
+
    <decorators>
+        <class>javaeetutorial.decorators.CoderDecorator</class>
+    </decorators>
+    <interceptors>
+        <class>javaeetutorial.decorators.LoggedInterceptor</class>
+    </interceptors>
+
+
+
+
+

26.6.3 Running the decorators Example

+
+

You can use either NetBeans IDE or Maven to build, package, deploy, and +run the decorators application.

+
+
+

The following topics are addressed here:

+
+ +
+

26.6.3.1 To Build, Package, and Deploy the decorators Example Using +NetBeans IDE +^^^^^^^^^^^^^^^^^^^^^^^^^^^^

+
+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    From the File menu, choose Open Project.

    +
  4. +
  5. +

    In the Open Project dialog box, navigate to:

    +
    +
    +
    tut-install/examples/cdi
    +
    +
    +
  6. +
  7. +

    Select the decorators folder.

    +
  8. +
  9. +

    Click Open Project.

    +
  10. +
  11. +

    In the Projects tab, right-click the decorators project and select +Build.

    +
    +

    This command builds and packages the application into a WAR file, +decorators.war, located in the target directory, and then deploys it +to GlassFish Server.

    +
    +
  12. +
+
+
+

26.6.3.2 To Build, Package, and Deploy the decorators Example Using +Maven +^^^^^^^^^^^^^^^^^^^^^^^^^

+
+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    In a terminal window, go to:

    +
    +
    +
    tut-install/examples/cdi/decorators/
    +
    +
    +
  4. +
  5. +

    Enter the following command to deploy the application:

    +
    +
    +
    mvn install
    +
    +
    +
    +

    This command builds and packages the application into a WAR file, +decorators.war, located in the target directory, and then deploys it +to GlassFish Server.

    +
    +
  6. +
+
+
+

26.6.3.3 To Run the decorators Example

+
+
    +
  1. +

    In a web browser, enter the following URL:

    +
    +
    +
    http://localhost:8080/decorators
    +
    +
    +
  2. +
  3. +

    On the Decorated String Encoder page, enter a string and the number +of letters to shift by, and then click Encode.

    +
    +

    The output from the decorator method appears in blue on the Result line. +For example, if you entered Java and 4, you would see the following:

    +
    +
    +
    +
    "Java" becomes "Neze", 4 characters in length
    +
    +
    +
  4. +
  5. +

    Examine the server log output.

    +
    +

    In NetBeans IDE, the output is visible in the GlassFish Server Output +tab. Otherwise, view domain-dir`/logs/server.log`.

    +
    +
    +

    The output from the interceptors appears:

    +
    +
    +
    +
    INFO: Entering method: encodeString in class javaeetutorial.decorators.CoderBean
    +INFO: Entering method: codeString in class javaeetutorial.decorators.CoderImpl
    +
    +
    +
  6. +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+
+ + + \ No newline at end of file diff --git a/cdi-adv.html b/cdi-adv.html new file mode 100644 index 0000000..c5bd189 --- /dev/null +++ b/cdi-adv.html @@ -0,0 +1,123 @@ + + + + + + Contexts and Dependency Injection for Java EE: Advanced Topics + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

25 Contexts and Dependency Injection for Java EE: Advanced Topics

+
+
+

This chapter describes more advanced features of Contexts and Dependency +Injection for Java EE (CDI). Specifically, it covers additional features +CDI provides to enable loose coupling of components with strong typing, +in addition to those described in Overview +of CDI.

+
+
+

The following topics are addressed here:

+
+ +
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/cdi-adv001.html b/cdi-adv001.html new file mode 100644 index 0000000..fa5adc9 --- /dev/null +++ b/cdi-adv001.html @@ -0,0 +1,127 @@ + + + + + + Packaging CDI Applications + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

25.1 Packaging CDI Applications

+
+
+

When you deploy a Java EE application, CDI looks for beans inside bean +archives. A bean archive is any module that contains beans that the CDI +runtime can manage and inject. There are two kinds of bean archives: +explicit bean archives and implicit bean archives.

+
+
+

An explicit bean archive is an archive that contains a beans.xml +deployment descriptor, which can be an empty file, contain no version +number, or contain the version number 1.1 with the bean-discovery-mode +attribute set to all. For example:

+
+
+
+
<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
+                           http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
+       version="1.1" bean-discovery-mode="all">
+    ...
+</beans>
+
+
+
+

CDI can manage and inject any bean in an explicit archive, except those +annotated with @Vetoed.

+
+
+

An implicit bean archive is an archive that contains some beans +annotated with a scope type, contains no beans.xml deployment +descriptor, or contains a beans.xml deployment descriptor with the +bean-discovery-mode attribute set to annotated.

+
+
+

In an implicit archive, CDI can only manage and inject beans annotated +with a scope type.

+
+
+

For a web application, the beans.xml deployment descriptor, if +present, must be in the WEB-INF directory. For EJB modules or JAR +files, the beans.xml deployment descriptor, if present, must be in the +META-INF directory.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/cdi-adv002.html b/cdi-adv002.html new file mode 100644 index 0000000..5d414ff --- /dev/null +++ b/cdi-adv002.html @@ -0,0 +1,267 @@ + + + + + + Using Alternatives in CDI Applications + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

25.2 Using Alternatives in CDI Applications

+
+
+

When you have more than one version of a bean that you use for different +purposes, you can choose between them during the development phase by +injecting one qualifier or another, as shown in +The simplegreeting CDI Example.

+
+
+

Instead of having to change the source code of your application, +however, you can make the choice at deployment time by using +alternatives.

+
+
+

Alternatives are commonly used for purposes such as the following:

+
+
+
    +
  • +

    To handle client-specific business logic that is determined at runtime

    +
  • +
  • +

    To specify beans that are valid for a particular deployment scenario +(for example, when country-specific sales tax laws require +country-specific sales tax business logic)

    +
  • +
  • +

    To create dummy (mock) versions of beans to be used for testing

    +
  • +
+
+
+

To make a bean available for lookup, injection, or EL resolution using +this mechanism, give it a javax.enterprise.inject.Alternative +annotation and then use the alternatives element to specify it in the +beans.xml file.

+
+
+

For example, you might want to create a full version of a bean and also +a simpler version that you use only for certain kinds of testing. The +example described in The encoder +Example: Using Alternatives contains two such beans, CoderImpl and +TestCoderImpl. The test bean is annotated as follows:

+
+
+
+
@Alternative
+public class TestCoderImpl implements Coder { ... }
+
+
+
+

The full version is not annotated:

+
+
+
+
public class CoderImpl implements Coder { ... }
+
+
+
+

The managed bean injects an instance of the Coder interface:

+
+
+
+
@Inject
+Coder coder;
+
+
+
+

The alternative version of the bean is used by the application only if +that version is declared as follows in the beans.xml file:

+
+
+
+
<beans ...>
+    <alternatives>
+        <class>javaeetutorial.encoder.TestCoderImpl</class>
+    </alternatives>
+</beans>
+
+
+
+

If the alternatives element is commented out in the beans.xml file, +the CoderImpl class is used.

+
+
+

You can also have several beans that implement the same interface, all +annotated @Alternative. In this case, you must specify in the +beans.xml file which of these alternative beans you want to use. If +CoderImpl were also annotated @Alternative, one of the two beans +would always have to be specified in the beans.xml file.

+
+
+

The alternatives that you specify in the beans.xml file apply only to +classes in the same archive. Use the @Priority annotation to specify +alternatives globally for an application that consists of multiple +modules, as in the following example:

+
+
+
+
@Alternative
+@Priority(Interceptor.Priority.APPLICATION+10)
+public class TestCoderImpl implements Coder { ... }
+
+
+
+

The alternative with higher priority value is selected if several +alternative beans that implement the same interface are annotated with +@Priority. You do not need to specify the alternative in the +beans.xml file when you use the @Priority annotation.

+
+
+

25.2.1 Using Specialization

+
+

Specialization has a function similar to that of alternatives in that it +allows you to substitute one bean for another. However, you might want +to make one bean override the other in all cases. Suppose you defined +the following two beans:

+
+
+
+
@Default @Asynchronous
+public class AsynchronousService implements Service { ... }
+
+@Alternative
+public class MockAsynchronousService extends AsynchronousService { ... }
+
+
+
+

If you then declared MockAsynchronousService as an alternative in your +beans.xml file, the following injection point would resolve to +MockAsynchronousService:

+
+
+
+
@Inject Service service;
+
+
+
+

The following, however, would resolve to AsynchronousService rather +than MockAsynchronousService, because MockAsynchronousService does +not have the @Asynchronous qualifier:

+
+
+
+
@Inject @Asynchronous Service service;
+
+
+
+

To make sure that MockAsynchronousService was always injected, you +would have to implement all bean types and bean qualifiers of +AsynchronousService. However, if AsynchronousService declared a +producer method or observer method, even this cumbersome mechanism would +not ensure that the other bean was never invoked. Specialization +provides a simpler mechanism.

+
+
+

Specialization happens at development time as well as at runtime. If you +declare that one bean specializes another, it extends the other bean +class, and at runtime the specialized bean completely replaces the other +bean. If the first bean is produced by means of a producer method, you +must also override the producer method.

+
+
+

You specialize a bean by giving it the +javax.enterprise.inject.Specializes annotation. For example, you might +declare a bean as follows:

+
+
+
+
@Specializes
+public class MockAsynchronousService extends AsynchronousService { ... }
+
+
+
+

In this case, the MockAsynchronousService class will always be invoked +instead of the AsynchronousService class.

+
+
+

Usually, a bean marked with the @Specializes annotation is also an +alternative and is declared as an alternative in the beans.xml file. +Such a bean is meant to stand in as a replacement for the default +implementation, and the alternative implementation automatically +inherits all qualifiers of the default implementation as well as its EL +name, if it has one.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/cdi-adv003.html b/cdi-adv003.html new file mode 100644 index 0000000..290fdf4 --- /dev/null +++ b/cdi-adv003.html @@ -0,0 +1,231 @@ + + + + + + Using Producer Methods, Producer Fields, and Disposer Methods in CDI Applications + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

25.3 Using Producer Methods, Producer Fields, and Disposer Methods inCDI Applications

+
+
+

A producer method generates an object that can then be injected. +Typically, you use producer methods in the following situations:

+
+
+
    +
  • +

    When you want to inject an object that is not itself a bean

    +
  • +
  • +

    When the concrete type of the object to be injected may vary at +runtime

    +
  • +
  • +

    When the object requires some custom initialization that the bean +constructor does not perform

    +
  • +
+
+
+

For more information on producer methods, see +Injecting Objects by Using Producer +Methods.

+
+
+

A producer field is a simpler alternative to a producer method; it is a +field of a bean that generates an object. It can be used instead of a +simple getter method. Producer fields are particularly useful for +declaring Java EE resources such as data sources, JMS resources, and web +service references.

+
+
+

A producer method or field is annotated with the +javax.enterprise.inject.Produces annotation.

+
+
+

25.3.1 Using Producer Methods

+
+

A producer method can allow you to select a bean implementation at +runtime instead of at development time or deployment time. For example, +in the example described in The +producermethods Example: Using a Producer Method to Choose a Bean +Implementation, the managed bean defines the following producer method:

+
+
+
+
@Produces
+@Chosen
+@RequestScoped
+public Coder getCoder() {
+
+    switch (coderType) {
+        case TEST:
+            return new TestCoderImpl();
+        case SHIFT:
+            return new CoderImpl();
+        default:
+            return null;
+    }
+}
+
+
+
+

Here, getCoder becomes in effect a getter method, and when the coder +property is injected with the same qualifier and other annotations as +the method, the selected version of the interface is used.

+
+
+
+
@Inject
+@Chosen
+@RequestScoped
+Coder coder;
+
+
+
+

Specifying the qualifier is essential: It tells CDI which Coder to +inject. Without it, the CDI implementation would not be able to choose +between CoderImpl, TestCoderImpl, and the one returned by getCoder +and would cancel deployment, informing the user of the ambiguous +dependency.

+
+
+
+

25.3.2 Using Producer Fields to Generate Resources

+
+

A common use of a producer field is to generate an object such as a JDBC +DataSource or a Java Persistence API EntityManager (see +Chapter 37, "Introduction to the Java +Persistence API," for more information). The object can then be managed +by the container. For example, you could create a @UserDatabase +qualifier and then declare a producer field for an entity manager as +follows:

+
+
+
+
@Produces
+@UserDatabase
+@PersistenceContext
+private EntityManager em;
+
+
+
+

The @UserDatabase qualifier can be used when you inject the object +into another bean, RequestBean, elsewhere in the application:

+
+
+
+
    @Inject
+    @UserDatabase
+    EntityManager em;
+    ...
+
+
+
+

The producerfields Example: Using +Producer Fields to Generate Resources shows how to use producer fields +to generate an entity manager. You can use a similar mechanism to inject +@Resource, @EJB, or @WebServiceRef objects.

+
+
+

To minimize the reliance on resource injection, specify the producer +field for the resource in one place in the application, and then inject +the object wherever in the application you need it.

+
+
+
+

25.3.3 Using a Disposer Method

+
+

You can use a producer method or a producer field to generate an object +that needs to be removed when its work is completed. If you do, you need +a corresponding disposer method, annotated with a @Disposes +annotation. For example, you can close the entity manager as follows:

+
+
+
+
public void close(@Disposes @UserDatabase EntityManager em) {
+    em.close();
+}
+
+
+
+

The disposer method is called automatically when the context ends (in +this case, at the end of the conversation, because RequestBean has +conversation scope), and the parameter in the close method receives +the object produced by the producer field.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/cdi-adv004.html b/cdi-adv004.html new file mode 100644 index 0000000..5dec3ac --- /dev/null +++ b/cdi-adv004.html @@ -0,0 +1,230 @@ + + + + + + Using Predefined Beans in CDI Applications + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

25.4 Using Predefined Beans in CDI Applications

+
+
+

Java EE provides predefined beans that implement the following +interfaces.

+
+
+
    +
  • +

    javax.transaction.UserTransaction: A Java Transaction API (JTA) user +transaction.

    +
  • +
  • +

    java.security.Principal: The abstract notion of a principal, which +represents any entity, such as an individual, a corporation, or a login +ID. Whenever the injected principal is accessed, it always represents +the identity of the current caller. For example, a principal is injected +into a field at initialization. Later, a method that uses the injected +principal is called on the object into which the principal was injected. +In this situation, the injected principal represents the identity of the +current caller when the method is run.

    +
  • +
  • +

    javax.validation.Validator: A validator for bean instances. The bean +that implements this interface enables a Validator object for the +default bean validation object ValidatorFactory to be injected.

    +
  • +
  • +

    javax.validation.ValidatorFactory: A factory class for returning +initialized Validator instances. The bean that implements this +interface enables the default bean validation ValidatorFactory object +to be injected.

    +
  • +
  • +

    javax.servlet.http.HttpServletRequest: An HTTP request from a +client. The bean that implements this interface enables a servlet to +obtain all the details of a request.

    +
  • +
  • +

    javax.servlet.http.HttpSession: An HTTP session between a client and +a server. The bean that implements this interface enables a servlet to +access information about a session and to bind objects to a session.

    +
  • +
  • +

    javax.servlet.ServletContext: A context object that servlets can use +to communicate with the servlet container.

    +
  • +
+
+
+

To inject a predefined bean, create an injection point to obtain an +instance of the bean by using the javax.annotation.Resource annotation +for resources or the javax.inject.Inject annotation for CDI beans. For +the bean type, specify the class name of the interface the bean +implements.

+
+
+

+
+
+

Table 25-1 Injection of Predefined Beans

+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Predefined BeanResource or CDI BeanInjection Example

UserTransaction

Resource

@Resource UserTransaction transaction;

Principal

Resource

@Resource Principal principal;

Validator

Resource

@Resource Validator validator;

ValidatorFactory

Resource

@Resource ValidatorFactory factory;

HttpServletRequest

CDI bean

@Inject HttpServletRequest req;

HttpSession

CDI bean

@Inject HttpSession session;

ServletContext

CDI bean

@Inject ServletContext context;

+
+
+
+
+
+
+
+

Predefined beans are injected with dependent scope and the predefined +default qualifier @Default.

+
+
+

For more information about injecting resources, see +Resource Injection.

+
+
+

The following code snippet shows how to use the @Resource and +@Inject annotations to inject predefined beans. This code snippet +injects a user transaction and a context object into the servlet class +TransactionServlet. The user transaction is an instance of the +predefined bean that implements the javax.transaction.UserTransaction +interface. The context object is an instance of the predefined bean that +implements the javax.servlet.ServletContext interface.

+
+
+
+
import javax.annotation.Resource;
+import javax.inject.Inject;
+import javax.servlet.http.HttpServlet;
+import javax.transaction.UserTransaction;
+...
+public class TransactionServlet extends HttpServlet {
+    @Resource UserTransaction transaction;
+    @Inject ServletContext context;
+    ...
+}
+
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/cdi-adv005.html b/cdi-adv005.html new file mode 100644 index 0000000..e748d90 --- /dev/null +++ b/cdi-adv005.html @@ -0,0 +1,270 @@ + + + + + + Using Events in CDI Applications + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

25.5 Using Events in CDI Applications

+
+
+

Events allow beans to communicate without any compile-time dependency. +One bean can define an event, another bean can fire the event, and yet +another bean can handle the event. The beans can be in separate packages +and even in separate tiers of the application.

+
+
+

25.5.1 Defining Events

+
+

An event consists of the following:

+
+
+
    +
  • +

    The event object, a Java object

    +
  • +
  • +

    Zero or more qualifier types, the event qualifiers

    +
  • +
+
+
+

For example, in the billpayment example described in +The billpayment Example: Using Events +and Interceptors, a PaymentEvent bean defines an event using three +properties, which have setter and getter methods:

+
+
+
+
    public String paymentType;
+    public BigDecimal value;
+    public Date datetime;
+
+    public PaymentEvent() {
+    }
+
+
+
+

The example also defines qualifiers that distinguish between two kinds +of PaymentEvent. Every event also has the default qualifier @Any.

+
+
+
+

25.5.2 Using Observer Methods to Handle Events

+
+

An event handler uses an observer method to consume events.

+
+
+

Each observer method takes as a parameter an event of a specific event +type that is annotated with the @Observes annotation and with any +qualifiers for that event type. The observer method is notified of an +event if the event object matches the event type and if all the +qualifiers of the event match the observer method event qualifiers.

+
+
+

The observer method can take other parameters in addition to the event +parameter. The additional parameters are injection points and can +declare qualifiers.

+
+
+

The event handler for the billpayment example, PaymentHandler, +defines two observer methods, one for each type of PaymentEvent:

+
+
+
+
public void creditPayment(@Observes @Credit PaymentEvent event) {
+    ...
+}
+
+public void debitPayment(@Observes @Debit PaymentEvent event) {
+    ...
+}
+
+
+
+

Observer methods can also be conditional or transactional:

+
+
+
    +
  • +

    A conditional observer method is notified of an event only if an +instance of the bean that defines the observer method already exists in +the current context. To declare a conditional observer method, specify +notifyObserver=IF_EXISTS as an argument to @Observes:

    +
    +
    +
    @Observes(notifyObserver=IF_EXISTS)
    +
    +
    +
    +

    To obtain the default unconditional behavior, you can specify +@Observes(notifyObserver=ALWAYS).

    +
    +
  • +
  • +

    A transactional observer method is notified of an event during the +before-completion or after-completion phase of the transaction in which +the event was fired. You can also specify that the notification is to +occur only after the transaction has completed successfully or +unsuccessfully. To specify a transactional observer method, use any of +the following arguments to @Observes:

    +
    +
    +
    @Observes(during=BEFORE_COMPLETION)
    +
    +@Observes(during=AFTER_COMPLETION)
    +
    +@Observes(during=AFTER_SUCCESS)
    +
    +@Observes(during=AFTER_FAILURE)
    +
    +
    +
    +

    To obtain the default nontransactional behavior, specify +@Observes(during=IN_PROGRESS).

    +
    +
    +

    An observer method that is called before completion of a transaction may +call the setRollbackOnly method on the transaction instance to force a +transaction rollback.

    +
    +
  • +
+
+
+

Observer methods may throw exceptions. If a transactional observer +method throws an exception, the exception is caught by the container. If +the observer method is nontransactional, the exception terminates +processing of the event, and no other observer methods for the event are +called.

+
+
+
+

25.5.3 Firing Events

+
+

To activate an event, call the javax.enterprise.event.Event.fire +method. This method fires an event and notifies any observer methods.

+
+
+

In the billpayment example, a managed bean called PaymentBean fires +the appropriate event by using information it receives from the user +interface. There are actually four event beans, two for the event object +and two for the payload. The managed bean injects the two event beans. +The pay method uses a switch statement to choose which event to +fire, using new to create the payload.

+
+
+
+
    @Inject
+    @Credit
+    Event<PaymentEvent> creditEvent;
+
+    @Inject
+    @Debit
+    Event<PaymentEvent> debitEvent;
+
+    private static final int DEBIT = 1;
+    private static final int CREDIT = 2;
+    private int paymentOption = DEBIT;
+    ...
+
+    @Logged
+    public String pay() {
+        ...
+        switch (paymentOption) {
+            case DEBIT:
+                PaymentEvent debitPayload = new PaymentEvent();
+                // populate payload ...
+                debitEvent.fire(debitPayload);
+                break;
+            case CREDIT:
+                PaymentEvent creditPayload = new PaymentEvent();
+                // populate payload ...
+                creditEvent.fire(creditPayload);
+                break;
+            default:
+                logger.severe("Invalid payment option!");
+        }
+        ...
+    }
+
+
+
+

The argument to the fire method is a PaymentEvent that contains the +payload. The fired event is then consumed by the observer methods.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/cdi-adv006.html b/cdi-adv006.html new file mode 100644 index 0000000..e6f7acf --- /dev/null +++ b/cdi-adv006.html @@ -0,0 +1,215 @@ + + + + + + Using Interceptors in CDI Applications + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

25.6 Using Interceptors in CDI Applications

+
+
+

An interceptor is a class used to interpose in method invocations or +lifecycle events that occur in an associated target class. The +interceptor performs tasks, such as logging or auditing, that are +separate from the business logic of the application and are repeated +often within an application. Such tasks are often called cross-cutting +tasks. Interceptors allow you to specify the code for these tasks in one +place for easy maintenance. When interceptors were first introduced to +the Java EE platform, they were specific to enterprise beans. On the +Java EE 7 platform, you can use them with Java EE managed objects of all +kinds, including managed beans.

+
+
+

For information on Java EE interceptors, see +Chapter 54, "Using Java EE Interceptors".

+
+
+

An interceptor class often contains a method annotated @AroundInvoke, +which specifies the tasks the interceptor will perform when intercepted +methods are invoked. It can also contain a method annotated +@PostConstruct, @PreDestroy, @PrePassivate, or @PostActivate, to +specify lifecycle callback interceptors, and a method annotated +@AroundTimeout, to specify EJB timeout interceptors. An interceptor +class can contain more than one interceptor method, but it must have no +more than one method of each type.

+
+
+

Along with an interceptor, an application defines one or more +interceptor binding types, which are annotations that associate an +interceptor with target beans or methods. For example, the billpayment +example contains an interceptor binding type named @Logged and an +interceptor named LoggedInterceptor. The interceptor binding type +declaration looks something like a qualifier declaration, but it is +annotated with javax.interceptor.InterceptorBinding:

+
+
+
+
@Inherited
+@InterceptorBinding
+@Retention(RUNTIME)
+@Target({METHOD, TYPE})
+public @interface Logged {
+}
+
+
+
+

An interceptor binding also has the java.lang.annotation.Inherited +annotation, to specify that the annotation can be inherited from +superclasses. The @Inherited annotation also applies to custom scopes +(not discussed in this tutorial) but does not apply to qualifiers.

+
+
+

An interceptor binding type may declare other interceptor bindings.

+
+
+

The interceptor class is annotated with the interceptor binding as well +as with the @Interceptor annotation. For an example, see +The LoggedInterceptor Interceptor +Class.

+
+
+

Every @AroundInvoke method takes a +javax.interceptor.InvocationContext argument, returns a +java.lang.Object, and throws an Exception. It can call +InvocationContext methods. The @AroundInvoke method must call the +proceed method, which causes the target class method to be invoked.

+
+
+

Once an interceptor and binding type are defined, you can annotate beans +and individual methods with the binding type to specify that the +interceptor is to be invoked either on all methods of the bean or on +specific methods. For example, in the billpayment example, the +PaymentHandler bean is annotated @Logged, which means that any +invocation of its business methods will cause the interceptor’s +@AroundInvoke method to be invoked:

+
+
+
+
@Logged
+@SessionScoped
+public class PaymentHandler implements Serializable {...}
+
+
+
+

However, in the PaymentBean bean, only the pay and reset methods +have the @Logged annotation, so the interceptor is invoked only when +these methods are invoked:

+
+
+
+
@Logged
+public String pay() {...}
+
+@Logged
+public void reset() {...}
+
+
+
+

In order for an interceptor to be invoked in a CDI application, it must, +like an alternative, be specified in the beans.xml file. For example, +the LoggedInterceptor class is specified as follows:

+
+
+
+
<interceptors>
+    <class>javaeetutorial.billpayment.interceptors.LoggedInterceptor</class>
+</interceptors>
+
+
+
+

If an application uses more than one interceptor, the interceptors are +invoked in the order specified in the beans.xml file.

+
+
+

The interceptors that you specify in the beans.xml file apply only to +classes in the same archive. Use the @Priority annotation to specify +interceptors globally for an application that consists of multiple +modules, as in the following example:

+
+
+
+
@Logged
+@Interceptor
+@Priority(Interceptor.Priority.APPLICATION)
+public class LoggedInterceptor implements Serializable { ... }
+
+
+
+

Interceptors with lower priority values are called first. You do not +need to specify the interceptor in the beans.xml file when you use the +@Priority annotation.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/cdi-adv007.html b/cdi-adv007.html new file mode 100644 index 0000000..b9209d6 --- /dev/null +++ b/cdi-adv007.html @@ -0,0 +1,181 @@ + + + + + + Using Decorators in CDI Applications + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

25.7 Using Decorators in CDI Applications

+
+
+

A decorator is a Java class that is annotated +javax.decorator.Decorator and that has a corresponding decorators +element in the beans.xml file.

+
+
+

A decorator bean class must also have a delegate injection point, which +is annotated javax.decorator.Delegate. This injection point can be a +field, a constructor parameter, or an initializer method parameter of +the decorator class.

+
+
+

Decorators are outwardly similar to interceptors. However, they actually +perform tasks complementary to those performed by interceptors. +Interceptors perform cross-cutting tasks associated with method +invocation and with the lifecycles of beans, but cannot perform any +business logic. Decorators, on the other hand, do perform business logic +by intercepting business methods of beans. This means that instead of +being reusable for different kinds of applications, as are interceptors, +their logic is specific to a particular application.

+
+
+

For example, instead of using an alternative TestCoderImpl class for +the encoder example, you could create a decorator as follows:

+
+
+
+
@Decorator
+public abstract class CoderDecorator implements Coder {
+
+    @Inject
+    @Delegate
+    @Any
+    Coder coder;
+
+    public String codeString(String s, int tval) {
+        int len = s.length();
+
+        return "\"" + s + "\" becomes " + "\"" + coder.codeString(s, tval)
+                + "\", " + len + " characters in length";
+    }
+}
+
+
+
+

See The decorators Example: +Decorating a Bean for an example that uses this decorator.

+
+
+

This simple decorator returns more detailed output than the encoded +string returned by the CoderImpl.codeString method. A more complex +decorator could store information in a database or perform some other +business logic.

+
+
+

A decorator can be declared as an abstract class so that it does not +have to implement all the business methods of the interface.

+
+
+

In order for a decorator to be invoked in a CDI application, it must, +like an interceptor or an alternative, be specified in the beans.xml +file. For example, the CoderDecorator class is specified as follows:

+
+
+
+
<decorators>
+    <class>javaeetutorial.decorators.CoderDecorator</class>
+</decorators>
+
+
+
+

If an application uses more than one decorator, the decorators are +invoked in the order in which they are specified in the beans.xml +file.

+
+
+

If an application has both interceptors and decorators, the interceptors +are invoked first. This means, in effect, that you cannot intercept a +decorator.

+
+
+

The decorators that you specify in the beans.xml file apply only to +classes in the same archive. Use the @Priority annotation to specify +decorators globally for an application that consists of multiple +modules, as in the following example:

+
+
+
+
@Decorator
+@Priority(Interceptor.Priority.APPLICATION)
+public abstract class CoderDecorator implements Coder { ... }
+
+
+
+

Decorators with lower priority values are called first. You do not need +to specify the decorator in the beans.xml when you use the @Priority +annotation.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/cdi-adv008.html b/cdi-adv008.html new file mode 100644 index 0000000..8f65c88 --- /dev/null +++ b/cdi-adv008.html @@ -0,0 +1,189 @@ + + + + + + Using Stereotypes in CDI Applications + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

25.8 Using Stereotypes in CDI Applications

+
+
+

A stereotype is a kind of annotation, applied to a bean, that +incorporates other annotations. Stereotypes can be particularly useful +in large applications in which you have a number of beans that perform +similar functions. A stereotype is a kind of annotation that specifies +the following:

+
+
+
    +
  • +

    A default scope

    +
  • +
  • +

    Zero or more interceptor bindings

    +
  • +
  • +

    Optionally, a @Named annotation, guaranteeing default EL naming

    +
  • +
  • +

    Optionally, an @Alternative annotation, specifying that all beans +with this stereotype are alternatives

    +
  • +
+
+
+

A bean annotated with a particular stereotype will always use the +specified annotations, so you do not have to apply the same annotations +to many beans.

+
+
+

For example, you might create a stereotype named Action, using the +javax.enterprise.inject.Stereotype annotation:

+
+
+
+
@RequestScoped
+@Secure
+@Transactional
+@Named
+@Stereotype
+@Target(TYPE)
+@Retention(RUNTIME)
+public @interface Action {}
+
+
+
+

All beans annotated @Action will have request scope, use default EL +naming, and have the interceptor bindings @Transactional and +@Secure.

+
+
+

You could also create a stereotype named Mock:

+
+
+
+
@Alternative
+@Stereotype
+@Target(TYPE)
+@Retention(RUNTIME)
+public @interface Mock {}
+
+
+
+

All beans with this annotation are alternatives.

+
+
+

It is possible to apply multiple stereotypes to the same bean, so you +can annotate a bean as follows:

+
+
+
+
@Action
+@Mock
+public class MockLoginAction extends LoginAction { ... }
+
+
+
+

It is also possible to override the scope specified by a stereotype, +simply by specifying a different scope for the bean. The following +declaration gives the MockLoginAction bean session scope instead of +request scope:

+
+
+
+
@SessionScoped
+@Action
+@Mock
+public class MockLoginAction extends LoginAction { ... }
+
+
+
+

CDI makes available a built-in stereotype called Model, which is +intended for use with beans that define the model layer of a +model-view-controller application architecture. This stereotype +specifies that a bean is both @Named and @RequestScoped:

+
+
+
+
@Named
+@RequestScoped
+@Stereotype
+@Target({TYPE, METHOD, FIELD})
+@Retention(RUNTIME)
+public @interface Model {}
+
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/cdi-basic.html b/cdi-basic.html new file mode 100644 index 0000000..6fd34a5 --- /dev/null +++ b/cdi-basic.html @@ -0,0 +1,143 @@ + + + + + + Introduction to Contexts and Dependency Injection for Java EE + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

23 Introduction to Contexts and Dependency Injection for Java EE

+
+
+

This chapter describes Contexts and Dependency Injection for Java EE +(CDI) which is one of several Java EE features that help to knit +together the web tier and the transactional tier of the Java EE +platform.

+
+
+

The following topics are addressed here:

+
+ +
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/cdi-basic001.html b/cdi-basic001.html new file mode 100644 index 0000000..c0749cd --- /dev/null +++ b/cdi-basic001.html @@ -0,0 +1,198 @@ + + + + + + Getting Started + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

23.1 Getting Started

+
+
+

Contexts and Dependency Injection (CDI) enables your objects to have +their dependencies provided to them automatically, instead of creating +them or receiving them as parameters. CDI also manages the lifecycle of +those dependencies for you.

+
+
+

For example, consider the following servlet:

+
+
+
+
@WebServlet("/cdiservlet")
+public class NewServlet extends HttpServlet {
+    private Message message;
+
+    @Override
+    public void init() {
+        message = new MessageB();
+    }
+
+    @Override
+    public void doGet(HttpServletRequest request, HttpServletResponse response)
+                  throws IOException {
+        response.getWriter().write(message.get());
+    }
+}
+
+
+
+

This servlet needs an instance of an object that implements the +Message interface:

+
+
+
+
public interface Message {
+    public String get();
+}
+
+
+
+

The servlet creates itself an instance of the following object:

+
+
+
+
public class MessageB implements Message {
+    public MessageB() { }
+
+    @Override
+    public String get() {
+        return "message B";
+    }
+}
+
+
+
+

Using CDI, this servlet can declare its dependency on a Message +instance and have it injected automatically by the CDI runtime. The new +servlet code is the following:

+
+
+
+
@WebServlet("/cdiservlet")
+public class NewServlet extends HttpServlet {
+    @Inject private Message message;
+
+    @Override
+    public void doGet(HttpServletRequest request, HttpServletResponse response)
+                  throws IOException {
+        response.getWriter().write(message.get());
+    }
+}
+
+
+
+

The CDI runtime looks for classes that implement the Message +interface, finds the MessageB class, creates a new instance of it, and +injects it into the servlet at runtime. To manage the lifecycle of the +new instance, the CDI runtime needs to know what the scope of the +instance should be. In this example, the servlet only needs the instance +to process an HTTP request; the instance can then be garbage collected. +This is specified using the javax.enterprise.context.RequestScoped +annotation:

+
+
+
+
@RequestScoped
+public class MessageB implements Message { ... }
+
+
+
+

For more information on scopes, see Using +Scopes.

+
+
+

The MessageB class is a CDI bean. CDI beans are classes that CDI can +instantiate, manage, and inject automatically to satisfy the +dependencies of other objects. Almost any Java class can be managed and +injected by CDI. For more information on beans, see +About Beans. A JAR or WAR file that +contains a CDI bean is a bean archive. For more information on packaging +bean archives, see Configuring a CDI +Application in this chapter and Packaging +CDI Applications in Chapter 25, "Contexts and +Dependency Injection for Java EE: Advanced Topics".

+
+
+

In this example, MessageB is the only class that implements the +Message interface. If an application has more than one implementation +of an interface, CDI provides mechanisms that you can use to select +which implementation to inject. For more information, see +Using Qualifiers in this chapter and +Using Alternatives in CDI Applications in +Chapter 25, "Contexts and Dependency Injection +for Java EE: Advanced Topics".

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/cdi-basic002.html b/cdi-basic002.html new file mode 100644 index 0000000..3c211f7 --- /dev/null +++ b/cdi-basic002.html @@ -0,0 +1,203 @@ + + + + + + Overview of CDI + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

23.2 Overview of CDI

+
+
+

CDI is a set of services that, used together, make it easy for +developers to use enterprise beans along with JavaServer Faces +technology in web applications. Designed for use with stateful objects, +CDI also has many broader uses, allowing developers a great deal of +flexibility to integrate various kinds of components in a loosely +coupled but typesafe way

+
+
+

CDI 1.1 is specified by JSR 346. Related specifications that CDI uses +include the following:

+
+
+
    +
  • +

    JSR 330, Dependency Injection for Java

    +
  • +
  • +

    The Managed Beans specification, an offshoot of the Java EE 7 platform +specification (JSR 342)

    +
  • +
+
+
+

The most fundamental services provided by CDI are as follows.

+
+
+
    +
  • +

    Contexts: This service enables you to bind the lifecycle and +interactions of stateful components to well-defined but extensible +lifecycle contexts.

    +
  • +
  • +

    Dependency injection: This service enables you to inject components +into an application in a typesafe way and to choose at deployment time +which implementation of a particular interface to inject.

    +
  • +
+
+
+

In addition, CDI provides the following services:

+
+
+
    +
  • +

    Integration with the Expression Language (EL), which allows any +component to be used directly within a JavaServer Faces page or a +JavaServer Pages page

    +
  • +
  • +

    The ability to decorate injected components

    +
  • +
  • +

    The ability to associate interceptors with components using typesafe +interceptor bindings

    +
  • +
  • +

    An event-notification model

    +
  • +
  • +

    A web conversation scope in addition to the three standard scopes +(request, session, and application) defined by the Java Servlet +specification

    +
  • +
  • +

    A complete Service Provider Interface (SPI) that allows third-party +frameworks to integrate cleanly in the Java EE 7 environment

    +
  • +
+
+
+

A major theme of CDI is loose coupling. CDI does the following:

+
+
+
    +
  • +

    Decouples the server and the client by means of well-defined types and +qualifiers, so that the server implementation may vary

    +
  • +
  • +

    Decouples the lifecycles of collaborating components by

    +
    +
      +
    • +

      Making components contextual, with automatic lifecycle management

      +
    • +
    • +

      Allowing stateful components to interact like services, purely by +message passing

      +
    • +
    +
    +
  • +
  • +

    Completely decouples message producers from consumers, by means of +events

    +
  • +
  • +

    Decouples orthogonal concerns by means of Java EE interceptors

    +
  • +
+
+
+

Along with loose coupling, CDI provides strong typing by

+
+
+
    +
  • +

    Eliminating lookup using string-based names for wiring and +correlations so that the compiler will detect typing errors

    +
  • +
  • +

    Allowing the use of declarative Java annotations to specify +everything, largely eliminating the need for XML deployment descriptors, +and making it easy to provide tools that introspect the code and +understand the dependency structure at development time

    +
  • +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/cdi-basic003.html b/cdi-basic003.html new file mode 100644 index 0000000..34ab193 --- /dev/null +++ b/cdi-basic003.html @@ -0,0 +1,145 @@ + + + + + + About Beans + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

23.3 About Beans

+
+
+

CDI redefines the concept of a bean beyond its use in other Java +technologies, such as the JavaBeans and Enterprise JavaBeans (EJB) +technologies. In CDI, a bean is a source of contextual objects that +define application state and/or logic. A Java EE component is a bean if +the lifecycle of its instances may be managed by the container according +to the lifecycle context model defined in the CDI specification.

+
+
+

More specifically, a bean has the following attributes:

+
+
+ +
+
+

A bean type defines a client-visible type of the bean. Almost any Java +type may be a bean type of a bean.

+
+
+
    +
  • +

    A bean type may be an interface, a concrete class, or an abstract +class and may be declared final or have final methods.

    +
  • +
  • +

    A bean type may be a parameterized type with type parameters and type +variables.

    +
  • +
  • +

    A bean type may be an array type. Two array types are considered +identical only if the element type is identical.

    +
  • +
  • +

    A bean type may be a primitive type. Primitive types are considered to +be identical to their corresponding wrapper types in java.lang.

    +
  • +
  • +

    A bean type may be a raw type.

    +
  • +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/cdi-basic004.html b/cdi-basic004.html new file mode 100644 index 0000000..0ffc6df --- /dev/null +++ b/cdi-basic004.html @@ -0,0 +1,122 @@ + + + + + + About CDI Managed Beans + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

23.4 About CDI Managed Beans

+
+
+

A managed bean is implemented by a Java class, which is called its bean +class. A top-level Java class is a managed bean if it is defined to be a +managed bean by any other Java EE technology specification, such as the +JavaServer Faces technology specification, or if it meets all the +following conditions.

+
+
+
    +
  • +

    It is not a nonstatic inner class.

    +
  • +
  • +

    It is a concrete class or is annotated @Decorator.

    +
  • +
  • +

    It is not annotated with an EJB component-defining annotation or +declared as an EJB bean class in ejb-jar.xml.

    +
  • +
  • +

    It has an appropriate constructor. That is, one of the following is +the case.

    +
    +
      +
    • +

      The class has a constructor with no parameters.

      +
    • +
    • +

      The class declares a constructor annotated @Inject.

      +
    • +
    +
    +
  • +
+
+
+

No special declaration, such as an annotation, is required to define a +managed bean.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/cdi-basic005.html b/cdi-basic005.html new file mode 100644 index 0000000..4289e36 --- /dev/null +++ b/cdi-basic005.html @@ -0,0 +1,143 @@ + + + + + + Beans as Injectable Objects + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

23.5 Beans as Injectable Objects

+
+
+

The concept of injection has been part of Java technology for some time. +Since the Java EE 5 platform was introduced, annotations have made it +possible to inject resources and some other kinds of objects into +container-managed objects. CDI makes it possible to inject more kinds of +objects and to inject them into objects that are not container-managed.

+
+
+

The following kinds of objects can be injected:

+
+
+
    +
  • +

    (Almost) any Java class

    +
  • +
  • +

    Session beans

    +
  • +
  • +

    Java EE resources: data sources, Java Message Service topics, queues, +connection factories, and the like

    +
  • +
  • +

    Persistence contexts (Java Persistence API EntityManager objects)

    +
  • +
  • +

    Producer fields

    +
  • +
  • +

    Objects returned by producer methods

    +
  • +
  • +

    Web service references

    +
  • +
  • +

    Remote enterprise bean references

    +
  • +
+
+
+

For example, suppose that you create a simple Java class with a method +that returns a string:

+
+
+
+
package greetings;
+
+public class Greeting {
+    public String greet(String name) {
+        return "Hello, " + name + ".";
+    }
+}
+
+
+
+

This class becomes a bean that you can then inject into another class. +This bean is not exposed to the EL in this form. +Giving Beans EL Names explains how you can +make a bean accessible to the EL.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/cdi-basic006.html b/cdi-basic006.html new file mode 100644 index 0000000..b4a6767 --- /dev/null +++ b/cdi-basic006.html @@ -0,0 +1,154 @@ + + + + + + Using Qualifiers + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

23.6 Using Qualifiers

+
+
+

You can use qualifiers to provide various implementations of a +particular bean type. A qualifier is an annotation that you apply to a +bean. A qualifier type is a Java annotation defined as +@Target({METHOD, FIELD, PARAMETER, TYPE}) and @Retention(RUNTIME).

+
+
+

For example, you could declare an @Informal qualifier type and apply +it to another class that extends the Greeting class. To declare this +qualifier type, you would use the following code:

+
+
+
+
package greetings;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Retention(RUNTIME)
+@Target({TYPE, METHOD, FIELD, PARAMETER})
+public @interface Informal {}
+
+
+
+

You can then define a bean class that extends the Greeting class and +uses this qualifier:

+
+
+
+
package greetings;
+
+@Informal
+public class InformalGreeting extends Greeting {
+    public String greet(String name) {
+        return "Hi, " + name + "!";
+    }
+}
+
+
+
+

Both implementations of the bean can now be used in the application.

+
+
+

If you define a bean with no qualifier, the bean automatically has the +qualifier @Default. The unannotated Greeting class could be declared +as follows:

+
+
+
+
package greetings;
+
+import javax.enterprise.inject.Default;
+
+@Default
+public class Greeting {
+    public String greet(String name) {
+        return "Hello, " + name + ".";
+    }
+}
+
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/cdi-basic007.html b/cdi-basic007.html new file mode 100644 index 0000000..e9abf90 --- /dev/null +++ b/cdi-basic007.html @@ -0,0 +1,120 @@ + + + + + + Injecting Beans + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

23.7 Injecting Beans

+
+
+

In order to use the beans you create, you inject them into yet another +bean that can then be used by an application, such as a JavaServer Faces +application. For example, you might create a bean called Printer into +which you would inject one of the Greeting beans:

+
+
+
+
import javax.inject.Inject;
+
+public class Printer {
+
+    @Inject Greeting greeting;
+    ...
+}
+
+
+
+

This code injects the @Default Greeting implementation into the +bean. The following code injects the @Informal implementation:

+
+
+
+
import javax.inject.Inject;
+
+public class Printer {
+
+    @Inject @Informal Greeting greeting;
+    ...
+}
+
+
+
+

More is needed for the complete picture of this bean. Its use of scope +needs to be understood. In addition, for a JavaServer Faces application, +the bean needs to be accessible through the EL.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/cdi-basic008.html b/cdi-basic008.html new file mode 100644 index 0000000..b161ef8 --- /dev/null +++ b/cdi-basic008.html @@ -0,0 +1,228 @@ + + + + + + Using Scopes + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

23.8 Using Scopes

+
+
+

For a web application to use a bean that injects another bean class, the +bean needs to be able to hold state over the duration of the user’s +interaction with the application. The way to define this state is to +give the bean a scope. You can give an object any of the scopes +described in Table 23-1, depending on how you are using it.

+
+
+

+
+
+

Table 23-1 Scopes

+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ScopeAnnotationDuration

Request

@RequestScoped

A user’s interaction with a web application +in a single HTTP request.

Session

@SessionScoped

A user’s interaction with a web application +across multiple HTTP requests.

Application

@ApplicationScoped

Shared state across all users' +interactions with a web application.

Dependent

@Dependent

The default scope if none is specified; it +means that an object exists to serve exactly one client (bean) and has +the same lifecycle as that client (bean).

Conversation

@ConversationScoped

A user’s interaction with a +servlet, including JavaServer Faces applications. The conversation scope +exists within developer-controlled boundaries that extend it across +multiple requests for long-running conversations. All long-running +conversations are scoped to a particular HTTP servlet session and may +not cross session boundaries.

+
+
+
+
+
+
+
+

The first three scopes are defined by both JSR 346 and the JavaServer +Faces specification. The last two are defined by JSR 346.

+
+
+

All predefined scopes except @Dependent are contextual scopes. CDI +places beans of contextual scope in the context whose lifecycle is +defined by the Java EE specifications. For example, a session context +and its beans exist during the lifetime of an HTTP session. Injected +references to the beans are contextually aware. The references always +apply to the bean that is associated with the context for the thread +that is making the reference. The CDI container ensures that the objects +are created and injected at the correct time as determined by the scope +that is specified for these objects.

+
+
+

You can also define and implement custom scopes, but that is an advanced +topic. Custom scopes are likely to be used by those who implement and +extend the CDI specification.

+
+
+

A scope gives an object a well-defined lifecycle context. A scoped +object can be automatically created when it is needed and automatically +destroyed when the context in which it was created ends. Moreover, its +state is automatically shared by any clients that execute in the same +context.

+
+
+

Java EE components, such as servlets and enterprise beans, and JavaBeans +components do not by definition have a well-defined scope. These +components are one of the following:

+
+
+
    +
  • +

    Singletons, such as Enterprise JavaBeans singleton beans, whose state +is shared among all clients

    +
  • +
  • +

    Stateless objects, such as servlets and stateless session beans, which +do not contain client-visible state

    +
  • +
  • +

    Objects that must be explicitly created and destroyed by their client, +such as JavaBeans components and stateful session beans, whose state is +shared by explicit reference passing between clients

    +
  • +
+
+
+

If, however, you create a Java EE component that is a managed bean, it +becomes a scoped object, which exists in a well-defined lifecycle +context.

+
+
+

The web application for the Printer bean will use a simple request and +response mechanism, so the managed bean can be annotated as follows:

+
+
+
+
import javax.enterprise.context.RequestScoped;
+import javax.inject.Inject;
+
+@RequestScoped
+public class Printer {
+
+    @Inject @Informal Greeting greeting;
+    ...
+}
+
+
+
+

Beans that use session, application, or conversation scope must be +serializable, but beans that use request scope do not have to be +serializable.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/cdi-basic009.html b/cdi-basic009.html new file mode 100644 index 0000000..ba0f687 --- /dev/null +++ b/cdi-basic009.html @@ -0,0 +1,126 @@ + + + + + + Giving Beans EL Names + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

23.9 Giving Beans EL Names

+
+
+

To make a bean accessible through the EL:

+
+
+
    +
  1. +

    Use the @Named built-in qualifier:

    +
    +
    +
    import javax.enterprise.context.RequestScoped;
    +import javax.inject.Inject;
    +import javax.inject.Named;
    +
    +@Named
    +@RequestScoped
    +public class Printer {
    +
    +    @Inject @Informal Greeting greeting;
    +    ...
    +}
    +
    +
    +
    +

    The @Named qualifier allows you to access the bean by using the bean +name, with the first letter in lowercase. For example, a Facelets page +would refer to the bean as printer.

    +
    +
    +

    You can specify an argument to the @Named qualifier to use a +nondefault name:

    +
    +
    +
    +
    @Named("MyPrinter")
    +
    +
    +
    +

    With this annotation, the Facelets page would refer to the bean as +MyPrinter.

    +
    +
  2. +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/cdi-basic010.html b/cdi-basic010.html new file mode 100644 index 0000000..2316f78 --- /dev/null +++ b/cdi-basic010.html @@ -0,0 +1,136 @@ + + + + + + Adding Setter and Getter Methods + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

23.10 Adding Setter and Getter Methods

+
+
+

To make the state of the managed bean accessible:

+
+
+
    +
  1. +

    Add setter and getter methods for that state.

    +
    +

    The createSalutation method calls the bean’s greet method, and the +getSalutation method retrieves the result.

    +
    +
    +

    Once the setter and getter methods have been added, the bean is +complete. The final code looks like this:

    +
    +
    +
    +
    package greetings;
    +
    +import javax.enterprise.context.RequestScoped;
    +import javax.inject.Inject;
    +import javax.inject.Named;
    +
    +@Named
    +@RequestScoped
    +public class Printer {
    +
    +    @Inject @Informal Greeting greeting;
    +
    +    private String name;
    +    private String salutation;
    +
    +    public void createSalutation() {
    +        this.salutation = greeting.greet(name);
    +    }
    +
    +    public String getSalutation() {
    +        return salutation;
    +    }
    +
    +    public void setName(String name) {
    +        this.name = name;
    +    }
    +
    +    public String getName() {
    +        return name;
    +    }
    +}
    +
    +
    +
  2. +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/cdi-basic011.html b/cdi-basic011.html new file mode 100644 index 0000000..cc28f11 --- /dev/null +++ b/cdi-basic011.html @@ -0,0 +1,110 @@ + + + + + + Using a Managed Bean in a Facelets Page + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

23.11 Using a Managed Bean in a Facelets Page

+
+
+

To use the managed bean in a Facelets page:

+
+
+
    +
  1. +

    Create a form that uses user interface elements to call its methods +and display their results.

    +
    +

    This example provides a button that asks the user to type a name, +retrieves the salutation, and then displays the text in a paragraph +below the button:

    +
    +
    +
    +
    <h:form id="greetme">
    +   <p><h:outputLabel value="Enter your name: " for="name"/>
    +      <h:inputText id="name" value="#{printer.name}"/></p>
    +   <p><h:commandButton value="Say Hello"
    +                       action="#{printer.createSalutation}"/></p>
    +   <p><h:outputText value="#{printer.salutation}"/></p>
    +</h:form>
    +
    +
    +
  2. +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/cdi-basic012.html b/cdi-basic012.html new file mode 100644 index 0000000..31e57f1 --- /dev/null +++ b/cdi-basic012.html @@ -0,0 +1,146 @@ + + + + + + Injecting Objects by Using Producer Methods + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

23.12 Injecting Objects by Using Producer Methods

+
+
+

Producer methods provide a way to inject objects that are not beans, +objects whose values may vary at runtime, and objects that require +custom initialization. For example, if you want to initialize a numeric +value defined by a qualifier named @MaxNumber, you can define the +value in a managed bean and then define a producer method, +getMaxNumber, for it:

+
+
+
+
private int maxNumber = 100;
+...
+@Produces @MaxNumber int getMaxNumber() {
+    return maxNumber;
+}
+
+
+
+

When you inject the object in another managed bean, the container +automatically invokes the producer method, initializing the value to +100:

+
+
+
+
@Inject @MaxNumber private int maxNumber;
+
+
+
+

If the value can vary at runtime, the process is slightly different. For +example, the following code defines a producer method that generates a +random number defined by a qualifier called @Random:

+
+
+
+
private java.util.Random random =
+    new java.util.Random( System.currentTimeMillis() );
+
+java.util.Random getRandom() {
+        return random;
+}
+
+@Produces @Random int next() {
+    return getRandom().nextInt(maxNumber);
+}
+
+
+
+

When you inject this object in another managed bean, you declare a +contextual instance of the object:

+
+
+
+
@Inject @Random Instance<Integer> randomInt;
+
+
+
+

You then call the get method of the Instance:

+
+
+
+
this.number = randomInt.get();
+
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/cdi-basic013.html b/cdi-basic013.html new file mode 100644 index 0000000..f9f247e --- /dev/null +++ b/cdi-basic013.html @@ -0,0 +1,105 @@ + + + + + + Configuring a CDI Application + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

23.13 Configuring a CDI Application

+
+
+

When your beans are annotated with a scope type, the server recognizes +the application as a bean archive and no additional configuration is +required. The possible scope types for CDI beans are listed in +Using Scopes.

+
+
+

CDI uses an optional deployment descriptor named beans.xml. Like other +Java EE deployment descriptors, the configuration settings in +beans.xml are used in addition to annotation settings in CDI classes. +The settings in beans.xml override the annotation settings if there is +a conflict. An archive must contain the beans.xml deployment +descriptor only in certain limited situations, described in +Chapter 25, "Contexts and Dependency Injection +for Java EE: Advanced Topics".

+
+
+

For a web application, the beans.xml deployment descriptor, if +present, must be in the WEB-INF directory. For EJB modules or JAR +files, the beans.xml deployment descriptor, if present, must be in the +META-INF directory.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/cdi-basic014.html b/cdi-basic014.html new file mode 100644 index 0000000..33536ba --- /dev/null +++ b/cdi-basic014.html @@ -0,0 +1,200 @@ + + + + + + Using the @PostConstruct and @PreDestroy Annotations with CDI Managed Bean Classes + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

23.14 Using the @PostConstruct and @PreDestroy Annotations with CDIManaged Bean Classes

+
+
+

CDI managed bean classes and their superclasses support the annotations +for initializing and for preparing for the destruction of a bean. These +annotations are defined in JSR 250: Common Annotations for the Java +platform (http://jcp.org/en/jsr/detail?id=250).

+
+
+

The following topics are addressed here:

+
+ +
+

23.14.1 To Initialize a Managed Bean Using the @PostConstruct Annotation

+
+

Initializing a managed bean specifies the lifecycle callback method that +the CDI framework should call after dependency injection but before the +class is put into service.

+
+
+
    +
  1. +

    In the managed bean class or any of its superclasses, define a +method that performs the initialization that you require.

    +
  2. +
  3. +

    Annotate the declaration of the method with the +javax.annotation.PostConstruct annotation.

    +
  4. +
+
+
+

When the managed bean is injected into a component, CDI calls the method +after all injection has occurred and after all initializers have been +called.

+
+
+
+
+
+
+
+ +++ + + + + + +
+

Note:

+
+
+

As mandated in JSR 250, if the annotated method is declared in a +superclass, the method is called unless a subclass of the declaring +class overrides the method.

+
+
+
+
+
+
+
+
+

The UserNumberBean managed bean in +The guessnumber-cdi CDI Example +uses @PostConstruct to annotate a method that resets all bean fields:

+
+
+
+
@PostConstruct
+public void reset () {
+    this.minimum = 0;
+    this.userNumber = 0;
+    this.remainingGuesses = 0;
+    this.maximum = maxNumber;
+    this.number = randomInt.get();
+}
+
+
+
+
+

23.14.2 To Prepare for the Destruction of a Managed Bean Using the@PreDestroy Annotation

+
+

Preparing for the destruction of a managed bean specifies the lifecycle +call back method that signals that an application component is about to +be destroyed by the container.

+
+
+
    +
  1. +

    In the managed bean class or any of its superclasses, prepare for +the destruction of the managed bean.

    +
    +

    In this method, perform any cleanup that is required before the bean is +destroyed, such as releasing a resource that the bean has been holding.

    +
    +
  2. +
  3. +

    Annotate the declaration of the method with the +javax.annotation.PreDestroy annotation.

    +
  4. +
+
+
+

CDI calls this method before starting to destroy the bean.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/cdi-basic015.html b/cdi-basic015.html new file mode 100644 index 0000000..5a157b3 --- /dev/null +++ b/cdi-basic015.html @@ -0,0 +1,115 @@ + + + + + + Further Information about CDI + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

23.15 Further Information about CDI

+
+
+

For more information about CDI, see

+
+
+
    +
  • +

    Contexts and Dependency Injection for Java EE specification:

    +
    +

    http://jcp.org/en/jsr/detail?id=346

    +
    +
  • +
  • +

    An introduction to Contexts and Dependency Injection for Java EE:

    +
    +

    http://docs.jboss.org/weld/reference/latest/en-US/html/

    +
    +
  • +
  • +

    Dependency Injection for Java specification:

    +
    +

    http://jcp.org/en/jsr/detail?id=330

    +
    +
  • +
  • +

    Managed Beans specification, which is part of the Java Platform, +Enterprise Edition 7 (Java EE 7) Specification:

    +
    +

    http://jcp.org/en/jsr/detail?id=342

    +
    +
  • +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/cdi-basicexamples.html b/cdi-basicexamples.html new file mode 100644 index 0000000..8ab5a55 --- /dev/null +++ b/cdi-basicexamples.html @@ -0,0 +1,104 @@ + + + + + + Running the Basic Contexts and Dependency Injection Examples + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

24 Running the Basic Contexts and Dependency Injection Examples

+
+
+

This chapter describes in detail how to build and run simple examples +that use CDI.

+
+
+

The following topics are addressed here:

+
+ +
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/cdi-basicexamples001.html b/cdi-basicexamples001.html new file mode 100644 index 0000000..5244cbc --- /dev/null +++ b/cdi-basicexamples001.html @@ -0,0 +1,121 @@ + + + + + + Building and Running the CDI Samples + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

24.1 Building and Running the CDI Samples

+
+
+

The examples are in the tut-install`/examples/cdi/` directory.

+
+
+

To build and run the examples, you will do the following:

+
+
+
    +
  1. +

    Use NetBeans IDE or the Maven tool to compile and package the +example.

    +
  2. +
  3. +

    Use NetBeans IDE or the Maven tool to deploy the example.

    +
  4. +
  5. +

    Run the example in a web browser.

    +
  6. +
+
+
+

See Chapter 2, "Using the Tutorial +Examples", for basic information on installing, building, and running +the examples.

+
+
+

The following topics are addressed here:

+
+ +
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/cdi-basicexamples002.html b/cdi-basicexamples002.html new file mode 100644 index 0000000..201defa --- /dev/null +++ b/cdi-basicexamples002.html @@ -0,0 +1,418 @@ + + + + + + The simplegreeting CDI Example + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

24.2 The simplegreeting CDI Example

+
+
+

The simplegreeting example illustrates some of the most basic features +of CDI: scopes, qualifiers, bean injection, and accessing a managed bean +in a JavaServer Faces application. When you run the example, you click a +button that presents either a formal or an informal greeting, depending +on how you edited one of the classes. The example includes four source +files, a Facelets page and template, and configuration files.

+
+
+

The following topics are addressed here:

+
+ +
+

24.2.1 The simplegreeting Source Files

+
+

The four source files for the simplegreeting example are

+
+
+ +
+
+

The source files are located in the +tut-install`/examples/cdi/simplegreeting/src/main/java/javaeetutorial/simplegreeting` +directory.

+
+
+
+

24.2.2 The Facelets Template and Page

+
+

To use the managed bean in a simple Facelets application:

+
+
+
    +
  1. +

    Use a very simple template file and index.xhtml page.

    +
    +

    The template page, template.xhtml, looks like this:

    +
    +
    +
    +
    <?xml version='1.0' encoding='UTF-8' ?>
    +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    +          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    +<html lang="en"
    +      xmlns="http://www.w3.org/1999/xhtml"
    +      xmlns:h="http://xmlns.jcp.org/jsf/html"
    +      xmlns:ui="http://xmlns.jcp.org/jsf/facelets">
    +    <h:head>
    +        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    +        <h:outputStylesheet library="css" name="default.css"/>
    +        <title><ui:insert name="title">Default Title</ui:insert></title>
    +    </h:head>
    +
    +    <body>
    +        <div id="container">
    +            <div id="header">
    +                <h2><ui:insert name="head">Head</ui:insert></h2>
    +            </div>
    +
    +            <div id="space">
    +                <p></p>
    +            </div>
    +
    +            <div id="content">
    +                <ui:insert name="content"/>
    +            </div>
    +        </div>
    +    </body>
    +</html>
    +
    +
    +
  2. +
  3. +

    To create the Facelets page, redefine the title and head, then add a +small form to the content:

    +
    +
    +
    <?xml version='1.0' encoding='UTF-8' ?>
    +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    +          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    +<html lang="en"
    +      xmlns="http://www.w3.org/1999/xhtml"
    +      xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
    +      xmlns:h="http://xmlns.jcp.org/jsf/html">
    +    <ui:composition template="/template.xhtml">
    +
    +        <ui:define name="title">Simple Greeting</ui:define>
    +        <ui:define name="head">Simple Greeting</ui:define>
    +        <ui:define name="content">
    +            <h:form id="greetme">
    +               <p><h:outputLabel value="Enter your name: " for="name"/>
    +                  <h:inputText id="name" value="#{printer.name}"/></p>
    +               <p><h:commandButton value="Say Hello"
    +                                   action="#{printer.createSalutation}"/></p>
    +               <p><h:outputText value="#{printer.salutation}"/> </p>
    +            </h:form>
    +        </ui:define>
    +
    +    </ui:composition>
    +</html>
    +
    +
    +
    +

    The form asks the user to enter a name. The button is labeled Say Hello, +and the action defined for it is to call the createSalutation method +of the Printer managed bean. This method in turn calls the greet +method of the defined Greeting class.

    +
    +
    +

    The output text for the form is the value of the greeting returned by +the setter method. Depending on whether the default or the @Informal +version of the greeting is injected, this is one of the following, where +name is the name entered by the user:

    +
    +
    +
    +
    Hello, name.
    +
    +Hi, name!
    +
    +
    +
    +

    The Facelets page and template are located in the +tut-install`/examples/cdi/simplegreeting/src/main/webapp/` directory.

    +
    +
    +

    The simple CSS file that is used by the Facelets page is in the +following location:

    +
    +
    +
    +
    tut-install/examples/cdi/simplegreeting/src/main/webapp/resources/css/default.css
    +
    +
    +
  4. +
+
+
+
+

24.2.3 Running the simplegreeting Example

+
+

You can use either NetBeans IDE or Maven to build, package, deploy, and +run the simplegreeting application.

+
+
+

The following topics are addressed here:

+
+ +
+

24.2.3.1 To Build, Package, and Run the simplegreeting Example Using +NetBeans IDE +^^^^^^^^^^^^^^^^^^^^^^^^^^^

+
+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    From the File menu, choose Open Project.

    +
  4. +
  5. +

    In the Open Project dialog box, navigate to:

    +
    +
    +
    tut-install/examples/cdi
    +
    +
    +
  6. +
  7. +

    Select the simplegreeting folder.

    +
  8. +
  9. +

    Click Open Project.

    +
  10. +
  11. +

    To modify the Printer.java file, perform these steps:

    +
  12. +
  13. +

    Expand the Source Packages node.

    +
  14. +
  15. +

    Expand the greetings node.

    +
  16. +
  17. +

    Double-click the Printer.java file.

    +
  18. +
  19. +

    In the editor, comment out the @Informal annotation:

    +
    +
    +
    @Inject
    +//@Informal
    +Greeting greeting;
    +
    +
    +
  20. +
  21. +

    Save the file.

    +
  22. +
  23. +

    In the Projects tab, right-click the simplegreeting project and +select Build.

    +
    +

    This command builds and packages the application into a WAR file, +simplegreeting.war, located in the target directory, and then +deploys it to GlassFish Server.

    +
    +
  24. +
+
+
+

24.2.3.2 To Build, Package, and Deploy the simplegreeting Example Using +Maven +^^^^^^^^^^^^^^^^^^^^^^^^^^^

+
+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    In a terminal window, go to:

    +
    +
    +
    tut-install/examples/cdi/simplegreeting/
    +
    +
    +
  4. +
  5. +

    Enter the following command to deploy the application:

    +
    +
    +
    mvn install
    +
    +
    +
    +

    This command builds and packages the application into a WAR file, +simplegreeting.war, located in the target directory, and then +deploys it to GlassFish Server.

    +
    +
  6. +
+
+
+

24.2.3.3 To Run the simplegreeting Example

+
+
    +
  1. +

    In a web browser, enter the following URL:

    +
    +
    +
    http://localhost:8080/simplegreeting
    +
    +
    +
    +

    The Simple Greeting page opens.

    +
    +
  2. +
  3. +

    Enter a name in the field.

    +
    +

    For example, suppose that you enter Duke.

    +
    +
  4. +
  5. +

    Click Say Hello.

    +
    +

    If you did not modify the Printer.java file, the following text string +appears below the button:

    +
    +
    +
    +
    Hi, Duke!
    +
    +
    +
    +

    If you commented out the @Informal annotation in the Printer.java +file, the following text string appears below the button:

    +
    +
    +
    +
    Hello, Duke.
    +
    +
    +
  6. +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+
+ + + \ No newline at end of file diff --git a/cdi-basicexamples003.html b/cdi-basicexamples003.html new file mode 100644 index 0000000..75205af --- /dev/null +++ b/cdi-basicexamples003.html @@ -0,0 +1,591 @@ + + + + + + The guessnumber-cdi CDI Example + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

24.3 The guessnumber-cdi CDI Example

+
+
+

The guessnumber-cdi example, somewhat more complex than the +simplegreeting example, illustrates the use of producer methods and of +session and application scope. The example is a game in which you try to +guess a number in fewer than ten attempts. It is similar to the +guessnumber-jsf example described in +Chapter 8, "Introduction to Facelets", +except that you can keep guessing until you get the right answer or +until you use up your ten attempts.

+
+
+

The example includes four source files, a Facelets page and template, +and configuration files. The configuration files and the template are +the same as those used for the simplegreeting example.

+
+
+

The following topics are addressed here:

+
+ +
+

24.3.1 The guessnumber-cdi Source Files

+
+

The four source files for the guessnumber-cdi example are

+
+
+
    +
  • +

    The @MaxNumber qualifier interface

    +
  • +
  • +

    The @Random qualifier interface

    +
  • +
  • +

    The Generator managed bean, which defines producer methods

    +
  • +
  • +

    The UserNumberBean managed bean

    +
  • +
+
+
+

The source files are located in the +tut-install`/examples/cdi/guessnumber-cdi/src/main/java/javaeetutorial/guessnumber` +directory.

+
+
+

24.3.1.1 The @MaxNumber and @Random Qualifier Interfaces

+
+

The @MaxNumber qualifier interface is defined as follows:

+
+
+
+
package guessnumber;
+
+import java.lang.annotation.Documented;
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+import javax.inject.Qualifier;
+
+@Target({TYPE, METHOD, PARAMETER, FIELD})
+@Retention(RUNTIME)
+@Documented
+@Qualifier
+public @interface MaxNumber {
+}
+
+
+
+

The @Random qualifier interface is defined as follows:

+
+
+
+
package guessnumber;
+
+import java.lang.annotation.Documented;
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+import javax.inject.Qualifier;
+
+@Target({TYPE, METHOD, PARAMETER, FIELD})
+@Retention(RUNTIME)
+@Documented
+@Qualifier
+public @interface Random {
+}
+
+
+
+
+

24.3.1.2 The Generator Managed Bean

+
+

The Generator managed bean contains the two producer methods for the +application. The bean has the @ApplicationScoped annotation to specify +that its context extends for the duration of the user’s interaction with +the application:

+
+
+
+
package guessnumber;
+
+import java.io.Serializable;
+import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.inject.Produces;
+
+@ApplicationScoped
+public class Generator implements Serializable {
+
+    private static final long serialVersionUID = -7213673465118041882L;
+
+    private final java.util.Random random =
+        new java.util.Random( System.currentTimeMillis() );
+
+    private final int maxNumber = 100;
+
+    java.util.Random getRandom() {
+        return random;
+    }
+
+    @Produces @Random int next() {
+        return getRandom().nextInt(maxNumber + 1);
+    }
+
+    @Produces @MaxNumber int getMaxNumber() {
+        return maxNumber;
+    }
+
+}
+
+
+
+
+

24.3.1.3 The UserNumberBean Managed Bean

+
+

The UserNumberBean managed bean, the managed bean for the JavaServer +Faces application, provides the basic logic for the game. This bean does +the following:

+
+
+
    +
  • +

    Implements setter and getter methods for the bean fields

    +
  • +
  • +

    Injects the two qualifier objects

    +
  • +
  • +

    Provides a reset method that allows you to begin a new game after +you complete one

    +
  • +
  • +

    Provides a check method that determines whether the user has guessed +the number

    +
  • +
  • +

    Provides a validateNumberRange method that determines whether the +user’s input is correct

    +
  • +
+
+
+

The bean is defined as follows:

+
+
+
+
package guessnumber;
+
+import java.io.Serializable;
+import javax.annotation.PostConstruct;
+import javax.enterprise.context.SessionScoped;
+import javax.enterprise.inject.Instance;
+import javax.faces.application.FacesMessage;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIInput;
+import javax.faces.context.FacesContext;
+import javax.inject.Inject;
+import javax.inject.Named;
+
+@Named
+@SessionScoped
+public class UserNumberBean implements Serializable {
+
+    private static final long serialVersionUID = -7698506329160109476L;
+
+    private int number;
+    private Integer userNumber;
+    private int minimum;
+    private int remainingGuesses;
+
+    @MaxNumber
+    @Inject
+    private int maxNumber;
+
+    private int maximum;
+
+    @Random
+    @Inject
+    Instance<Integer> randomInt;
+
+    public UserNumberBean() {
+    }
+
+    public int getNumber() {
+        return number;
+    }
+
+    public void setUserNumber(Integer user_number) {
+        userNumber = user_number;
+    }
+
+    public Integer getUserNumber() {
+        return userNumber;
+    }
+
+    public int getMaximum() {
+        return (this.maximum);
+    }
+
+    public void setMaximum(int maximum) {
+        this.maximum = maximum;
+    }
+
+    public int getMinimum() {
+        return (this.minimum);
+    }
+
+    public void setMinimum(int minimum) {
+        this.minimum = minimum;
+    }
+
+    public int getRemainingGuesses() {
+        return remainingGuesses;
+    }
+
+    public String check() throws InterruptedException {
+        if (userNumber > number) {
+            maximum = userNumber - 1;
+        }
+        if (userNumber < number) {
+            minimum = userNumber + 1;
+        }
+        if (userNumber == number) {
+            FacesContext.getCurrentInstance().addMessage(null,
+                new FacesMessage("Correct!"));
+        }
+        remainingGuesses--;
+        return null;
+    }
+
+    @PostConstruct
+    public void reset() {
+        this.minimum = 0;
+        this.userNumber = 0;
+        this.remainingGuesses = 10;
+        this.maximum = maxNumber;
+        this.number = randomInt.get();
+    }
+
+    public void validateNumberRange(FacesContext context,
+                                    UIComponent toValidate,
+                                    Object value) {
+        int input = (Integer) value;
+
+        if (input < minimum || input > maximum) {
+            ((UIInput) toValidate).setValid(false);
+
+            FacesMessage message = new FacesMessage("Invalid guess");
+            context.addMessage(toValidate.getClientId(context), message);
+        }
+    }
+}
+
+
+
+
+
+

24.3.2 The Facelets Page

+
+

This example uses the same template that the simplegreeting example +uses. The index.xhtml file, however, is more complex.

+
+
+
+
<?xml version='1.0' encoding='UTF-8' ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en"
+      xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
+      xmlns:h="http://xmlns.jcp.org/jsf/html">
+    <ui:composition template="/template.xhtml">
+
+        <ui:define name="title">Guess My Number</ui:define>
+        <ui:define name="head">Guess My Number</ui:define>
+        <ui:define name="content">
+            <h:form id="GuessMain">
+                <div style="color: black; font-size: 24px;">
+                    <p>I'm thinking of a number from
+                    <span style="color: blue">#{userNumberBean.minimum}</span>
+                    to
+                    <span style="color: blue">#{userNumberBean.maximum}</span>.
+                    You have
+                    <span style="color: blue">
+                        #{userNumberBean.remainingGuesses}
+                    </span>
+                    guesses.</p>
+                </div>
+                <h:panelGrid border="0" columns="5" style="font-size: 18px;">
+                    <h:outputLabel for="inputGuess">Number:</h:outputLabel>
+                    <h:inputText id="inputGuess"
+                                 value="#{userNumberBean.userNumber}"
+                                 required="true" size="3"
+disabled="#{userNumberBean.number eq userNumberBean.userNumber or userNumberBean.remainingGuesses le 0}"
+                               validator="#{userNumberBean.validateNumberRange}">
+                    </h:inputText>
+                    <h:commandButton id="GuessButton" value="Guess"
+                                     action="#{userNumberBean.check}"
+disabled="#{userNumberBean.number eq userNumberBean.userNumber or userNumberBean.remainingGuesses le 0}"/>
+                    <h:commandButton id="RestartButton" value="Reset"
+                                     action="#{userNumberBean.reset}"
+                                     immediate="true" />
+                    <h:outputText id="Higher" value="Higher!"
+rendered="#{userNumberBean.number gt userNumberBean.userNumber and userNumberBean.userNumber ne 0}"
+                                  style="color: #d20005"/>
+                    <h:outputText id="Lower" value="Lower!"
+rendered="#{userNumberBean.number lt userNumberBean.userNumber and userNumberBean.userNumber ne 0}"
+                                  style="color: #d20005"/>
+                </h:panelGrid>
+                <div style="color: #d20005; font-size: 14px;">
+                    <h:messages id="messages" globalOnly="false"/>
+                </div>
+            </h:form>
+        </ui:define>
+
+    </ui:composition>
+</html>
+
+
+
+

The Facelets page presents the user with the minimum and maximum values +and the number of guesses remaining. The user’s interaction with the +game takes place within the panelGrid table, which contains an input +field, Guess and Reset buttons, and a field that appears if the guess is +higher or lower than the correct number. Every time the user clicks the +Guess button, the userNumberBean.check method is called to reset the +maximum or minimum value or, if the guess is correct, to generate a +FacesMessage to that effect. The method that determines whether each +guess is valid is userNumberBean.validateNumberRange.

+
+
+
+

24.3.3 Running the guessnumber-cdi Example

+
+

You can use either NetBeans IDE or Maven to build, package, deploy, and +run the guessnumber-cdi application.

+
+
+

The following topics are addressed here:

+
+ +
+

24.3.3.1 To Build, Package, and Deploy the guessnumber-cdi Example Using +NetBeans IDE +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

+
+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    From the File menu, choose Open Project.

    +
  4. +
  5. +

    In the Open Project dialog box, navigate to:

    +
    +
    +
    tut-install/examples/cdi
    +
    +
    +
  6. +
  7. +

    Select the guessnumber-cdi folder.

    +
  8. +
  9. +

    Click Open Project.

    +
  10. +
  11. +

    In the Projects tab, right-click the guessnumber-cdi project and +select Build.

    +
    +

    This command builds and packages the application into a WAR file, +guessnumber-cdi.war, located in the target directory, and then +deploys it to GlassFish Server.

    +
    +
  12. +
+
+
+

24.3.3.2 To Build, Package, and Deploy the guessnumber-cdi Example Using +Maven +^^^^^^^^^^^^^^^^^^^^^^^^^^

+
+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    In a terminal window, go to:

    +
    +
    +
    tut-install/examples/cdi/guessnumber-cdi/
    +
    +
    +
  4. +
  5. +

    Enter the following command to deploy the application:

    +
    +
    +
    mvn install
    +
    +
    +
    +

    This command builds and packages the application into a WAR file, +guessnumber-cdi.war, located in the target directory, and then +deploys it to GlassFish Server.

    +
    +
  6. +
+
+
+

24.3.3.3 To Run the guessnumber Example

+
+
    +
  1. +

    In a web browser, enter the following URL:

    +
    +
    +
    http://localhost:8080/guessnumber-cdi
    +
    +
    +
    +

    The Guess My Number page opens.

    +
    +
  2. +
  3. +

    On the Guess My Number page, enter a number in the Number field and +click Guess.

    +
    +

    The minimum and maximum values are modified, along with the remaining +number of guesses.

    +
    +
  4. +
  5. +

    Keep guessing numbers until you get the right answer or run out of +guesses.

    +
    +

    If you get the right answer or run out of guesses, the input field and +Guess button are grayed out.

    +
    +
  6. +
  7. +

    Click Reset to play the game again with a new random number.

    +
  8. +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+
+ + + \ No newline at end of file diff --git a/concurrency-utilities.html b/concurrency-utilities.html new file mode 100644 index 0000000..29fc34b --- /dev/null +++ b/concurrency-utilities.html @@ -0,0 +1,120 @@ + + + + + + Concurrency Utilities for Java EE + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

56 Concurrency Utilities for Java EE

+
+
+

This chapter describes Concurrency Utilities for Java EE, which are +specified by JSR 236.

+
+
+

This chapter covers the following topics:

+
+ +
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/concurrency-utilities001.html b/concurrency-utilities001.html new file mode 100644 index 0000000..92eeee8 --- /dev/null +++ b/concurrency-utilities001.html @@ -0,0 +1,157 @@ + + + + + + Concurrency Basics + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

56.1 Concurrency Basics

+
+
+

Concurrency is the concept of executing two or more tasks at the same +time (in parallel). Tasks may include methods (functions), parts of a +program, or even other programs. With current computer architectures, +support for multiple cores and multiple processors in a single CPU is +very common.

+
+
+

The Java Platform has always offered support for concurrent programming, +which was the basis for implementing many of the services offered by +Java EE containers. At Java SE 5, additional high-level API support for +concurrency was provided by the java.util.concurrent package.

+
+
+

Prior to Java EE 7, there were no specific APIs that allowed enterprise +developers to use concurrency utilities in a safely standard manner. The +Java EE web and EJB containers instantiate objects using +container-managed thread pools. Therefore, using Java SE concurrent APIs +to instantiate Thread objects was strongly discouraged. If a developer +creates a new (non-managed) Thread object, the container could not +guarantee that other Java EE platform services (for example, +transactions and security) would be part of this Thread.

+
+
+

56.1.1 Threads and Processes

+
+

The two main concurrency concepts are processes and threads.

+
+
+

Processes are primarily associated with applications running on the +operating system (OS). A process has specific runtime resources to +interact with the underlying OS and allocate other resources, such as +its own memory, just as the JVM process does. A JVM is in fact a +process.

+
+
+

The Java programming language and platform are primarily concerned with +threads.

+
+
+

Threads share some features with processes, since both consume resources +from the OS or the execution environment. But threads are easier to +create and consume many fewer resources than a process.

+
+
+

Because threads are so lightweight, any modern CPU that has a couple of +cores and a few gigabytes of RAM can handle thousands of threads in a +single JVM process. The precise number of threads will depend on the +combined output of the CPU, OS, and RAM available, as well as on correct +configuration (tuning) of the JVM.

+
+
+

Although concurrent programming solves many problems and can improve +performance for most applications, there are a number of situations +where multiple execution lines (threads or processes) can cause major +problems. These situations include the following:

+
+
+
    +
  • +

    Deadlocks

    +
  • +
  • +

    Thread starvation

    +
  • +
  • +

    Concurrent accessing of shared resources

    +
  • +
  • +

    Situations when the program generates incorrect data

    +
  • +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/concurrency-utilities002.html b/concurrency-utilities002.html new file mode 100644 index 0000000..7cb2626 --- /dev/null +++ b/concurrency-utilities002.html @@ -0,0 +1,133 @@ + + + + + + Main Components of the Concurrency Utilities + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

56.2 Main Components of the Concurrency Utilities

+
+
+

Concurrent resources are managed objects that provide concurrency +capabilities to Java EE applications. In GlassFish Server, you configure +concurrent resources and then make them available for use by application +components such as servlets and enterprise beans. Concurrent resources +are accessed through JNDI lookup or resource injection.

+
+
+

The primary components of the concurrency utilities are as follows.

+
+
+
    +
  • +

    ManagedExecutorService: A managed executor service is used by +applications to execute submitted tasks asynchronously. Tasks are +executed on threads that are started and managed by the container. The +context of the container is propagated to the thread executing the task.

    +
    +

    For example, by using an ManagedExecutorService.submit() call, a task, +such as the GenerateReportTask, could be submitted to execute at a later +time and then, by using the Future object callback, retrieve the +result when it becomes available.

    +
    +
  • +
  • +

    ManagedScheduledExecutorService: A managed scheduled executor +service is used by applications to execute submitted tasks +asynchronously at specific times. Tasks are executed on threads that are +started and managed by the container. The context of the container is +propagated to the thread executing the task. The API provides the +scheduling functionality that allows users to set a specific date/time +for the Task execution programmatically in the application.

    +
  • +
  • +

    ContextService: A context service is used to create dynamic proxy +objects that capture the context of a container and enable applications +to run within that context at a later time or be submitted to a Managed +Executor Service. The context of the container is propagated to the +thread executing the task.

    +
  • +
  • +

    ManagedThreadFactory: A managed thread factory is used by +applications to create managed threads. The threads are started and +managed by the container. The context of the container is propagated to +the thread executing the task. This object can also be used to provide +custom factories for specific use cases (with custom Threads) and, for +example, set specific/proprietary properties to these objects.

    +
  • +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/concurrency-utilities003.html b/concurrency-utilities003.html new file mode 100644 index 0000000..dfaac54 --- /dev/null +++ b/concurrency-utilities003.html @@ -0,0 +1,133 @@ + + + + + + Concurrency and Transactions + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

56.3 Concurrency and Transactions

+
+
+

The most basic operations for transactions are commit and rollback, but, +in a distributed environment with concurrent processing, it can be +difficult to guarantee that commit or rollback operations will be +successfully processed, and the transaction can be spread among +different threads, CPU cores, physical machines, and networks.

+
+
+

Ensuring that a rollback operation will successfully execute in such a +scenario is crucial. Concurrency Utilities relies on the Java +Transaction API (JTA) to implement and support transactions on its +components through javax.transaction.UserTransaction, allowing +application developers to explicitly manage transaction boundaries. More +information is available in the JTA specification.

+
+
+

Optionally, context objects can begin, commit, or roll back +transactions, but these objects cannot enlist in parent component +transactions.

+
+
+

The following code snippet illustrates a Runnable task that obtains a +UserTransaction and then starts and commits a transaction while +interacting with other transactional components, such as an enterprise +bean and a database:

+
+
+
+
public class MyTransactionalTask implements Runnable {
+
+   UserTransaction ut = ... // obtained through JNDI or injection
+
+   public void run() {
+
+       // Start a transaction
+       ut.begin();
+
+       // Invoke a Service or an EJB
+       myEJB.businessMethod();
+
+       // Update a database entity using an XA JDBC driver
+       myEJB.updateCustomer(customer);
+
+       // Commit the transaction
+       ut.commit();
+
+   }
+}
+
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/concurrency-utilities004.html b/concurrency-utilities004.html new file mode 100644 index 0000000..7435045 --- /dev/null +++ b/concurrency-utilities004.html @@ -0,0 +1,91 @@ + + + + + + Concurrency and Security + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

56.4 Concurrency and Security

+
+
+

Concurrency Utilities for Java EE defers most security decisions to the +application server implementation. If, however, the container supports a +security context, that context can be propagated to the thread of +execution. The ContextService can support several runtime behaviors, +and the security attribute, if enabled, will propagate the container +security principal.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/concurrency-utilities005.html b/concurrency-utilities005.html new file mode 100644 index 0000000..168f0d1 --- /dev/null +++ b/concurrency-utilities005.html @@ -0,0 +1,456 @@ + + + + + + The jobs Concurrency Example + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

56.5 The jobs Concurrency Example

+
+
+

This section describes a very basic example that shows how to use some +of the basic concurrency features in an enterprise application. +Specifically, this example uses one of the main components of +Concurrency Utilities for Java EE, a Managed Executor Service.

+
+
+

The example demonstrates a scenario where a RESTful web service, exposed +as a public API, is used to submit generic jobs for execution. These +jobs are processed in the background. Each job prints a "Starting" and a +"Finished" message at the beginning and end of the execution. Also, to +simulate background processing, each job takes 10 seconds to execute.

+
+
+

The RESTful service exposes two methods:

+
+
+
    +
  • +

    /token: Exposed as a GET method that registers and returns valid API +tokens

    +
  • +
  • +

    /process: Exposed as a POST method that receives a jobID query +parameter, which is the identifier for the job to be executed, and a +custom HTTP header named X-REST-API-Key, which will be used internally +to validate requests with tokens

    +
  • +
+
+
+

The token is used to differentiate the Quality of Service (QoS) offered +by the API. Users that provide a token in a service request can process +multiple concurrent jobs. However, users that do not provide a token can +process only one job at a time. Since every job takes 10 seconds to +execute, users that provide no token will be able to execute only one +call to the service every 10 seconds. For users that provide a token, +processing will be much faster.

+
+
+

This differentiation is made possible by the use of two different +Managed Executor Services, one for each type of request.

+
+
+

56.5.1 Running the jobs Example

+
+

After configuring GlassFish Server by adding two Managed Executor +Services, you can use either NetBeans IDE or Maven to build, package, +deploy, and run the jobs example.

+
+
+

The following topics are addressed here:

+
+ +
+

56.5.1.1 To Configure GlassFish Server for the Basic Concurrency Example

+
+

To configure GlassFish Server, follow these steps.

+
+
+
    +
  1. +

    Open the Administration Console at http://localhost:4848.

    +
  2. +
  3. +

    Expand the Resources node.

    +
  4. +
  5. +

    Expand the Concurrent Resources node.

    +
  6. +
  7. +

    Click Managed Executor Services.

    +
  8. +
  9. +

    On the Managed Executor Services page, click New to open the New +Managed Executor Services page.

    +
  10. +
  11. +

    In the JNDI Name field, enter MES_High to create the high-priority +Managed Executor Service. Use the following settings (keep the default +values for other settings):

    +
    +
      +
    • +

      Thread Priority: 10

      +
    • +
    • +

      Core Size: 2

      +
    • +
    • +

      Maximum Pool Size: 5

      +
    • +
    • +

      Task Queue Capacity: 2

      +
    • +
    +
    +
  12. +
  13. +

    Click OK.

    +
  14. +
  15. +

    On the On the Managed Executor Services page, click New again.

    +
  16. +
  17. +

    In the JNDI Name field, enter MES_Low to create the low-priority +Managed Executor Service. Use the following settings (keep the default +values for other settings):

    +
    +
      +
    • +

      Thread Priority: 1

      +
    • +
    • +

      Core Size: 1

      +
    • +
    • +

      Maximum Pool Size: 1

      +
    • +
    • +

      Task Queue Capacity: 0

      +
    • +
    +
    +
  18. +
  19. +

    Click OK.

    +
  20. +
+
+
+

56.5.1.2 To Build, Package, and Deploy the jobs Example Using NetBeans +IDE +^^^^^^^^^^^^^^^^^^^^^^^^^^

+
+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    From the File menu, choose Open Project.

    +
  4. +
  5. +

    In the Open Project dialog box, navigate to:

    +
    +
    +
    tut-install/examples/concurrency
    +
    +
    +
  6. +
  7. +

    Select the jobs folder.

    +
  8. +
  9. +

    Click Open Project.

    +
  10. +
  11. +

    In the Projects tab, right-click the jobs project and select +Build.

    +
    +

    This command builds and deploys the application.

    +
    +
  12. +
+
+
+
+

56.5.1.3 To Build, Package, and Deploy the jobs Example Using Maven

+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    In a terminal window, go to:

    +
    +
    +
    tut-install/examples/concurrency/jobs
    +
    +
    +
  4. +
  5. +

    Enter the following command to build and deploy the application:

    +
    +
    +
    mvn install
    +
    +
    +
  6. +
+
+
+
+

56.5.1.4 To Run the jobs Example and Submit Jobs with Low Priority

+
+

To run the example as a user who submits jobs with low priority, follow +these steps:

+
+
+
    +
  1. +

    In a web browser, enter the following URL:

    +
    +
    +
    http://localhost:8080/jobs
    +
    +
    +
  2. +
  3. +

    In the Jobs Client page, enter the value 1 in the Enter a JobID +field, enter nothing in the Enter a Token field, then click Submit Job.

    +
    +

    The following message should be displayed at the bottom of the page:

    +
    +
    +
    +
    Job 1 successfully submitted
    +
    +
    +
    +

    The server log includes the following messages:

    +
    +
    +
    +
    INFO:   Invalid or missing token!
    +INFO:   Task started LOW-1
    +INFO:   Job 1 successfully submitted
    +INFO:   Task finished LOW-1
    +
    +
    +
    +

    You submitted a job with low priority. This means that you cannot submit +another job for 10 seconds. If you try to do so, the RESTful API will +return a service unavailable (HTTP 503) response and the following +message will be displayed at the bottom of the page:

    +
    +
    +
    +
    Job 2 was NOT submitted
    +
    +
    +
    +

    The server log will include the following messages:

    +
    +
    +
    +
    INFO:   Invalid or missing token!
    +INFO:   Job 1 successfully submitted
    +INFO:   Task started LOW-1
    +INFO:   Invalid or missing token!
    +INFO:   Job 2 was NOT submitted
    +INFO:   Task finished LOW-1
    +
    +
    +
  4. +
+
+
+
+

56.5.1.5 To Run the jobs Example and Submit Jobs with High Priority

+
+

To run the example as a user who submits jobs with high priority, follow +these steps:

+
+
+
    +
  1. +

    In a web browser, enter the following URL:

    +
    +
    +
    http://localhost:8080/jobs
    +
    +
    +
  2. +
  3. +

    In the Jobs Client page, enter a value of one to ten digits in the +Enter a JobID field.

    +
  4. +
  5. +

    Click the here link on the line "Get a token here" to get a token. +The page that displays the token will open in a new tab.

    +
  6. +
  7. +

    Copy the token and return to the Jobs Client page.

    +
  8. +
  9. +

    Paste the token in the Enter a Token field, then click Submit Job.

    +
    +

    A message like the following should be displayed at the bottom of the +page:

    +
    +
    +
    +
    Job 11 successfully submitted
    +
    +
    +
    +

    The server log includes the following messages:

    +
    +
    +
    +
    INFO:   Token accepted. Execution with high priority.
    +INFO:   Task started HIGH-11
    +INFO:   Job 11 successfully submitted
    +INFO:   Task finished HIGH-11
    +
    +
    +
    +

    You submitted a job with high priority. This means that you can submit +multiple jobs, each with a token, and not face the 10 second per job +restriction that the low priority submitters face. If you submit 3 jobs +with tokens in rapid succession, messages like the following will be +displayed at the bottom of the page:

    +
    +
    +
    +
    Job 1 was submitted
    +Job 2 was submitted
    +Job 3 was submitted
    +
    +
    +
    +

    The server log will include the following messages:

    +
    +
    +
    +
    INFO:   Token accepted. Execution with high priority.
    +INFO:   Task started HIGH-1
    +INFO:   Job 1 successfully submitted
    +INFO:   Token accepted. Execution with high priority.
    +INFO:   Task started HIGH-2
    +INFO:   Job 2 successfully submitted
    +INFO:   Task finished HIGH-1
    +INFO:   Token accepted. Execution with high priority.
    +INFO:   Task started HIGH-3
    +INFO:   Job 3 successfully submitted
    +INFO:   Task finished HIGH-2
    +INFO:   Task finished HIGH-3
    +
    +
    +
  10. +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+
+ + + \ No newline at end of file diff --git a/concurrency-utilities006.html b/concurrency-utilities006.html new file mode 100644 index 0000000..d4c9507 --- /dev/null +++ b/concurrency-utilities006.html @@ -0,0 +1,335 @@ + + + + + + The taskcreator Concurrency Example + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

56.6 The taskcreator Concurrency Example

+
+
+

The taskcreator example demonstrates how to use Concurrency Utilities +for Java EE to run tasks immediately, periodically, or after a fixed +delay. This example provides a JavaServer Faces interface that enables +users to submit tasks to be executed and displays information messages +for each task. The example uses the Managed Executor Service to run +tasks immediately and the Managed Scheduled Executor Service to run +tasks periodically or after a fixed delay. (See +Main Components of the +Concurrency Utilities for information about these services.)

+
+
+

The taskcreator example consists of the following components.

+
+
+
    +
  • +

    A JavaServer Faces page (index.xhtml) that contains three elements: +a form to submit tasks, a task execution log, and a form to cancel +periodic tasks. This page submits Ajax requests to create and cancel +tasks. This page also receives WebSocket messages, using JavaScript code +to update the task execution log.

    +
  • +
  • +

    A CDI managed bean (TaskCreatorBean) that processes the requests +from the JavaServer Faces page. This bean invokes the methods in +TaskEJB to submit new tasks and to cancel periodic tasks.

    +
  • +
  • +

    An enterprise bean (TaskEJB) that obtains executor service instances +using resource injection and submits tasks for execution. This bean is +also a JAX-RS web service endpoint. The tasks send information messages +to this endpoint.

    +
  • +
  • +

    A WebSocket endpoint (InfoEndpoint) that the enterprise bean uses to +send information messages to the clients.

    +
  • +
  • +

    A task class (Task) that implements the Runnable interface. The +run method in this class sends information messages to the web service +endpoint in TaskEJB and sleeps for 1.5 seconds.

    +
  • +
+
+
+

Figure 56-1 shows the architecture of the taskcreator +example.

+
+
+

Figure 56-1 Architecture of the taskcreator Example

+
+ +
+

The TaskEJB class obtains the default executor service objects from +the application server as follows:

+
+
+
+
@Resource(name="java:comp/DefaultManagedExecutorService")
+ManagedExecutorService mExecService;
+
+@Resource(name="java:comp/DefaultManagedScheduledExecutorService")
+ManagedScheduledExecutorService sExecService;
+
+
+
+

The submitTask method in TaskEJB uses these objects to submit tasks +for execution as follows:

+
+
+
+
public void submitTask(Task task, String type) {
+    /* Use the managed executor objects from the app server */
+    switch (type) {
+        case "IMMEDIATE":
+            mExecService.submit(task);
+            break;
+        case "DELAYED":
+            sExecService.schedule(task, 3, TimeUnit.SECONDS);
+            break;
+        case "PERIODIC":
+            ScheduledFuture<?> fut;
+            fut = sExecService.scheduleAtFixedRate(task, 0, 8,
+                    TimeUnit.SECONDS);
+            periodicTasks.put(task.getName(), fut);
+            break;
+    }
+}
+
+
+
+

For periodic tasks, TaskEJB keeps a reference to the ScheduledFuture +object, so that the user can cancel the task at any time.

+
+
+

56.6.1 Running the taskcreator Example

+
+

This section describes how to build, package, deploy, and run the +taskcreator example using NetBeans IDE or Maven.

+
+
+

The following topics are addressed here:

+
+ +
+

56.6.1.1 To Build, Package, and Deploy the taskcreator Example Using +NetBeans IDE +^^^^^^^^^^^^^^^^^^^^^^^^^^^

+
+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    From the File menu, choose Open Project.

    +
  4. +
  5. +

    In the Open Project dialog box, navigate to:

    +
    +
    +
    tut-install/examples/concurrency
    +
    +
    +
  6. +
  7. +

    Select the taskcreator folder.

    +
  8. +
  9. +

    Click Open Project.

    +
  10. +
  11. +

    In the Projects tab, right-click the taskcreator project and +select Build.

    +
    +

    This command builds and deploys the application.

    +
    +
  12. +
+
+
+

56.6.1.2 To Build, Package, and Deploy the taskcreator Example Using +Maven +^^^^^^^^^^^^^^^^^^^^^^^^^^

+
+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    In a terminal window, go to:

    +
    +
    +
    tut-install/examples/concurrency/taskcreator
    +
    +
    +
  4. +
  5. +

    Enter the following command to build and deploy the application:

    +
    +
    +
    mvn install
    +
    +
    +
  6. +
+
+
+

56.6.1.3 To Run the taskcreator Example

+
+
    +
  1. +

    Open the following URL in a web browser:

    +
    +
    +
    http://localhost:8080/taskcreator/
    +
    +
    +
    +

    The page contains a form to submit tasks, a task execution log, and a +form to cancel periodic tasks.

    +
    +
  2. +
  3. +

    Select the Immediate task type, enter a task name, and click the +Submit button. Messages like the following appear in the task execution +log:

    +
    +
    +
    12:40:47 - IMMEDIATE Task TaskA finished
    +12:40:45 - IMMEDIATE Task TaskA started
    +
    +
    +
  4. +
  5. +

    Select the Delayed (3 sec) task type, enter a task name, and click +the Submit button. Messages like the following appear in the task +execution log:

    +
    +
    +
    12:43:26 - DELAYED Task TaskB finished
    +12:43:25 - DELAYED Task TaskB started
    +12:43:22 - DELAYED Task TaskB submitted
    +
    +
    +
  6. +
  7. +

    Select the Periodic (8 sec) task type, enter a task name, and click +the Submit button. Messages like the following appear in the task +execution log:

    +
    +
    +
    12:45:25 - PERIODIC Task TaskC finished run #2
    +12:45:23 - PERIODIC Task TaskC started run #2
    +12:45:17 - PERIODIC Task TaskC finished run #1
    +12:45:15 - PERIODIC Task TaskC started run #1
    +
    +
    +
    +

    You can add more than one periodic task. To cancel a periodic task, +select it from the form and click Cancel Task.

    +
    +
  8. +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+
+ + + \ No newline at end of file diff --git a/concurrency-utilities007.html b/concurrency-utilities007.html new file mode 100644 index 0000000..799404a --- /dev/null +++ b/concurrency-utilities007.html @@ -0,0 +1,108 @@ + + + + + + Further Information about the Concurrency Utilities + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

56.7 Further Information about the Concurrency Utilities

+
+
+

For more information about concurrency, see

+
+
+
    +
  • +

    Concurrency Utilities for Java EE specification:

    +
    +

    http://jcp.org/en/jsr/detail?id=236

    +
    +
  • +
  • +

    Concurrency Utilities specification:

    +
    +

    http://jcp.org/en/jsr/detail?id=166

    +
    +
  • +
  • +

    Concurrency Lesson in The Java Tutorials:

    +
    +

    http://docs.oracle.com/javase/tutorial/essential/concurrency/

    +
    +
  • +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/connectorexample.html b/connectorexample.html new file mode 100644 index 0000000..d2a1e80 --- /dev/null +++ b/connectorexample.html @@ -0,0 +1,105 @@ + + + + + + The Resource Adapter Examples + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

53 The Resource Adapter Examples

+
+
+

This chapter describes two examples that demonstrate how to use resource +adapters in Java EE applications and how to implement simple resource +adapters.

+
+
+

The following topics are addressed here:

+
+ +
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/connectorexample001.html b/connectorexample001.html new file mode 100644 index 0000000..3f86063 --- /dev/null +++ b/connectorexample001.html @@ -0,0 +1,92 @@ + + + + + + Overview of the Resource Adapter Examples + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

53.1 Overview of the Resource Adapter Examples

+
+
+

The trading example shows how to use a simple custom client interface +to connect to an EIS from a web application. The resource adapter in +this example implements the outbound contract and the custom client +interface. The traffic example shows how to use a message-driven bean +(MDB) to process traffic information updates from an EIS. The resource +adapter in this example implements the inbound and work management +contracts.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/connectorexample002.html b/connectorexample002.html new file mode 100644 index 0000000..5a0892a --- /dev/null +++ b/connectorexample002.html @@ -0,0 +1,607 @@ + + + + + + The trading Example + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

53.2 The trading Example

+
+
+

The trading example demonstrates how to implement and use a simple +outbound resource adapter that submits requests to a legacy EIS using a +TCP socket. The example demonstrates the scenario in +Figure 53-1 and consists of the following modules:

+
+
+
    +
  • +

    trading-eis: A Java SE program that simulates a legacy EIS

    +
  • +
  • +

    trading-rar: The outbound resource adapter implementation

    +
  • +
  • +

    trading-war: A web application that uses the resource adapter

    +
  • +
  • +

    trading-ear: An enterprise archive that contains the resource +adapter and the web application

    +
  • +
+
+
+

Figure 53-1 The trading Example

+
+ +
+

The trading-eis module is an auxiliary project that resembles a legacy +stock trading execution platform. It contains a Java SE program that +listens for trading requests in plain text on a TCP socket. The program +replies to trading requests with a status value, a confirmation number, +and the dollar amounts for the requested shares and fees. For example, a +request-response pair would look like this:

+
+
+
+
>> BUY 1000 ZZZZ MARKET
+<< EXECUTED #1234567 TOTAL 50400.00 FEE 252.00
+
+
+
+

The trading-rar module implements the outbound contract of the Java EE +Connector Architecture to submit requests and obtain responses from the +legacy stock trading execution platform. The trading-rar module +provides and implements a custom client interface for Java EE +applications to use. This interface is simpler than the Common Client +Interface (CCI).

+
+
+

The trading-war module is a web application with a JavaServer Faces +interface and a managed bean. This application enables clients to submit +trades to the EIS using the resource adapter provided by the +trading-rar module. The trading-war module uses the custom client +interface provided by the resource adapter to obtain connections to the +EIS.

+
+
+

53.2.1 Using the Outbound Resource Adapter

+
+

In most cases, Java EE application developers use outbound resource +adapters developed by a third party. Outbound resource adapters either +implement the Common Client Interface (CCI) or provide a custom +interface for applications to interact with the EIS. Outbound resource +adapters provide Java EE applications with the following elements:

+
+
+
    +
  • +

    Connection factories

    +
  • +
  • +

    Connection handles

    +
  • +
  • +

    Other interfaces and objects specific to the EIS domain

    +
  • +
+
+
+

Java EE applications obtain an instance of the connection factory via +resource injection and then use the factory object to obtain connection +handles to the EIS. The connection handles enable the application to +make requests and obtain information from the EIS.

+
+
+

The trading-rar module provides a custom client interface that +consists of the classes listed in Table 53-1.

+
+
+

+
+
+

Table 53-1 Classes and Interfaces in the javaeetutorial.trading.rar.api +Package

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
API ComponentDescription

TradeOrder

Represents a trade order for the EIS

TradeResponse

Represents a response from the EIS to a trade request

TradeConnection

+

Represents a connection handle to the EIS

+
+
+

Provides a method for applications to submit trades to the EIS

+

TradeConnectionFactory

Enables applications to obtain connection +handles to the EIS

TradeProcessingException

Indicates that a problem occurred +processing a trade request

+
+
+
+
+
+
+
+

The ResourceAccessBean managed bean in the trading-war module +configures a connection factory for the trading-rar resource adapter +by using the @ConnectionFactoryDefinition annotation as follows:

+
+
+
+
@Named
+@SessionScoped
+@ConnectionFactoryDefinition(
+    name = "java:comp/env/eis/TradeConnectionFactory",
+    interfaceName = "javaeetutorial.trading.rar.api.TradeConnectionFactory",
+    resourceAdapter = "#trading-rar",
+    minPoolSize = 5,
+    transactionSupport =
+            TransactionSupport.TransactionSupportLevel.NoTransaction
+)
+public class ResourceAccessBean implements Serializable { ... }
+
+
+
+

The name parameter specifies the JNDI name for the connection factory. +This example registers the connection factory in the java:comp scope. +You can use the ConnectionFactoryDefinition annotation to specify a +different scope, such as java:global, java:app, or java:module. +The AdministeredObjectDefinition annotation also enables you to +register administered connector objects in the JNDI namespace.

+
+
+

The interfaceName parameter specifies the interface implemented by the +connection factory included in the resource adapter. In this example, +this is a custom interface.

+
+
+

The resourceAdapter parameter specifies the name of the resource +adapter that contains the connection factory implementation. The # +prefix in #trading-rar indicates that trading-rar is an embedded +resource adapter that is bundled in the same EAR as this web +application.

+
+
+
+
+
+
+
+ +++ + + + + + +
+

Note:

+
+
+

You can also configure a connection factory for a previously deployed +outbound resource adapter using the administration commands from your +application server. However, this is a vendor-specific procedure.

+
+
+
+
+
+
+
+
+

The managed bean obtains a connection factory object using resource +injection as follows:

+
+
+
+
...
+public class ResourceAccessBean implements Serializable {
+    @Resource(lookup = "java:comp/env/eis/TradeConnectionFactory")
+    private TradeConnectionFactory connectionFactory;
+    ...
+}
+
+
+
+

The managed bean uses the connection factory to obtain connection +handles as follows:

+
+
+
+
TradeConnection connection = connectionFactory.getConnection();
+
+
+
+

The resource adapter returns a connection handle associated with a +physical connection to the EIS. Once a connection handle is available, +the managed bean submits a trade and obtains the response as follows:

+
+
+
+
TradeOrder order = new TradeOrder();
+order.setNShares(1000);
+order.setTicker(TradeOrder.Ticker.YYYY);
+order.setOrderType(TradeOrder.OrderType.BUY);
+order.setOrderClass(TradeOrder.OrderClass.MARKET);
+...
+try {
+    TradeResponse response = connection.submitOrder(order);
+    ...
+} catch (TradeProcessingException ex) { ... }
+
+
+
+
+

53.2.2 Implementing the Outbound Resource Adapter

+
+

The trading-rar module implements the outbound contract and a custom +client interface for the simple legacy stock trading platform EIS used +in this example. The architecture of the outbound resource adapter is +shown in Figure 53-2.

+
+
+

Figure 53-2 Architecture of the trading Example

+
+ +
+

The trading-rar module implements the interfaces listed in +Table 53-2.

+
+
+

+
+
+

Table 53-2 Interfaces Implemented in the trading-rar Module

+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PackageInterfaceDescription

javax.resource.spi

ResourceAdapter

Defines the lifecycle methods +of the resource adapter

javax.resource.spi

ManagedConnectionFactory

Defines a connection +factory that the connection manager from the application server uses to +obtain physical connections to the EIS

javax.resource.spi

ManagedConnection

Defines a physical +connection to the EIS that can be managed by the connection manager

trading.rar.api

TradeConnectionFactory

Defines a connection +factory that applications use to obtain connection handles

trading.rar.api

TradeConnection

Defines a connection handle that +applications use to interact with the EIS

+
+
+
+
+
+
+
+

When the trading-ear archive is deployed and a connection pool +resource is configured as described in Using the Outbound +Resource Adapter, the application server creates +TradeConnectionFactory objects that applications can obtain using +resource injection. The TradeConnectionFactory implementation +delegates creating connections to the connection manager provided by the +application server.

+
+
+

The connection manager uses the ManagedConnectionFactory +implementation to obtain physical connections to the EIS and maintains a +pool of active physical connections. When an application requests a +connection handle, the connection manager associates a connection from +the pool with a new connection handle that the application can use. +Connection pooling improves application performance and simplifies +resource adapter development.

+
+
+

For more details, see the code and the comments in the trading-rar +module.

+
+
+
+

53.2.3 Running the trading Example

+
+

You can use either NetBeans IDE or Maven to build, package, deploy, and +run the trading example.

+
+
+

The following topics are addressed here:

+
+ +
+

53.2.3.1 To Run the trading Example Using NetBeans IDE

+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    From the File menu, choose Open Project.

    +
  4. +
  5. +

    In the Open Project dialog box, navigate to:

    +
    +
    +
    tut-install/examples/connectors
    +
    +
    +
  6. +
  7. +

    Select the trading folder.

    +
  8. +
  9. +

    Click Open Project.

    +
  10. +
  11. +

    In the Projects tab, expand the trading node.

    +
  12. +
  13. +

    Right-click the trading-eis module and select Open Project.

    +
  14. +
  15. +

    Right-click the trading-eis project and select Run.

    +
    +

    The messages from the EIS appear in the Output tab:

    +
    +
    +
    +
    Trade execution server listening on port 4004.
    +
    +
    +
  16. +
  17. +

    Right-click the trading-ear project and select Build.

    +
    +

    This command packages the resource adapter and the web application in an +EAR file and deploys it to GlassFish Server.

    +
    +
  18. +
  19. +

    Open the following URL in a web browser:

    +
    +
    +
    http://localhost:8080/trading/
    +
    +
    +
    +

    The web interface enables you to connect to the EIS and submit trades. +The server log shows the requests from the web application and the call +sequence that provides connection handles from the resource adapter.

    +
    +
  20. +
  21. +

    Before undeploying the trading-ear application, close the +trading-eis application from the status bar.

    +
  22. +
+
+
+
+

53.2.3.2 To Run the trading Example Using Maven

+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    In a terminal window, go to:

    +
    +
    +
    tut-install/examples/connectors/trading/
    +
    +
    +
  4. +
  5. +

    Enter the following command:

    +
    +
    +
    mvn install
    +
    +
    +
    +

    This command builds and packages the resource adapter and the web +application into an EAR archive and deploys it to GlassFish Server.

    +
    +
  6. +
  7. +

    In the same terminal window, go to the trading-eis directory:

    +
    +
    +
    cd trading-eis
    +
    +
    +
  8. +
  9. +

    Enter the following command to run the trade execution platform:

    +
    +
    +
    mvn exec:java
    +
    +
    +
    +

    The messages from the EIS appear in the terminal window:

    +
    +
    +
    +
    Trade execution server listening on port 4004.
    +
    +
    +
  10. +
  11. +

    Open the following URL in a web browser:

    +
    +
    +
    http://localhost:8080/trading/
    +
    +
    +
    +

    The web interface enables you to connect to the EIS and submit trades. +The server log shows the requests from the web application and the call +sequence that provides connection handles from the resource adapter.

    +
    +
  12. +
  13. +

    Before undeploying the trading-ear application, press Ctrl+C on +the terminal window to close the trading-eis application.

    +
  14. +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+
+ + + \ No newline at end of file diff --git a/connectorexample003.html b/connectorexample003.html new file mode 100644 index 0000000..6e84836 --- /dev/null +++ b/connectorexample003.html @@ -0,0 +1,571 @@ + + + + + + The traffic Example + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

53.3 The traffic Example

+
+
+

The traffic example demonstrates how to implement and use a simple +inbound resource adapter that receives data from a legacy EIS using a +TCP socket.

+
+
+

The example is in the tut-install`/examples/connectors/traffic` +directory. See Chapter 2, "Using the +Tutorial Examples," for basic information on building and running +sample applications.

+
+
+

The example demonstrates the scenario in Figure 53-3 and +consists of the following modules:

+
+
+
    +
  • +

    traffic-eis: A Java SE program that simulates an EIS

    +
  • +
  • +

    traffic-rar: The inbound resource adapter implementation

    +
  • +
  • +

    traffic-ejb: A message-driven bean that is the endpoint for incoming +messages

    +
  • +
  • +

    traffic-war: A web application that displays information from the +message-driven bean

    +
  • +
  • +

    traffic-ear: An enterprise archive that contains the resource +adapter, the message-driven bean, and the web application

    +
  • +
+
+
+

Figure 53-3 The traffic Example

+
+ +
+

The traffic-eis module is an auxiliary project that resembles a legacy +traffic information system. It contains a Java SE program that sends +traffic status updates for several cities to any subscribed client. The +program sends the updates in JSON format over a TCP socket. For example, +a traffic update looks like this:

+
+
+
+
{"report":[
+    {"city":"City1", "access":"AccessA", "status":"GOOD"},
+    {"city":"City1", "access":"AccessB", "status":"CONGESTED"},
+    ...
+    {"city":"City5", "access":"AccessE", "status":"SLOW"}
+ ]}
+
+
+
+

The traffic-rar module implements the inbound contract of the Java EE +Connector Architecture. This module subscribes to the traffic +information system using the TCP port indicated by the configuration +provided by the MDB and invokes the methods of the MDB to process +traffic information updates.

+
+
+

The traffic-ejb module contains a message-driven bean that activates +the resource adapter with a configuration parameter (the TCP port to +subscribe to the traffic information system). The MDB contains a method +to process the traffic information updates. This method filters the +updates for a particular city and publishes the results to a Java +Message Service (JMS) topic.

+
+
+

The traffic-war module contains a message-driven bean that receives +filtered traffic information updates from the JMS topic asynchronously +and sends them to the clients using a WebSocket endpoint.

+
+
+

53.3.1 Using the Inbound Resource Adapter

+
+

In most cases, Java EE application developers use inbound resource +adapters developed by a third party. To use an inbound resource adapter, +a Java EE application includes a message-driven bean with the following +characteristics.

+
+
+
    +
  • +

    The MDB implements the business interface defined by the resource +adapter.

    +
  • +
  • +

    The MDB specifies configuration parameters to activate the resource +adapter.

    +
  • +
+
+
+

The business interface defined by the resource adapter is not specified +in the Java EE Connector Architecture; it is specific to the EIS.

+
+
+

The MDB in this example is defined as follows:

+
+
+
+
@MessageDriven(
+    activationConfig = {
+      @ActivationConfigProperty(propertyName = "port",
+                                propertyValue = "4008")
+    }
+)
+public class TrafficMdb implements TrafficListener { ... }
+
+
+
+

The TrafficListener interface is defined in the API package of the +resource adapter. The resource adapter requires the MDB to provide the +port property.

+
+
+

When the MDB is deployed, it activates the traffic-rar resource +adapter, which invokes the methods of the MDB to process traffic +information updates. Then the MDB filters the updates for a particular +city and publishes the results to a JMS topic.

+
+
+

In this particular example, the TrafficListener interface is empty. In +addition to this interface, the resource adapter provides the +TrafficCommand annotation and uses reflection to discover which +methods in the MDB are decorated with this annotation:

+
+
+
+
@MessageDriven(...)
+public class TrafficMdb implements TrafficListener {
+
+    @TrafficCommand(name="report", info="Process report")
+    public void processReport(String jsonReport) { ... }
+    ...
+}
+
+
+
+

This approach enables you to adapt the MDB to support new features in +the EIS without having to modify the TrafficListener interface or the +resource adapter module.

+
+
+
+

53.3.2 Implementing the Inbound Resource Adapter

+
+

The traffic-rar module implements the inbound resource adapter +contract from the Java EE Connector Architecture for the simple traffic +information system (EIS) used in this example. The architecture of the +inbound resource adapter is shown in Figure 53-4.

+
+
+

Figure 53-4 Architecture of the traffic Example

+
+ +
+

The traffic-rar module implements the interfaces listed in +Table 53-3.

+
+
+

+
+
+

Table 53-3 Interfaces Implemented in the traffic-rar Module

+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + +
PackageInterfaceDescription

javax.resource.spi

ResourceAdapter

Defines the lifecycle methods +of the resource adapter.

javax.resource.spi

ActivationSpec

Defines the configuration +parameters that the MDB provides to activate the inbound resource +adapter.

javax.resource.spi

Work

The traffic service subscriber implements +this interface from the work management contract to wait for traffic +updates on a separate thread.

+
+
+
+
+
+
+
+

When an MDB activates the inbound resource adapter, the container +invokes the endpointActivation method in the TrafficResourceAdapter +class:

+
+
+
+
@Connector(...)
+public class TrafficResourceAdapter implements ResourceAdapter, Serializable {
+    ...
+    @Override
+    public void endpointActivation(MessageEndpointFactory endpointFactory,
+                                   ActivationSpec spec)
+                                   throws ResourceException {
+        Class endpointClass = endpointFactory.getEndpointClass();
+        /* this method is called from a new thread in the example:
+        MessageEndpoint endpoint = endpointFactory.createEndpoint(null); */
+    }
+}
+
+
+
+

The getEndpointClass method returns the Class type of the MDB +performing the activation, which enables the resource adapter to use +reflection to find methods annotated with @TrafficCommand in the MDB.

+
+
+

The createEndpoint method returns an instance of the MDB. The resource +adapter uses this instance to invoke the methods of the MDB when it +receives requests from the EIS.

+
+
+

After obtaining the message endpoint instance (MDB), the resource +adapter uses the work management contract to create the traffic service +subscriber thread that receives traffic updates from the EIS. The +resource adapter obtains the WorkManager instance from the bootstrap +context as follows:

+
+
+
+
WorkManager workManager;
+...
+@Override
+public void start(BootstrapContext ctx) ... {
+    workManager = ctx.getWorkManager();
+}
+
+
+
+

The resource adapter schedules the traffic service subscriber thread +using the work manager:

+
+
+
+
tSubscriber = new TrafficServiceSubscriber(tSpec, endpoint);
+workManager.scheduleWork(tSubscriber);
+
+
+
+

The TrafficServiceSubscriber class implements the +javax.resource.spi.Work interface from the work management contract.

+
+
+

The traffic service subscriber thread uses reflection to invoke the +methods in the MDB:

+
+
+
+
private String callMdb(MessageEndpoint mdb, Method command,
+                       String... params) ... {
+    String resp;
+    /* this code contains proper exception handling in the sources */
+    mdb.beforeDelivery(command);
+    Object ret = command.invoke(mdb, (Object[]) params);
+    resp = (String) ret;
+    mdb.afterDelivery();
+    return resp;
+}
+
+For more details, see the code and the comments in the traffic-rar module.
+
+
+
+
+

53.3.3 Running the traffic Example

+
+

You can use either NetBeans IDE or Maven to build, package, deploy, and +run the traffic example.

+
+
+

The following topics are addressed here:

+
+ +
+

53.3.3.1 To Run the traffic Example Using NetBeans IDE

+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    From the File menu, choose Open Project.

    +
  4. +
  5. +

    In the Open Project dialog box, navigate to:

    +
    +
    +
    tut-install/examples/connectors
    +
    +
    +
  6. +
  7. +

    Select the traffic folder.

    +
  8. +
  9. +

    Click Open Project.

    +
  10. +
  11. +

    In the Projects tab, expand the traffic node.

    +
  12. +
  13. +

    Right-click the traffic-eis module and select Open Project.

    +
  14. +
  15. +

    Right-click the traffic-eis project and select Run.

    +
    +

    The messages from the EIS appear on the Output tab:

    +
    +
    +
    +
    Traffic EIS accepting connections on port 4008
    +
    +
    +
  16. +
  17. +

    In the Projects tab, right-click the traffic project and select +Clean and Build.

    +
    +

    This command builds and packages the resource adapter, the MDB, and the +web application into an EAR archive and deploys it. The server log shows +the call sequence that activates the resource adapter and the filtered +traffic updates for City1.

    +
    +
  18. +
  19. +

    Open the following URL in a web browser:

    +
    +
    +
    http://localhost:8080/traffic/
    +
    +
    +
    +

    The web interface shows filtered traffic updates for City1 every few +seconds.

    +
    +
  20. +
  21. +

    After undeploying the traffic-ear application, close the +traffic-eis application from the status bar.

    +
  22. +
+
+
+
+

53.3.3.2 To Run the traffic Example Using Maven

+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    In a terminal window, go to:

    +
    +
    +
    tut-install/examples/connectors/traffic/traffic-eis/
    +
    +
    +
  4. +
  5. +

    Enter the following command in the terminal window:

    +
    +
    +
    mvn install
    +
    +
    +
    +

    This command builds and packages the traffic EIS.

    +
    +
  6. +
  7. +

    Enter the following command in the terminal window:

    +
    +
    +
    mvn exec:java
    +
    +
    +
    +

    The messages from the EIS appear in the terminal window:

    +
    +
    +
    +
    Traffic EIS accepting connections on port 4008
    +
    +
    +
    +

    Leave this terminal window open.

    +
    +
  8. +
  9. +

    Open a new terminal window and go to:

    +
    +
    +
    tut-install/examples/connectors/traffic/
    +
    +
    +
  10. +
  11. +

    Enter the following command:

    +
    +
    +
    mvn install
    +
    +
    +
    +

    This command builds and packages the resource adapter, the MDB, and the +web application into an EAR archive and deploys it. The server log shows +the call sequence that activates the resource adapter and the filtered +traffic updates for City1.

    +
    +
  12. +
  13. +

    Open the following URL in a web browser:

    +
    +
    +
    http://localhost:8080/traffic/
    +
    +
    +
    +

    The web interface shows the filtered traffic updates for City1 every few +seconds.

    +
    +
  14. +
  15. +

    After undeploying the traffic-ear application, press Ctrl+C in the +first terminal window to close the traffic-eis application.

    +
  16. +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+
+ + + \ No newline at end of file diff --git a/css/style.css b/css/style.css index c8d1736..f07a23c 100644 --- a/css/style.css +++ b/css/style.css @@ -1 +1,177 @@ -/* CSS */ \ No newline at end of file +/* CSS */ +/*! normalize.css v3.0.2 | MIT License | git.io/normalize */ +/** 1. Set default font family to sans-serif. 2. Prevent iOS text size adjust after orientation change, without disabling user zoom. */ +html { font-family: sans-serif; /* 1 */ -ms-text-size-adjust: 100%; /* 2 */ -webkit-text-size-adjust: 100%; /* 2 */ } + +/* HTML5 display definitions ========================================================================== */ +/** Correct `block` display not defined for any HTML5 element in IE 8/9. Correct `block` display not defined for `details` or `summary` in IE 10/11 and Firefox. Correct `block` display not defined for `main` in IE 11. */ +article, aside, details, figcaption, figure, footer, header, hgroup, main, menu, nav, section, summary { display: block; } + +/** 1. Correct `inline-block` display not defined in IE 8/9. 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. */ +audio, canvas, progress, video { display: inline-block; /* 1 */ vertical-align: baseline; /* 2 */ } + +/** Prevent modern browsers from displaying `audio` without controls. Remove excess height in iOS 5 devices. */ +audio:not([controls]) { display: none; height: 0; } + +/** Address `[hidden]` styling not present in IE 8/9/10. Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22. */ +[hidden], template { display: none; } + +/* Links ========================================================================== */ +/** Remove the gray background color from active links in IE 10. */ +a { background-color: transparent; } + +/** Improve readability when focused and also mouse hovered in all browsers. */ +a:active, a:hover { outline: 0; } + +/* Text-level semantics ========================================================================== */ +/** Address styling not present in IE 8/9/10/11, Safari, and Chrome. */ +abbr[title] { border-bottom: 1px dotted; } + +/** Address style set to `bolder` in Firefox 4+, Safari, and Chrome. */ +b, strong { font-weight: bold; } + +/** Address styling not present in Safari and Chrome. */ +dfn { font-style: italic; } + +/** Address variable `h1` font-size and margin within `section` and `article` contexts in Firefox 4+, Safari, and Chrome. */ +h1 { font-size: 2em; margin: 0.67em 0; } + +/** Address styling not present in IE 8/9. */ +mark { background: #ff0; color: #000; } + +/** Address inconsistent and variable font size in all browsers. */ +small { font-size: 80%; } + +/** Prevent `sub` and `sup` affecting `line-height` in all browsers. */ +sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; } + +sup { top: -0.5em; } + +sub { bottom: -0.25em; } + +/* Embedded content ========================================================================== */ +/** Remove border when inside `a` element in IE 8/9/10. */ +img { border: 0; } + +/** Correct overflow not hidden in IE 9/10/11. */ +svg:not(:root) { overflow: hidden; } + +/* Grouping content ========================================================================== */ +/** Address margin not present in IE 8/9 and Safari. */ +figure { margin: 1em 40px; } + +/** Address differences between Firefox and other browsers. */ +hr { box-sizing: content-box; height: 0; } + +/** Contain overflow in all browsers. */ +pre { overflow: auto; } + +/** Address odd `em`-unit font size rendering in all browsers. */ +code, kbd, pre, samp { font-family: monospace, monospace; font-size: 1em; } + +/* Forms ========================================================================== */ +/** Known limitation: by default, Chrome and Safari on OS X allow very limited styling of `select`, unless a `border` property is set. */ +/** 1. Correct color not being inherited. Known issue: affects color of disabled elements. 2. Correct font properties not being inherited. 3. Address margins set differently in Firefox 4+, Safari, and Chrome. */ +button, input, optgroup, select, textarea { color: inherit; /* 1 */ font: inherit; /* 2 */ margin: 0; /* 3 */ } + +/** Address `overflow` set to `hidden` in IE 8/9/10/11. */ +button { overflow: visible; } + +/** Address inconsistent `text-transform` inheritance for `button` and `select`. All other form control elements do not inherit `text-transform` values. Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera. Correct `select` style inheritance in Firefox. */ +button, select { text-transform: none; } + +/** 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` and `video` controls. 2. Correct inability to style clickable `input` types in iOS. 3. Improve usability and consistency of cursor style between image-type `input` and others. */ +button, html input[type="button"], input[type="reset"], input[type="submit"] { -webkit-appearance: button; /* 2 */ cursor: pointer; /* 3 */ } + +/** Re-set default cursor for disabled elements. */ +button[disabled], html input[disabled] { cursor: default; } + +/** Remove inner padding and border in Firefox 4+. */ +button::-moz-focus-inner, input::-moz-focus-inner { border: 0; padding: 0; } + +/** Address Firefox 4+ setting `line-height` on `input` using `!important` in the UA stylesheet. */ +input { line-height: normal; } + +/** It's recommended that you don't attempt to style these elements. Firefox's implementation doesn't respect box-sizing, padding, or width. 1. Address box sizing set to `content-box` in IE 8/9/10. 2. Remove excess padding in IE 8/9/10. */ +input[type="checkbox"], input[type="radio"] { box-sizing: border-box; /* 1 */ padding: 0; /* 2 */ } + +/** Fix the cursor style for Chrome's increment/decrement buttons. For certain `font-size` values of the `input`, it causes the cursor style of the decrement button to change from `default` to `text`. */ +input[type="number"]::-webkit-inner-spin-button, input[type="number"]::-webkit-outer-spin-button { height: auto; } + +/** 1. Address `appearance` set to `searchfield` in Safari and Chrome. 2. Address `box-sizing` set to `border-box` in Safari and Chrome (include `-moz` to future-proof). */ +input[type="search"] { -webkit-appearance: textfield; /* 1 */ /* 2 */ box-sizing: content-box; } + +/** Remove inner padding and search cancel button in Safari and Chrome on OS X. Safari (but not Chrome) clips the cancel button when the search input has padding (and `textfield` appearance). */ +input[type="search"]::-webkit-search-cancel-button, input[type="search"]::-webkit-search-decoration { -webkit-appearance: none; } + +/** Define consistent border, margin, and padding. */ +fieldset { border: 1px solid #c0c0c0; margin: 0 2px; padding: 0.35em 0.625em 0.75em; } + +/** 1. Correct `color` not being inherited in IE 8/9/10/11. 2. Remove padding so people aren't caught out if they zero out fieldsets. */ +legend { border: 0; /* 1 */ padding: 0; /* 2 */ } + +/** Remove default vertical scrollbar in IE 8/9/10/11. */ +textarea { overflow: auto; } + +/** Don't inherit the `font-weight` (applied by a rule above). NOTE: the default cannot safely be changed in Chrome and Safari on OS X. */ +optgroup { font-weight: bold; } + +/* Tables ========================================================================== */ +/** Remove most spacing between table cells. */ +table { border-collapse: collapse; border-spacing: 0; } + +td, th { padding: 0; } + +/* LAYOUT STYLES */ + +p { margin-top: 0; } + +code, pre { margin-bottom: 30px; font-family: Monaco, "Bitstream Vera Sans Mono", "Lucida Console", Terminal, monospace; font-size: 13px; color: #222; } + +code { padding: 0 3px; background-color: #f2f8fc; border: solid 1px #dbe7f3; } + +pre { padding: 20px; overflow: auto; text-shadow: none; background: #fff; border: solid 1px #f2f2f2; } + +pre code { padding: 0; color: #2879d0; background-color: #fff; border: none; } + +ul, ol, dl { margin-bottom: 20px; } + +/* COMMON STYLES */ + +td.halign-right { text-align: right; } + +td.halign-center { text-align: center; } + +form { padding: 20px; background: #f2f2f2; } + +/* GENERAL ELEMENT TYPE STYLES */ + +/* #Media Queries +================================================== */ +/* Smaller than standard 960 (devices and browsers) */ +/* Tablet Portrait size to standard 960 (devices and browsers) */ +@media only screen and (min-width: 768px) and (max-width: 959px) { .inner { width: 740px; } + header h1, header h2 { width: 340px; } + header h1 { font-size: 60px; } + header h2 { font-size: 30px; } +} +/* All Mobile Sizes (devices and browser) */ +@media only screen and (max-width: 767px) { .inner { width: 93%; } + header { padding: 20px 0; } + header .inner { position: relative; } + header h1, header h2 { width: 100%; } + header h1 { font-size: 48px; } + header h2 { font-size: 24px; } + header a.button { position: relative; display: inline-block; width: auto; height: auto; padding: 5px 10px; margin-top: 15px; font-size: 13px; line-height: 1; color: #2879d0; text-align: center; background-color: #9ddcff; background-image: none; border-radius: 5px; -moz-border-radius: 5px; -webkit-border-radius: 5px; } + header a.button small { display: inline; font-size: 13px; } +} +/* Mobile Landscape Size to Tablet Portrait (devices and browsers) */ +/* Mobile Portrait Size to Mobile Landscape Size (devices and browsers) */ + +header h1 { padding-top: 14px; font-size: 2em; font-weight: 200; line-height: 1.4; color: #FFFFFF; letter-spacing: 0px; border-bottom: 0px; } + +header h2 { font-size: 1.2em; margin-top: 0; margin-bottom: 0; font-weight: 200; line-height: .8; color: #ec7D11; letter-spacing: 0; } + +header a.button { background: transparent url(../images/logo.png) 0 0 no-repeat; padding-left: 32px; } + +header a:hover { text-decoration: none; } \ No newline at end of file diff --git a/dukes-bookstore.html b/dukes-bookstore.html new file mode 100644 index 0000000..fb52aef --- /dev/null +++ b/dukes-bookstore.html @@ -0,0 +1,109 @@ + + + + + + Duke's Bookstore Case Study Example + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

57 Duke’s Bookstore Case Study Example

+
+
+

The Duke’s Bookstore example is a simple e-commerce application that +illustrates some of the more advanced features of JavaServer Faces +technology in combination with Contexts and Dependency Injection for +Java EE (CDI), enterprise beans, and the Java Persistence API. Users can +select books from an image map, view the bookstore catalog, and purchase +books. No security is used in this application.

+
+
+

The following topics are addressed here:

+
+ +
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/dukes-bookstore001.html b/dukes-bookstore001.html new file mode 100644 index 0000000..37ff477 --- /dev/null +++ b/dukes-bookstore001.html @@ -0,0 +1,194 @@ + + + + + + Design and Architecture of Duke's Bookstore + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

57.1 Design and Architecture of Duke’s Bookstore

+
+
+

Duke’s Bookstore is a simple web application that uses many features of +JavaServer Faces technology, in addition to other Java EE 7 features:

+
+
+
    +
  • +

    JavaServer Faces technology, as well as Contexts and Dependency +Injection for Java EE (CDI)

    +
    +
      +
    • +

      A set of Facelets pages, along with a template, provides the user +interface to the application.

      +
    • +
    • +

      CDI managed beans are associated with each of the Facelets pages.

      +
    • +
    • +

      A custom image map component on the front page allows you to select a +book to enter the store. Each area of the map is represented by a +JavaServer Faces managed bean. Text hyperlinks are also provided for +accessibility.

      +
    • +
    • +

      Action listeners are registered on the image map and the text links. +These listeners retrieve the ID value for the selected book and store it +in the session map so it can be retrieved by the managed bean for the +next page.

      +
    • +
    • +

      The h:dataTable tag is used to render the book catalog and shopping +cart contents dynamically.

      +
    • +
    • +

      A custom converter is registered on the credit card field on the +checkout page, bookcashier.xhtml, which also uses an f:validateRegEx +tag to ensure that the input is correctly formatted.

      +
    • +
    • +

      A value-change listener is registered on the name field on +bookcashier.xhtml. This listener saves the name in a parameter so the +following page, bookreceipt.xhtml, can access it.

      +
    • +
    +
    +
  • +
  • +

    Enterprise beans: Local, no-interface-view stateless session bean and +singleton bean

    +
  • +
  • +

    A Java Persistence API entity

    +
  • +
+
+
+

The packages of the Duke’s Bookstore application, located in the +tut-install`/examples/case-studies/dukes-bookstore/src/main/java/javaeetutorial/dukesbookstore/` +directory, are as follows:

+
+
+
    +
  • +

    components: Includes the custom UI component classes, MapComponent +and AreaComponent

    +
  • +
  • +

    converters: Includes the custom converter class, +CreditCardConverter

    +
  • +
  • +

    ejb: Includes two enterprise beans:

    +
    +
      +
    • +

      A singleton bean, ConfigBean, that initializes the data in the +database

      +
    • +
    • +

      A stateless session bean, BookRequestBean, that contains the +business logic to manage the entity

      +
    • +
    +
    +
  • +
  • +

    entity: Includes the Book entity class

    +
  • +
  • +

    exceptions: Includes three exception classes

    +
  • +
  • +

    listeners: Includes the event handler and event listener classes

    +
  • +
  • +

    model: Includes a model JavaBeans class

    +
  • +
  • +

    renderers: Includes the custom renderers for the custom UI component +classes

    +
  • +
  • +

    web.managedbeans: Includes the managed beans for the Facelets pages

    +
  • +
  • +

    web.messages: Includes the resource bundle files for localized +messages

    +
  • +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/dukes-bookstore002.html b/dukes-bookstore002.html new file mode 100644 index 0000000..996bc2b --- /dev/null +++ b/dukes-bookstore002.html @@ -0,0 +1,481 @@ + + + + + + The Duke's Bookstore Interface + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

57.2 The Duke’s Bookstore Interface

+
+
+

This section provides additional detail regarding the components of the +Duke’s Bookstore example and how they interact.

+
+
+

The following topics are addressed here:

+
+ +
+

57.2.1 The Book Java Persistence API Entity

+
+

The Book entity, located in the dukesbookstore.entity package, +encapsulates the book data stored by Duke’s Bookstore.

+
+
+

The Book entity defines attributes used in the example:

+
+
+
    +
  • +

    A book ID

    +
  • +
  • +

    The author’s first name

    +
  • +
  • +

    The author’s surname

    +
  • +
  • +

    The title

    +
  • +
  • +

    The price

    +
  • +
  • +

    Whether the book is on sale

    +
  • +
  • +

    The publication year

    +
  • +
  • +

    A description of the book

    +
  • +
  • +

    The number of copies in the inventory

    +
  • +
+
+
+

The Book entity also defines a simple named query, findBooks.

+
+
+
+

57.2.2 Enterprise Beans Used in Duke’s Bookstore

+
+

Two enterprise beans located in the dukesbookstore.ejb package provide +the business logic for Duke’s Bookstore.

+
+
+
    +
  • +

    BookRequestBean is a stateful session bean that contains the +business methods for the application. The methods create, retrieve, and +purchase books, and update the inventory for a book. To retrieve the +books, the getBooks method calls the findBooks named query defined +in the Book entity.

    +
  • +
  • +

    ConfigBean is a singleton session bean used to create the books in +the catalog when the application is initially deployed. It calls the +createBook method defined in BookRequestBean.

    +
  • +
+
+
+
+

57.2.3 Facelets Pages and Managed Beans Used in Duke’s Bookstore

+
+

The Duke’s Bookstore application uses Facelets and its templating +features to display the user interface. The Facelets pages interact with +a set of CDI managed beans that act as backing beans, providing the +underlying properties and methods for the user interface. The front page +also interacts with the custom components used by the application.

+
+
+

The application uses the following Facelets pages, which are located in +the tut-install`/examples/case-studies/dukes-bookstore/src/main/webapp/` +directory.

+
+
+
    +
  • +

    bookstoreTemplate.xhtml: The template file, which specifies a header +used on every page as well as the style sheet used by all the pages. The +template also retrieves the language set in the web browser.

    +
    +

    Uses the LocaleBean managed bean.

    +
    +
  • +
  • +

    index.xhtml: Landing page, which lays out the custom map and area +components using managed beans configured in the faces-config.xml file +and allows the user to select a book and advance to the +bookstore.xhtml page.

    +
  • +
  • +

    bookstore.xhtml: Page that allows the user to obtain details on the +selected book or the featured book, to add either book to the shopping +cart, and to advance to the bookcatalog.xhtml page.

    +
    +

    Uses the BookstoreBean managed bean.

    +
    +
  • +
  • +

    bookdetails.xhtml: Page that shows details on a book selected from +bookstore.xhtml or other pages and allows the user to add the book to +the cart and/or advance to the bookcatalog.xhtml page.

    +
    +

    Uses the BookDetailsBean managed bean.

    +
    +
  • +
  • +

    bookcatalog.xhtml: Page that displays the books in the catalog and +allows the user to add books to the shopping cart, view the details for +any book, view the shopping cart, empty the shopping cart, or purchase +the books in the shopping cart.

    +
    +

    Uses the BookstoreBean, CatalogBean, and ShoppingCart managed +beans.

    +
    +
  • +
  • +

    bookshowcart.xhtml: Page that displays the contents of the shopping +cart and allows the user to remove items, view the details for an item, +empty the shopping cart, purchase the books in the shopping cart, or +return to the catalog.

    +
    +

    Uses the ShowCartBean and ShoppingCart managed beans.

    +
    +
  • +
  • +

    bookcashier.xhtml: Page that allows the user to purchase books, +specify a shipping option, subscribe to newsletters, or join the Duke +Fan Club with a purchase over a certain amount.

    +
    +

    Uses the CashierBean and ShoppingCart managed beans.

    +
    +
  • +
  • +

    bookreceipt.xhtml: Page that confirms the user’s purchase and allows +the user to return to the catalog page to continue shopping.

    +
    +

    Uses the CashierBean managed bean.

    +
    +
  • +
  • +

    bookordererror.xhtml: Page rendered by CashierBean if the +bookstore has no more copies of a book that was ordered.

    +
  • +
+
+
+

The application uses the following managed beans, which are located in +the +tut-install`/examples/case-studies/dukes-bookstore/src/main/java/javaeetutorial/dukesbookstore/web/managedbeans/` +directory.

+
+
+
    +
  • +

    AbstractBean: Contains utility methods called by other managed +beans.

    +
  • +
  • +

    BookDetailsBean: Backing bean for the bookdetails.xhtml page. +Specifies the name details.

    +
  • +
  • +

    BookstoreBean: Backing bean for the bookstore.xhtml page. +Specifies the name store.

    +
  • +
  • +

    CashierBean: Backing bean for the bookcashier.xhtml and +bookreceipt.xhtml pages.

    +
  • +
  • +

    CatalogBean: Backing bean for the bookcatalog.xhtml page. +Specifies the name catalog.

    +
  • +
  • +

    LocaleBean: Managed bean that retrieves the current locale; used on +each page.

    +
  • +
  • +

    ShoppingCart: Backing bean used by the bookcashier.xhtml, +bookcatalog.xhtml, and bookshowcart.xhtml pages. Specifies the name +cart.

    +
  • +
  • +

    ShoppingCartItem: Contains methods called by ShoppingCart, +CatalogBean, and ShowCartBean.

    +
  • +
  • +

    ShowCartBean: Backing bean for the bookshowcart.xhtml page. +Specifies the name showcart.

    +
  • +
+
+
+
+

57.2.4 Custom Components and Other Custom Objects Used in Duke’sBookstore

+
+

The map and area custom components for Duke’s Bookstore, along with +associated renderer, listener, and model classes, are defined in the +following packages in the +tut-install`/examples/case-studies/dukes-bookstore/src/main/java/javaeetutorial/dukesbookstore/` +directory.

+
+
+ +
+
+

The +tut-install`/examples/case-studies/dukes-bookstore/src/java/dukesbookstore/` +directory also contains a custom converter and other custom listeners +not specifically tied to the custom components.

+
+
+ +
+
+
+

57.2.5 Properties Files Used in Duke’s Bookstore

+
+

The strings used in the Duke’s Bookstore application are encapsulated +into resource bundles to allow the display of localized strings in +multiple locales. The properties files, located in the +tut-install`/examples/case-studies/dukes-bookstore/src/main/java/javaeetutorial/dukesbookstore/web/messages/` +directory, consist of a default file containing English strings and +three additional files for other locales. The files are as follows:

+
+
+
    +
  • +

    Messages.properties: Default file, containing English strings

    +
  • +
  • +

    Messages_de.properties: File containing German strings

    +
  • +
  • +

    Messages_es.properties: File containing Spanish strings

    +
  • +
  • +

    Messages_fr.properties: File containing French strings

    +
  • +
+
+
+

The language setting in the user’s web browser determines which locale +is used. The html tag in bookstoreTemplate.xhtml retrieves the +language setting from the language property of LocaleBean:

+
+
+
+
<html lang="#{localeBean.language}"
+...
+
+
+
+

For more information about resource bundles, see +Chapter 20, "Internationalizing and Localizing +Web Applications."

+
+
+

The resource bundle is configured as follows in the faces-config.xml +file:

+
+
+
+
<application>
+    <resource-bundle>
+        <base-name>
+            javaeetutorial.dukesbookstore.web.messages.Messages
+        </base-name>
+        <var>bundle</var>
+    </resource-bundle>
+    <locale-config>
+        <default-locale>en</default-locale>
+        <supported-locale>de</supported-locale>
+        <supported-locale>es</supported-locale>
+        <supported-locale>fr</supported-locale>
+    </locale-config>
+</application>
+
+
+
+

This configuration means that in the Facelets pages, messages are +retrieved using the prefix bundle with the key found in the +Messages_`locale.properties` file, as in the following example from +the index.xhtml page:

+
+
+
+
<h:outputText style="font-weight:bold"
+              value="#{bundle.ChooseBook}" />
+
+
+
+

In Messages.properties, the key string is defined as follows:

+
+
+
+
ChooseBook=Choose a Book from our Catalog
+
+
+
+
+

57.2.6 Deployment Descriptors Used in Duke’s Bookstore

+
+

The following deployment descriptors are used in Duke’s Bookstore:

+
+
+
    +
  • +

    src/main/resources/META-INF/persistence.xml: The Java Persistence +API configuration file

    +
  • +
  • +

    src/main/webapp/WEB-INF/bookstore.taglib.xml: The tag library +descriptor file for the custom components

    +
  • +
  • +

    src/main/webapp/WEB-INF/faces-config.xml: The JavaServer Faces +configuration file, which configures the managed beans for the map +component as well as the resource bundles for the application

    +
  • +
  • +

    src/main/webapp/WEB-INF/web.xml: The web application configuration +file

    +
  • +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/dukes-bookstore003.html b/dukes-bookstore003.html new file mode 100644 index 0000000..94151c8 --- /dev/null +++ b/dukes-bookstore003.html @@ -0,0 +1,199 @@ + + + + + + Running the Duke's Bookstore Case Study Application + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

57.3 Running the Duke’s Bookstore Case Study Application

+
+
+

You can use either NetBeans IDE or Maven to build, package, deploy, and +run the Duke’s Bookstore application.

+
+
+

The following topics are addressed here:

+
+ +
+

57.3.1 To Build and Deploy Duke’s Bookstore Using NetBeans IDE

+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    From the File menu, choose Open Project.

    +
  4. +
  5. +

    In the Open Project dialog box, navigate to:

    +
    +
    +
    tut-install/examples/case-studies
    +
    +
    +
  6. +
  7. +

    Select the dukes-bookstore folder.

    +
  8. +
  9. +

    Click Open Project.

    +
  10. +
  11. +

    In the Projects tab, right-click the dukes-bookstore project and +select Build.

    +
    +

    This will build, package, and deploy Duke’s Bookstore to GlassFish +Server.

    +
    +
  12. +
+
+
+
+

57.3.2 To Build and Deploy Duke’s Bookstore Using Maven

+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server), as well as the database server (see +Starting and Stopping the Java DB +Server).

    +
  2. +
  3. +

    In a terminal window, go to:

    +
    +
    +
    tut-install/examples/case-studies/dukes-bookstore/
    +
    +
    +
  4. +
  5. +

    Enter the following command:

    +
    +
    +
    mvn install
    +
    +
    +
    +

    This command builds the application and packages it in a WAR file in the +tut-install`/examples/case-studies/dukes-bookstore/target/` directory. +It then deploys the application to GlassFish Server.

    +
    +
  6. +
+
+
+
+

57.3.3 To Run Duke’s Bookstore

+
+
    +
  1. +

    In a web browser, enter the following URL:

    +
    +
    +
    http://localhost:8080/dukes-bookstore/
    +
    +
    +
  2. +
  3. +

    On the Duke’s Bookstore main page, click a book in the graphic, or +click one of the links at the bottom of the page.

    +
  4. +
  5. +

    Use the pages in the application to view and purchase books.

    +
  6. +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/dukes-forest.html b/dukes-forest.html new file mode 100644 index 0000000..058106a --- /dev/null +++ b/dukes-forest.html @@ -0,0 +1,110 @@ + + + + + + Duke's Forest Case Study Example + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

59 Duke’s Forest Case Study Example

+
+
+

This chapter describes Duke’s Forest, a simple e-commerce application +that contains several web applications and illustrates the use of +multiple Java EE 7 APIs.

+
+
+

The following topics are addressed here:

+
+ +
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/dukes-forest001.html b/dukes-forest001.html new file mode 100644 index 0000000..fc86642 --- /dev/null +++ b/dukes-forest001.html @@ -0,0 +1,149 @@ + + + + + + Overview of the Duke's Forest Case Study Example + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

59.1 Overview of the Duke’s Forest Case Study Example

+
+
+

Duke’s Forest is a simple e-commerce application that contains several +web applications and illustrates the use of the following Java EE 7 +APIs:

+
+
+
    +
  • +

    JavaServer Faces technology, including Ajax

    +
  • +
  • +

    Contexts and Dependency Injection for Java EE (CDI)

    +
  • +
  • +

    Java API for RESTful Web Services (JAX-RS)

    +
  • +
  • +

    Java Persistence API (JPA)

    +
  • +
  • +

    Java API for JavaBeans Validation (Bean Validation)

    +
  • +
  • +

    Enterprise JavaBeans (EJB) technology

    +
  • +
  • +

    Java Message Service (JMS)

    +
  • +
+
+
+

The application consists of the following projects.

+
+
+
    +
  • +

    Duke’s Store: A web application that has a product catalog, customer +self-registration, and a shopping cart. It also has an administration +interface for product, category, and user management. The project name +is dukes-store.

    +
  • +
  • +

    Duke’s Shipment: A web application that provides an interface for +order shipment management. The project name is dukes-shipment.

    +
  • +
  • +

    Duke’s Payment: A web service application that has a RESTful web +service for order payment. The project name is dukes-payment.

    +
  • +
  • +

    Duke’s Resources: A simple Java archive project that contains all +resources used by the web projects. It includes messages, CSS style +sheets, images, JavaScript files, and JavaServer Faces composite +components. The project name is dukes-resources.

    +
  • +
  • +

    Entities: A simple Java archive project that contains all JPA +entities. This project is shared among other projects that use the +entities. The project name is entities.

    +
  • +
  • +

    Events: A simple Java archive project that contains a POJO class that +is used as a CDI event. The project name is events.

    +
  • +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/dukes-forest002.html b/dukes-forest002.html new file mode 100644 index 0000000..40c9628 --- /dev/null +++ b/dukes-forest002.html @@ -0,0 +1,1032 @@ + + + + + + Design and Architecture of Duke's Forest + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

59.2 Design and Architecture of Duke’s Forest

+
+
+

Duke’s Forest is a complex application consisting of three main projects +and three subprojects. Figure 59-1 shows the architecture +of the three main projects that you will deploy: Duke’s Store, Duke’s +Shipment, and Duke’s Payment. It also shows how Duke’s Store makes use +of the Events and Entities projects.

+
+
+

Figure 59-1 Architecture of the Duke’s Forest Example Application

+
+ +
+

Duke’s Forest uses the following Java EE 7 platform features:

+
+
+
    +
  • +

    Java Persistence API entities

    +
    +
      +
    • +

      Bean Validation annotations on the entities for verifying data

      +
    • +
    • +

      XML annotations for Java API for XML binding (JAXB) serialization

      +
    • +
    +
    +
  • +
  • +

    Web services

    +
    +
      +
    • +

      A JAX-RS web service for payment, with security constraints

      +
    • +
    • +

      A JAX-RS web service that is EJB based

      +
    • +
    +
    +
  • +
  • +

    Enterprise beans

    +
    +
      +
    • +

      Local session beans

      +
    • +
    • +

      All enterprise beans packaged within the WAR

      +
    • +
    +
    +
  • +
  • +

    Contexts and Dependency Injection (CDI)

    +
    +
      +
    • +

      CDI annotations for JavaServer Faces components

      +
    • +
    • +

      A CDI managed bean used as a shopping cart, with conversation scoping

      +
    • +
    • +

      Qualifiers

      +
    • +
    • +

      Events and event handlers

      +
    • +
    +
    +
  • +
  • +

    Servlets

    +
    +
      +
    • +

      A servlet for dynamic image presentation

      +
    • +
    +
    +
  • +
  • +

    JavaServer Faces technology, using Facelets for the web front end

    +
    +
      +
    • +

      Templating

      +
    • +
    • +

      Composite components

      +
    • +
    • +

      File upload

      +
    • +
    • +

      Resources packaged in a JAR file so they can be found in the +classpath

      +
    • +
    +
    +
  • +
  • +

    Security

    +
    +
      +
    • +

      Java EE security constraints on the administrative interface business +methods (enterprise beans)

      +
    • +
    • +

      Security constraints for customers and administrators (web +components)

      +
    • +
    • +

      Single Sign-On (SSO) to propagate an authenticated user identity from +Duke’s Store to Duke’s Shipment

      +
    • +
    +
    +
  • +
+
+
+

The Duke’s Forest application has two main user interfaces, both +packaged within the Duke’s Store WAR file:

+
+
+
    +
  • +

    The main interface, for customers and guests

    +
  • +
  • +

    The administrative interface used to perform back office operations, +such as adding new items to the catalog

    +
  • +
+
+
+

The Duke’s Shipment application also has a user interface, accessible to +administrators.

+
+
+

Figure 59-2 shows how the web applications and the web +service interact.

+
+
+

Figure 59-2 Interactions between Duke’s Forest Components

+
+ +
+

As illustrated in Figure 59-2, the customer interacts +with the main interface of Duke’s Store, while the administrator +interacts with the administration interface. Both interfaces access a +façade consisting of managed beans and stateless session beans, which in +turn interact with the entities that represent database tables. The +façade also interacts with web services APIs that access the Duke’s +Payment web service. When the payment for an order is approved, Duke’s +Store sends the order to a JMS queue. The administrator also interacts +with the interface of Duke’s Shipment, which can be accessed either +directly through Duke’s Shipment or from the administration interface of +Duke’s Store by means of a web service. When the administrator approves +an order for shipping, Duke’s Shipment consumes the order from the JMS +queue.

+
+
+

The most fundamental building blocks of the application are the Events +and Entities projects, which are bundled into Duke’s Store and Duke’s +Shipment along with the Duke’s Resources project.

+
+
+

59.2.1 The events Project

+
+

Events are one of the core components of Duke’s Forest. The events +project, included in all three of the main projects, is the most simple +project of the application. It has only one class, OrderEvent, but +this class is responsible for most of the messages between objects in +the application.

+
+
+

The application can send messages based on events to different +components and react to them based on the qualification of the event. +The application supports the following qualifiers:

+
+
+
    +
  • +

    @LoggedIn: For authenticated users

    +
  • +
  • +

    @New: When a new order is created by the shopping cart

    +
  • +
  • +

    @Paid: When an order is paid for and ready for shipment

    +
  • +
+
+
+

The following code snippet from the PaymentHandler class of Duke’s +Store shows how the @Paid event is handled:

+
+
+
+
@Inject @Paid Event<OrderEvent> eventManager;
+
+...
+public void onNewOrder(@Observes @New OrderEvent event) {
+
+    if (processPayment(event)) {
+        orderBean.setOrderStatus(event.getOrderID(),
+                String.valueOf(OrderBean.Status.PENDING_PAYMENT.getStatus()));
+        logger.info("Payment Approved");
+        eventManager.fire(event);
+    } else {
+        orderBean.setOrderStatus(event.getOrderID(),
+                String.valueOf(OrderBean.Status.CANCELLED_PAYMENT.getStatus()));
+        logger.info("Payment Denied");
+    }
+}
+
+
+
+

To enable users to add more events to the project easily or update an +event class with more fields for a new client, this component is a +separate project within the application.

+
+
+
+

59.2.2 The entities Project

+
+

The entities project is a Java Persistence API (JPA) project used by +both Duke’s Store and Duke’s Shipment. It is generated from the database +schema shown in Figure 59-3 and is also used as a base for +the entities consumed and produced by the web services through JAXB. +Each entity has validation rules based on business requirements, +specified using Bean Validation.

+
+
+

Figure 59-3 Duke’s Forest Database Tables and Their Relationships

+
+ +
+

The database schema contains eight tables:

+
+
+
    +
  • +

    PERSON, which has a one-to-many relationship with PERSON_GROUPS +and CUSTOMER_ORDER

    +
  • +
  • +

    GROUPS, which has a one-to-many relationship with PERSON_GROUPS

    +
  • +
  • +

    PERSON_GROUPS, which has a many-to-one relationship with PERSON +and GROUPS (it is the join table between those two tables)

    +
  • +
  • +

    PRODUCT, which has a many-to-one relationship with CATEGORY and a +one-to-many relationship with ORDER_DETAIL

    +
  • +
  • +

    CATEGORY, which has a one-to-many relationship with PRODUCT

    +
  • +
  • +

    CUSTOMER_ORDER, which has a one-to-many relationship with +ORDER_DETAIL and a many-to-one relationship with PERSON and +ORDER_STATUS

    +
  • +
  • +

    ORDER_DETAIL, which has a many-to-one relationship with PRODUCT +and CUSTOMER_ORDER (it is the join table between those two tables)

    +
  • +
  • +

    ORDER_STATUS, which has a one-to-many relationship with +CUSTOMER_ORDER

    +
  • +
+
+
+

The entity classes that correspond to these tables are as follows.

+
+
+
    +
  • +

    Person, which defines attributes common to customers and +administrators. These attributes are the person’s name and contact +information, including street and email addresses. The email address has +a Bean Validation annotation to ensure that the submitted data is +well-formed. The generated table for the Person entity also has a +DTYPE field that represents the discriminator column. Its value +identifies the subclass (Customer or Administrator) to which the +person belongs.

    +
  • +
  • +

    Customer, a specialization of Person with a specific field for +CustomerOrder objects.

    +
  • +
  • +

    Administrator, a specialization of Person with fields for +administration privileges.

    +
  • +
  • +

    Groups, which represents the group (USERS or ADMINS) to which +the user belongs.

    +
  • +
  • +

    Product, which defines attributes for products. These attributes +include name, price, description, associated image, and category.

    +
  • +
  • +

    Category, which defines attributes for product categories. These +attributes include a name and a set of tags.

    +
  • +
  • +

    CustomerOrder, which defines attributes for orders placed by +customers. These attributes include an amount and a date, along with id +values for the customer and the order detail.

    +
  • +
  • +

    OrderDetail, which defines attributes for the order detail. These +attributes include a quantity and id values for the product and the +customer.

    +
  • +
  • +

    OrderStatus, which defines a status attribute for each order.

    +
  • +
+
+
+
+

59.2.3 The dukes-payment Project

+
+

The dukes-payment project is a web project that holds a simple Payment +web service. Since this is an example application, it does not obtain +any real credit information or even customer status to validate the +payment. For now, the only rule imposed by the payment system is to deny +all orders above $1,000. This application illustrates a common scenario +where a third-party payment service is used to validate credit cards or +bank payments.

+
+
+

The project uses HTTP Basic Authentication and JAAS (Java Authentication +and Authorization Service) to authenticate a customer to a JAX-RS web +service. The implementation itself exposes a simple method, +processPayment, which receives an OrderEvent to evaluate and approve +or deny the order payment. The method is called from the checkout +process of Duke’s Store.

+
+
+
+

59.2.4 The dukes-resources Project

+
+

The dukes-resources project contains a number of files used by both +Duke’s Store and Duke’s Shipment, bundled into a JAR file placed in the +classpath. The resources are in the src/main/resources directory:

+
+
+
    +
  • +

    META-INF/resources/css: Two style sheets, default.css and +jsfcrud.css

    +
  • +
  • +

    META-INF/resources/img: Images used by the projects

    +
  • +
  • +

    META-INF/resources/js: A JavaScript file, util.js

    +
  • +
  • +

    META-INF/resources/util: Composite components used by the projects

    +
  • +
  • +

    bundles/Bundle.properties: Application messages in English

    +
  • +
  • +

    bundles/Bundle_es.properties: Application messages in Spanish

    +
  • +
  • +

    ValidationMessages.properties: Bean Validation messages in English

    +
  • +
  • +

    ValidationMessages_es.properties: Bean Validation messages in +Spanish

    +
  • +
+
+
+
+

59.2.5 The Duke’s Store Project

+
+

Duke’s Store, a web application, is the core application of Duke’s +Forest. It is responsible for the main store interface for customers as +well as the administration interface.

+
+
+

The main interface of Duke’s Store allows the user to perform the +following tasks:

+
+
+
    +
  • +

    Browsing the product catalog

    +
  • +
  • +

    Signing up as a new customer

    +
  • +
  • +

    Adding products to the shopping cart

    +
  • +
  • +

    Checking out

    +
  • +
  • +

    Viewing order status

    +
  • +
+
+
+

The administration interface of Duke’s Store allows administrators to +perform the following tasks:

+
+
+
    +
  • +

    Product maintenance (create, edit, update, delete)

    +
  • +
  • +

    Category maintenance (create, edit, update, delete)

    +
  • +
  • +

    Customer maintenance (create, edit, update, delete)

    +
  • +
  • +

    Group maintenance (create, edit, update, delete)

    +
  • +
+
+
+

The project also uses stateless session beans as façades for +interactions with the JPA entities described in The +entities Project, and CDI managed beans as controllers for interactions +with Facelets pages. The project thus follows the MVC +(Model-View-Controller) pattern and applies the same pattern to all +entities and pages, as in the following example.

+
+
+
    +
  • +

    AbstractFacade is an abstract class that receives a Type<T> and +implements the common operations (CRUD) for this type, where <T> is a +JPA entity.

    +
  • +
  • +

    ProductBean is a stateless session bean that extends +AbstractFacade, applying Product as Type<T>, and injects the +PersistenceContext for the EntityManager. This bean implements any +custom methods needed to interact with the Product entity or to call a +custom query.

    +
  • +
  • +

    ProductController is a CDI managed bean that interacts with the +necessary enterprise beans and Facelets pages to control the way the +data will be displayed.

    +
  • +
+
+
+

ProductBean begins as follows:

+
+
+
+
@Stateless
+public class ProductBean extends AbstractFacade<Product> {
+    private static final Logger logger =
+        Logger.getLogger(ProductBean.class.getCanonicalName());
+
+    @PersistenceContext(unitName="forestPU")
+    private EntityManager em;
+
+    @Override
+    protected EntityManager getEntityManager() {
+        return em;
+    }
+    ...
+
+
+
+

59.2.5.1 Enterprise Beans Used in Duke’s Store

+
+

The enterprise beans used in Duke’s Store provide the business logic for +the application and are located in the com.forest.ejb package. All are +stateless session beans.

+
+
+

AbstractFacade is not an enterprise bean but an abstract class that +implements common operations for Type<T>, where <T> is a JPA entity.

+
+
+

Most of the other beans extend AbstractFacade, inject the +PersistenceContext, and implement any needed custom methods:

+
+
+
    +
  • +

    AdministratorBean

    +
  • +
  • +

    CategoryBean

    +
  • +
  • +

    EventDispatcherBean

    +
  • +
  • +

    GroupsBean

    +
  • +
  • +

    OrderBean

    +
  • +
  • +

    OrderDetailBean

    +
  • +
  • +

    OrderJMSManager

    +
  • +
  • +

    OrderStatusBean

    +
  • +
  • +

    ProductBean

    +
  • +
  • +

    ShoppingCart

    +
  • +
  • +

    UserBean

    +
  • +
+
+
+

The ShoppingCart class, although it is in the ejb package, is a CDI +managed bean with conversation scope, which means that the request +information will persist across multiple requests. Also, ShoppingCart +is responsible for starting the event chain for customer orders, which +invokes the RESTful web service in dukes-payment and publishes an +order to the JMS queue for shipping approval if the payment is +successful.

+
+
+
+

59.2.5.2 Facelets Files Used in the Main Interface of Duke’s Store

+
+

Like the other case study examples, Duke’s Store uses Facelets to +display the user interface. The main interface uses a large number of +Facelets pages to display different areas. The pages are grouped into +directories based on which module they handle.

+
+
+
    +
  • +

    template.xhtml: Template file, used for both main and administration +interfaces. It first performs a browser check to verify that the user’s +browser supports HTML 5, which is required for Duke’s Forest. It divides +the screen into several areas and specifies the client page for each +area.

    +
  • +
  • +

    topbar.xhtml: Page for the login area at the top of the screen.

    +
  • +
  • +

    top.xhtml: Page for the title area.

    +
  • +
  • +

    left.xhtml: Page for the left sidebar.

    +
  • +
  • +

    index.xhtml: Page for the main screen content.

    +
  • +
  • +

    login.xhtml: Login page specified in web.xml. The main login +interface is provided in topbar.xhtml, but this page appears if there +is a login error.

    +
  • +
  • +

    admin directory: Pages related to the administration interface, +described in Facelets Files Used in the Administration +Interface of Duke’s Store.

    +
  • +
  • +

    customer directory: Pages related to customers (Create.xhtml, +Edit.xhtml, List.xhtml, Profile.xhtml, View.xhtml).

    +
  • +
  • +

    order directory: Pages related to orders (Create.xhtml, +List.xhtml, MyOrders.xhtml, View.xhtml).

    +
  • +
  • +

    orderDetail directory: Popup page allowing users to view details of +an order (View_popup.xhtml).

    +
  • +
  • +

    product directory: Pages related to products (List.xhtml, +ListCategory.xhtml, View.xhtml).

    +
  • +
+
+
+

59.2.5.3 Facelets Files Used in the Administration Interface of Duke’s +Store +^^^^^^^^^^^^^^^^^^^^^^^^^^

+
+
+

The Facelets pages for the administration interface of Duke’s Store are +found in the web/admin directory:

+
+
+
    +
  • +

    administrator directory: Pages related to administrator management +(Create.xhtml, Edit.xhtml, List.xhtm`l, `View.xhtml)

    +
  • +
  • +

    category directory: Pages related to product category management +(Create.xhtml, Edit.xhtml, List.xhtml, View.xhtml)

    +
  • +
  • +

    customer directory: Pages related to customer management +(Create.xhtml, Edit.xhtml, List.xhtml, Profile.xhtml, +View.xhtml)

    +
  • +
  • +

    groups directory: Pages related to group management (Create.xhtml, +Edit.xhtml, List.xhtml, View.xhtml)

    +
  • +
  • +

    order directory: Pages related to order management (Create.xhtml, +Edit.xhtml, List.xhtml, View.xhtml)

    +
  • +
  • +

    orderDetail directory: Popup page allowing the administrator to view +details of an order (View_popup.xhtml)

    +
  • +
  • +

    product directory: Pages related to product management +(Confirm.xhtm`l, `Create.xhtml, Edit.xhtml, List.xhtml, +View.xhtml)

    +
  • +
+
+
+
+

59.2.5.4 Managed Beans Used in Duke’s Store

+
+

Duke’s Store uses the following CDI managed beans, which correspond to +the enterprise beans. The beans are in the com.forest.web package:

+
+
+
    +
  • +

    AdministratorController

    +
  • +
  • +

    CategoryController

    +
  • +
  • +

    CustomerController

    +
  • +
  • +

    CustomerOrderController

    +
  • +
  • +

    GroupsController

    +
  • +
  • +

    OrderDetailController

    +
  • +
  • +

    OrderStatusController

    +
  • +
  • +

    ProductController

    +
  • +
  • +

    UserController

    +
  • +
+
+
+
+

59.2.5.5 Helper Classes Used in Duke’s Store

+
+

The CDI managed beans in the main interface of Duke’s Store use the +following helper classes, found in the com.forest.web.util package:

+
+
+
    +
  • +

    AbstractPaginationHelper: An abstract class with methods used by the +managed beans

    +
  • +
  • +

    ImageServlet: A servlet class that retrieves the image content from +the database and displays it

    +
  • +
  • +

    JsfUtil: Class used for JavaServer Faces operations, such as queuing +messages on a FacesContext instance

    +
  • +
  • +

    MD5Util: Class used by the CustomerController managed bean to +generate an encrypted password for a user

    +
  • +
+
+
+
+

59.2.5.6 Qualifiers Used in Duke’s Store

+
+

Duke’s Store defines the following qualifiers in the +com.forest.qualifiers package:

+
+
+
    +
  • +

    @LoggedIn: Qualifies a user as having logged in

    +
  • +
  • +

    @New: Qualifies an order as new

    +
  • +
  • +

    @Paid: Qualifies an order as paid

    +
  • +
+
+
+
+

59.2.5.7 Event Handlers Used in Duke’s Store

+
+

Duke’s Store defines event handlers related to the OrderEvent class +packaged in the events project (see The events +Project). The event handlers are in the com.forest.handlers package.

+
+
+
    +
  • +

    IOrderHandler: The IOrderHandler interface defines a method, +onNewOrder, implemented by the two handler classes.

    +
  • +
  • +

    PaymentHandler: The ShoppingCart bean fires an OrderEvent +qualified as @New. The onNewOrder method of PaymentHandler +observes these events and, when it intercepts them, processes the +payment using the Duke’s Payment web service. After a successful +response from the web service, PaymentHandler fires the OrderEvent +again, this time qualified as @Paid.

    +
  • +
  • +

    DeliveryHandler: The onNewOrder method of DeliveryHandler +observes OrderEvent objects qualified as @Paid (orders paid and +ready for delivery) and modifies the order status to PENDING_SHIPMENT. +When an administrator accesses Duke’s Shipment, it will call the Order +Service, a RESTful web service, and ask for all orders in the database +that are ready for delivery.

    +
  • +
+
+
+
+

59.2.5.8 Deployment Descriptors Used in Duke’s Store

+
+

Duke’s Store uses the following deployment descriptors, located in the +web/WEB-INF directory:

+
+
+
    +
  • +

    faces-config.xml: The JavaServer Faces configuration file

    +
  • +
  • +

    glassfish-web.xml: The configuration file specific to GlassFish +Server

    +
  • +
  • +

    web.xml: The web application configuration file

    +
  • +
+
+
+
+
+

59.2.6 The Duke’s Shipment Project

+
+

Duke’s Shipment is a web application with a login page, a main Facelets +page, and some other objects. This application, which is accessible only +to administrators, consumes orders from a JMS queue and calls the +RESTful web service exposed by Duke’s Store to update the order status. +The main page of Duke’s Shipment shows a list of orders pending shipping +approval and a list of shipped orders. The administrator can approve or +deny orders for shipping. If approved, the order is shipped, and it +appears under the Shipped heading. If denied, the order disappears from +the page, and on the customer’s Orders list it appears as cancelled.

+
+
+

There is also a gear icon on the Pending list that makes an Ajax call to +the Order Service to refresh the list without refreshing the page. The +code looks like this:

+
+
+
+
<h:commandLink>
+    <h:graphicImage library="img" title="Check for new orders"
+                    style="border:0px" name="refresh.png"/>
+    <f:ajax execute="@form" render="@form" />
+</h:commandLink>
+
+
+
+

59.2.6.1 Enterprise Beans Used in Duke’s Shipment

+
+

The UserBean stateless session bean used in Duke’s Shipment provides +the business logic for the application and is located in the +com.forest.shipment.session package.

+
+
+

Like Duke’s Store, Duke’s Shipment uses the AbstractFacade class. This +class is not an enterprise bean but an abstract class that implements +common operations for Type<T>, where <T> is a JPA entity.

+
+
+

The OrderBrowser stateless session bean, located in the +com.forest.shipment.ejb package, has one method that browses the JMS +order queue and another that consumes an order message after the +administrator approves or denies the order for shipment.

+
+
+
+

59.2.6.2 Facelets Files Used in Duke’s Shipment

+
+

Duke’s Shipment has only one page, so it has many fewer Facelets files +than Duke’s Store.

+
+
+
    +
  • +

    template.xhtml: The template file, like the one in Duke’s Store, +first performs a browser check to verify that the user’s browser +supports HTML 5, which is required for Duke’s Forest. It divides the +screen into areas and specifies the client page for each area.

    +
  • +
  • +

    topbar.xhtml: Page for the login area at the top of the screen.

    +
  • +
  • +

    top.xhtml: Page for the title area.

    +
  • +
  • +

    index.xhtml: Page for the initial main screen content.

    +
  • +
  • +

    login.xhtml: Login page specified in web.xml. The main login +interface is provided in topbar.xhtml, but this page appears if there +is a login error.

    +
  • +
  • +

    admin/index.xhtml: Page for the main screen content after +authentication.

    +
  • +
+
+
+
+

59.2.6.3 Managed Beans Used in Duke’s Shipment

+
+

Duke’s Shipment uses the following CDI managed beans, in the +com.forest.shipment package:

+
+
+
    +
  • +

    web.ShippingBean: Managed bean that acts as a client to the Order +Service

    +
  • +
  • +

    web.UserController: Managed bean that corresponds to the UserBean +session bean

    +
  • +
+
+
+
+

59.2.6.4 Helper Class Used in Duke’s Shipment

+
+

The Duke’s Shipment managed beans use only one helper class, found in +the com.forest.shipment.web.util package:

+
+
+
    +
  • +

    JsfUtil: Class used for JavaServer Faces operations, such as queuing +messages on a FacesContext instance

    +
  • +
+
+
+
+

59.2.6.5 Qualifier Used in Duke’s Shipment

+
+

Duke’s Shipment includes the @LoggedIn qualifier described in +Qualifiers Used in Duke’s Store.

+
+
+
+

59.2.6.6 Deployment Descriptors Used in Duke’s Shipment

+
+

Duke’s Shipment uses the following deployment descriptors:

+
+
+
    +
  • +

    faces-config.xml: The JavaServer Faces configuration file

    +
  • +
  • +

    glassfish-web.xml: The configuration file specific to GlassFish +Server

    +
  • +
  • +

    web.xml: The web application configuration file

    +
  • +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+
+ + + \ No newline at end of file diff --git a/dukes-forest003.html b/dukes-forest003.html new file mode 100644 index 0000000..47c1e02 --- /dev/null +++ b/dukes-forest003.html @@ -0,0 +1,184 @@ + + + + + + Building and Deploying the Duke's Forest Case Study Application + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

59.3 Building and Deploying the Duke’s Forest Case Study Application

+
+
+

You can use NetBeans IDE or Maven to build and deploy Duke’s Forest.

+
+
+

The following topics are addressed here:

+
+ +
+

59.3.1 To Build and Deploy the Duke’s Forest Application Using NetBeansIDE

+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server), as well as the database server (see +Starting and Stopping the Java DB +Server).

    +
  2. +
  3. +

    From the File menu, choose Open Project.

    +
  4. +
  5. +

    In the Open Project dialog box, navigate to:

    +
    +
    +
    tut-install/examples/case-studies
    +
    +
    +
  6. +
  7. +

    Select the dukes-forest folder.

    +
  8. +
  9. +

    Select the Open Required Projects check box and click Open Project.

    +
  10. +
  11. +

    Right-click the dukes-forest folder and select Build.

    +
    +

    This task configures the server, creates and populates the database, +builds all the subprojects, assembles them into JAR and WAR files, and +deploys the dukes-payment, dukes-store, and dukes-shipment +applications.

    +
    +
    +

    To configure the server, this task creates a JDBC security realm named +jdbcRealm, enables default principal-to-role mapping, and enables single +sign-on (SSO) for the HTTP Service.

    +
    +
  12. +
+
+
+
+

59.3.2 To Build and Deploy the Duke’s Forest Application Using Maven

+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server), as well as the database server (see +Starting and Stopping the Java DB +Server).

    +
  2. +
  3. +

    In a terminal window, go to:

    +
    +
    +
    tut-install/examples/case-studies/dukes-forest/
    +
    +
    +
  4. +
  5. +

    Enter the following command to configure the server, create and +populate the database, build all the subprojects, assemble them into JAR +and WAR files, and deploy the dukes-payment, dukes-store, and +dukes-shipment applications:

    +
    +
    +
    mvn install
    +
    +
    +
    +

    To configure the server, this task creates a JDBC security realm named +jdbcRealm, enables default principal-to-role mapping, and enables single +sign-on (SSO) for the HTTP Service.

    +
    +
  6. +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/dukes-forest004.html b/dukes-forest004.html new file mode 100644 index 0000000..c4502c6 --- /dev/null +++ b/dukes-forest004.html @@ -0,0 +1,243 @@ + + + + + + Running the Duke's Forest Application + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +
+
+
+
+

59.4 Running the Duke’s Forest Application

+
+
+

Running the Duke’s Forest application involves several tasks:

+
+
+
    +
  • +

    Registering as a customer of Duke’s Store

    +
  • +
  • +

    As a customer, purchasing products

    +
  • +
  • +

    As an administrator, approving or denying shipment of a product

    +
  • +
  • +

    As an administrator, creating a new product, customer, group, or +category

    +
  • +
+
+
+

The following topics are addressed here:

+
+ +
+

59.4.1 To Register as a Duke’s Store Customer

+
+
    +
  1. +

    In a web browser, enter the following URL:

    +
    +
    +
    http://localhost:8080/dukes-store
    +
    +
    +
    +

    The Duke’s Forest - Store page opens.

    +
    +
  2. +
  3. +

    Click Sign Up at the top of the page.

    +
  4. +
  5. +

    Fill in the form fields, then click Save.

    +
    +

    All fields are required, and the Password value must be at least 7 +characters in length.

    +
    +
  6. +
+
+
+
+

59.4.2 To Purchase Products

+
+
    +
  1. +

    To log in as the user you created, or as one of two users already in +the database, enter the user name and password and click Log In.

    +
    +

    The preexisting users have the user names jack@example.com and +robert@example.com, and they both have the same password, 1234.

    +
    +
  2. +
  3. +

    Click Products in the left sidebar.

    +
  4. +
  5. +

    On the page that appears, click one of the categories (Plants, Food, +Services, or Tools).

    +
  6. +
  7. +

    Choose a product and click Add to Cart.

    +
    +

    You can order only one of any one product, but you can order multiple +different products in multiple categories. The products and a running +total appear in the Shopping Cart in the left sidebar.

    +
    +
  8. +
  9. +

    When you have finished choosing products, click Checkout.

    +
    +

    A message appears: "Your order is being processed. Check the Orders page +to see the status of your order."

    +
    +
  10. +
  11. +

    Click Orders in the left sidebar to verify your order.

    +
    +

    If the total of the order exceeds $1,000, the status of the order is +"Order cancelled," because the Payment web service denies orders over +that limit. Otherwise, the status is "Ready to ship."

    +
    +
  12. +
  13. +

    When you have finished placing orders, click Logout at the top of +the page.

    +
  14. +
+
+
+
+

59.4.3 To Approve Shipment of a Product

+
+
    +
  1. +

    Log in to Duke’s Store as an administrator.

    +
    +

    Your user name is admin@example.com, and your password is 1234.

    +
    +
    +

    The main administration page allows you to view categories, customers, +administrators, groups, products, and orders, and to create new objects +of all types except orders.

    +
    +
  2. +
  3. +

    At the bottom of the page, click Approve Shipment.

    +
    +

    This action takes you to Duke’s Shipment, retaining your administrator +login.

    +
    +
  4. +
  5. +

    On the Pending list, click Approve to approve an order and move it +to the Shipped area of the page.

    +
    +

    If you click Deny, the order disappears from the page. If you log in to +Duke’s Store again as the customer, it will appear in the Orders list as +"Order cancelled."

    +
    +
  6. +
+
+
+

To return to Duke’s Store from Duke’s Shipment, click Return to Duke’s +Store.

+
+
+
+

59.4.4 To Create a New Product

+
+

You can create other kinds of objects as well as products. Creating +products is more complex than the other creation processes, so it is +described here.

+
+
+
    +
  1. +

    Log in to Duke’s Store as an administrator.

    +
  2. +
  3. +

    On the main administration page, click Create New Product.

    +
  4. +
  5. +

    Enter values in the Name, Price, and Description fields.

    +
  6. +
  7. +

    Select a category, then click Next.

    +
  8. +
  9. +

    On the Upload the Product Image page, click Browse to locate an +image on your file system using a file chooser.

    +
  10. +
  11. +

    Click Next.

    +
  12. +
  13. +

    On the next page, view the product fields, then click Done.

    +
  14. +
  15. +

    Click Products in the left sidebar, then click the category to +verify that the product has been added.

    +
  16. +
  17. +

    Click Administration at the top of the page to return to the main +administration page, or click Logout to log out.

    +
  18. +
+
+
+ +
+
+
+
+ + + \ No newline at end of file diff --git a/dukes-tutoring.html b/dukes-tutoring.html new file mode 100644 index 0000000..4af3c51 --- /dev/null +++ b/dukes-tutoring.html @@ -0,0 +1,111 @@ + + + + + + Duke's Tutoring Case Study Example + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

58 Duke’s Tutoring Case Study Example

+
+
+

The Duke’s Tutoring example application is a tracking system for a +tutoring center for students. Students can be checked in and out and can +visit the park. The tutoring center can track attendance and status +updates and can store contact information for guardians and students. +Administrators can maintain the tutoring center system.

+
+
+

The following topics are addressed here:

+
+ +
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/dukes-tutoring001.html b/dukes-tutoring001.html new file mode 100644 index 0000000..6d36e42 --- /dev/null +++ b/dukes-tutoring001.html @@ -0,0 +1,227 @@ + + + + + + Design and Architecture of Duke's Tutoring + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

58.1 Design and Architecture of Duke’s Tutoring

+
+
+

Duke’s Tutoring is a web application that incorporates several Java EE +technologies. It exposes both a main interface (for students, guardians, +and tutoring center staff) and an administration interface (for staff to +maintain the system). The business logic for both interfaces is provided +by enterprise beans. The enterprise beans use the Java Persistence API +to create and store the application’s data in the database. +Figure 58-1 illustrates the architecture of the +application.

+
+
+

Figure 58-1 Architecture of the Duke’s Tutoring Example Application

+
+ +
+

The Duke’s Tutoring application is organized into two main projects: the +dukes-tutoring-common library and the dukes-tutoring-war web +application. The dukes-tutoring-common library project contains the +entity classes and helper classes used by the dukes-tutoring-war web +application, and dukes-tutoring-common is packaged and deployed with +dukes-tutoring-war. The library JAR file is useful for allowing the +entity classes and helper classes to be reused by other applications, +such as a JavaFX client application.

+
+
+

Duke’s Tutoring uses the following Java EE 7 platform features:

+
+
+
    +
  • +

    Java Persistence API entities

    +
    +
      +
    • +

      A custom Bean Validation annotation, @Email, for validating email +addresses

      +
    • +
    • +

      A standard jta-data-source definition that will create the JDBC +resource on deployment

      +
    • +
    • +

      A standard property in the persistence.xml deployment descriptor to +automatically and portably create and delete the tables in the +jta-data-source

      +
    • +
    +
    +
  • +
  • +

    Enterprise beans

    +
    +
      +
    • +

      Local, no-interface view session and singleton beans

      +
    • +
    • +

      JAX-RS resources in a session bean

      +
    • +
    • +

      Java EE security constraints on the administrative interface business +methods

      +
    • +
    • +

      All enterprise beans packaged within the WAR

      +
    • +
    +
    +
  • +
  • +

    WebSocket

    +
    +
      +
    • +

      A WebSocket server endpoint that automatically publishes the status +of students to client endpoints

      +
    • +
    +
    +
  • +
  • +

    Contexts and Dependency Injection

    +
    +
      +
    • +

      A CDI event that is fired when the status of a student changes

      +
    • +
    • +

      Handler methods for updating the application once the status event is +fired

      +
    • +
    • +

      CDI managed beans for Facelets pages

      +
    • +
    • +

      Bean Validation annotations in the CDI managed beans

      +
    • +
    +
    +
  • +
  • +

    JavaServer Faces technology, using Facelets for the web front end

    +
    +
      +
    • +

      Templating

      +
    • +
    • +

      Composite components

      +
    • +
    • +

      A custom formatter, PhoneNumberFormatter

      +
    • +
    • +

      Security constraints on the administrative interface

      +
    • +
    • +

      Ajax-enabled Facelets components

      +
    • +
    +
    +
  • +
+
+
+

The Duke’s Tutoring application has two main user interfaces, both +packaged within a single WAR file:

+
+
+
    +
  • +

    The main interface, for students, guardians, and staff

    +
  • +
  • +

    The administrative interface used by the staff to manage the students +and guardians, and to generate attendance reports

    +
  • +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/dukes-tutoring002.html b/dukes-tutoring002.html new file mode 100644 index 0000000..4035196 --- /dev/null +++ b/dukes-tutoring002.html @@ -0,0 +1,426 @@ + + + + + + Main Interface + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

58.2 Main Interface

+
+
+

The main interface allows students and staff to check students in and +out, and record when students are outside at the playground.

+
+
+

The following topics are addressed here:

+
+ +
+

58.2.1 Java Persistence API Entities Used in the Main Interface

+
+

The following entities used in the main interface encapsulate data +stored and manipulated by Duke’s Tutoring, and are located in the +dukestutoring.entity package in the dukes-tutoring-common project.

+
+
+
    +
  • +

    Person: The Person entity defines attributes common to students +and guardians tracked by the application. These attributes are the +person’s name and contact information, including phone numbers and email +address. This entity has two subclasses, Student and Guardian.

    +
  • +
  • +

    PersonDetails: The PersonDetails entity is used to store +additional data common to all people, such as attributes like pictures +and the person’s birthday, which aren’t included in the Person entity +for performance reasons.

    +
  • +
  • +

    Student and Guardian: The Student entity stores attributes +specific to the students who come to tutoring. This includes information +like the student’s grade level and school. The Guardian entity’s +attributes are specific to the parents or guardians of a Student. +Students and guardians have a many-to-many relationship. That is, a +student may have one or more guardians, and a guardian may have one or +more students.

    +
  • +
  • +

    Address: The Address entity represents a mailing address and is +associated with Person entities. Addresses and people have a +many-to-one relationship. That is, one person may have many addresses.

    +
  • +
  • +

    TutoringSession: The TutoringSession entity represents a +particular day at the tutoring center. A particular tutoring session +tracks which students attended that day, and which students went to the +park.

    +
  • +
  • +

    StatusEntry: The StatusEntry entity, which logs when a student’s +status changes, is associated with the TutoringSession entity. +Students' statuses change when they check in to a tutoring session, when +they go to the park, and when they check out. The status entry allows +the tutoring center staff to track exactly which students attended a +tutoring session, when they checked in and out, which students went to +the park while they were at the tutoring center, and when they went to +and came back from the park.

    +
  • +
+
+
+

For information on creating Java Persistence API entities, see +Chapter 37, "Introduction to the Java +Persistence API." For information on validating entity data, see +Validating Persistent Fields and +Properties and Chapter 22, +"Bean Validation: Advanced Topics."

+
+
+
+

58.2.2 Enterprise Beans Used in the Main Interface

+
+

The following enterprise beans used in the main interface provide the +business logic for Duke’s Tutoring, and are located in the +dukestutoring.ejb package in the dukes-tutoring-war project:

+
+
+
    +
  • +

    ConfigBean is a singleton session bean used to create the default +students when the application is initially deployed, and to create an +automatic EJB timer that creates tutoring session entities every +weekday.

    +
  • +
  • +

    RequestBean is a stateless session bean containing the business +methods for the main interface. The bean also has business methods for +retrieving lists of students. These business methods use strongly typed +Criteria API queries to retrieve data from the database. RequestBean +also injects a CDI event instance, StatusEvent. This event is fired +from the business methods when the status of a student changes.

    +
  • +
+
+
+

For information on creating and using enterprise beans, see +Enterprise Beans. For information on +creating strongly typed Criteria API queries, see +Chapter 40, "Using the Criteria API +to Create Queries." For information on CDI events, see +Using Events in CDI Applications.

+
+
+
+

58.2.3 WebSocket Endpoint Used in the Main Interface

+
+

The javaeetutorial.dukestutoring.web.websocket.StatusEndpoint class is +a WebSocket server endpoint that returns students and their status to +client endpoints. The StatusEndpoint.updateStatus method is a CDI +observer method for the StatusEvent event. When a student’s status +changes in the main interface, a StatusEvent is fired. The +updateStatus observer method is called by the container, and pushes +out the status change to all the client endpoints registered with +StatusEndpoint.

+
+
+

The index.xhtml JavaServer Faces page contains JavaScript code to +connect to the WebSocket endpoint. The onMessage method on this page +clicks a JavaServer Faces button, which makes an Ajax request to refresh +the table that shows the current status of the students.

+
+
+

For more information on WebSocket endpoints, see +Chapter 18, "Java API for WebSocket." For +information on CDI events, see Using Events in +CDI Applications.

+
+
+
+

58.2.4 Facelets Files Used in the Main Interface

+
+

The Duke’s Tutoring application uses Facelets to display the user +interface, making extensive use of the templating features of Facelets. +Facelets, the default display technology for JavaServer Faces +technology, consists of XHTML files located in the +tut-install`/examples/case-studies/dukes-tutoring-war/src/main/webapp/` +directory.

+
+
+

The following Facelets files are used in the main interface:

+
+
+
    +
  • +

    template.xhtml: Template file for the main interface

    +
  • +
  • +

    error.xhtml: Error file if something goes wrong

    +
  • +
  • +

    index.xhtml: Landing page for the main interface

    +
  • +
  • +

    park.xhtml: Page showing who is currently at the park

    +
  • +
  • +

    current.xhtml: Page showing who is currently in today’s tutoring +session

    +
  • +
  • +

    statusEntries.xhtml: Page showing the detailed status entry log for +today’s session

    +
  • +
  • +

    resources/components/allStudentsTable.xhtml: A composite component +for a table displaying all active students

    +
  • +
  • +

    resources/components/allInactiveStudentsTable.xhtml: A composite +component for a table displaying all inactive students

    +
  • +
  • +

    resources/components/currentSessionTable.xhtml: A composite +component for a table displaying all students in today’s session

    +
  • +
  • +

    resources/components/parkTable.xhtml: A composite component for a +table displaying all students currently at the park

    +
  • +
  • +

    WEB-INF/includes/mainNav.xhtml: XHTML fragment for the main +interface’s navigation bar

    +
  • +
+
+
+

For information on using Facelets, see +Chapter 8, "Introduction to Facelets."

+
+
+
+

58.2.5 Helper Classes Used in the Main Interface

+
+

The following helper classes, found in the dukes-tutoring-common +project’s dukestutoring.util package, are used in the main interface.

+
+
+
    +
  • +

    CalendarUtil: A class that provides a method to strip the +unnecessary time data from java.util.Calendar instances.

    +
  • +
  • +

    Email: A custom Bean Validation annotation class for validating +email addresses in the Person entity.

    +
  • +
  • +

    StatusType: An enumerated type defining the different statuses that +a student can have. Possible values are IN, OUT, and PARK. +StatusType is used throughout the application, including in the +StatusEntry entity, and throughout the main interface. StatusType +also defines a toString method that returns a localized translation of +the status based on the locale.

    +
  • +
+
+
+
+

58.2.6 Properties Files

+
+

The strings used in the main interface are encapsulated into resource +bundles to allow the display of localized strings in multiple locales. +Each of the properties files has locale-specific files appended with +locale codes, containing the translated strings for each locale. For +example, Messages_es.properties contains the localized strings for +Spanish locales.

+
+
+

The dukes-tutoring-common project has the following resource bundle +under src/main/resources/.

+
+
+
    +
  • +

    javaeetutorial/dukestutoring/util/StatusMessages.properties: Strings +for each of the status types defined in the StatusType enumerated type +for the default locale. Each supported locale has a property file of the +form StatusMessages_`locale prefix.properties` containing the +localized strings. For example, the strings for Spanish-speaking locales +are located in StatusMessages_es.properties.

    +
  • +
+
+
+

The dukes-tutoring-war project has the following resource bundles +under src/main/resources/.

+
+
+
    +
  • +

    ValidationMessages.properties: Strings for the default locale used +by the Bean Validation runtime to display validation messages. This file +must be named ValidationMessages.properties and located in the default +package as required by the Bean Validation specification. Each supported +locale has a property file of the form ValidationMessages_`locale +prefix.properties` containing the localized strings. For example, the +strings for German-speaking locales are located in +ValidationMessages_de.properties.

    +
  • +
  • +

    javaeetutorial/dukestutoring/web/messages/Messages.properties: +Strings for the default locale for the main and administration Facelets +interface. Each supported locale has a property file of the form +Messages_`locale prefix.properties` containing the localized strings. +For example, the strings for simplified Chinese-speaking locales are +located in Messages_zh.properties.

    +
  • +
+
+
+

For information on localizing web applications, see +Registering Application Messages.

+
+
+
+

58.2.7 Deployment Descriptors Used in Duke’s Tutoring

+
+

Duke’s Tutoring uses these deployment descriptors in the +src/main/webapp/WEB-INF directory of the dukes-tutoring-war project:

+
+
+
    +
  • +

    faces-config.xml: The JavaServer Faces configuration file

    +
  • +
  • +

    glassfish-web.xml: The configuration file specific to GlassFish +Server, which defines security role mapping

    +
  • +
  • +

    web.xml: The web application configuration file

    +
  • +
+
+
+

Duke’s Tutoring also uses the following deployment descriptor in the +src/main/resources/META-INF directory of the dukes-tutoring-common +project:

+
+
+
    +
  • +

    persistence.xml: The Java Persistence API configuration file

    +
  • +
+
+
+

No enterprise bean deployment descriptor is used in Duke’s Tutoring. +Annotations in the enterprise bean class files are used for the +configuration of enterprise beans in this application.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/dukes-tutoring003.html b/dukes-tutoring003.html new file mode 100644 index 0000000..11dbd6c --- /dev/null +++ b/dukes-tutoring003.html @@ -0,0 +1,236 @@ + + + + + + Administration Interface + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

58.3 Administration Interface

+
+
+

The administration interface of Duke’s Tutoring is used by the tutoring +center staff to manage the data employed by the main interface: the +students, the students' guardians, and the addresses. The administration +interface uses many of the same components as the main interface. +Additional components that are only used in the administration interface +are described here.

+
+
+

The following topics are addressed here:

+
+ +
+

58.3.1 Enterprise Beans Used in the Administration Interface

+
+

The following enterprise bean, in the dukestutoring.ejb package of the +dukes-tutoring-war project, is used in the administration interface.

+
+
+
    +
  • +

    AdminBean: A stateless session bean for all the business logic used +in the administration interface. Calls security methods to allow +invocation of the business methods only by authorized users.

    +
  • +
+
+
+
+

58.3.2 Facelets Files Used in the Administration Interface

+
+

The following Facelets files, under src/main/webapp/, are used in the +administration interface:

+
+
+
    +
  • +

    admin/adminTemplate.xhtml: Template for the administration interface

    +
  • +
  • +

    admin/index.xhtml: Landing page for the administration interface

    +
  • +
  • +

    login.xhtml: Login page for the security-constrained administration +interface

    +
  • +
  • +

    loginError.xhtml: Page displayed if there are errors authenticating +the administration user

    +
  • +
  • +

    admin/address directory: Pages that allow you to create, edit, and +delete Address entities

    +
  • +
  • +

    admin/guardian directory: Pages that allow you to create, edit, and +delete Guardian entities

    +
  • +
  • +

    admin/student directory: Pages that allow you to create, edit, and +delete Student entities

    +
  • +
  • +

    resources/components/formLogin.xhtml: Composite component for a +login form using Java EE security

    +
  • +
  • +

    WEB-INF/includes/adminNav.xhtml: XHTML fragment for the +administration interface’s navigation bar

    +
  • +
+
+
+
+

58.3.3 CDI Managed Beans Used in the Administration Interface

+
+

The CDI managed beans used in the administration interface are located +in the dukestutoring.web package in the dukes-tutoring-war project.

+
+
+
    +
  • +

    StudentBean.java: A managed bean for the Facelets pages used to +create and edit students. The first and last names have Bean Validation +annotations that require the fields to be filled in. The phone numbers +have Bean Validation annotations to ensure that the submitted data is +well-formed.

    +
  • +
  • +

    GuardianBean.java: A managed bean for the Facelets pages used to +create guardians for and assign guardians to students. The first and +last names have Bean Validation annotations that require the fields to +be filled in. The phone numbers have Bean Validation annotations to +ensure that the submitted data is well-formed.

    +
  • +
  • +

    AddressBean.java: A managed bean for the Facelets pages used to +create addresses for students. The street, city, province, and postal +code attributes have Bean Validation annotations that require the fields +to be filled in, and the postal code attribute has an additional +annotation to ensure that the data is properly formed.

    +
  • +
+
+
+
+

58.3.4 Helper Classes Used in the Administration Interface

+
+

The following helper classes, found in the dukes-tutoring-war +project’s dukestutoring.web.util package, are used in the +administration interface.

+
+
+
    +
  • +

    EntityConverter: A parent class to StudentConverter and +GuardianConverter that defines a cache to store the entity classes +when converting the entities for use in JavaServer Faces user interface +components. The cache helps increase performance. The cache is stored in +the JavaServer Faces context.

    +
  • +
  • +

    StudentConverter: A JavaServer Faces converter for the Student +entity class. This class contains methods to convert Student instances +to strings and back again, so they can be used in the user interface +components of the application.

    +
  • +
  • +

    GuardianConverter: Similar to StudentConverter, this class is a +converter for the Guardian entity class.

    +
  • +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/dukes-tutoring004.html b/dukes-tutoring004.html new file mode 100644 index 0000000..5cedc74 --- /dev/null +++ b/dukes-tutoring004.html @@ -0,0 +1,339 @@ + + + + + + Running the Duke's Tutoring Case Study Application + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

58.4 Running the Duke’s Tutoring Case Study Application

+
+
+

This section describes how to build, package, deploy, and run the Duke’s +Tutoring application.

+
+
+

The following topics are addressed here:

+
+ +
+

58.4.1 Running Duke’s Tutoring

+
+

You can use either NetBeans IDE or Maven to build, package, deploy, and +run Duke’s Tutoring.

+
+
+

The following topics are addressed here:

+
+ +
+

58.4.1.1 To Build and Deploy Duke’s Tutoring Using NetBeans IDE

+
+

Before You Begin

+
+
+

You must have already configured GlassFish Server as a Java EE server in +NetBeans IDE, as described in To Add +GlassFish Server as a Server Using NetBeans IDE.

+
+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    If the database server is not already running, start it as described +in Starting and Stopping the Java DB +Server.

    +
  4. +
  5. +

    From the File menu, choose Open Project.

    +
  6. +
  7. +

    In the Open Project dialog box, navigate to:

    +
    +
    +
    tut-install/examples/case-studies
    +
    +
    +
  8. +
  9. +

    Select the dukes-tutoring folder.

    +
  10. +
  11. +

    Select the Open Required Projects check box and click Open Project.

    + +++ + + + + + +
    +

    Note:

    +
    +
    +

    The first time you open Duke’s Tutoring in NetBeans, you will see error +glyphs in the Projects tab. This is expected, as the metamodel files +used by the enterprise beans for Criteria API queries have not yet been +generated.

    +
    +
    +
    +
     +
    +7.  In the Projects tab, right-click the `dukes-tutoring` project and
    +select Build.
    +
    +
    +
    +

    This command creates a JDBC security realm named tutoringRealm, builds +and packages the dukes-tutoring-common and dukes-tutoring-war +projects, and deploys dukes-tutoring-war to GlassFish Server, starting +the Java DB database and GlassFish Server if they have not already been +started.

    +
    +
  12. +
+
+
+
+

58.4.1.2 To Build and Deploy Duke’s Tutoring Using Maven

+
+
    +
  1. +

    Make sure that GlassFish Server has started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    If the database server is not already running, start it as described +in Starting and Stopping the Java DB +Server.

    +
  4. +
  5. +

    In a terminal window, go to:

    +
    +
    +
    tut-install/examples/case-studies/dukes-tutoring/
    +
    +
    +
  6. +
  7. +

    Enter the following command:

    +
    +
    +
    mvn install
    +
    +
    +
    +

    This command creates a JDBC security realm named tutoringRealm, builds +and packages the dukes-tutoring-common and dukes-tutoring-war +projects, and deploys dukes-tutoring-war to GlassFish Server.

    +
    +
  8. +
+
+
+
+

58.4.1.3 Using Duke’s Tutoring

+
+

Once Duke’s Tutoring is running on GlassFish Server, use the main +interface to experiment with checking students in and out or sending +them to the park.

+
+
+

To Use the Main Interface of Duke’s Tutoring

+
+
+
    +
  1. +

    In a web browser, open the main interface at the following URL:

    +
    +
    +
    http://localhost:8080/dukes-tutoring-war/
    +
    +
    +
  2. +
  3. +

    Use the main interface to check students in and out, and to log when +the students go to the park.

    +
  4. +
+
+
+

To Use the Administration Interface of Duke’s Tutoring

+
+
+

Follow these instructions to log in to the administration interface of +Duke’s Tutoring and add new students, guardians, and addresses.

+
+
+
    +
  1. +

    From the main interface, open the administration interface by +clicking Administration main page in the left menu.

    +
    +

    This redirects you to the login page at the following URL:

    +
    +
    +
    +
    http://localhost:8080/dukes-tutoring-war/admin/index.xhtml
    +
    +
    +
  2. +
  3. +

    On the login page, enter admin@example.com in the User name field, +and enter javaee in the Password field.

    +
  4. +
  5. +

    Use the administration interface to add or modify students, add +guardians, or add addresses.

    +
    +
      +
    • +

      To add a new student, click Create new student in the left menu, fill +in the fields (two are required) in the form that opens, and click +Submit. The Email, Home phone, and Mobile phone fields have formatting +requirements enforced by HTML5 pass-through or by Bean Validation +constraints.

      +
    • +
    • +

      To modify a student, click Edit next to the student’s name, modify the +fields in the form that opens, and click Submit. To edit another +student, choose the student from the drop-down menu at the top of the +page and click Change student.

      +
    • +
    • +

      To remove a student, click Remove next to the student’s name, then +click Confirm in the page that appears. This action removes the student +from the tutoring session but does not remove the student from the +database. To add the student to the tutoring session again, click +Activate student in the left menu, then click Activate next to the +student’s name in the page that appears.

      +
    • +
    • +

      To add a guardian for a student, click Add guardian next to the +student’s name. The page that appears shows the student’s name, the +available guardians, and the current guardians for the student, if any. +To add an existing guardian for that student, select the guardian from +the list and click Add guardian. To create a new guardian for the +student, fill in the fields and click Submit. To remove a guardian from +a student, select one of the student’s current guardians from the list +and click Remove guardian.

      +
    • +
    • +

      To add an address for a student, click Add address next to the +student’s name. In the page that appears, fill in the appropriate fields +in the form that appears, and click Submit. Four fields are required.

      +
    • +
    +
    +
  6. +
+
+
+

The administration interface is not fully implemented. It is not +possible to edit a guardian or to view or edit an address, although +Facelets pages exist for these features. The application also makes no +use of the properties in the PersonDetails entity. Feel free to modify +the application to add these features.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+
+ + + \ No newline at end of file diff --git a/ejb-async.html b/ejb-async.html new file mode 100644 index 0000000..3d21aa5 --- /dev/null +++ b/ejb-async.html @@ -0,0 +1,100 @@ + + + + + + Using Asynchronous Method Invocation in Session Beans + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

36 Using Asynchronous Method Invocation in Session Beans

+
+
+

This chapter discusses how to implement asynchronous business methods in +session beans and call them from enterprise bean clients.

+
+
+

The following topics are addressed here:

+
+ +
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/ejb-async001.html b/ejb-async001.html new file mode 100644 index 0000000..7616fd9 --- /dev/null +++ b/ejb-async001.html @@ -0,0 +1,254 @@ + + + + + + Asynchronous Method Invocation + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

36.1 Asynchronous Method Invocation

+
+
+

Session beans can implement asynchronous methods, business methods where +control is returned to the client by the enterprise bean container +before the method is invoked on the session bean instance. Clients may +then use the Java SE concurrency API to retrieve the result, cancel the +invocation, and check for exceptions. Asynchronous methods are typically +used for long-running operations, for processor-intensive tasks, for +background tasks, to increase application throughput, or to improve +application response time if the method invocation result isn’t required +immediately.

+
+
+

When a session bean client invokes a typical non-asynchronous business +method, control is not returned to the client until the method has +completed. Clients calling asynchronous methods, however, immediately +have control returned to them by the enterprise bean container. This +allows the client to perform other tasks while the method invocation +completes. If the method returns a result, the result is an +implementation of the java.util.concurrent.Future<V> interface, where +"V" is the result value type. The Future<V> interface defines methods +the client may use to check whether the computation is completed, wait +for the invocation to complete, retrieve the final result, and cancel +the invocation.

+
+
+

36.1.1 Creating an Asynchronous Business Method

+
+

Annotate a business method with javax.ejb.Asynchronous to mark that +method as an asynchronous method, or apply @Asynchronous at the class +level to mark all the business methods of the session bean as +asynchronous methods. Session bean methods that expose web services +can’t be asynchronous.

+
+
+

Asynchronous methods must return either void or an implementation of +the Future<V> interface. Asynchronous methods that return void can’t +declare application exceptions, but if they return Future<V>, they may +declare application exceptions. For example:

+
+
+
+
@Asynchronous
+public Future<String> processPayment(Order order) throws PaymentException { ... }
+
+
+
+

This method will attempt to process the payment of an order, and return +the status as a String. Even if the payment processor takes a long +time, the client can continue working, and display the result when the +processing finally completes.

+
+
+

The javax.ejb.AsyncResult<V> class is a concrete implementation of the +Future<V> interface provided as a helper class for returning +asynchronous results. AsyncResult has a constructor with the result as +a parameter, making it easy to create Future<V> implementations. For +example, the processPayment method would use AsyncResult to return +the status as a String:

+
+
+
+
@Asynchronous
+public Future<String> processPayment(Order order) throws PaymentException {
+    ...
+    String status = ...;
+    return new AsyncResult<String>(status);
+}
+
+
+
+

The result is returned to the enterprise bean container, not directly to +the client, and the enterprise bean container makes the result available +to the client. The session bean can check whether the client requested +that the invocation be cancelled by calling the +javax.ejb.SessionContext.wasCancelled method. For example:

+
+
+
+
@Asynchronous
+public Future<String> processPayment(Order order) throws PaymentException {
+    ...
+    if (SessionContext.wasCancelled()) {
+        // clean up
+    } else {
+        // process the payment
+    }
+    ...
+}
+
+
+
+
+

36.1.2 Calling Asynchronous Methods from Enterprise Bean Clients

+
+

Session bean clients call asynchronous methods just like +non-asynchronous business methods. If the asynchronous method returns a +result, the client receives a Future<V> instance as soon as the method +is invoked. This instance can be used to retrieve the final result, +cancel the invocation, check whether the invocation has completed, check +whether any exceptions were thrown during processing, and check whether +the invocation was cancelled.

+
+
+

36.1.2.1 Retrieving the Final Result from an Asynchronous Method +Invocation +^^^^^^^^^^^^^^^^^^^^^^^^^

+
+
+

The client may retrieve the result using one of the Future<V>.get +methods. If processing hasn’t been completed by the session bean +handling the invocation, calling one of the get methods will result in +the client halting execution until the invocation completes. Use the +Future<V>.isDone method to determine whether processing has completed +before calling one of the get methods.

+
+
+

The get() method returns the result as the type specified in the type +value of the Future<V> instance. For example, calling +Future<String>.get() will return a String object. If the method +invocation was cancelled, calls to get() result in a +java.util.concurrent.CancellationException being thrown. If the +invocation resulted in an exception during processing by the session +bean, calls to get() result in a +java.util.concurrent.ExecutionException being thrown. The cause of the +ExecutionException may be retrieved by calling the +ExecutionException.getCause method.

+
+
+

The get(long timeout, java.util.concurrent.TimeUnit unit) method is +similar to the get() method, but allows the client to set a timeout +value. If the timeout value is exceeded, a +java.util.concurrent.TimeoutException is thrown. See the Javadoc for +the TimeUnit class for the available units of time to specify the +timeout value.

+
+
+

36.1.2.2 Cancelling an Asynchronous Method Invocation

+
+

Call the cancel(boolean mayInterruptIfRunning) method on the +Future<V> instance to attempt to cancel the method invocation. The +cancel method returns true if the cancellation was successful and +false if the method invocation cannot be cancelled.

+
+
+

When the invocation cannot be cancelled, the mayInterruptIfRunning +parameter is used to alert the session bean instance on which the method +invocation is running that the client attempted to cancel the +invocation. If mayInterruptIfRunning is set to true, calls to +SessionContext.wasCancelled by the session bean instance will return +true. If mayInterruptIfRunning is to set false, calls to +SessionContext.wasCancelled by the session bean instance will return +false.

+
+
+

The Future<V>.isCancelled method is used to check whether the method +invocation was cancelled before the asynchronous method invocation +completed by calling Future<V>.cancel. The isCancelled method +returns true if the invocation was cancelled.

+
+
+
+

36.1.2.3 Checking the Status of an Asynchronous Method Invocation

+
+

The Future<V>.isDone method returns true if the session bean +instance completed processing the method invocation. The isDone method +returns true if the asynchronous method invocation completed normally, +was cancelled, or resulted in an exception. That is, isDone indicates +only whether the session bean has completed processing the invocation.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+
+ + + \ No newline at end of file diff --git a/ejb-async002.html b/ejb-async002.html new file mode 100644 index 0000000..3c0281e --- /dev/null +++ b/ejb-async002.html @@ -0,0 +1,383 @@ + + + + + + The async Example Application + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

36.2 The async Example Application

+
+
+

The async example demonstrates how to define an asynchronous business +method on a session bean and call it from a web client. This example +contains two modules.

+
+
+
    +
  • +

    A web application (async-war) that contains a stateless session bean +and a JavaServer Faces interface. The MailerBean stateless session +bean defines an asynchronous method, sendMessage, which uses the +JavaMail API to send an email to an specified email address.

    +
  • +
  • +

    An auxiliary Java SE program (async-smtpd) that simulates an SMTP +server. This program listens on TCP port 3025 for SMTP requests and +prints the email messages to the standard output (instead of delivering +them).

    +
  • +
+
+
+

The following section describes the architecture of the async-war +module.

+
+
+

36.2.1 Architecture of the async-war Module

+
+

The async-war module consists of a single stateless session bean, +MailerBean, and a JavaServer Faces web application front end that uses +Facelets tags in XHTML files to display a form for users to enter the +email address for the recipient of an email. The status of the email is +updated when the email is finally sent.

+
+
+

The MailerBean session bean injects a JavaMail resource used to send +an email message to an address specified by the user. The message is +created, modified, and sent using the JavaMail API. The session bean +looks like this:

+
+
+
+
@Named
+@Stateless
+public class MailerBean {
+    @Resource(name="mail/myExampleSession")
+    private Session session;
+    private static final Logger logger =
+            Logger.getLogger(MailerBean.class.getName());
+
+    @Asynchronous
+    public Future<String> sendMessage(String email) {
+        String status;
+        try {
+            Properties properties = new Properties();            properties.put("mail.smtp.port", "3025");            session = Session.getInstance(properties);                        Message message = new MimeMessage(session);
+            message.setFrom();
+            message.setRecipients(Message.RecipientType.TO,
+                    InternetAddress.parse(email, false));
+            message.setSubject("Test message from async example");
+            message.setHeader("X-Mailer", "JavaMail");
+            DateFormat dateFormatter = DateFormat
+                    .getDateTimeInstance(DateFormat.LONG, DateFormat.SHORT);
+            Date timeStamp = new Date();
+            String messageBody = "This is a test message from the async "
+                    + "example of the Java EE Tutorial. It was sent on "
+                    + dateFormatter.format(timeStamp)
+                    + ".";
+            message.setText(messageBody);
+            message.setSentDate(timeStamp);
+            Transport.send(message);
+            status = "Sent";
+            logger.log(Level.INFO, "Mail sent to {0}", email);
+        } catch (MessagingException ex) {
+            logger.severe("Error in sending message.");
+            status = "Encountered an error: " + ex.getMessage();
+            logger.severe(ex.getMessage());
+        }
+        return new AsyncResult<>(status);
+    }
+}
+
+
+
+

The injected JavaMail resource can be configured through the GlassFish +Server Administration Console, through a GlassFish Server administrative +command, or through a resource configuration file packaged with the +application. The resource configuration can be modified at runtime by +the GlassFish Server administrator to use a different mail server or +transport protocol.

+
+
+

The web client consists of a Facelets template, template.xhtml; two +Facelets clients, index.xhtml and response.xhtml; and a JavaServer +Faces managed bean, MailerManagedBean. The index.xhtml file contains +a form for the target email address. When the user submits the form, the +MailerManagedBean.send method is called. This method uses an injected +instance of the MailerBean session bean to call +MailerBean.sendMessage. The result is sent to the response.xhtml +Facelets view.

+
+
+
+

36.2.2 Running the async Example

+
+

You can use either NetBeans IDE or Maven to build, package, deploy, and +run the async example.

+
+
+

The following topics are addressed here:

+
+ +
+

36.2.2.1 To Run the async Example Application Using NetBeans IDE

+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    From the File menu, choose Open Project.

    +
  4. +
  5. +

    In the Open Project dialog box, navigate to:

    +
    +
    +
    tut-install/examples/ejb
    +
    +
    +
  6. +
  7. +

    Select the async folder, select Open Required Projects, and click +Open Project.

    +
  8. +
  9. +

    In the Projects tab, right-click the async-smtpd project and +select Run.

    +
    +

    The SMTP server simulator starts accepting connections. The async-smptd +output tab shows the following message:

    +
    +
    +
    +
    [Test SMTP server listening on port 3025]
    +
    +
    +
  10. +
  11. +

    In the Projects tab, right-click the async-war project and select +Build.

    +
    +

    This command configures the JavaMail resource using a GlassFish Server +administrative command and builds, packages, and deploys the async-war +module.

    +
    +
  12. +
  13. +

    Open the following URL in a web browser window:

    +
    +
    +
    http://localhost:8080/async-war
    +
    +
    +
  14. +
  15. +

    In the web browser window, enter an email address and click Send +email.

    +
    +

    The MailerBean stateless bean uses the JavaMail API to deliver an +email to the SMTP server simulator. The async-smptd output window in +NetBeans IDE shows the resulting email message, including its headers.

    +
    +
  16. +
  17. +

    To stop the SMTP server simulator, click the X button on the right +side of the status bar in NetBeans IDE.

    +
  18. +
  19. +

    Delete the JavaMail session resource.

    +
  20. +
  21. +

    In the Services tab, expand the Servers node, then expand the +GlassFish Server server node.

    +
  22. +
  23. +

    Expand the Resources node, then expand the JavaMail Sessions node.

    +
  24. +
  25. +

    Right-click mail/myExampleSession and select Unregister.

    +
  26. +
+
+
+
+

36.2.2.2 To Run the async Example Application Using Maven

+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    In a terminal window, go to:

    +
    +
    +
    tut-install/examples/ejb/async/async-smtpd/
    +
    +
    +
  4. +
  5. +

    Enter the following command to build and package the SMTP server +simulator:

    +
    +
    +
    mvn install
    +
    +
    +
  6. +
  7. +

    Enter the following command to start the STMP server simulator:

    +
    +
    +
    mvn exec:java
    +
    +
    +
    +

    The following message appears:

    +
    +
    +
    +
    [Test SMTP server listening on port 3025]
    +
    +
    +
    +

    Keep this terminal window open.

    +
    +
  8. +
  9. +

    In a new terminal window, go to:

    +
    +
    +
    tut-install/examples/ejb/async/async-war
    +
    +
    +
  10. +
  11. +

    Enter the following command to configure the JavaMail resource and +to build, package, and deploy the async-war module:

    +
    +
    +
    mvn install
    +
    +
    +
  12. +
  13. +

    Open the following URL in a web browser window:

    +
    +
    +
    http://localhost:8080/async-war
    +
    +
    +
  14. +
  15. +

    In the web browser window, enter an email address and click Send +email.

    +
    +

    The MailerBean stateless bean uses the JavaMail API to deliver an +email to the SMTP server simulator. The resulting email message appears +on the first terminal window, including its headers.

    +
    +
  16. +
  17. +

    To stop the SMTP server simulator, close the terminal window in +which you issued the command to start the STMP server simulator.

    +
  18. +
  19. +

    To delete the JavaMail session resource, type the following command:

    +
    +
    +
    asadmin delete-javamail-resource mail/myExampleSession
    +
    +
    +
  20. +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+
+ + + \ No newline at end of file diff --git a/ejb-basicexamples.html b/ejb-basicexamples.html new file mode 100644 index 0000000..d66e682 --- /dev/null +++ b/ejb-basicexamples.html @@ -0,0 +1,116 @@ + + + + + + Running the Enterprise Bean Examples + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

34 Running the Enterprise Bean Examples

+
+
+

This chapter describes the EJB examples. Session beans provide a simple +but powerful way to encapsulate business logic within an application. +They can be accessed from remote Java clients, web service clients, and +components running in the same server.

+
+
+

The following topics are addressed here:

+
+ +
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/ejb-basicexamples001.html b/ejb-basicexamples001.html new file mode 100644 index 0000000..97aa74b --- /dev/null +++ b/ejb-basicexamples001.html @@ -0,0 +1,107 @@ + + + + + + Overview of the EJB Examples + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

34.1 Overview of the EJB Examples

+
+
+

In Chapter 33, "Getting Started with +Enterprise Beans", you built a stateless session bean named +ConverterBean. This chapter examines the source code of four more +session beans:

+
+
+
    +
  • +

    CartBean: a stateful session bean that is accessed by a remote +client

    +
  • +
  • +

    CounterBean: a singleton session bean

    +
  • +
  • +

    HelloServiceBean: a stateless session bean that implements a web +service

    +
  • +
  • +

    TimerSessionBean: a stateless session bean that sets a timer

    +
  • +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/ejb-basicexamples002.html b/ejb-basicexamples002.html new file mode 100644 index 0000000..7444cf1 --- /dev/null +++ b/ejb-basicexamples002.html @@ -0,0 +1,589 @@ + + + + + + The cart Example + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

34.2 The cart Example

+
+
+

The cart example represents a shopping cart in an online bookstore and +uses a stateful session bean to manage the operations of the shopping +cart. The bean’s client can add a book to the cart, remove a book, or +retrieve the cart’s contents. To assemble cart, you need the following +code:

+
+
+
    +
  • +

    Session bean class (CartBean)

    +
  • +
  • +

    Remote business interface (Cart)

    +
  • +
+
+
+

All session beans require a session bean class. All enterprise beans +that permit remote access must have a remote business interface. To meet +the needs of a specific application, an enterprise bean may also need +some helper classes. The CartBean session bean uses two helper +classes, BookException and IdVerifier, which are discussed in the +section Helper Classes.

+
+
+

The source code for this example is in the +tut-install`/examples/ejb/cart/` directory.

+
+
+

34.2.1 The Business Interface

+
+

The Cart business interface is a plain Java interface that defines all +the business methods implemented in the bean class. If the bean class +implements a single interface, that interface is assumed to the business +interface. The business interface is a local interface unless it is +annotated with the javax.ejb.Remote annotation; the javax.ejb.Local +annotation is optional in this case.

+
+
+

The bean class may implement more than one interface. In that case, the +business interfaces must either be explicitly annotated @Local or +@Remote or be specified by decorating the bean class with @Local or +@Remote. However, the following interfaces are excluded when +determining whether the bean class implements more than one interface:

+
+
+
    +
  • +

    java.io.Serializable

    +
  • +
  • +

    java.io.Externalizable

    +
  • +
  • +

    Any of the interfaces defined by the javax.ejb package

    +
  • +
+
+
+

The source code for the Cart business interface is as follows:

+
+
+
+
package javaeetutorial.cart.ejb;
+
+import cart.util.BookException;
+import java.util.List;
+import javax.ejb.Remote;
+
+@Remote
+public interface Cart {
+    public void initialize(String person) throws BookException;
+    public void initialize(String person, String id) throws BookException;
+    public void addBook(String title);
+    public void removeBook(String title) throws BookException;
+    public List<String> getContents();
+    public void remove();
+}
+
+
+
+
+

34.2.2 Session Bean Class

+
+

The session bean class for this example is called CartBean. Like any +stateful session bean, the CartBean class must meet the following +requirements.

+
+
+
    +
  • +

    The class is annotated @Stateful.

    +
  • +
  • +

    The class implements the business methods defined in the business +interface.

    +
  • +
+
+
+

Stateful session beans may also do the following.

+
+
+
    +
  • +

    Implement the business interface, a plain Java interface. It is good +practice to implement the bean’s business interface.

    +
  • +
  • +

    Implement any optional lifecycle callback methods, annotated +@PostConstruct, @PreDestroy, @PostActivate, and @PrePassivate.

    +
  • +
  • +

    Implement any optional business methods annotated @Remove.

    +
  • +
+
+
+

The source code for the CartBean class is as follows:

+
+
+
+
package javaeetutorial.cart.ejb;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+import javaeetutorial.cart.util.BookException;
+import javaeetutorial.cart.util.IdVerifier;
+import javax.ejb.Remove;
+import javax.ejb.Stateful;
+
+@Stateful
+public class CartBean implements Cart {
+    String customerId;
+    String customerName;
+    List<String> contents;
+
+    @Override
+    public void initialize(String person) throws BookException {
+        if (person == null) {
+            throw new BookException("Null person not allowed.");
+        } else {
+            customerName = person;
+        }
+        customerId = "0";
+        contents = new ArrayList<>();
+    }
+
+    @Override
+    public void initialize(String person, String id)
+                 throws BookException {
+        if (person == null) {
+            throw new BookException("Null person not allowed.");
+        } else {
+            customerName = person;
+        }
+
+        IdVerifier idChecker = new IdVerifier();
+        if (idChecker.validate(id)) {
+            customerId = id;
+        } else {
+            throw new BookException("Invalid id: " + id);
+        }
+
+        contents = new ArrayList<>();
+    }
+
+    @Override
+    public void addBook(String title) {
+        contents.add(title);
+    }
+
+    @Override
+    public void removeBook(String title) throws BookException {
+        boolean result = contents.remove(title);
+        if (result == false) {
+            throw new BookException("\"" + title + " not in cart.");
+        }
+    }
+
+    @Override
+    public List<String> getContents() {
+        return contents;
+    }
+
+    @Remove
+    @Override
+    public void remove() {
+        contents = null;
+    }
+}
+
+
+
+

34.2.2.1 Lifecycle Callback Methods

+
+

A method in the bean class may be declared as a lifecycle callback +method by annotating the method with the following annotations.

+
+
+
    +
  • +

    javax.annotation.PostConstruct: Methods annotated with +@PostConstruct are invoked by the container on newly constructed bean +instances after all dependency injection has completed and before the +first business method is invoked on the enterprise bean.

    +
  • +
  • +

    javax.annotation.PreDestroy: Methods annotated with @PreDestroy +are invoked after any method annotated @Remove has completed and +before the container removes the enterprise bean instance.

    +
  • +
  • +

    javax.ejb.PostActivate: Methods annotated with @PostActivate are +invoked by the container after the container moves the bean from +secondary storage to active status.

    +
  • +
  • +

    javax.ejb.PrePassivate: Methods annotated with @PrePassivate are +invoked by the container before it passivates the enterprise bean, +meaning that the container temporarily removes the bean from the +environment and saves it to secondary storage.

    +
  • +
+
+
+

Lifecycle callback methods must return void and have no parameters.

+
+
+
+

34.2.2.2 Business Methods

+
+

The primary purpose of a session bean is to run business tasks for the +client. The client invokes business methods on the object reference it +gets from dependency injection or JNDI lookup. From the client’s +perspective, the business methods appear to run locally, although they +run remotely in the session bean. The following code snippet shows how +the CartClient program invokes the business methods:

+
+
+
+
cart.initialize("Duke DeEarl", "123");
+...
+cart.addBook("Bel Canto");
+ ...
+List<String> bookList = cart.getContents();
+...
+cart.removeBook("Gravity's Rainbow");
+
+
+
+

The CartBean class implements the business methods in the following +code:

+
+
+
+
@Override
+public void addBook(String title) {
+   contents.add(title);
+}
+
+@Override
+public void removeBook(String title) throws BookException {
+   boolean result = contents.remove(title);
+   if (result == false) {
+      throw new BookException("\"" + title + "not in cart.");
+   }
+}
+
+@Override
+public List<String> getContents() {
+   return contents;
+}
+
+
+
+

The signature of a business method must conform to these rules.

+
+
+
    +
  • +

    The method name must not begin with ejb, to avoid conflicts with +callback methods defined by the EJB architecture. For example, you +cannot call a business method ejbCreate or ejbActivate.

    +
  • +
  • +

    The access control modifier must be public.

    +
  • +
  • +

    If the bean allows remote access through a remote business interface, +the arguments and return types must be legal types for the Java Remote +Method Invocation (RMI) API.

    +
  • +
  • +

    If the bean is a JAX-WS web service endpoint, the arguments and return +types for the methods annotated @WebMethod must be legal types for +JAX-WS.

    +
  • +
  • +

    If the bean is a JAX-RS resource, the arguments and return types for +the resource methods must be legal types for JAX-RS.

    +
  • +
  • +

    The modifier must not be static or final.

    +
  • +
+
+
+

The throws clause can include exceptions that you define for your +application. The removeBook method, for example, throws a +BookException if the book is not in the cart.

+
+
+

To indicate a system-level problem, such as the inability to connect to +a database, a business method should throw a javax.ejb.EJBException. +The container will not wrap application exceptions, such as +BookException. Because EJBException is a subclass of +RuntimeException, you do not need to include it in the throws clause +of the business method.

+
+
+
+
+

34.2.3 The @Remove Method

+
+

Business methods annotated with javax.ejb.Remove in the stateful +session bean class can be invoked by enterprise bean clients to remove +the bean instance. The container will remove the enterprise bean after a +@Remove method completes, either normally or abnormally.

+
+
+

In CartBean, the remove method is a @Remove method:

+
+
+
+
@Remove
+@Override
+public void remove() {
+    contents = null;
+}
+
+
+
+
+

34.2.4 Helper Classes

+
+

The CartBean session bean has two helper classes: BookException and +IdVerifier. The BookException is thrown by the removeBook method, +and the IdVerifier validates the customerId in one of the create +methods. Helper classes may reside in an EJB JAR file that contains the +enterprise bean class; a WAR file if the enterprise bean is packaged +within a WAR; or an EAR file that contains an EJB JAR, a WAR file, or a +separate library JAR file. In cart, the helper classes are included in +a library JAR used by the application client and the EJB JAR.

+
+
+
+

34.2.5 Running the cart Example

+
+

Now you are ready to compile the remote interface (Cart.java), the +enterprise bean class (CartBean.java), the client class +(CartClient.java), and the helper classes (BookException.java and +IdVerifier.java).

+
+
+

You can use either NetBeans IDE or Maven to build, package, deploy, and +run the cart application.

+
+
+

The following topics are addressed here:

+
+ +
+

34.2.5.1 To Run the cart Example Using NetBeans IDE

+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    From the File menu, choose Open Project.

    +
  4. +
  5. +

    In the Open Project dialog box, navigate to:

    +
    +
    +
    tut-install/examples/ejb
    +
    +
    +
  6. +
  7. +

    Select the cart folder.

    +
  8. +
  9. +

    Select the Open Required Projects check box.

    +
  10. +
  11. +

    Click Open Project.

    +
  12. +
  13. +

    In the Projects tab, right-click the cart project and select +Build.

    +
    +

    This builds and packages the application into cart.ear, located in +tut-install`/examples/ejb/cart/cart-ear/target/`, and deploys this EAR +file to your GlassFish Server instance.

    +
    +
    +

    You will see the output of the cart-app-client application client in +the Output tab:

    +
    +
    +
    +
    ...
    +Retrieving book title from cart: Infinite Jest
    +Retrieving book title from cart: Bel Canto
    +Retrieving book title from cart: Kafka on the Shore
    +Removing "Gravity's Rainbow" from cart.
    +Caught a BookException: "Gravity's Rainbow" not in cart.
    +
    +
    +
  14. +
+
+
+
+

34.2.5.2 To Run the cart Example Using Maven

+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    In a terminal window, go to:

    +
    +
    +
    tut-install/examples/ejb/cart/
    +
    +
    +
  4. +
  5. +

    Enter the following command:

    +
    +
    +
    mvn install
    +
    +
    +
    +

    This command compiles and packages the application into an EAR file, +cart.ear, located in the target directory, and deploys the EAR to +your GlassFish Server instance.

    +
    +
    +

    Then, the client stubs are retrieved and run. This is equivalent to +running the following command:

    +
    +
    +
    +
    appclient -client cart-ear/target/cart-earClient.jar
    +
    +
    +
    +

    The client JAR, cart-earClient.jar, contains the application client +class, the helper class BookException, and the Cart business +interface.

    +
    +
    +

    When you run the client, the application client container injects any +component references declared in the application client class, in this +case the reference to the Cart enterprise bean.

    +
    +
    +

    You will see the output of the cart-app-client application client in +the terminal window:

    +
    +
    +
    +
    ...
    +Retrieving book title from cart: Infinite Jest
    +Retrieving book title from cart: Bel Canto
    +Retrieving book title from cart: Kafka on the Shore
    +Removing "Gravity's Rainbow" from cart.
    +Caught a BookException: "Gravity's Rainbow" not in cart.
    +
    +
    +
  6. +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+
+ + + \ No newline at end of file diff --git a/ejb-basicexamples003.html b/ejb-basicexamples003.html new file mode 100644 index 0000000..49d8d26 --- /dev/null +++ b/ejb-basicexamples003.html @@ -0,0 +1,665 @@ + + + + + + A Singleton Session Bean Example: counter + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

34.3 A Singleton Session Bean Example: counter

+
+
+

The counter example demonstrates how to create a singleton session +bean.

+
+
+

The following topics are addressed here:

+
+ +
+

34.3.1 Creating a Singleton Session Bean

+
+

The javax.ejb.Singleton annotation is used to specify that the +enterprise bean implementation class is a singleton session bean:

+
+
+
+
@Singleton
+public class SingletonBean { ... }
+
+
+
+

34.3.1.1 Initializing Singleton Session Beans

+
+

The EJB container is responsible for determining when to initialize a +singleton session bean instance unless the singleton session bean +implementation class is annotated with the javax.ejb.Startup +annotation. In this case, sometimes called eager initialization, the EJB +container must initialize the singleton session bean upon application +startup. The singleton session bean is initialized before the EJB +container delivers client requests to any enterprise beans in the +application. This allows the singleton session bean to perform, for +example, application startup tasks.

+
+
+

The following singleton session bean stores the status of an application +and is eagerly initialized:

+
+
+
+
@Startup
+@Singleton
+public class StatusBean {
+  private String status;
+
+  @PostConstruct
+  void init {
+    status = "Ready";
+  }
+  ...
+}
+
+
+
+

Sometimes multiple singleton session beans are used to initialize data +for an application and therefore must be initialized in a specific +order. In these cases, use the javax.ejb.DependsOn annotation to +declare the startup dependencies of the singleton session bean. The +@DependsOn annotation’s value attribute is one or more strings that +specify the name of the target singleton session bean. If more than one +dependent singleton bean is specified in @DependsOn, the order in +which they are listed is not necessarily the order in which the EJB +container will initialize the target singleton session beans.

+
+
+

The following singleton session bean, PrimaryBean, should be started +up first:

+
+
+
+
@Singleton
+public class PrimaryBean { ... }
+
+
+
+

SecondaryBean depends on PrimaryBean:

+
+
+
+
@Singleton
+@DependsOn("PrimaryBean")
+public class SecondaryBean { ... }
+
+
+
+

This guarantees that the EJB container will initialize PrimaryBean +before SecondaryBean.

+
+
+

The following singleton session bean, TertiaryBean, depends on +PrimaryBean and SecondaryBean:

+
+
+
+
@Singleton
+@DependsOn({"PrimaryBean", "SecondaryBean"})
+public class TertiaryBean { ... }
+
+
+
+

SecondaryBean explicitly requires PrimaryBean to be initialized +before it is initialized, through its own @DependsOn annotation. In +this case, the EJB container will first initialize PrimaryBean, then +SecondaryBean, and finally TertiaryBean.

+
+
+

If, however, SecondaryBean did not explicitly depend on PrimaryBean, +the EJB container may initialize either PrimaryBean or SecondaryBean +first. That is, the EJB container could initialize the singletons in the +following order: SecondaryBean, PrimaryBean, TertiaryBean.

+
+
+
+

34.3.1.2 Managing Concurrent Access in a Singleton Session Bean

+
+

Singleton session beans are designed for concurrent access, situations +in which many clients need to access a single instance of a session bean +at the same time. A singleton’s client needs only a reference to a +singleton in order to invoke any business methods exposed by the +singleton and doesn’t need to worry about any other clients that may be +simultaneously invoking business methods on the same singleton.

+
+
+

When creating a singleton session bean, concurrent access to the +singleton’s business methods can be controlled in two ways: +container-managed concurrency and bean-managed concurrency.

+
+
+

The javax.ejb.ConcurrencyManagement annotation is used to specify +container-managed or bean-managed concurrency for the singleton. With +@ConcurrencyManagement, a type attribute must be set to either +javax.ejb.ConcurrencyManagementType.CONTAINER or +javax.ejb.ConcurrencyManagementType.BEAN. If no +@ConcurrencyManagement annotation is present on the singleton +implementation class, the EJB container default of container-managed +concurrency is used.

+
+
+

Container-Managed Concurrency

+
+
+

If a singleton uses container-managed concurrency, the EJB container +controls client access to the business methods of the singleton. The +javax.ejb.Lock annotation and a javax.ejb.LockType type are used to +specify the access level of the singleton’s business methods or +@Timeout methods. The LockType enumerated types are READ and +WRITE.

+
+
+

Annotate a singleton’s business or timeout method with +@Lock(LockType.READ) if the method can be concurrently accessed, or +shared, with many clients. Annotate the business or timeout method with +@Lock(LockType.WRITE) if the singleton session bean should be locked +to other clients while a client is calling that method. Typically, the +@Lock(LockType.WRITE) annotation is used when clients are modifying +the state of the singleton.

+
+
+

Annotating a singleton class with @Lock specifies that all the +business methods and any timeout methods of the singleton will use the +specified lock type unless they explicitly set the lock type with a +method-level @Lock annotation. If no @Lock annotation is present on +the singleton class, the default lock type, @Lock(LockType.WRITE), is +applied to all business and timeout methods.

+
+
+

The following example shows how to use the @ConcurrencyManagement, +@Lock(LockType.READ), and @Lock(LockType.WRITE) annotations for a +singleton that uses container-managed concurrency.

+
+
+

Although by default singletons use container-managed concurrency, the +@ConcurrencyManagement(CONTAINER) annotation may be added at the class +level of the singleton to explicitly set the concurrency management +type:

+
+
+
+
@ConcurrencyManagement(ConcurrencyManagementType.CONTAINER)
+@Singleton
+public class ExampleSingletonBean {
+  private String state;
+
+  @Lock(LockType.READ)
+  public String getState() {
+    return state;
+  }
+
+  @Lock(LockType.WRITE)
+  public void setState(String newState) {
+    state = newState;
+  }
+}
+
+
+
+

The getState method can be accessed by many clients at the same time +because it is annotated with @Lock(LockType.READ). When the setState +method is called, however, all the methods in ExampleSingletonBean +will be locked to other clients because setState is annotated with +@Lock(LockType.WRITE). This prevents two clients from attempting to +simultaneously change the state variable of ExampleSingletonBean.

+
+
+

The getData and getStatus methods in the following singleton are of +type READ, and the setStatus method is of type WRITE:

+
+
+
+
@Singleton
+@Lock(LockType.READ)
+public class SharedSingletonBean {
+  private String data;
+  private String status;
+
+  public String getData() {
+    return data;
+  }
+
+  public String getStatus() {
+    return status;
+  }
+
+  @Lock(LockType.WRITE)
+  public void setStatus(String newStatus) {
+    status = newStatus;
+  }
+}
+
+
+
+

If a method is of locking type WRITE, client access to all the +singleton’s methods is blocked until the current client finishes its +method call or an access timeout occurs. When an access timeout occurs, +the EJB container throws a javax.ejb.ConcurrentAccessTimeoutException. +The javax.ejb.AccessTimeout annotation is used to specify the number +of milliseconds before an access timeout occurs. If added at the class +level of a singleton, @AccessTimeout specifies the access timeout +value for all methods in the singleton unless a method explicitly +overrides the default with its own @AccessTimeout annotation.

+
+
+

The @AccessTimeout annotation can be applied to both +@Lock(LockType.READ) and @Lock(LockType.WRITE) methods. The +@AccessTimeout annotation has one required element, value, and one +optional element, unit. By default, the value is specified in +milliseconds. To change the value unit, set unit to one of the +java.util.concurrent.TimeUnit constants: NANOSECONDS, +MICROSECONDS, MILLISECONDS, or SECONDS.

+
+
+

The following singleton has a default access timeout value of 120,000 +milliseconds, or 2 minutes. The doTediousOperation method overrides +the default access timeout and sets the value to 360,000 milliseconds, +or 6 minutes:

+
+
+
+
@Singleton
+@AccessTimeout(value=120000)
+public class StatusSingletonBean {
+  private String status;
+
+  @Lock(LockType.WRITE)
+  public void setStatus(String new Status) {
+    status = newStatus;
+  }
+
+  @Lock(LockType.WRITE)
+  @AccessTimeout(value=360000)
+  public void doTediousOperation {
+    ...
+  }
+}
+
+
+
+

The following singleton has a default access timeout value of 60 +seconds, specified using the TimeUnit.SECONDS constant:

+
+
+
+
@Singleton
+@AccessTimeout(value=60, unit=TimeUnit.SECONDS)
+public class StatusSingletonBean { ... }
+
+
+
+

Bean-Managed Concurrency

+
+
+

Singletons that use bean-managed concurrency allow full concurrent +access to all the business and timeout methods in the singleton. The +developer of the singleton is responsible for ensuring that the state of +the singleton is synchronized across all clients. Developers who create +singletons with bean-managed concurrency are allowed to use the Java +programming language synchronization primitives, such as +synchronization and volatile, to prevent errors during concurrent +access.

+
+
+

Add a @ConcurrencyManagement annotation with the type set to +ConcurrencyManagementType.BEAN at the class level of the singleton to +specify bean-managed concurrency:

+
+
+
+
@ConcurrencyManagement(ConcurrencyManagementType.BEAN)
+@Singleton
+public class AnotherSingletonBean { ... }
+
+
+
+
+

34.3.1.3 Handling Errors in a Singleton Session Bean

+
+

If a singleton session bean encounters an error when initialized by the +EJB container, that singleton instance will be destroyed.

+
+
+

Unlike other enterprise beans, once a singleton session bean instance is +initialized, it is not destroyed if the singleton’s business or +lifecycle methods cause system exceptions. This ensures that the same +singleton instance is used throughout the application lifecycle.

+
+
+
+
+

34.3.2 The Architecture of the counter Example

+
+

The counter example consists of a singleton session bean, +CounterBean, and a JavaServer Faces Facelets web front end.

+
+
+

CounterBean is a simple singleton with one method, getHits, that +returns an integer representing the number of times a web page has been +accessed. Here is the code of CounterBean:

+
+
+
+
package javaeetutorial.counter.ejb;
+
+import javax.ejb.Singleton;
+
+/**
+ * CounterBean is a simple singleton session bean that records the number
+ * of hits to a web page.
+ */
+@Singleton
+public class CounterBean {
+    private int hits = 1;
+
+    // Increment and return the number of hits
+    public int getHits() {
+        return hits++;
+    }
+}
+
+
+
+

The @Singleton annotation marks CounterBean as a singleton session +bean. CounterBean uses a local, no-interface view.

+
+
+

CounterBean uses the EJB container’s default metadata values for +singletons to simplify the coding of the singleton implementation class. +There is no @ConcurrencyManagement annotation on the class, so the +default of container-managed concurrency access is applied. There is no +@Lock annotation on the class or business method, so the default of +@Lock(WRITE) is applied to the only business method, getHits.

+
+
+

The following version of CounterBean is functionally equivalent to the +preceding version:

+
+
+
+
package javaeetutorial.counter.ejb;
+
+import javax.ejb.Singleton;
+import javax.ejb.ConcurrencyManagement;
+import static javax.ejb.ConcurrencyManagementType.CONTAINER;
+import javax.ejb.Lock;
+import javax.ejb.LockType.WRITE;
+
+/**
+ * CounterBean is a simple singleton session bean that records the number
+ * of hits to a web page.
+ */
+@Singleton
+@ConcurrencyManagement(CONTAINER)
+public class CounterBean {
+    private int hits = 1;
+
+    // Increment and return the number of hits
+    @Lock(WRITE)
+    public int getHits() {
+        return hits++;
+    }
+}
+
+
+
+

The web front end of counter consists of a JavaServer Faces managed +bean, Count.java, that is used by the Facelets XHTML files +template.xhtml and index.xhtml. The Count JavaServer Faces managed +bean obtains a reference to CounterBean through dependency injection. +Count defines a hitCount JavaBeans property. When the getHitCount +getter method is called from the XHTML files, CounterBean's getHits +method is called to return the current number of page hits.

+
+
+

Here’s the Count managed bean class:

+
+
+
+
@Named
+@ConversationScoped
+public class Count implements Serializable {
+    @EJB
+    private CounterBean counterBean;
+
+    private int hitCount;
+
+    public Count() {
+        this.hitCount = 0;
+    }
+
+    public int getHitCount() {
+        hitCount = counterBean.getHits();
+        return hitCount;
+    }
+
+    public void setHitCount(int newHits) {
+        this.hitCount = newHits;
+    }
+}
+
+
+
+

The template.xhtml and index.xhtml files are used to render a +Facelets view that displays the number of hits to that view. The +index.xhtml file uses an expression language statement, +#{count.hitCount}, to access the hitCount property of the Count +managed bean. Here is the content of index.xhtml:

+
+
+
+
<html lang="en"
+      xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
+      xmlns:h="http://xmlns.jcp.org/jsf/html">
+    <ui:composition template="/template.xhtml">
+        <ui:define name="title">
+            This page has been accessed #{count.hitCount} time(s).
+        </ui:define>
+        <ui:define name="body">
+            Hooray!
+        </ui:define>
+    </ui:composition>
+</html>
+
+
+
+
+

34.3.3 Running the counter Example

+
+

You can use either NetBeans IDE or Maven to build, package, deploy, and +run the counter example.

+
+
+

The following topics are addressed here:

+
+
+

The following topics are addressed here:

+
+ +
+

34.3.3.1 To Run the counter Example Using NetBeans IDE

+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    From the File menu, choose Open Project.

    +
  4. +
  5. +

    In the Open Project dialog box, navigate to:

    +
    +
    +
    tut-install/examples/ejb
    +
    +
    +
  6. +
  7. +

    Select the counter folder.

    +
  8. +
  9. +

    Click Open Project.

    +
  10. +
  11. +

    In the Projects tab, right-click the counter project and select +Run.

    +
    +

    A web browser will open the URL http://localhost:8080/counter, which +displays the number of hits.

    +
    +
  12. +
  13. +

    Reload the page to see the hit count increment.

    +
  14. +
+
+
+
+

34.3.3.2 To Run the counter Example Using Maven

+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    In a terminal window, go to:

    +
    +
    +
    tut-install/examples/ejb/counter/
    +
    +
    +
  4. +
  5. +

    Enter the following command:

    +
    +
    +
    mvn install
    +
    +
    +
    +

    This will build and deploy counter to your GlassFish Server instance.

    +
    +
  6. +
  7. +

    In a web browser, enter the following URL:

    +
    +
    +
    http://localhost:8080/counter
    +
    +
    +
  8. +
  9. +

    Reload the page to see the hit count increment.

    +
  10. +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+
+ + + \ No newline at end of file diff --git a/ejb-basicexamples004.html b/ejb-basicexamples004.html new file mode 100644 index 0000000..e2c397c --- /dev/null +++ b/ejb-basicexamples004.html @@ -0,0 +1,360 @@ + + + + + + A Web Service Example: helloservice + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

34.4 A Web Service Example: helloservice

+
+
+

This example demonstrates a simple web service that generates a response +based on information received from the client. HelloServiceBean is a +stateless session bean that implements a single method: sayHello. This +method matches the sayHello method invoked by the client described in +A Simple JAX-WS Application Client.

+
+
+

The following topics are addressed here:

+
+ +
+

34.4.1 The Web Service Endpoint Implementation Class

+
+

HelloServiceBean is the endpoint implementation class, typically the +primary programming artifact for enterprise bean web service endpoints. +The web service endpoint implementation class has the following +requirements.

+
+
+
    +
  • +

    The class must be annotated with either the javax.jws.WebService or +the javax.jws.WebServiceProvider annotation.

    +
  • +
  • +

    The implementing class may explicitly reference an SEI through the +endpointInterface element of the @WebService annotation but is not +required to do so. If no endpointInterface is specified in +@WebService, an SEI is implicitly defined for the implementing class.

    +
  • +
  • +

    The business methods of the implementing class must be public and must +not be declared static or final.

    +
  • +
  • +

    Business methods that are exposed to web service clients must be +annotated with javax.jws.WebMethod.

    +
  • +
  • +

    Business methods that are exposed to web service clients must have +JAXB-compatible parameters and return types. See the list of JAXB +default data type bindings at Types Supported by +JAX-WS.

    +
  • +
  • +

    The implementing class must not be declared final and must not be +abstract.

    +
  • +
  • +

    The implementing class must have a default public constructor.

    +
  • +
  • +

    The endpoint class must be annotated @Stateless.

    +
  • +
  • +

    The implementing class must not define the finalize method.

    +
  • +
  • +

    The implementing class may use the javax.annotation.PostConstruct or +javax.annotation.PreDestroy annotations on its methods for lifecycle +event callbacks.

    +
    +

    The @PostConstruct method is called by the container before the +implementing class begins responding to web service clients.

    +
    +
    +

    The @PreDestroy method is called by the container before the endpoint +is removed from operation.

    +
    +
  • +
+
+
+
+

34.4.2 Stateless Session Bean Implementation Class

+
+

The HelloServiceBean class implements the sayHello method, which is +annotated @WebMethod. The source code for the HelloServiceBean class +is as follows:

+
+
+
+
package javaeetutorial.helloservice.ejb;
+
+import javax.ejb.Stateless;
+import javax.jws.WebMethod;
+import javax.jws.WebService;
+
+@Stateless
+@WebService
+public class HelloServiceBean {
+    private final String message = "Hello, ";
+
+    public void HelloServiceBean() {}
+
+    @WebMethod
+    public String sayHello(String name) {
+        return message + name + ".";
+    }
+}
+
+
+
+
+

34.4.3 Running the helloservice Example

+
+

You can use either NetBeans IDE or Maven to build, package, and deploy +the helloservice example. You can then use the Administration Console +to test the web service endpoint methods.

+
+
+

The following topics are addressed here:

+
+ +
+

34.4.3.1 To Build, Package, and Deploy the helloservice Example Using +NetBeans IDE +^^^^^^^^^^^^^^^^^^^^^^^^^^^^

+
+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    From the File menu, choose Open Project.

    +
  4. +
  5. +

    In the Open Project dialog box, navigate to:

    +
    +
    +
    tut-install/examples/ejb
    +
    +
    +
  6. +
  7. +

    Select the helloservice folder.

    +
  8. +
  9. +

    Click Open Project.

    +
  10. +
  11. +

    In the Projects tab, right-click the helloservice project and +select Build.

    +
    +

    This builds and packages the application into helloservice.ear, +located in tut-install`/examples/ejb/helloservice/target/`, and deploys +this EAR file to GlassFish Server.

    +
    +
  12. +
+
+
+

34.4.3.2 To Build, Package, and Deploy the helloservice Example Using +Maven +^^^^^^^^^^^^^^^^^^^^^^^^^

+
+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    In a terminal window, go to:

    +
    +
    +
    tut-install/examples/ejb/helloservice/
    +
    +
    +
  4. +
  5. +

    Enter the following command:

    +
    +
    +
    mvn install
    +
    +
    +
    +

    This compiles the source files and packages the application into an EJB +JAR file located at +tut-install`/examples/ejb/helloservice/target/helloservice.jar`. Then +the EJB JAR file is deployed to GlassFish Server.

    +
    +
    +

    Upon deployment, GlassFish Server generates additional artifacts +required for web service invocation, including the WSDL file.

    +
    +
  6. +
+
+
+

34.4.3.3 To Test the Service without a Client

+
+

The GlassFish Server Administration Console allows you to test the +methods of a web service endpoint. To test the sayHello method of +HelloServiceBean, follow these steps.

+
+
+
    +
  1. +

    Open the Administration Console by opening the following URL in a +web browser:

    +
    +
    +
    http://localhost:4848/
    +
    +
    +
  2. +
  3. +

    In the navigation tree, select the Applications node.

    +
  4. +
  5. +

    In the Applications table, click the helloservice link.

    +
  6. +
  7. +

    In the Modules and Components table, click the View Endpoint link.

    +
  8. +
  9. +

    On the Web Service Endpoint Information page, click the Tester link:

    +
    +
    +
    /HelloServiceBeanService/HelloServiceBean?Tester
    +
    +
    +
  10. +
  11. +

    On the Web Service Test Links page, click the non-secure link (the +one that specifies port 8080).

    +
  12. +
  13. +

    On the HelloServiceBeanService Web Service Tester page, under +Methods, enter a name as the parameter to the sayHello method.

    +
  14. +
  15. +

    Click sayHello.

    +
    +

    The sayHello Method invocation page opens. Under Method returned, you’ll +see the response from the endpoint.

    +
    +
  16. +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+
+ + + \ No newline at end of file diff --git a/ejb-basicexamples005.html b/ejb-basicexamples005.html new file mode 100644 index 0000000..364ec3f --- /dev/null +++ b/ejb-basicexamples005.html @@ -0,0 +1,953 @@ + + + + + + Using the Timer Service + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

34.5 Using the Timer Service

+
+
+

Applications that model business work flows often rely on timed +notifications. The timer service of the enterprise bean container +enables you to schedule timed notifications for all types of enterprise +beans except for stateful session beans. You can schedule a timed +notification to occur according to a calendar schedule, at a specific +time, after a duration of time, or at timed intervals. For example, you +could set timers to go off at 10:30 a.m. on May 23, in 30 days, or every +12 hours.

+
+
+

Enterprise bean timers are either programmatic timers or automatic +timers. Programmatic timers are set by explicitly calling one of the +timer creation methods of the TimerService interface. Automatic timers +are created upon the successful deployment of an enterprise bean that +contains a method annotated with the javax.ejb.Schedule or +javax.ejb.Schedules annotations.

+
+
+

34.5.1 Creating Calendar-Based Timer Expressions

+
+

Timers can be set according to a calendar-based schedule, expressed +using a syntax similar to the UNIX cron utility. Both programmatic and +automatic timers can use calendar-based timer expressions. +Table 34-1 shows the calendar-based timer attributes.

+
+
+

+
+
+

Table 34-1 Calendar-Based Timer Attributes

+
+ ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescriptionDefault ValueAllowable Values and Examples

second

One or more seconds within a minute

0

0 to 59. For +example: second="30".

minute

One or more minutes within an hour

0

0 to 59. For +example: minute="15".

hour

One or more hours within a day

0

0 to 23. For example: +hour="13".

dayOfWeek

One or more days within a week

+

*

+
+
+
+
+
+
+
+

0 to 7 (both 0 and 7 refer to Sunday). For example: dayOfWeek="3".

+
+
+

Sun, Mon, Tue, Wed, Thu, Fri, Sat. For example: +dayOfWeek="Mon".

+

dayOfMonth

One or more days within a month

+

*

+
+
+
+
+
+
+
+

1 to 31. For example: dayOfMonth="15".

+
+
+

–7 to –1 (a negative number means the nth day or days before the end +of the month). For example: dayOfMonth="–3".

+
+
+

Last. For example: dayOfMonth="Last".

+
+
+

[1st, 2nd, 3rd, 4th, 5th, Last] [Sun, Mon, Tue, Wed, +Thu, Fri, Sat]. For example: dayOfMonth="2nd Fri".

+

month

One or more months within a year

+

*

+
+
+
+
+
+
+
+

1 to 12. For example: month="7".

+
+
+

Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, +Nov, Dec. For example: month="July".

+

year

A particular calendar year

+

*

+
+
+
+
+
+
+

A four-digit calendar year. For example: year="2011".

+
+
+
+
+
+
+
+

34.5.1.1 Specifying Multiple Values in Calendar Expressions

+
+

You can specify multiple values in calendar expressions, as described in +the following sections.

+
+
+

Using Wildcards in Calendar Expressions

+
+
+

Setting an attribute to an asterisk symbol (*) represents all +allowable values for the attribute.

+
+
+

The following expression represents every minute:

+
+
+
+
minute="*"
+
+
+
+

The following expression represents every day of the week:

+
+
+
+
dayOfWeek="*"
+
+
+
+

Specifying a List of Values

+
+
+

To specify two or more values for an attribute, use a comma (,) to +separate the values. A range of values is allowed as part of a list. +Wildcards and intervals, however, are not allowed.

+
+
+

Duplicates within a list are ignored.

+
+
+

The following expression sets the day of the week to Tuesday and +Thursday:

+
+
+
+
dayOfWeek="Tue, Thu"
+
+
+
+

The following expression represents 4:00 a.m., every hour from 9:00 a.m. +to 5:00 p.m. using a range, and 10:00 p.m.:

+
+
+
+
hour="4,9-17,22"
+
+
+
+

Specifying a Range of Values

+
+
+

Use a dash character (-) to specify an inclusive range of values for +an attribute. Members of a range cannot be wildcards, lists, or +intervals. A range of the form x-x, is equivalent to the single-valued +expression x. A range of the form x-y where x is greater than y +is equivalent to the expression x-`maximumvalue,` minimumvalue`-y`. +That is, the expression begins at x, rolls over to the beginning of +the allowable values, and continues up to y.

+
+
+

The following expression represents 9:00 a.m. to 5:00 p.m.:

+
+
+
+
hour="9-17"
+
+
+
+

The following expression represents Friday through Monday:

+
+
+
+
dayOfWeek="5-1"
+
+
+
+

The following expression represents the twenty-fifth day of the month to +the end of the month, and the beginning of the month to the fifth day of +the month:

+
+
+
+
dayOfMonth="25-5"
+
+
+
+

It is equivalent to the following expression:

+
+
+
+
dayOfMonth="25-Last,1-5"
+
+
+
+

Specifying Intervals

+
+
+

The forward slash (/) constrains an attribute to a starting point and +an interval and is used to specify every N seconds, minutes, or hours +within the minute, hour, or day. For an expression of the form x/y, +x represents the starting point and y represents the interval. The +wildcard character may be used in the x position of an interval and is +equivalent to setting x to 0.

+
+
+

Intervals may be set only for second, minute, and hour attributes.

+
+
+

The following expression represents every 10 minutes within the hour:

+
+
+
+
minute="*/10"
+
+
+
+

It is equivalent to:

+
+
+
+
minute="0,10,20,30,40,50"
+
+
+
+

The following expression represents every 2 hours starting at noon:

+
+
+
+
hour="12/2"
+
+
+
+
+
+

34.5.2 Programmatic Timers

+
+

When a programmatic timer expires (goes off), the container calls the +method annotated @Timeout in the bean’s implementation class. The +@Timeout method contains the business logic that handles the timed +event.

+
+
+

34.5.2.1 The @Timeout Method

+
+

Methods annotated @Timeout in the enterprise bean class must return +void and optionally take a javax.ejb.Timer object as the only +parameter. They may not throw application exceptions:

+
+
+
+
@Timeout
+public void timeout(Timer timer) {
+    System.out.println("TimerBean: timeout occurred");
+}
+
+
+
+
+

34.5.2.2 Creating Programmatic Timers

+
+

To create a timer, the bean invokes one of the create methods of the +TimerService interface. These methods allow single-action, interval, +or calendar-based timers to be created.

+
+
+

For single-action or interval timers, the expiration of the timer can be +expressed as either a duration or an absolute time. The duration is +expressed as a the number of milliseconds before a timeout event is +triggered. To specify an absolute time, create a java.util.Date object +and pass it to the TimerService.createSingleActionTimer or the +TimerService.createTimer method.

+
+
+

The following code sets a programmatic timer that will expire in 1 +minute (60,000 milliseconds):

+
+
+
+
long duration = 60000;
+Timer timer =
+    timerService.createSingleActionTimer(duration, new TimerConfig());
+
+
+
+

The following code sets a programmatic timer that will expire at 12:05 +p.m. on May 1, 2015, specified as a java.util.Date:

+
+
+
+
SimpleDateFormatter formatter =
+    new SimpleDateFormatter("MM/dd/yyyy 'at' HH:mm");
+Date date = formatter.parse("05/01/2015 at 12:05");
+Timer timer = timerService.createSingleActionTimer(date, new TimerConfig());
+
+
+
+

For calendar-based timers, the expiration of the timer is expressed as a +javax.ejb.ScheduleExpression object, passed as a parameter to the +TimerService.createCalendarTimer method. The ScheduleExpression +class represents calendar-based timer expressions and has methods that +correspond to the attributes described in Creating +Calendar-Based Timer Expressions.

+
+
+

The following code creates a programmatic timer using the +ScheduleExpression helper class:

+
+
+
+
ScheduleExpression schedule = new ScheduleExpression();
+schedule.dayOfWeek("Mon");
+schedule.hour("12-17, 23");
+Timer timer = timerService.createCalendarTimer(schedule);
+
+
+
+

For details on the method signatures, see the TimerService API +documentation at +http://docs.oracle.com/javaee/7/api/javax/ejb/TimerService.html.

+
+
+

The bean described in The timersession Example creates a +timer as follows:

+
+
+
+
Timer timer = timerService.createTimer(intervalDuration,
+        "Created new programmatic timer");
+
+
+
+

In the timersession example, the method that calls createTimer is +invoked in a business method, which is called by a client.

+
+
+

Timers are persistent by default. If the server is shut down or crashes, +persistent timers are saved and will become active again when the server +is restarted. If a persistent timer expires while the server is down, +the container will call the @Timeout method when the server is +restarted.

+
+
+

Nonpersistent programmatic timers are created by calling +TimerConfig.setPersistent(false) and passing the TimerConfig object +to one of the timer-creation methods.

+
+
+

The Date and long parameters of the createTimer methods represent +time with the resolution of milliseconds. However, because the timer +service is not intended for real-time applications, a callback to the +@Timeout method might not occur with millisecond precision. The timer +service is for business applications, which typically measure time in +hours, days, or longer durations.

+
+
+
+
+

34.5.3 Automatic Timers

+
+

Automatic timers are created by the EJB container when an enterprise +bean that contains methods annotated with the @Schedule or +@Schedules annotations is deployed. An enterprise bean can have +multiple automatic timeout methods, unlike a programmatic timer, which +allows only one method annotated with the @Timeout annotation in the +enterprise bean class.

+
+
+

Automatic timers can be configured through annotations or through the +ejb-jar.xml deployment descriptor.

+
+
+

Adding a @Schedule annotation on an enterprise bean marks that method +as a timeout method according to the calendar schedule specified in the +attributes of @Schedule.

+
+
+

The @Schedule annotation has elements that correspond to the calendar +expressions detailed in Creating Calendar-Based Timer +Expressions and the persistent, info, and timezone elements.

+
+
+

The optional persistent element takes a Boolean value and is used to +specify whether the automatic timer should survive a server restart or +crash. By default, all automatic timers are persistent.

+
+
+

The optional timezone element is used to specify that the automatic +timer is associated with a particular time zone. If set, this element +will evaluate all timer expressions in relation to the specified time +zone, regardless of the time zone in which the EJB container is running. +By default, all automatic timers set are in relation to the default time +zone of the server.

+
+
+

The optional info element is used to set an informational description +of the timer. A timer’s information can be retrieved later by using +Timer.getInfo.

+
+
+

The following timeout method uses @Schedule to set a timer that will +expire every Sunday at midnight:

+
+
+
+
@Schedule(dayOfWeek="Sun", hour="0")
+public void cleanupWeekData() { ... }
+
+
+
+

The @Schedules annotation is used to specify multiple calendar-based +timer expressions for a given timeout method.

+
+
+

The following timeout method uses the @Schedules annotation to set +multiple calendar-based timer expressions. The first expression sets a +timer to expire on the last day of every month. The second expression +sets a timer to expire every Friday at 11:00 p.m.:

+
+
+
+
@Schedules ({
+    @Schedule(dayOfMonth="Last"),
+    @Schedule(dayOfWeek="Fri", hour="23")
+})
+public void doPeriodicCleanup() { ... }
+
+
+
+
+

34.5.4 Canceling and Saving Timers

+
+

Timers can be cancelled by the following events.

+
+
+
    +
  • +

    When a single-event timer expires, the EJB container calls the +associated timeout method and then cancels the timer.

    +
  • +
  • +

    When the bean invokes the cancel method of the Timer interface, +the container cancels the timer.

    +
  • +
+
+
+

If a method is invoked on a cancelled timer, the container throws the +javax.ejb.NoSuchObjectLocalException.

+
+
+

To save a Timer object for future reference, invoke its getHandle +method and store the TimerHandle object in a database. (A +TimerHandle object is serializable.) To reinstantiate the Timer +object, retrieve the handle from the database and invoke getTimer on +the handle. A TimerHandle object cannot be passed as an argument of a +method defined in a remote or web service interface. In other words, +remote clients and web service clients cannot access a bean’s +TimerHandle object. Local clients, however, do not have this +restriction.

+
+
+
+

34.5.5 Getting Timer Information

+
+

In addition to defining the cancel and getHandle methods, the +Timer interface defines methods for obtaining information about +timers:

+
+
+
+
public long getTimeRemaining();
+public java.util.Date getNextTimeout();
+public java.io.Serializable getInfo();
+
+
+
+

The getInfo method returns the object that was the last parameter of +the createTimer invocation. For example, in the createTimer code +snippet of the preceding section, this information parameter is a +String object with the value created timer.

+
+
+

To retrieve all of a bean’s active timers, call the getTimers method +of the TimerService interface. The getTimers method returns a +collection of Timer objects.

+
+
+
+

34.5.6 Transactions and Timers

+
+

An enterprise bean usually creates a timer within a transaction. If this +transaction is rolled back, the timer creation also is rolled back. +Similarly, if a bean cancels a timer within a transaction that gets +rolled back, the timer cancellation is rolled back. In this case, the +timer’s duration is reset as if the cancellation had never occurred.

+
+
+

In beans that use container-managed transactions, the @Timeout method +usually has the Required or RequiresNew transaction attribute to +preserve transaction integrity. With these attributes, the EJB container +begins the new transaction before calling the @Timeout method. If the +transaction is rolled back, the container will call the @Timeout +method at least one more time.

+
+
+
+

34.5.7 The timersession Example

+
+

The source code for this example is in the +tut-install`/examples/ejb/timersession/src/main/java/` directory.

+
+
+

TimerSessionBean is a singleton session bean that shows how to set +both an automatic timer and a programmatic timer. In the source code +listing of TimerSessionBean that follows, the setTimer and +@Timeout methods are used to set a programmatic timer. A +TimerService instance is injected by the container when the bean is +created. Because it’s a business method, setTimer is exposed to the +local, no-interface view of TimerSessionBean and can be invoked by the +client. In this example, the client invokes setTimer with an interval +duration of 8,000 milliseconds, or 8 seconds. The setTimer method +creates a new timer by invoking the createTimer method of +TimerService. Now that the timer is set, the EJB container will invoke +the programmaticTimeout method of TimerSessionBean when the timer +expires, in about 8 seconds:

+
+
+
+
...
+    public void setTimer(long intervalDuration) {
+        logger.log(Level.INFO,
+                "Setting a programmatic timeout for {0} milliseconds from now.",
+                intervalDuration);
+        Timer timer = timerService.createTimer(intervalDuration,
+                "Created new programmatic timer");
+    }
+
+    @Timeout
+    public void programmaticTimeout(Timer timer) {
+        this.setLastProgrammaticTimeout(new Date());
+        logger.info("Programmatic timeout occurred.");
+    }
+...
+
+
+
+

TimerSessionBean also has an automatic timer and timeout method, +automaticTimeout. The automatic timer is set to expire every 1 minute +and is set by using a calendar-based timer expression in the @Schedule +annotation:

+
+
+
+
...
+    @Schedule(minute = "*/1", hour = "*", persistent = false)
+    public void automaticTimeout() {
+        this.setLastAutomaticTimeout(new Date());
+        logger.info("Automatic timeout occured");
+    }
+...
+
+
+
+

TimerSessionBean also has two business methods: +getLastProgrammaticTimeout and getLastAutomaticTimeout. Clients call +these methods to get the date and time of the last timeout for the +programmatic timer and automatic timer, respectively.

+
+
+

Here’s the source code for the TimerSessionBean class:

+
+
+
+
package javaeetutorial.timersession.ejb;
+
+import java.util.Date;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.annotation.Resource;
+import javax.ejb.Schedule;
+import javax.ejb.Singleton;
+import javax.ejb.Startup;
+import javax.ejb.Timeout;
+import javax.ejb.Timer;
+import javax.ejb.TimerService;
+
+@Singleton
+@Startup
+public class TimerSessionBean {
+    @Resource
+    TimerService timerService;
+
+    private Date lastProgrammaticTimeout;
+    private Date lastAutomaticTimeout;
+
+    private static final Logger logger =
+            Logger.getLogger("timersession.ejb.TimerSessionBean");
+
+    public void setTimer(long intervalDuration) {
+        logger.log(Level.INFO,
+                "Setting a programmatic timeout for {0} milliseconds from now.",
+                intervalDuration);
+        Timer timer = timerService.createTimer(intervalDuration,
+                "Created new programmatic timer");
+    }
+
+    @Timeout
+    public void programmaticTimeout(Timer timer) {
+        this.setLastProgrammaticTimeout(new Date());
+        logger.info("Programmatic timeout occurred.");
+    }
+
+    @Schedule(minute = "*/1", hour = "*", persistent = false)
+    public void automaticTimeout() {
+        this.setLastAutomaticTimeout(new Date());
+        logger.info("Automatic timeout occured");
+    }
+
+    public String getLastProgrammaticTimeout() {
+        if (lastProgrammaticTimeout != null) {
+            return lastProgrammaticTimeout.toString();
+        } else {
+            return "never";
+        }
+    }
+
+    public void setLastProgrammaticTimeout(Date lastTimeout) {
+        this.lastProgrammaticTimeout = lastTimeout;
+    }
+
+    public String getLastAutomaticTimeout() {
+        if (lastAutomaticTimeout != null) {
+            return lastAutomaticTimeout.toString();
+        } else {
+            return "never";
+        }
+    }
+
+    public void setLastAutomaticTimeout(Date lastAutomaticTimeout) {
+        this.lastAutomaticTimeout = lastAutomaticTimeout;
+    }
+}
+
+
+
+
+
+
+
+
+ +++ + + + + + +
+

Note:

+
+
+

GlassFish Server has a default minimum timeout value of 1,000 +milliseconds, or 1 second. If you need to set the timeout value lower +than 1,000 milliseconds, change the value of the Minimum Delivery +Interval setting in the Administration Console. To modify the minimum +timeout value, in the Administration Console expand Configurations, then +expand server-config, select EJB Container, and click the EJB Timer +Service tab. Enter a new timeout value under Minimum Delivery Interval +and click Save. The lowest practical value for +minimum-delivery-interval-in-millis is around 10 milliseconds, owing +to virtual machine constraints.

+
+
+
+
+
+
+
+
+
+

34.5.8 Running the timersession Example

+
+

You can use either NetBeans IDE or Maven to build, package, deploy, and +run the timersession example.

+
+
+

The following topics are addressed here:

+
+ +
+

34.5.8.1 To Run the timersession Example Using NetBeans IDE

+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    From the File menu, choose Open Project.

    +
  4. +
  5. +

    In the Open Project dialog box, navigate to:

    +
    +
    +
    tut-install/examples/ejb
    +
    +
    +
  6. +
  7. +

    Select the timersession folder.

    +
  8. +
  9. +

    Click Open Project.

    +
  10. +
  11. +

    From the Run menu, choose Run Project.

    +
    +

    This builds and packages the application into a WAR file located at +tut-install`/examples/ejb/timersession/target/timersession.war`, deploys +this WAR file to your GlassFish Server instance, and then runs the web +client.

    +
    +
  12. +
+
+
+

34.5.8.2 To Build, Package, and Deploy the timersession Example Using +Maven +^^^^^^^^^^^^^^^^^^^^^^^^^

+
+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    In a terminal window, go to:

    +
    +
    +
    tut-install/examples/ejb/timersession/
    +
    +
    +
  4. +
  5. +

    Enter the following command:

    +
    +
    +
    mvn install
    +
    +
    +
    +

    This builds and packages the application into a WAR file located at +tut-install`/examples/ejb/timersession/target/timersession.war` and +deploys this WAR file to your GlassFish Server instance.

    +
    +
  6. +
+
+
+
+

34.5.8.3 To Run the Web Client

+
+
    +
  1. +

    Open a web browser to the following URL:

    +
    +
    +
    http://localhost:8080/timersession
    +
    +
    +
  2. +
  3. +

    Click Set Timer to set a programmatic timer.

    +
  4. +
  5. +

    Wait for a while and click the browser’s Refresh button.

    +
    +

    You will see the date and time of the last programmatic and automatic +timeouts.

    +
    +
    +

    To see the messages that are logged when a timeout occurs, open the +server.log file located in domain-dir`/logs/`.

    +
    +
  6. +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+
+ + + \ No newline at end of file diff --git a/ejb-basicexamples006.html b/ejb-basicexamples006.html new file mode 100644 index 0000000..8e1e4b1 --- /dev/null +++ b/ejb-basicexamples006.html @@ -0,0 +1,114 @@ + + + + + + Handling Exceptions + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

34.6 Handling Exceptions

+
+
+

The exceptions thrown by enterprise beans fall into two categories: +system and application.

+
+
+

A system exception indicates a problem with the services that support an +application. For example, a connection to an external resource cannot be +obtained, or an injected resource cannot be found. If it encounters a +system-level problem, your enterprise bean should throw a +javax.ejb.EJBException. Because the EJBException is a subclass of +RuntimeException, you do not have to specify it in the throws clause +of the method declaration. If a system exception is thrown, the EJB +container might destroy the bean instance. Therefore, a system exception +cannot be handled by the bean’s client program, but instead requires +intervention by a system administrator.

+
+
+

An application exception signals an error in the business logic of an +enterprise bean. Application exceptions are typically exceptions that +you’ve coded yourself, such as the BookException thrown by the +business methods of the CartBean example. When an enterprise bean +throws an application exception, the container does not wrap it in +another exception. The client should be able to handle any application +exception it receives.

+
+
+

If a system exception occurs within a transaction, the EJB container +rolls back the transaction. However, if an application exception is +thrown within a transaction, the container does not roll back the +transaction.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/ejb-embedded.html b/ejb-embedded.html new file mode 100644 index 0000000..35011e7 --- /dev/null +++ b/ejb-embedded.html @@ -0,0 +1,106 @@ + + + + + + Using the Embedded Enterprise Bean Container + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

35 Using the Embedded Enterprise Bean Container

+
+
+

This chapter demonstrates how to use the embedded enterprise bean +container to run enterprise bean applications in the Java SE +environment, outside of a Java EE server.

+
+
+

The following topics are addressed here:

+
+ +
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/ejb-embedded001.html b/ejb-embedded001.html new file mode 100644 index 0000000..1ad883c --- /dev/null +++ b/ejb-embedded001.html @@ -0,0 +1,98 @@ + + + + + + Overview of the Embedded Enterprise Bean Container + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

35.1 Overview of the Embedded Enterprise Bean Container

+
+
+

The embedded enterprise bean container is used to access enterprise bean +components from client code executed in a Java SE environment. The +container and the client code are executed within the same virtual +machine. The embedded enterprise bean container is typically used for +testing enterprise beans without having to deploy them to a server.

+
+
+

Most of the services present in the enterprise bean container in a Java +EE server are available in the embedded enterprise bean container, +including injection, container-managed transactions, and security. +Enterprise bean components execute similarly in both embedded and Java +EE environments, and therefore the same enterprise bean can be easily +reused in both standalone and networked applications.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/ejb-embedded002.html b/ejb-embedded002.html new file mode 100644 index 0000000..84bca78 --- /dev/null +++ b/ejb-embedded002.html @@ -0,0 +1,323 @@ + + + + + + Developing Embeddable Enterprise Bean Applications + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

35.2 Developing Embeddable Enterprise Bean Applications

+
+
+

All embeddable enterprise bean containers support the features listed in +Table 35-1.

+
+
+

+
+
+

Table 35-1 Required Enterprise Bean Features in the Embeddable Container

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Enterprise Bean FeatureDescription

Local session beans

Local and no-interface view stateless, stateful, +and singleton session beans. All method access is synchronous. Session +beans must not be web service endpoints.

Transactions

Container-managed and bean-managed transactions.

Security

Declarative and programmatic security.

Interceptors

Class-level and method-level interceptors for session +beans.

Deployment descriptor

The optional ejb-jar.xml deployment +descriptor, with the same overriding rules for the enterprise bean +container in Java EE servers.

+
+
+
+
+
+
+
+

Container providers are allowed to support the full set of features in +enterprise beans, but applications that use the embedded container will +not be portable if they use enterprise bean features not listed in +Table 35-1, such as the timer service, session beans as web +service endpoints, or remote business interfaces.

+
+
+

35.2.1 Running Embedded Applications

+
+

The embedded container, the enterprise bean components, and the client +all are executed in the same virtual machine using the same classpath. +As a result, developers can run an application that uses the embedded +container just like a typical Java SE application, as follows:

+
+
+
+
java -classpath mySessionBean.jar:containerProviderRuntime.jar:myClient.jar \
+com.example.ejb.client.Main
+
+
+
+

In the above example, mySessionBean.jar is an EJB JAR containing a +local stateless session bean, containerProviderRuntime.jar is a JAR +file supplied by the enterprise bean provider that contains the needed +runtime classes for the embedded container, and myClient.jar is a JAR +file containing a Java SE application that calls the business methods in +the session bean through the embedded container.

+
+
+

In GlassFish Server, the runtime JAR that includes the classes for the +embedded container is glassfish-embedded-all.jar.

+
+
+
+

35.2.2 Creating the Enterprise Bean Container

+
+

The javax.ejb.embedded.EJBContainer abstract class represents an +instance of the enterprise bean container and includes factory methods +for creating a container instance. The EJBContainer.createEJBContainer +method is used to create and initialize an embedded container instance.

+
+
+

The following code snippet shows how to create an embedded container +that is initialized with the container provider’s default settings:

+
+
+
+
EJBContainer ec = EJBContainer.createEJBContainer();
+
+
+
+

By default, the embedded container will search the virtual machine +classpath for enterprise bean modules: directories containing a +META-INF/ejb-jar.xml deployment descriptor, directories containing a +class file with one of the enterprise bean component annotations (such +as @Stateless), or JAR files containing an ejb-jar.xml deployment +descriptor or class file with an enterprise bean annotation. Any +matching entries are considered enterprise bean modules within the same +application. Once all the valid enterprise bean modules have been found +in the classpath, the container will begin initializing the modules. +When the createEJBContainer method successfully returns, the client +application can obtain references to the client view of any enterprise +bean module found by the embedded container.

+
+
+

An alternate version of the EJBContainer.createEJBContainer method +takes a Map of properties and settings for customizing the embeddable +container instance:

+
+
+
+
Properties props = new Properties();
+props.setProperty(...);
+...
+EJBContainer ec = EJBContainer.createEJBContainer(props);
+
+
+
+

35.2.2.1 Explicitly Specifying Enterprise Bean Modules to Be Initialized

+
+

Developers can specify exactly which enterprise bean modules the +embedded container will initialize. To explicitly specify the enterprise +bean modules initialized by the embedded container, set the +EJBContainer.MODULES property.

+
+
+

The modules may be located either in the virtual machine classpath in +which the embedded container and client code run, or alternately outside +the virtual machine classpath.

+
+
+

To specify modules in the virtual machine classpath, set +EJBContainer.MODULES to a String to specify a single module name, or +a String array containing the module names. The embedded container +searches the virtual machine classpath for enterprise bean modules +matching the specified names:

+
+
+
+
Properties props = new Properties();
+props.setProperty(EJBContainer.MODULES, "mySessionBean");
+EJBContainer ec = EJBContainer.createEJBContainer(props);
+
+
+
+

To specify enterprise bean modules outside the virtual machine +classpath, set EJBContainer.MODULES to a java.io.File object or an +array of File objects. Each File object refers to an EJB JAR file, +or a directory containing an expanded EJB JAR file:

+
+
+
+
Properties props = new Properties();
+File ejbJarFile = new File(...);
+props.setProperty(EJBContainer.MODULES, ejbJarFile);
+EJBContainer ec = EJBContainer.createEJBContainer(props);
+
+
+
+
+
+

35.2.3 Looking Up Session Bean References

+
+

To look up session bean references in an application using the embedded +container:

+
+
+
    +
  1. +

    Use an instance of EJBContainer to retrieve a +javax.naming.Context object.

    +
    +

    Call the EJBContainer.getContext method to retrieve the Context +object:

    +
    +
    +
    +
    EJBContainer ec = EJBContainer.createEJBContainer();
    +Context ctx = ec.getContext();
    +
    +
    +
    +

    References to session beans can then be obtained using the portable JNDI +syntax detailed in Portable JNDI Syntax. +For example, to obtain a reference to MySessionBean, a local session +bean with a no-interface view, use the following code:

    +
    +
    +
    +
    MySessionBean msb = (MySessionBean)
    +            ctx.lookup("java:global/mySessionBean/MySessionBean");
    +
    +
    +
  2. +
+
+
+
+

35.2.4 Shutting Down the Enterprise Bean Container

+
+

To shut down the embedded container:

+
+
+
    +
  1. +

    From the client, call the close method of the instance of +EJBContainer.

    +
    +
    +
    EJBContainer ec = EJBContainer.createEJBContainer();
    +...
    +ec.close();
    +
    +
    +
    +

    While clients are not required to shut down EJBContainer instances, +doing so frees resources consumed by the embedded container. This is +particularly important when the virtual machine under which the client +application is running has a longer lifetime than the client +application.

    +
    +
  2. +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/ejb-embedded003.html b/ejb-embedded003.html new file mode 100644 index 0000000..4a78618 --- /dev/null +++ b/ejb-embedded003.html @@ -0,0 +1,258 @@ + + + + + + The standalone Example Application + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

35.3 The standalone Example Application

+
+
+

The standalone example application demonstrates how to create an +instance of the embedded enterprise bean container in a JUnit test class +and call a session bean business method.

+
+
+

The following topics are addressed here:

+
+ +
+

35.3.1 Overview of the standalone Example Application

+
+

Testing the business methods of an enterprise bean in a unit test allows +developers to exercise the business logic of an application separately +from the other application layers, such as the presentation layer, and +without having to deploy the application to a Java EE server.

+
+
+

The standalone example has two main components: StandaloneBean, a +stateless session bean, and StandaloneBeanTest, a JUnit test class +that acts as a client to StandaloneBean using the embedded container.

+
+
+

StandaloneBean is a simple session bean exposing a local, no-interface +view with a single business method, returnMessage, which returns +"Greetings!" as a String:

+
+
+
+
@Stateless
+public class StandaloneBean {
+
+    private static final String message = "Greetings!";
+
+    public String returnMessage() {
+        return message;
+    }
+
+}
+
+
+
+

StandaloneBeanTest calls StandaloneBean.returnMessage and tests that +the returned message is correct. First, an embedded container instance +and initial context are created within the setUp method, which is +annotated with org.junit.Before to indicate that the method should be +executed before the test methods:

+
+
+
+
@Before
+public void setUp() {
+    ec = EJBContainer.createEJBContainer();
+    ctx = ec.getContext();
+}
+
+
+
+

The testReturnMessage method, annotated with org.junit.Test to +indicate that the method includes a unit test, obtains a reference to +StandaloneBean through the Context instance, and calls +StandaloneBean.returnMessage. The result is compared with the expected +result using a JUnit assertion, assertEquals. If the string returned +from StandaloneBean.returnMessage is equal to "Greetings!" the test +passes:

+
+
+
+
@Test
+public void testReturnMessage() throws Exception {
+    logger.info("Testing standalone.ejb.StandaloneBean.returnMessage()");
+    StandaloneBean instance = (StandaloneBean)
+            ctx.lookup("java:global/classes/StandaloneBean");
+    String expResult = "Greetings!";
+    String result = instance.returnMessage();
+    assertEquals(expResult, result);
+}
+
+
+
+

Finally, the tearDown method, annotated with org.junit.After to +indicate that the method should be executed after all the unit tests +have run, closes the embedded container instance:

+
+
+
+
@After
+public void tearDown() {
+    if (ec != null) {
+        ec.close();
+    }
+}
+
+
+
+
+

35.3.2 To Run the standalone Example Application Using NetBeans IDE

+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    From the File menu, choose Open Project.

    +
  4. +
  5. +

    In the Open Project dialog box, navigate to:

    +
    +
    +
    tut-install/examples/ejb
    +
    +
    +
  6. +
  7. +

    Select the standalone folder and click Open Project.

    +
  8. +
  9. +

    In the Projects tab, right-click standalone and select Test.

    +
    +

    This will execute the JUnit test class StandaloneBeanTest. The Output +tab shows the progress of the test and the output log.

    +
    +
  10. +
+
+
+
+

35.3.3 To Run the standalone Example Application Using Maven

+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    In a terminal window, go to:

    +
    +
    +
    tut-install/examples/ejb/standalone/
    +
    +
    +
  4. +
  5. +

    Enter the following command:

    +
    +
    +
    mvn install
    +
    +
    +
    +

    This command compiles and packages the application into an JAR file, and +executes the JUnit test class StandaloneBeanTest.

    +
    +
  6. +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/ejb-gettingstarted.html b/ejb-gettingstarted.html new file mode 100644 index 0000000..1e6d801 --- /dev/null +++ b/ejb-gettingstarted.html @@ -0,0 +1,109 @@ + + + + + + Getting Started with Enterprise Beans + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

33 Getting Started with Enterprise Beans

+
+
+

This chapter shows how to develop, deploy, and run a simple Java EE +application named converter that uses an EJB for its business logic. +The purpose of converter is to calculate currency conversions among +Japanese yen, euros, and US dollars. The converter application +consists of an enterprise bean, which performs the calculations, and a +web client.

+
+
+

The following topics are addressed here:

+
+ +
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/ejb-gettingstarted001.html b/ejb-gettingstarted001.html new file mode 100644 index 0000000..2b98d51 --- /dev/null +++ b/ejb-gettingstarted001.html @@ -0,0 +1,134 @@ + + + + + + Starting With Enterprise Beans + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

33.1 Starting With Enterprise Beans

+
+
+

Here’s an overview of the steps you’ll follow:

+
+
+
    +
  1. +

    Create the enterprise bean: ConverterBean.

    +
  2. +
  3. +

    Create the web client.

    +
  4. +
  5. +

    Deploy converter onto the server.

    +
  6. +
  7. +

    Using a browser, run the web client.

    +
  8. +
+
+
+

Before proceeding, make sure that you’ve done the following:

+
+
+ +
+
+

The following topics are addressed here:

+
+ +
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/ejb-gettingstarted002.html b/ejb-gettingstarted002.html new file mode 100644 index 0000000..96a3711 --- /dev/null +++ b/ejb-gettingstarted002.html @@ -0,0 +1,326 @@ + + + + + + Creating the Enterprise Bean + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

33.2 Creating the Enterprise Bean

+
+
+

The enterprise bean in our example is a stateless session bean called +ConverterBean. The source code for ConverterBean is in the +tut-install`/examples/ejb/converter/src/main/java/` directory.

+
+
+

Creating ConverterBean requires these steps:

+
+
+
    +
  1. +

    Coding the bean’s implementation class (the source code is provided)

    +
  2. +
  3. +

    Compiling the source code

    +
  4. +
+
+
+

33.2.1 Coding the Enterprise Bean Class

+
+

The enterprise bean class for this example is called ConverterBean. +This class implements two business methods: dollarToYen and +yenToEuro. Because the enterprise bean class doesn’t implement a +business interface, the enterprise bean exposes a local, no-interface +view. The public methods in the enterprise bean class are available to +clients that obtain a reference to ConverterBean. The source code for +the ConverterBean class is as follows:

+
+
+
+
package javaeetutorial.converter.ejb;
+
+import java.math.BigDecimal;
+import javax.ejb.*;
+
+@Stateless
+public class ConverterBean {
+    private BigDecimal yenRate = new BigDecimal("83.0602");
+    private BigDecimal euroRate = new BigDecimal("0.0093016");
+
+    public BigDecimal dollarToYen(BigDecimal dollars) {
+        BigDecimal result = dollars.multiply(yenRate);
+        return result.setScale(2, BigDecimal.ROUND_UP);
+    }
+
+    public BigDecimal yenToEuro(BigDecimal yen) {
+        BigDecimal result = yen.multiply(euroRate);
+        return result.setScale(2, BigDecimal.ROUND_UP);
+    }
+}
+
+
+
+

Note the @Stateless annotation decorating the enterprise bean class. +This annotation lets the container know that ConverterBean is a +stateless session bean.

+
+
+
+

33.2.2 Creating the converter Web Client

+
+

The web client is contained in the following servlet class under the +tut-install`/examples/ejb/converter/src/main/java/` directory:

+
+
+
+
converter/web/ConverterServlet.java
+
+
+
+

A Java servlet is a web component that responds to HTTP requests.

+
+
+

The ConverterServlet class uses dependency injection to obtain a +reference to ConverterBean. The javax.ejb.EJB annotation is added to +the declaration of the private member variable converter, which is of +type ConverterBean. ConverterBean exposes a local, no-interface +view, so the enterprise bean implementation class is the variable type:

+
+
+
+
@WebServlet(urlPatterns="/")
+public class ConverterServlet extends HttpServlet {
+  @EJB
+  ConverterBean converter;
+  ...
+}
+
+
+
+

When the user enters an amount to be converted to yen and euro, the +amount is retrieved from the request parameters; then the +ConverterBean.dollarToYen and the ConverterBean.yenToEuro methods +are called:

+
+
+
+
...
+try {
+  String amount = request.getParameter("amount");
+  if (amount != null && amount.length()> 0) {
+    // convert the amount to a BigDecimal from the request parameter
+    BigDecimal d = new BigDecimal(amount);
+    // call the ConverterBean.dollarToYen() method to get the amount
+    // in Yen
+    BigDecimal yenAmount = converter.dollarToYen(d);
+
+    // call the ConverterBean.yenToEuro() method to get the amount
+    // in Euros
+    BigDecimal euroAmount = converter.yenToEuro(yenAmount);
+    ...
+  }
+  ...
+}
+
+
+
+

The results are displayed to the user.

+
+
+
+

33.2.3 Running the converter Example

+
+

Now you are ready to compile the enterprise bean class +(ConverterBean.java) and the servlet class (ConverterServlet.java) +and to package the compiled classes into a WAR file. You can use either +NetBeans IDE or Maven to build, package, deploy, and run the converter +example.

+
+
+

The following topics are addressed here:

+
+ +
+

33.2.3.1 To Run the converter Example Using NetBeans IDE

+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    From the File menu, choose Open Project.

    +
  4. +
  5. +

    In the Open Project dialog box, navigate to:

    +
    +
    +
    tut-install/examples/ejb
    +
    +
    +
  6. +
  7. +

    Select the converter folder.

    +
  8. +
  9. +

    Click Open Project.

    +
  10. +
  11. +

    In the Projects tab, right-click the converter project and select +Build.

    +
  12. +
  13. +

    Open a web browser to the following URL:

    +
    +
    +
    http://localhost:8080/converter
    +
    +
    +
  14. +
  15. +

    On the Servlet ConverterServlet page, enter 100 in the field and +click Submit.

    +
    +

    A second page opens, showing the converted values.

    +
    +
  16. +
+
+
+
+

33.2.3.2 To Run the converter Example Using Maven

+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    In a terminal window, go to:

    +
    +
    +
    tut-install/examples/ejb/converter/
    +
    +
    +
  4. +
  5. +

    Enter the following command:

    +
    +
    +
    mvn install
    +
    +
    +
    +

    This command compiles the source files for the enterprise bean and the +servlet, packages the project into a WAR module (converter.war), and +deploys the WAR to the server. For more information about Maven, see +Building the Examples.

    +
    +
  6. +
  7. +

    Open a web browser to the following URL:

    +
    +
    +
    http://localhost:8080/converter
    +
    +
    +
  8. +
  9. +

    On the Servlet ConverterServlet page, enter 100 in the field and +click Submit.

    +
    +

    A second page opens, showing the converted values.

    +
    +
  10. +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+
+ + + \ No newline at end of file diff --git a/ejb-gettingstarted003.html b/ejb-gettingstarted003.html new file mode 100644 index 0000000..a4954e3 --- /dev/null +++ b/ejb-gettingstarted003.html @@ -0,0 +1,140 @@ + + + + + + Modifying the Java EE Application + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

33.3 Modifying the Java EE Application

+
+
+

GlassFish Server supports iterative development. Whenever you make a +change to a Java EE application, you must redeploy the application.

+
+
+

33.3.1 To Modify a Class File

+
+

To modify a class file in an enterprise bean, you change the source +code, recompile it, and redeploy the application. For example, to update +the exchange rate in the dollarToYen business method of the +ConverterBean class, you would follow these steps.

+
+
+

To modify ConverterServlet, the procedure is the same.

+
+
+
    +
  1. +

    Edit ConverterBean.java and save the file.

    +
  2. +
  3. +

    Recompile the source file.

    +
    +
      +
    • +

      To recompile ConverterBean.java in NetBeans IDE, right-click the +converter project and select Run.

      +
      +

      This recompiles the ConverterBean.java file, replaces the old class +file in the build directory, and redeploys the application to GlassFish +Server.

      +
      +
    • +
    • +

      Recompile ConverterBean.java using Maven.

      +
    • +
    +
    +
  4. +
  5. +

    In a terminal window, go to the +tut-install`/examples/ejb/converter/` directory.

    +
  6. +
  7. +

    Enter the following command:

    +
    +
    +
    mvn install
    +
    +
    +
    +

    This command repackages and deploys the application.

    +
    +
  8. +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/ejb-intro.html b/ejb-intro.html new file mode 100644 index 0000000..fe965c5 --- /dev/null +++ b/ejb-intro.html @@ -0,0 +1,125 @@ + + + + + + Enterprise Beans + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

32 Enterprise Beans

+
+
+

Enterprise beans are Java EE components that implement Enterprise +JavaBeans (EJB) technology. Enterprise beans run in the EJB container, a +runtime environment within GlassFish Server (see +Container Types). Although transparent to +the application developer, the EJB container provides system-level +services, such as transactions and security, to its enterprise beans. +These services enable you to quickly build and deploy enterprise beans, +which form the core of transactional Java EE applications.

+
+
+

The following topics are addressed here:

+
+ +
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/ejb-intro001.html b/ejb-intro001.html new file mode 100644 index 0000000..fc7f0bd --- /dev/null +++ b/ejb-intro001.html @@ -0,0 +1,203 @@ + + + + + + What Is an Enterprise Bean? + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

32.1 What Is an Enterprise Bean?

+
+
+

Written in the Java programming language, an enterprise bean is a +server-side component that encapsulates the business logic of an +application. The business logic is the code that fulfills the purpose of +the application. In an inventory control application, for example, the +enterprise beans might implement the business logic in methods called +checkInventoryLevel and orderProduct. By invoking these methods, +clients can access the inventory services provided by the application.

+
+
+

The following topics are addressed here:

+
+ +
+

32.1.1 Benefits of Enterprise Beans

+
+

For several reasons, enterprise beans simplify the development of large, +distributed applications. First, because the EJB container provides +system-level services to enterprise beans, the bean developer can +concentrate on solving business problems. The EJB container, rather than +the bean developer, is responsible for system-level services, such as +transaction management and security authorization.

+
+
+

Second, because the beans rather than the clients contain the +application’s business logic, the client developer can focus on the +presentation of the client. The client developer does not have to code +the routines that implement business rules or access databases. As a +result, the clients are thinner, a benefit that is particularly +important for clients that run on small devices.

+
+
+

Third, because enterprise beans are portable components, the application +assembler can build new applications from existing beans. Provided that +they use the standard APIs, these applications can run on any compliant +Java EE server.

+
+
+
+

32.1.2 When to Use Enterprise Beans

+
+

You should consider using enterprise beans if your application has any +of the following requirements.

+
+
+
    +
  • +

    The application must be scalable. To accommodate a growing number of +users, you may need to distribute an application’s components across +multiple machines. Not only can the enterprise beans of an application +run on different machines, but also their location will remain +transparent to the clients.

    +
  • +
  • +

    Transactions must ensure data integrity. Enterprise beans support +transactions, the mechanisms that manage the concurrent access of shared +objects.

    +
  • +
  • +

    The application will have a variety of clients. With only a few lines +of code, remote clients can easily locate enterprise beans. These +clients can be thin, various, and numerous.

    +
  • +
+
+
+
+

32.1.3 Types of Enterprise Beans

+
+

Table 32-1 summarizes the two types of enterprise beans. +The following sections discuss each type in more detail.

+
+
+

+
+
+

Table 32-1 Enterprise Bean Types

+
+ ++++ + + + + + + + + + + + + + + + + +
Enterprise Bean TypePurpose

Session

Performs a task for a client; optionally, may implement a web +service

Message-driven

Acts as a listener for a particular messaging type, +such as the Java Message Service API

+
+
+
+
+
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/ejb-intro002.html b/ejb-intro002.html new file mode 100644 index 0000000..30398dc --- /dev/null +++ b/ejb-intro002.html @@ -0,0 +1,279 @@ + + + + + + What Is a Session Bean? + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

32.2 What Is a Session Bean?

+
+
+

A session bean encapsulates business logic that can be invoked +programmatically by a client over local, remote, or web service client +views. To access an application that is deployed on the server, the +client invokes the session bean’s methods. The session bean performs +work for its client, shielding it from complexity by executing business +tasks inside the server.

+
+
+

A session bean is not persistent. (That is, its data is not saved to a +database.)

+
+ +
+

The following topics are addressed here:

+
+ +
+

32.2.1 Types of Session Beans

+
+

Session beans are of three types: stateful, stateless, and singleton.

+
+
+

The following topics are addressed here:

+
+ +
+

32.2.1.1 Stateful Session Beans

+
+

The state of an object consists of the values of its instance variables. +In a stateful session bean, the instance variables represent the state +of a unique client/bean session. Because the client interacts ("talks") +with its bean, this state is often called the conversational state.

+
+
+

As its name suggests, a session bean is similar to an interactive +session. A session bean is not shared; it can have only one client, in +the same way that an interactive session can have only one user. When +the client terminates, its session bean appears to terminate and is no +longer associated with the client.

+
+
+

The state is retained for the duration of the client/bean session. If +the client removes the bean, the session ends and the state disappears. +This transient nature of the state is not a problem, however, because +when the conversation between the client and the bean ends, there is no +need to retain the state.

+
+
+
+

32.2.1.2 Stateless Session Beans

+
+

A stateless session bean does not maintain a conversational state with +the client. When a client invokes the methods of a stateless bean, the +bean’s instance variables may contain a state specific to that client +but only for the duration of the invocation. When the method is +finished, the client-specific state should not be retained. Clients may, +however, change the state of instance variables in pooled stateless +beans, and this state is held over to the next invocation of the pooled +stateless bean. Except during method invocation, all instances of a +stateless bean are equivalent, allowing the EJB container to assign an +instance to any client. That is, the state of a stateless session bean +should apply across all clients.

+
+
+

Because they can support multiple clients, stateless session beans can +offer better scalability for applications that require large numbers of +clients. Typically, an application requires fewer stateless session +beans than stateful session beans to support the same number of clients.

+
+
+

A stateless session bean can implement a web service, but a stateful +session bean cannot.

+
+
+
+

32.2.1.3 Singleton Session Beans

+
+

A singleton session bean is instantiated once per application and exists +for the lifecycle of the application. Singleton session beans are +designed for circumstances in which a single enterprise bean instance is +shared across and concurrently accessed by clients.

+
+
+

Singleton session beans offer similar functionality to stateless session +beans but differ from them in that there is only one singleton session +bean per application, as opposed to a pool of stateless session beans, +any of which may respond to a client request. Like stateless session +beans, singleton session beans can implement web service endpoints.

+
+
+

Singleton session beans maintain their state between client invocations +but are not required to maintain their state across server crashes or +shutdowns.

+
+
+

Applications that use a singleton session bean may specify that the +singleton should be instantiated upon application startup, which allows +the singleton to perform initialization tasks for the application. The +singleton may perform cleanup tasks on application shutdown as well, +because the singleton will operate throughout the lifecycle of the +application.

+
+
+
+
+

32.2.2 When to Use Session Beans

+
+

Stateful session beans are appropriate if any of the following +conditions are true.

+
+
+
    +
  • +

    The bean’s state represents the interaction between the bean and a +specific client.

    +
  • +
  • +

    The bean needs to hold information about the client across method +invocations.

    +
  • +
  • +

    The bean mediates between the client and the other components of the +application, presenting a simplified view to the client.

    +
  • +
  • +

    Behind the scenes, the bean manages the work flow of several +enterprise beans.

    +
  • +
+
+
+

To improve performance, you might choose a stateless session bean if it +has any of these traits.

+
+
+
    +
  • +

    The bean’s state has no data for a specific client.

    +
  • +
  • +

    In a single method invocation, the bean performs a generic task for +all clients. For example, you might use a stateless session bean to send +an email that confirms an online order.

    +
  • +
  • +

    The bean implements a web service.

    +
  • +
+
+
+

Singleton session beans are appropriate in the following circumstances.

+
+
+
    +
  • +

    State needs to be shared across the application.

    +
  • +
  • +

    A single enterprise bean needs to be accessed by multiple threads +concurrently.

    +
  • +
  • +

    The application needs an enterprise bean to perform tasks upon +application startup and shutdown.

    +
  • +
  • +

    The bean implements a web service.

    +
  • +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/ejb-intro003.html b/ejb-intro003.html new file mode 100644 index 0000000..aa408aa --- /dev/null +++ b/ejb-intro003.html @@ -0,0 +1,207 @@ + + + + + + What Is a Message-Driven Bean? + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

32.3 What Is a Message-Driven Bean?

+
+
+

A message-driven bean is an enterprise bean that allows Java EE +applications to process messages asynchronously. This type of bean +normally acts as a JMS message listener, which is similar to an event +listener but receives JMS messages instead of events. The messages can +be sent by any Java EE component (an application client, another +enterprise bean, or a web component) or by a JMS application or system +that does not use Java EE technology. Message-driven beans can process +JMS messages or other kinds of messages.

+
+
+

The following topics are addressed here:

+
+ +
+

32.3.1 What Makes Message-Driven Beans Different from Session Beans?

+
+

The most visible difference between message-driven beans and session +beans is that clients do not access message-driven beans through +interfaces. Interfaces are described in the section +Accessing Enterprise Beans. Unlike a +session bean, a message-driven bean has only a bean class.

+
+
+

In several respects, a message-driven bean resembles a stateless session +bean.

+
+
+
    +
  • +

    A message-driven bean’s instances retain no data or conversational +state for a specific client.

    +
  • +
  • +

    All instances of a message-driven bean are equivalent, allowing the +EJB container to assign a message to any message-driven bean instance. +The container can pool these instances to allow streams of messages to +be processed concurrently.

    +
  • +
  • +

    A single message-driven bean can process messages from multiple +clients.

    +
  • +
+
+
+

The instance variables of the message-driven bean instance can contain +some state across the handling of client messages, such as a JMS API +connection, an open database connection, or an object reference to an +enterprise bean object.

+
+
+

Client components do not locate message-driven beans and invoke methods +directly on them. Instead, a client accesses a message-driven bean +through, for example, JMS by sending messages to the message destination +for which the message-driven bean class is the MessageListener. You +assign a message-driven bean’s destination during deployment by using +GlassFish Server resources.

+
+
+

Message-driven beans have the following characteristics.

+
+
+
    +
  • +

    They execute upon receipt of a single client message.

    +
  • +
  • +

    They are invoked asynchronously.

    +
  • +
  • +

    They are relatively short-lived.

    +
  • +
  • +

    They do not represent directly shared data in the database, but they +can access and update this data.

    +
  • +
  • +

    They can be transaction-aware.

    +
  • +
  • +

    They are stateless.

    +
  • +
+
+
+

When a message arrives, the container calls the message-driven bean’s +onMessage method to process the message. The onMessage method +normally casts the message to one of the five JMS message types and +handles it in accordance with the application’s business logic. The +onMessage method can call helper methods or can invoke a session bean +to process the information in the message or to store it in a database.

+
+
+

A message can be delivered to a message-driven bean within a transaction +context, so all operations within the onMessage method are part of a +single transaction. If message processing is rolled back, the message +will be redelivered. For more information, see +Receiving Messages Asynchronously Using a +Message-Driven Bean and Chapter 51, +"Transactions".

+
+
+
+

32.3.2 When to Use Message-Driven Beans

+
+

Session beans allow you to send JMS messages and to receive them +synchronously but not asynchronously. To avoid tying up server +resources, do not to use blocking synchronous receives in a server-side +component; in general, JMS messages should not be sent or received +synchronously. To receive messages asynchronously, use a message-driven +bean.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/ejb-intro004.html b/ejb-intro004.html new file mode 100644 index 0000000..3798abf --- /dev/null +++ b/ejb-intro004.html @@ -0,0 +1,619 @@ + + + + + + Accessing Enterprise Beans + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

32.4 Accessing Enterprise Beans

+
+
+
+
+
+
+
+ +++ + + + + + +
+

Note:

+
+
+

The material in this section applies only to session beans and not to +message-driven beans. Because they have a different programming model, +message-driven beans do not have interfaces or no-interface views that +define client access.

+
+
+
+
+
+
+
+
+

Clients access enterprise beans either through a no-interface view or +through a business interface. A no-interface view of an enterprise bean +exposes the public methods of the enterprise bean implementation class +to clients. Clients using the no-interface view of an enterprise bean +may invoke any public methods in the enterprise bean implementation +class or any superclasses of the implementation class. A business +interface is a standard Java programming language interface that +contains the business methods of the enterprise bean.

+
+
+

A client can access a session bean only through the methods defined in +the bean’s business interface or through the public methods of an +enterprise bean that has a no-interface view. The business interface or +no-interface view defines the client’s view of an enterprise bean. All +other aspects of the enterprise bean (method implementations and +deployment settings) are hidden from the client.

+
+
+

Well-designed interfaces and no-interface views simplify the development +and maintenance of Java EE applications. Not only do clean interfaces +and no-interface views shield the clients from any complexities in the +EJB tier, but they also allow the enterprise beans to change internally +without affecting the clients. For example, if you change the +implementation of a session bean business method, you won’t have to +alter the client code. But if you were to change the method definitions +in the interfaces, you might have to modify the client code as well. +Therefore, it is important that you design the interfaces and +no-interface views carefully to isolate your clients from possible +changes in the enterprise beans.

+
+
+

Session beans can have more than one business interface. Session beans +should, but are not required to, implement their business interface or +interfaces.

+
+
+

32.4.1 Using Enterprise Beans in Clients

+
+

The client of an enterprise bean obtains a reference to an instance of +an enterprise bean through either dependency injection, using Java +programming language annotations, or JNDI lookup, using the Java Naming +and Directory Interface syntax to find the enterprise bean instance.

+
+
+

Dependency injection is the simplest way of obtaining an enterprise bean +reference. Clients that run within a Java EE server-managed environment, +JavaServer Faces web applications, JAX-RS web services, other enterprise +beans, or Java EE application clients support dependency injection using +the javax.ejb.EJB annotation.

+
+
+

Applications that run outside a Java EE server-managed environment, such +as Java SE applications, must perform an explicit lookup. JNDI supports +a global syntax for identifying Java EE components to simplify this +explicit lookup.

+
+
+

32.4.1.1 Portable JNDI Syntax

+
+

Three JNDI namespaces are used for portable JNDI lookups: java:global, +java:module, and java:app.

+
+
+
    +
  • +

    The java:global JNDI namespace is the portable way of finding remote +enterprise beans using JNDI lookups. JNDI addresses are of the following +form:

    +
    +
    +
    java:global[/application name]/module name /enterprise bean name[/interface name ]
    +
    +
    +
    +

    Application name and module name default to the name of the application +and module minus the file extension. Application names are required only +if the application is packaged within an EAR. The interface name is +required only if the enterprise bean implements more than one business +interface.

    +
    +
  • +
  • +

    The java:module namespace is used to look up local enterprise beans +within the same module. JNDI addresses using the java:module namespace +are of the following form:

    +
    +
    +
    java:module/enterprise bean name/[interface name]
    +
    +
    +
    +

    The interface name is required only if the enterprise bean implements +more than one business interface.

    +
    +
  • +
  • +

    The java:app namespace is used to look up local enterprise beans +packaged within the same application. That is, the enterprise bean is +packaged within an EAR file containing multiple Java EE modules. JNDI +addresses using the java:app namespace are of the following form:

    +
    +
    +
    java:app[/module name]/enterprise bean name [/interface name]
    +
    +
    +
    +

    The module name is optional. The interface name is required only if the +enterprise bean implements more than one business interface.

    +
    +
  • +
+
+
+

For example, if an enterprise bean, MyBean, is packaged within the web +application archive myApp.war, the module name is myApp. The +portable JNDI name is java:module/MyBean. An equivalent JNDI name +using the java:global namespace is java:global/myApp/MyBean.

+
+
+
+
+

32.4.2 Deciding on Remote or Local Access

+
+

When you design a Java EE application, one of the first decisions you +make is the type of client access allowed by the enterprise beans: +remote, local, or web service.

+
+
+

Whether to allow local or remote access depends on the following +factors.

+
+
+
    +
  • +

    Tight or loose coupling of related beans: Tightly coupled beans depend +on one another. For example, if a session bean that processes sales +orders calls a session bean that emails a confirmation message to the +customer, these beans are tightly coupled. Tightly coupled beans are +good candidates for local access. Because they fit together as a logical +unit, they typically call each other often and would benefit from the +increased performance that is possible with local access.

    +
  • +
  • +

    Type of client: If an enterprise bean is accessed by application +clients, it should allow remote access. In a production environment, +these clients almost always run on machines other than those on which +GlassFish Server is running. If an enterprise bean’s clients are web +components or other enterprise beans, the type of access depends on how +you want to distribute your components.

    +
  • +
  • +

    Component distribution: Java EE applications are scalable because +their server-side components can be distributed across multiple +machines. In a distributed application, for example, the server that the +web components run on may not be the one on which the enterprise beans +they access are deployed. In this distributed scenario, the enterprise +beans should allow remote access.

    +
  • +
  • +

    Performance: Owing to such factors as network latency, remote calls +may be slower than local calls. On the other hand, if you distribute +components among different servers, you may improve the application’s +overall performance. Both of these statements are generalizations; +performance can vary in different operational environments. +Nevertheless, you should keep in mind how your application design might +affect performance.

    +
  • +
+
+
+

If you aren’t sure which type of access an enterprise bean should have, +choose remote access. This decision gives you more flexibility. In the +future, you can distribute your components to accommodate the growing +demands on your application.

+
+
+

Although it is uncommon, it is possible for an enterprise bean to allow +both remote and local access. If this is the case, either the business +interface of the bean must be explicitly designated as a business +interface by being decorated with the @Remote or @Local annotations, +or the bean class must explicitly designate the business interfaces by +using the @Remote and @Local annotations. The same business +interface cannot be both a local and a remote business interface.

+
+
+
+

32.4.3 Local Clients

+
+

A local client has these characteristics.

+
+
+
    +
  • +

    It must run in the same application as the enterprise bean it +accesses.

    +
  • +
  • +

    It can be a web component or another enterprise bean.

    +
  • +
  • +

    To the local client, the location of the enterprise bean it accesses +is not transparent.

    +
  • +
+
+
+

The no-interface view of an enterprise bean is a local view. The public +methods of the enterprise bean implementation class are exposed to local +clients that access the no-interface view of the enterprise bean. +Enterprise beans that use the no-interface view do not implement a +business interface.

+
+
+

The local business interface defines the bean’s business and lifecycle +methods. If the bean’s business interface is not decorated with @Local +or @Remote, and if the bean class does not specify the interface using +@Local or @Remote, the business interface is by default a local +interface.

+
+
+

To build an enterprise bean that allows only local access, you may, but +are not required to, do one of the following.

+
+
+
    +
  • +

    Create an enterprise bean implementation class that does not implement +a business interface, indicating that the bean exposes a no-interface +view to clients. For example:

    +
    +
    +
    @Session
    +public class MyBean { ... }
    +
    +
    +
  • +
  • +

    Annotate the business interface of the enterprise bean as a @Local +interface. For example:

    +
    +
    +
    @Local
    +public interface InterfaceName { ... }
    +
    +
    +
  • +
  • +

    Specify the interface by decorating the bean class with @Local and +specify the interface name. For example:

    +
    +
    +
    @Local(InterfaceName.class)
    +public class BeanName implements InterfaceName  { ... }
    +
    +
    +
  • +
+
+
+

32.4.3.1 Accessing Local Enterprise Beans Using the No-Interface View

+
+

Client access to an enterprise bean that exposes a local, no-interface +view is accomplished through either dependency injection or JNDI lookup.

+
+
+
    +
  • +

    To obtain a reference to the no-interface view of an enterprise bean +through dependency injection, use the javax.ejb.EJB annotation and +specify the enterprise bean’s implementation class:

    +
    +
    +
    @EJB
    +ExampleBean exampleBean;
    +
    +
    +
  • +
  • +

    To obtain a reference to the no-interface view of an enterprise bean +through JNDI lookup, use the javax.naming.InitialContext interface’s +lookup method:

    +
    +
    +
    ExampleBean exampleBean = (ExampleBean)
    +        InitialContext.lookup("java:module/ExampleBean");
    +
    +
    +
  • +
+
+
+

Clients do not use the new operator to obtain a new instance of an +enterprise bean that uses a no-interface view.

+
+
+

32.4.3.2 Accessing Local Enterprise Beans That Implement Business +Interfaces +^^^^^^^^^^^^^^^^^^^^^^^^^^

+
+
+

Client access to enterprise beans that implement local business +interfaces is accomplished through either dependency injection or JNDI +lookup.

+
+
+
    +
  • +

    To obtain a reference to the local business interface of an enterprise +bean through dependency injection, use the javax.ejb.EJB annotation +and specify the enterprise bean’s local business interface name:

    +
    +
    +
    @EJB
    +Example example;
    +
    +
    +
  • +
  • +

    To obtain a reference to a local business interface of an enterprise +bean through JNDI lookup, use the javax.naming.InitialContext +interface’s lookup method:

    +
    +
    +
    ExampleLocal example = (ExampleLocal)
    +         InitialContext.lookup("java:module/ExampleLocal");
    +
    +
    +
  • +
+
+
+
+
+

32.4.4 Remote Clients

+
+

A remote client of an enterprise bean has the following traits.

+
+
+
    +
  • +

    It can run on a different machine and a different JVM from the +enterprise bean it accesses. (It is not required to run on a different +JVM.)

    +
  • +
  • +

    It can be a web component, an application client, or another +enterprise bean.

    +
  • +
  • +

    To a remote client, the location of the enterprise bean is +transparent.

    +
  • +
  • +

    The enterprise bean must implement a business interface. That is, +remote clients may not access an enterprise bean through a no-interface +view.

    +
  • +
+
+
+

To create an enterprise bean that allows remote access, you must either

+
+
+
    +
  • +

    Decorate the business interface of the enterprise bean with the +@Remote annotation:

    +
    +
    +
    @Remote
    +public interface InterfaceName { ... }
    +
    +
    +
  • +
  • +

    Or decorate the bean class with @Remote, specifying the business +interface or interfaces:

    +
    +
    +
    @Remote(InterfaceName.class)
    +public class BeanName implements InterfaceName { ... }
    +
    +
    +
  • +
+
+
+

The remote interface defines the business and lifecycle methods that are +specific to the bean. For example, the remote interface of a bean named +BankAccountBean might have business methods named deposit and +credit. Figure 32-1 shows how the interface controls the +client’s view of an enterprise bean.

+
+
+

Figure 32-1 Interfaces for an Enterprise Bean with Remote Access

+
+ +
+

Client access to an enterprise bean that implements a remote business +interface is accomplished through either dependency injection or JNDI +lookup.

+
+
+
    +
  • +

    To obtain a reference to the remote business interface of an +enterprise bean through dependency injection, use the javax.ejb.EJB +annotation and specify the enterprise bean’s remote business interface +name:

    +
    +
    +
    @EJB
    +Example example;
    +
    +
    +
  • +
  • +

    To obtain a reference to a remote business interface of an enterprise +bean through JNDI lookup, use the javax.naming.InitialContext +interface’s lookup method:

    +
    +
    +
    ExampleRemote example = (ExampleRemote)
    +        InitialContext.lookup("java:global/myApp/ExampleRemote");
    +
    +
    +
  • +
+
+
+
+

32.4.5 Web Service Clients

+
+

A web service client can access a Java EE application in two ways. +First, the client can access a web service created with JAX-WS. (For +more information on JAX-WS, see Chapter 28, +"Building Web Services with JAX-WS".) Second, a web service client can +invoke the business methods of a stateless session bean. Message beans +cannot be accessed by web service clients.

+
+
+

Provided that it uses the correct protocols (SOAP, HTTP, WSDL), any web +service client can access a stateless session bean, whether or not the +client is written in the Java programming language. The client doesn’t +even "know" what technology implements the service: stateless session +bean, JAX-WS, or some other technology. In addition, enterprise beans +and web components can be clients of web services. This flexibility +enables you to integrate Java EE applications with web services.

+
+
+

A web service client accesses a stateless session bean through the +bean’s web service endpoint implementation class. By default, all public +methods in the bean class are accessible to web service clients. The +@WebMethod annotation may be used to customize the behavior of web +service methods. If the @WebMethod annotation is used to decorate the +bean class’s methods, only those methods decorated with @WebMethod are +exposed to web service clients.

+
+
+

For a code sample, see A Web Service +Example: helloservice.

+
+
+
+

32.4.6 Method Parameters and Access

+
+

The type of access affects the parameters of the bean methods that are +called by clients. The following sections apply not only to method +parameters but also to method return values.

+
+
+

32.4.6.1 Isolation

+
+

The parameters of remote calls are more isolated than those of local +calls. With remote calls, the client and the bean operate on different +copies of a parameter object. If the client changes the value of the +object, the value of the copy in the bean does not change. This layer of +isolation can help protect the bean if the client accidentally modifies +the data.

+
+
+

In a local call, both the client and the bean can modify the same +parameter object. In general, you should not rely on this side effect of +local calls. Perhaps someday you will want to distribute your +components, replacing the local calls with remote ones.

+
+
+

As with remote clients, web service clients operate on different copies +of parameters than does the bean that implements the web service.

+
+
+
+

32.4.6.2 Granularity of Accessed Data

+
+

Because remote calls are likely to be slower than local calls, the +parameters in remote methods should be relatively coarse-grained. A +coarse-grained object contains more data than a fine-grained one, so +fewer access calls are required. For the same reason, the parameters of +the methods called by web service clients should also be coarse-grained.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+
+ + + \ No newline at end of file diff --git a/ejb-intro005.html b/ejb-intro005.html new file mode 100644 index 0000000..b9d28c2 --- /dev/null +++ b/ejb-intro005.html @@ -0,0 +1,111 @@ + + + + + + The Contents of an Enterprise Bean + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

32.5 The Contents of an Enterprise Bean

+
+
+

To develop an enterprise bean, you must provide the following files.

+
+
+
    +
  • +

    Enterprise bean class: Implements the business methods of the +enterprise bean and any lifecycle callback methods.

    +
  • +
  • +

    Business interfaces: Define the business methods implemented by the +enterprise bean class. A business interface is not required if the +enterprise bean exposes a local, no-interface view.

    +
  • +
  • +

    Helper classes: Other classes needed by the enterprise bean class, +such as exception and utility classes.

    +
  • +
+
+
+

Package the programming artifacts in the preceding list either into an +EJB JAR file (a stand-alone module that stores the enterprise bean) or +within a web application archive (WAR) module. See +Packaging Enterprise Beans in EJB JAR +Modules and Packaging Enterprise Beans +in WAR Modules for more information.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/ejb-intro006.html b/ejb-intro006.html new file mode 100644 index 0000000..a70343d --- /dev/null +++ b/ejb-intro006.html @@ -0,0 +1,130 @@ + + + + + + Naming Conventions for Enterprise Beans + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

32.6 Naming Conventions for Enterprise Beans

+
+
+

Because enterprise beans are composed of multiple parts, it’s useful to +follow a naming convention for your applications. Table +32-2 summarizes the conventions for the example beans in this tutorial.

+
+
+

+
+
+

Table 32-2 Naming Conventions for Enterprise Beans

+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + +
ItemSyntaxExample

Enterprise bean name

name`Bean`

AccountBean

Enterprise bean class

name`Bean`

AccountBean

Business interface

name

Account

+
+
+
+
+
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/ejb-intro007.html b/ejb-intro007.html new file mode 100644 index 0000000..f9e0f28 --- /dev/null +++ b/ejb-intro007.html @@ -0,0 +1,251 @@ + + + + + + The Lifecycles of Enterprise Beans + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

32.7 The Lifecycles of Enterprise Beans

+
+
+

An enterprise bean goes through various stages during its lifetime, or +lifecycle. Each type of enterprise bean (stateful session, stateless +session, singleton session, or message-driven) has a different +lifecycle.

+
+
+

The descriptions that follow refer to methods that are explained along +with the code examples in the next two chapters. If you are new to +enterprise beans, you should skip this section and run the code examples +first.

+
+
+

The following topics are addressed here:

+
+ +
+

32.7.1 The Lifecycle of a Stateful Session Bean

+
+

Figure 32-2 illustrates the stages that a stateful session +bean passes through during its lifetime. The client initiates the +lifecycle by obtaining a reference to a stateful session bean. The +container performs any dependency injection and then invokes the method +annotated with @PostConstruct, if any. The bean is now ready to have +its business methods invoked by the client.

+
+
+

Figure 32-2 Lifecycle of a Stateful Session Bean

+
+ +
+

While in the ready stage, the EJB container may decide to deactivate, or +passivate, the bean by moving it from memory to secondary storage. +(Typically, the EJB container uses a least-recently-used algorithm to +select a bean for passivation.) The EJB container invokes the method +annotated @PrePassivate, if any, immediately before passivating it. If +a client invokes a business method on the bean while it is in the +passive stage, the EJB container activates the bean, calls the method +annotated @PostActivate, if any, and then moves it to the ready stage.

+
+
+

At the end of the lifecycle, the client invokes a method annotated +@Remove, and the EJB container calls the method annotated +@PreDestroy, if any. The bean’s instance is then ready for garbage +collection.

+
+
+

Your code controls the invocation of only one lifecycle method: the +method annotated @Remove. All other methods in Figure +32-2 are invoked by the EJB container. See +Chapter 52, "Resource Adapters and Contracts" +for more information.

+
+
+
+

32.7.2 The Lifecycle of a Stateless Session Bean

+
+

Because a stateless session bean is never passivated, its lifecycle has +only two stages: nonexistent and ready for the invocation of business +methods. Figure 32-3 illustrates the stages of a stateless +session bean.

+
+
+

Figure 32-3 Lifecycle of a Stateless or Singleton Session Bean

+
+ +
+

The EJB container typically creates and maintains a pool of stateless +session beans, beginning the stateless session bean’s lifecycle. The +container performs any dependency injection and then invokes the method +annotated @PostConstruct, if it exists. The bean is now ready to have +its business methods invoked by a client.

+
+
+

At the end of the lifecycle, the EJB container calls the method +annotated @PreDestroy, if it exists. The bean’s instance is then ready +for garbage collection.

+
+
+
+

32.7.3 The Lifecycle of a Singleton Session Bean

+
+

Like a stateless session bean, a singleton session bean is never +passivated and has only two stages, nonexistent and ready for the +invocation of business methods, as shown in Figure 32-3.

+
+
+

The EJB container initiates the singleton session bean lifecycle by +creating the singleton instance. This occurs upon application deployment +if the singleton is annotated with the @Startup annotation. The +container performs any dependency injection and then invokes the method +annotated @PostConstruct, if it exists. The singleton session bean is +now ready to have its business methods invoked by the client.

+
+
+

At the end of the lifecycle, the EJB container calls the method +annotated @PreDestroy, if it exists. The singleton session bean is now +ready for garbage collection.

+
+
+
+

32.7.4 The Lifecycle of a Message-Driven Bean

+
+

Figure 32-4 illustrates the stages in the lifecycle of a +message-driven bean.

+
+
+

Figure 32-4 Lifecycle of a Message-Driven Bean

+
+ +
+

The EJB container usually creates a pool of message-driven bean +instances. For each instance, the EJB container performs these tasks.

+
+
+
    +
  1. +

    If the message-driven bean uses dependency injection, the container +injects these references before instantiating the instance.

    +
  2. +
  3. +

    The container calls the method annotated @PostConstruct, if any.

    +
  4. +
+
+
+

Like a stateless session bean, a message-driven bean is never passivated +and has only two states: nonexistent and ready to receive messages.

+
+
+

At the end of the lifecycle, the container calls the method annotated +@PreDestroy, if any. The bean’s instance is then ready for garbage +collection.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/ejb-intro008.html b/ejb-intro008.html new file mode 100644 index 0000000..a667255 --- /dev/null +++ b/ejb-intro008.html @@ -0,0 +1,102 @@ + + + + + + Further Information about Enterprise Beans + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

32.8 Further Information about Enterprise Beans

+
+
+

For more information on Enterprise JavaBeans technology, see

+
+
+
    +
  • +

    Enterprise JavaBeans 3.2 specification:

    +
    +

    http://www.jcp.org/en/jsr/detail?id=345

    +
    +
  • +
  • +

    Enterprise JavaBeans 3.2 specification project:

    +
    +

    https://java.net/projects/ejb-spec/

    +
    +
  • +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/img/javaeett_dt_001.png b/img/javaeett_dt_001.png new file mode 100644 index 0000000000000000000000000000000000000000..d906ad92d4367cfee0f568cfcfac6a2285d2eaa9 GIT binary patch literal 26697 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 NSIbbdLc=cRe*h=u$87)r literal 0 HcmV?d00001 diff --git a/img/javaeett_dt_002.png b/img/javaeett_dt_002.png new file mode 100644 index 0000000000000000000000000000000000000000..2bfc90800350a9c05e647f8c38ee449650c2e5d9 GIT binary patch literal 18758 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%0DlI|R#Z|$q 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 literal 0 HcmV?d00001 diff --git a/img/javaeett_dt_003.png b/img/javaeett_dt_003.png new file mode 100644 index 0000000000000000000000000000000000000000..103748108d992441c910d0539532ab87f61c2989 GIT binary patch literal 26289 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�f=&z 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 t`Nwe`9Iy6_p<;1 literal 0 HcmV?d00001 diff --git a/img/javaeett_dt_004.png b/img/javaeett_dt_004.png new file mode 100644 index 0000000000000000000000000000000000000000..3ab53284d5ae4b8c9455168845062ef23be2b2a3 GIT binary patch literal 32799 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 UOc4-opK^{5KnZF@+!uT1~mk43dE5$H5^vH zt-?-eMoXo@SH}UPJ{za8m&zAcq%P#WKoihJ_%3m3&SkG7VcUVRnLSsy>#K|D1!kXI z{9M69>V)k3tOT^@WnkA#Y2Xyx@0clC$wmi9Is7jz7FN^Sx$PDkQxX=<#p$TNe;29; zO0{0rm@N~L5fq|oR{$wDQcf=1O>dD)<;rg?$yEd&Hx1bh21(%lBQhc5Q+tRbR~I0j zth16d@N9(p^zD+?_)9s1r#`aR`M?jFgzx|*_9hbA3AV)kxoicd@>^r?%MyvG(g&`@ zR|4mo?Ps7M5d_*}MWnfEOFdMlC%;rNI2FwRazTx*quirE;`Mmn+JcLcZCz?3(XVp@ zp`|HZ(+#P*3(w6i>>SjPx84lu%LB&y2=g^dN{EeNsjmq~Tch2IOu%^EzFry>^M6Ma$jp0^!o?Co{b5OrtPeGmN}_8ihNgzI}s1$#&aK#cqlKuzPO z{`)nf7tkc_(jeIvp-&$qJ=lg_%Yn14!14GuQb^pN*yY-1dA#0v2J@Oh3^Xzu-x1sV-)nUm!;cs!&j8<0aNlD9 z9ZEzGL$1Qwb?@)!;Gj8qMvN80LM|ubXRpP39R%ydXP0zzQ8Ddvyfkgidb2$rNYI0x z%d_K~HdmKIZybR?PIR+v%*LtPboQ?>iXuvFt5TaxbdEPc%}UzzwaVU-d5= zL|67(ywQC#u>H;0uZdYoZBn||dSFBQfm+!`-pyk*^`w-M?|QtX!6O9*4IDT+4jFnk zpBj6SsuiMcq~|(e@{|8>FJ8FenXw_X`3Zi3A2eqf|Kg`Q;Nrc0z2JHBXp=J*yvR2r z4T!$a8+kSh`4T5wS^F?(eR1$K1xOKQMkMP_YRbWwYXZfv=oML8I!~=J896|Fjq5m+N4|uua zVEGJ1mILqlA{n`wz}d*=tmOCIUvj%p)@43OHr#^aTPCRXpiK|afFEtmD941MG_nq` z0PeLjDE}pSVJzk_AtBv{@EA{rL!4#WxUCcb^*PtMA$))9HO>1pW2(YH27um z!^ThN=!aXPYHQDW?4?hX9Pa%jqJH9L%W-r+k=lhLZ>OIGa)07yi@|L0=Y_b6!kE?R z?8&K$6h*Dm&lClbFwS|34Vyl^qvjxvk zhx`tKajw)tia^S5QnThGr6u|)9lzn@s4`qbrRr9`dJSo_?!@2W8>&U$o=jY(p^iy} zRN;(nJ+=m{CqzBSkOv0_Zk9hkjM8zYt$a7bry*qrTzwJ`G_k_{BzI|{h5`kbJSkcJ zz!YxVy`tmK90t%39yBy7OXfac;eE@x~VWZcB)1$Z}$jdfzh>W!4bdc1Ju)}(| zG#dq(?#(yP_2nH$PZKW+Q+1h9mLy4a4H@YZO-3INUeMQmqie{AW8Y~TqXnJx_$(H@ z8d>ys{N`J2fxa#5r($#^dLp(4eY=Sco#D7oD|^)9_>#;wBIW*6r{@Q5W>}-DAPIMr zT&hS3;YezrB&si~aTtYU!rO_xtU)WR^zL-f6mZzd3l<^95X6RF_}# zZu7m(-{7}e<{1x@tD0+hk>JDR`u~f8bN+Yubi)S)fp7Qs7RQ|_uLpRKT{ez8%dHr3 F{|~?fnF0U+ literal 0 HcmV?d00001 diff --git a/img/javaeett_dt_005.png b/img/javaeett_dt_005.png new file mode 100644 index 0000000000000000000000000000000000000000..873de0fe4fe842b13955f81d983e4e2c6cae8ef5 GIT binary patch literal 22811 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 literal 0 HcmV?d00001 diff --git a/img/javaeett_dt_006.png b/img/javaeett_dt_006.png new file mode 100644 index 0000000000000000000000000000000000000000..c919ca5c4b246f9a5f2f145f515b084ed1f859d1 GIT binary patch literal 17191 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 literal 0 HcmV?d00001 diff --git a/img/javaeett_dt_008.png b/img/javaeett_dt_008.png new file mode 100644 index 0000000000000000000000000000000000000000..82f238cd3e086d4327787e81f3798b2a656914b1 GIT binary patch literal 18396 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 dx^ahOUwQJ~p+DI7`W79Ds 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±YE>@opB|7T;9;f<=KObf_hrxHDqJ~?qWek?*j{$Ai(TwumlL-9zW@UO>@Qs6 TU{J|c00000NkvXXu0mjfn6B$V literal 0 HcmV?d00001 diff --git a/img/javaeett_dt_012.png b/img/javaeett_dt_012.png new file mode 100644 index 0000000000000000000000000000000000000000..7cb9a75f9be0bf156e6f0e8c7e5d9968d8619268 GIT binary patch literal 11864 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 literal 0 HcmV?d00001 diff --git a/img/javaeett_dt_013.png b/img/javaeett_dt_013.png new file mode 100644 index 0000000000000000000000000000000000000000..5533eaff65af5b112b1878f1d8d912f99695c8de GIT binary patch literal 15868 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 literal 0 HcmV?d00001 diff --git a/img/javaeett_dt_014.png b/img/javaeett_dt_014.png new file mode 100644 index 0000000000000000000000000000000000000000..20d50fd08fac1c923ba28f8e96fe46f0f69b9c98 GIT binary patch literal 11079 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 TgS`VM00000NkvXXu0mjfN{SiM literal 0 HcmV?d00001 diff --git a/img/javaeett_dt_016.png b/img/javaeett_dt_016.png new file mode 100644 index 0000000000000000000000000000000000000000..a7d6653eeb133ea3d0c7687c72022ed27d8470e7 GIT binary patch literal 17291 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%0D=_-LDFOVd1 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 S2p}8)0000hbux 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 literal 0 HcmV?d00001 diff --git a/img/javaeett_dt_020.png b/img/javaeett_dt_020.png new file mode 100644 index 0000000000000000000000000000000000000000..0992dccaaa5ee7dd2feb6a461386422750eafc79 GIT binary patch literal 10890 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 literal 0 HcmV?d00001 diff --git a/img/javaeett_dt_021.png b/img/javaeett_dt_021.png new file mode 100644 index 0000000000000000000000000000000000000000..88c6412341ab3408128b56096b4e88d688052822 GIT binary patch literal 8265 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 P00000NkvXXu0mjft}J*8 literal 0 HcmV?d00001 diff --git a/img/javaeett_dt_024.png b/img/javaeett_dt_024.png new file mode 100644 index 0000000000000000000000000000000000000000..ab160f425227f05b8fb7f47c33b43f152297315d GIT binary patch literal 48301 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 literal 0 HcmV?d00001 diff --git a/img/javaeett_dt_025.png b/img/javaeett_dt_025.png new file mode 100644 index 0000000000000000000000000000000000000000..2b3477d6ef3e5c5677757de1eb82d04f4b76f18a GIT binary patch literal 23330 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 E2lWF)WB>pF literal 0 HcmV?d00001 diff --git a/img/javaeett_dt_026.png b/img/javaeett_dt_026.png new file mode 100644 index 0000000000000000000000000000000000000000..b0fbc9e5ac99d9bdbdab3c287b0078ca23c86ddd GIT binary patch literal 7830 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 literal 0 HcmV?d00001 diff --git a/img/javaeett_dt_027.png b/img/javaeett_dt_027.png new file mode 100644 index 0000000000000000000000000000000000000000..f809827f6319dba590b4083956afffa62313bd80 GIT binary patch literal 8046 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 literal 0 HcmV?d00001 diff --git a/img/javaeett_dt_028.png b/img/javaeett_dt_028.png new file mode 100644 index 0000000000000000000000000000000000000000..6b9b1a4849a2c8b49468cb3bdeb3f534e69f936e GIT binary patch literal 6344 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 literal 0 HcmV?d00001 diff --git a/img/javaeett_dt_030.png b/img/javaeett_dt_030.png new file mode 100644 index 0000000000000000000000000000000000000000..1bd27166f745713d62c7f8b11bc8d1f5a4e5e5f3 GIT binary patch literal 14574 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 literal 0 HcmV?d00001 diff --git a/img/javaeett_dt_031.png b/img/javaeett_dt_031.png new file mode 100644 index 0000000000000000000000000000000000000000..0b24844814ff1d41826fa0923396c2246bca21de GIT binary patch literal 2596 zcmZ`*X*3%O7EWs_T2x!FN~)st*+ODzEm1L5#1gTU(AtV1wFJ*jthH6~kWy+_JnOTS z60wvDiLKT)mdt45iM6$sB9k{~&Y3x9&ij7c<(%)Hd+(3$o||ljM)F?(T>t<8{Dua) z768B*EGLfU;o{gYCr3=HomDSLW)N=r*egoRm{nIVx#O*M6d=3NU@Qpbe8rUnS+BD^sUk?85i$36 z!_6-I7TdY)f*GuX`x)jf_+A(zUDQl2}ob7 z?U_sg##0I}w$bJQFKJJJ1l>di6#57>AQubt?Wp*tWTnE5SNTBzr>7y|mgcJeP%^vP z2n1(e$gUF4&f0CREw44QRav>H!_S;=&`Bg)QV;I%gW;*Qt~HZc#OlnZ;SpZ`vQ-k3 zIFf{ndw*tCHn_^9s%HsbovGY9Q_{B!DoNWO#VPGi6H_K73NE}L+OJ|R6_i!vSXPYv zxOn|dM_v;}a8y8?OK7TiO-3MueqBK4++}VIGIZlR~xi<#+$#+Z6KCiE!;D zn(SwF`TA#1sFJ?{l&+=>q`;|{W8Z`alv~Cnm>Y+F)xXkU1I}@;1cK5P?`YJ?IyiaNmp&(4fbaSHhiPE- zFbn$Bm{AS*;kdiKvBuJaGmiNfs?`9KtFlINfYYaR6ZKn}eAtR5>_A;<+xQ$rRCgdL zf*emjYp0wwnJf+Jx~pj-D4JI}Yi2F%GBAY@+PAWt zbs=5dn3-RpC(IHF;lFVAqH<+buoc6^TxCl)>R%;Y2Grn#6-BYU^+J%h{14wm{?8>t zETI2U$u#cuu_te2$4Q?WEcIYtOZ((>%yi5f3wA7w>LlPG;lQoPh)A4hMw{tYVNn+j z@}rNoLnz!vL+_5(J~Wxb#{#F16Zwtu7{B zU6_l&D+Fz6epn>Kf>Y1E+WLcFcXQt--e!GKwXr<>6)ftY?*6u0yv?@>s1T{`p z@&6F1(99Lh(m6Eg1!}iM&9Tx6%N8bkfWBHhdhu)5#^TK8t)qO*!~L#fDed{#f}qX8 zILG?lvjGn`c3)@>u-&s3xYXkjMp$v8A^E(~I{>-jR80dr_>?_+CI}Y59ia%2+xiwL zq)7mjK?yRGZYuV0h?>~bq~dIl9nM7Vw0RnlR!L>seYY7HmnVQqfXXt`I`eCD5K|&{ z6xn=}nSVoi+M_BXx@-!qI+!0&Y1tg^x49VC7;%nhY?SIE64GeNwZ4~Juq~L1Wf&`v zDF(kMUMa}$8H{%yAGfrD^LYqY5A?m|&<%@LQ9WkQXLlvaD9Kjt`$zrgb`*ZtFI0v4 zSkcKBA;RzA`psw!w_iLdDj5PFz2=?+CG~v}y>EB=C3iQ5(wKZNR!Wd-XgqB@V|}l@ zv5=T}>YG-AfcGL;xd(^zR%vE1L(Rfrs*=%lxIh24i(OA}IHBz?tI-hqN5m_Rgp<{I zqGPuPcEd61{eQ%A2$E&9Y6R(Ec4!cl{e4dM+-cxVW_LHdo(Hl)7s!F-navsxK<4Sg>NS`-~ zs}mhY=0Mr3NB2XYUXhm)WU;zJ6HBx8&@PB^X`6QL>^yL{h#xv9Zapuy`KGP&&|iigI7hZp^*do3S65vAt(De zjg<=VG8%XjDDl?VSiUWEw80ePp+)Eh3f2{X9^Nj7-In~>U12S$Mxi|N1xem3)I6xH z<63LsjLt7v^ba|2iFR!(_TKTuuPfl@LRd!4eCWbGfJ#DDPIb{l&JK|^ksa7St!%tH zn`z!4PxY}p*q$knH`$L%E5_L())vISyT(4)W<4PG$X}Ug5?hMqVWq=wh-=x@>ZtBPq974QP(urvo{Pr%$^8#HrR-=y#&qZG_X* zAg9hd=jhF_(st>(Y9OWsYLq3c4oCW#UnO5Z#+mahYv?-=7pna^Ukr?TD%}InLO+#C Un|0vjym0_SJ+yAUj#KQv06+^Hp8x;= literal 0 HcmV?d00001 diff --git a/img/javaeett_dt_032.png b/img/javaeett_dt_032.png new file mode 100644 index 0000000000000000000000000000000000000000..e7017e72a39710862d76d69b356704bedf6b9d86 GIT binary patch literal 2860 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 boPfgIH;O+Bc$WS>)&RO%2Abd1ZG!&;^K{v! literal 0 HcmV?d00001 diff --git a/img/javaeett_dt_034.png b/img/javaeett_dt_034.png new file mode 100644 index 0000000000000000000000000000000000000000..5cb2fb77ad18aab78ca32bce1980dda5beed58fb GIT binary patch literal 12474 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 bUw{Ds-H|6U`&3^300000NkvXXu0mjfnYj=L literal 0 HcmV?d00001 diff --git a/img/javaeett_dt_036.png b/img/javaeett_dt_036.png new file mode 100644 index 0000000000000000000000000000000000000000..d82b216f33d9ccea891f5c0f21b9e0bb1f15df56 GIT binary patch literal 9729 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 P00000NkvXXu0mjf8xIvB literal 0 HcmV?d00001 diff --git a/img/javaeett_dt_037.png b/img/javaeett_dt_037.png new file mode 100644 index 0000000000000000000000000000000000000000..d6f677d21d60470479536e01e7ec062175912be7 GIT binary patch literal 13442 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 Mlp#vRil!m|2Md9*FaQ7m literal 0 HcmV?d00001 diff --git a/img/javaeett_dt_038.png b/img/javaeett_dt_038.png new file mode 100644 index 0000000000000000000000000000000000000000..0360bf5b8d0c5cdd0ecd317b3eb9dae3c83b4432 GIT binary patch literal 17116 zcmagFXH*m47c~r`f;2%;fq;l~1eBHlQdA&F2}lkn}p;B zkc5PklY;E}$^%qg`Spp}N$H)Fjvds=^|ONo$t!a^Q;Wwcwx2C6v@JfHyCZrmWJpNJ zNZzXJDqUS&jS_YS=eGaOY*i1gczJnObWFH<`|Tc`h9>6y`}eP9d=0?NfG6$`3=DKl zZn&!QgoK1NjIPeE9UPvV)eRF96B7v=hq&dv<>lpG{N~odzvl6^>DB#q?E3YW%&Z>N z4il$V_9s{NmbQ+Tw~q{-G0d+Y#%H66JIBL>oj(K1-BTMKxb^;-?S_WNgM$Me0b%UY zo|!pxVrjQ;dh_V$Xk+hWd~vsCXk~HpNKsL7cz$PX_jqq_FRQB8G9jTbHj3n}=&_YfdrcL?Ury znrLb3XkcV2|K@F8GwzioG9jL6IIQ@) z+=Jifz^->sZY*pZ*0gl@;WvZRY9|(V#};N|MhiFv}4?qE@z#Gm9$F{Y!J3XM${W&n2WqMMWj$ z6befJL?vaEm6gT1nX7BOmEvXEI=T`Tm+BZNwhzs|v5oGYKh<=MpI_bW9VhIaT>YI~ z5|@-YJ3Ff%mQ4Y#lDH?^jk;zkegs*oEo9Z7i(qX<7L!Z5&K5Z}(2FHIJ`OjSUx7xBPAz zT$;uAG}q1%cQ)5ncegg?me!6=uQ2#^Jn?X5?YL)Zqq=XVX>7H1oVdTgzrC^c>XY~3 z;o$Q%3M|MPV&dvC zey|z+et&$7lCQMdc4YK&+v9Oou2IP5A6ET_r!`+>w*^8J)BjxPs4XrM4}bey4v2}> zy+H3D_4mPV{EaMaf%ye^om_t1?>A4WmqGW7_6h!&t9oApZ1xrNm@i3+{a|RIDz$*Nt)V4$c39t-ZQjRflAL znXVn`Nm8G1cA9pb)$8$?^PSR~ZXOMyF+f)$7N)D0MoexIWt&PE)FKeW9D|fZLCRqdPCe7ltVk>5PpyhPEnmDm(}>4p z8sI(FF(3uOv8=}~n2Q%?qY@C2koy{`w0C@p>RhL5DOhov!85HxF}ok$0VgcVYm9_Y z>kweuPY8pe0HMLa=~&K#@%-!g@Lv_w2Ro>-ydTaooNOz5!1q*jP}@X65Ghx8pjMvVyPt1kKw^`M!g9w}A8LPYZbwJR{LEesj?K4b*? zf&bv>Mi|Q{uA^?P(XY`k)BY&NHT6}_{9lmixyYd(rt6P^9+MUCJULi@_17=S9b`md z&Wp+tt;*@k{}s3ZMVhVAgLi)s$1)>bs=Cf2UAiJ<1WX(qqamJ)EHZOx6^U{UXlLp6 zLB)-2q|?I6qa$fVjzEU9}9VH9~igrmst=N1$Hs#dW2EY-HQG|RL@Pzhd}eqtk@yA zupZErWdNFb(sOGUO=b8wbLAuSh_Kwx-3E=_g*AHRm-Y0}S5p9w z0~W^Run@xX_a0~-mdQ(7RS4jXaO^Z!=mamtF-#Ea9iFT!&q?EwnZLp!3N7{n)q!{K zN&(^?;y)(X0&8ny^H5?5EU54VDZu8sw;>Ch3!hw5kNvJ?B1ZjeTg+s>vs74#74%WE zEd?{^)1}twFsn=n+gd^QjJHDcac^o>dPU+f$b?5Ih&0Z8o#Nw4dTf|*_Arf+p@o>l zF^ubX@=3#{@HyGUWL>#d38l}@dfFo(m>RT3fG$3V#?;xx?xm*wD7fz=q&Xp~;XdLV z|2y01SI!su-waNeoG;&gORWm@7Rkbdytx6&bDgC_b36$!hsz7+RR#Wu=Vl6CH&epr z!O56z4%3+Z!q;{zL9j3itohPgfjW55T@=h%3h|ivTNdm@}YiLvxYMp>iZFrd&S z-yiKIzH`QZuRq7)tv^l*KD1mIYX%QP9$=Yp*;&`uE3i!7!Xx%TUMF-nWZ1p9Kf@qB1QzCv)WEsL6Smd|vlq3(du^VR=mQ@JqxUdw>gGrX8tQG;0}_Jx{dBRieq>}1tRI9Lz$6uV?=(ud(;d*1zur*2-tsDh}wy5y@Aysl=u0J`QFxftnPp2JZ$0>5IkuvTLjfjsWxr zO=Q3S_S)Dctx{qunEV_Og11+IfZFp57f6Z$yMW&_@0fxWX}}8dju+HBWQ@j5<;(=k zPt0N9w>rkRUr_0FF8buBzj`T$Jo}ZbM|{f#>mNj=hR=!)(SfX`aTaDfHU0bqn9N;y zuVQkv^_^X8J>MJDeTMUf6|LY5lOO+rR4D`jil1(Fl^^d;+$mcHTaQ4{Wo`+=5OGeR zT0)8uN2u3Wj5-i9IIYN?^qygqEc6Y8Vf67^Kq6@L zWoak7vdtDWC6RQRE$}Uaijz}2uHw}QgvoCjQyJA>^t>YQ3kPe!MHyB^_v!0x#K(~?2 zDo}@=Re`nbYc|RxU?&P_Jk4l#t6(8+oVgpK10nZV_BaqFOL{D02IfEktIxlD-qb%3 zqyA#)OfoixpeyrTo?DK<~4FphfH|Gy5Ig_nSjMxy5}oSB{kn3vZ;KS9f~JZ{!XAbCmbZmH7YyEcEa~H&Qhpeea3#$e zY@h6bTB8xOUhqcU;0n3~+T|zybl#s5`d}sg4kP9nQ@J$LV0NX{3>8HIg_vjpwHFJ> ze=gRMR;Jw)w{3PHdc?e@DZE1i68mXMm&p8+#$&M`NNzc_|4=;e^LSAW7t*|R4v z=2nZ{sxv0Ywr8AzgDrGg884p(+|pkJ{{(h_XDe$dNqBa3Sb|Hrf7CS_QO5+d)S7Ic z?L}TpjmWVE|}VyZS9+^8MBO{-F0C z#_368fulxzj?#31HR1F4yU%~N1xH>2zRH~2Ir2V|^HK~3NCAltJq5qbF5jktl4_XW z%tm^WYH-+-dOSSXZm||eEgW3P|13x|FJNa=^5q>pvyYthhoYLyurh8!XHFDqe73bq z@dr_iNwz$LXc`poh=f{Lp1sVsV|8Os0egp0GRArVqDaI+SFKCC%cZJJ`X2NzGY9be zGu!S@TrK6_qm4+xFYY_5H{O*eRPU0F88X=^L)HokpG+4QPftq>j9(MNCveA%1-aA z=xWR?q*Y${l2+DO{qoJ&y3-J(cZBr*U|2ieDTchU*Cn4S?>F+5X5K=p|3f&vY;?v5 zPrVF10!&!poc4X`3X=Yz`jT+*+>vYPd#SQEQn>UNUFm$S`@Qskcu-1>E7b={&(b72 z-T`&@PlgFw+UlvT>%dVxgUTnsI!-GlyBfC2Cq5up$jf!rQyTegMP+R^gG}KL88I?x zI#fj6u1|~pB2RyLzLL*cL@`?kL?~%x%4R4^S4b{eU@H0BB=F$FSTuVeLks=qHr>64 zlAe1%`&G&j{(z-OfGclMlrhjxAwPG>et*VOkqQLzwWLn^ESxpWBZ2?8(~)FcZ%;bV zzKY|igfo0wx(15AU(-J*1YblpX#gqQgiH*_x!+YGx}Px)xZlfnhf?K2hiy7*M_{qf z6b2-PDx-vV0|}`Y8y@)#)V-EWj5zgC*{O<-#0tcS$8BpK+Q}HsKG>Uyv&U}1cfHK~ z+@^WDEgWsH0$r-nqyiO~)0F#&)F$S@!{>6;+F)zCaLBK9L(cH4- zj^^|3YN?DiWGhVJ>c#-@WP%j>2O-%aW#w2C9Dw{oRVmC@$|2X#Tu$E(;Sym;PhWa0 zGTUPHBgrnOB+~?IB_ovWWUT6pHvzF%tW&UZ18Genvjj;!y-54Gw#sV=Gh6`AEv!{z zqvow^%9V&PbB8{Q5phaa;Hx*^_$j8r1}F>X<|j>`hl{f4OT}M z-N zIGY>3{Ac~A{dZ&TakTo!e1Bx?eUKNB!KpMV1ho@$kbkpw$1u=`n(_WG6z2esvXSaA zGGa)w5VpK(lDTHgt!jY(NN1)Xhv)0SZ201MZ&0P+qw8h9g!j2`;iYDjG6Vr*Mr$_Z z!r47ET1LGvr%%%9LCDi|rY_9Jl2LpCFQVoKe4KjawU!>t;U35_vVV-$(ydfVxDVWM zA9T-X&5r}NNC=Wkm3lt+NX8Wo+!oOK6W{Q}gN!s05 z`*L%0jpNFR7H1car%_ltr*Cx&}v~0-jW=i6J?9&RRT9e3WtO5*j;Wt9;zdHLU z0XuOyD3v;1EmY_QccjM}1A7sfb3Fc#@j6DFTjnIByaFw?A}24IheDpTB5i<_!P?Tp zU=esXJ_M~bl_1mW!CrFRyBOL^LbWW{cv8;ecBp2TsJ_+Sqaw zr!;=_i=yMBbg7dM+`#?srkRHn$w(BHH1-XOq){ky0rgZ2E#??ABpJ9M+hCUtk}ELrN2=bt;pSCTarK|9*7Vbf z3B;vL^E-A-9`YYHieGPEHC1mt#HYQhQOgel*e)QUl55yxxvRCuuf-e|nJ2GVtNL(v zXBtvJ5SF!NBlI=ZF#n7}GsaW_n_bZXIl||Cc0ARS8L1b2`0Q*DemR_-iX_@AG=rzr z1s$loGwK)^HlA{S{qSXebI{p|zm1Ti?#7jkp^-vmmk_eto%M0}P!-VZeY4C9ih7eV z!tL7LzP__FD$0n46S5;eLU^sEsWvdcwerD?;-}Ar3D%270w_d`la7lU-0%!v8C==Q zVc{4LM!Q^oFD^ofS$1w}LlyAZa>6Aani}B{m3uVWBg5skQ-6Qe`CMt4yk`z8X@kf;ynA03mR7%KYc zZomHlb=>g#toCgij*lAjzBU%GTIPVybMUtlAlXdfWxWTSse7IjUo~?&M%CmdwzS-z zBHLN|&rSBV|7fWST9N@%V*K)*a-^0kAGZWU;WT@Q47@R`Ol?UT{tmQxg3|1*sMUg^ z{a&Hn#ZGTzlssOCE>_pex-(Fl#MpJ%{5+}%P;&gPkM?xEhba<0;AQ(&nCSMVF7`k~ z5(Hmf4+TuBCX%J)s_%2e-9z00eqW}zv~2oUoP{#9usnJ!;mITEgf=`MK22C7W*J7q zHTlI+v#+iGWY`1Tq4*b$UDPFs*lJ-5-RqDT$O_c=%c^Binzkz%Lwu?F-)EbVXjxA=Jt*fycElCVK>4o3YjN^h z*KOFS4*cV9`@I(~i>B4rRrWm+a39_a9Ef{r3&Z=DOl~k?{=}mEiQ)frXj!IVVQ1r1 zLmTSp{|tGOEK@I#K_gUBOmONA?e`1dMu^HIP3u6NXEEZ+ABd}r-u#B3rn&T2u+~%T zN%jMq=ShZ47-8Y-ao!)-?f1{>VEODg!BwFR+CA)#5=JTlc;k|RJnrhxhiqif`-CeR9turam44-{o5YIWR(ZR9)xppiJEre=+Rm^tyi5(+{9m2{S?c#OnF# zd}puTnp5>f1_s>SZ$3>Q=Xp6Vt<_I{Q=X*RN0UK zlfLmvCV#l_&lS(VXI7C@87NHO7c23n9s0*^R>o(9biFmKOdf~r!B(79$|+iJ$hVM^8-xMoTC;#k=saFKA)XXnE{ z`@&}fo9eZ_xj5?Q!O47w=Nu$KHI=*VpHo@{_YLhgg3TFkJl^CwO_% zA%8KU@8N8hOp(N1TL!4P=J5)5d=y?Nw&)d%XzaVeQ<-7+?aHO+hhSDa!@#ZWrK z9;lSkZ&qFFeRCDoh641pz1ErWkd|SL*cc1l&>ml|@KI8i*nwN`yVD3BtDk-VL-ut}BwTg%a zC=5d{qC0N+bif|@Y*u!$`>f^9o_E>h$d+%*@kWxI!$(~j~lt>TLeQ(K^8zT8h92Hjv)Fo_@?j3mIctt`!d3tSEoHvY*EkY$blH~|s*!lw^@iOf0!h38+>{fx{si^PRG@*Xf%=!B~1!gS7;Ruyi^7unHO4M5qiFg398x1 zTN|J2WMzC~fc~Q;79%{=ArPjrJ0q~XPVhtV6iL#?PB6O@My2+j!FTBPyOu5Io(9qE zzy1$jGZZ9oGJ@b~p>6^x0~RCGtQ6v117fL0Om3<1FX*cRgmwd7P$P*QV4>chp__Cr z0d2HLpGX73y_y7X1nUDG#d9G19)e1+qBo^CQTOsIquZ;_MoQY?iI_`?(S`GqT~K;l0hF}-Gzz56(ejH%A@;sQcx+Cy>;RB_IEt>JCmag zM>6!v;D_UOQrfo92TUab0uCKL*Z}esy6Px(z~b$KbeSer*}o_Q?G{U&S3*$KsO_^m zP?Xc8xOutML8nh6FDrZpXzog|?e6?;T}-lNub_4DDb9pJ<>rk$&7LZOLks24=WLBz z2U&Og`)+7Fi=%Mm<|A&EzvR5-CjVmU$$1F&9Ub7Ii3l$=)2CwNB^|bJx`B3<>{pQE zHr7Wn!JLyG6hh-N5`cB8dhi7-`~&8!;H{N>V7+e&95H{mF0`_qRk@6J>@z1K?fuE2>` zh&nzu5Xs0|#R|~WRQjqENuHyjR2-Hd!G7HACkN$%=f%81ef>OHlzv&OuvllTJ@o_W zenERT5+Z+k6-$8~jJb(TD53CYD=S;*dXA0%rTi7P9o(`RxHGj|IuQ;+zwms}TCEbe zF#3eD=DpJmbRy(4@L>FztBAtxCn8(c4%?u$c)oY{QG|EXn;?u;63uV@{+!juv$XvC zE}w#3<8KsHI#)YtMH8y#+Z_yP?b;=T-~zFjE% zwqS&t+tG%7vIaofK+BVbiG(}=k$R)+F{>Q4zap$P5w@JC3DC^rZQ@;gWi2)qGnBOh z^b+|*dcD%L%ZpJ(ea9^Wue!)xLcHvF+|FgqJch1_pJnEEXj}MCul5NB?yw!$f+CEL zNn>)();-ZD$+#VA=pa_d2rxJopBbag#WZIy{FW4(a;oHJ0zRk@W}In=@V^a_@{}T< z;|DS$+WLWYI4iO@KQ$YCS$KN;SVP@=%_`9m&wn;T(@h1;- zs8RRwzTN8&f}rGqrJ6p4s7rq^k!**%a!C;l>2|al^PQE&l;|fx$WGav(<+!_)KRWO zI$8(*msbY?qDhQf+70pd``GXmQce9mpBEr-Xo9J~YvmX75$I5;VnB*5bfD~cja=zB z91Vrt@7loWdfIK@pOmO4B|`vkHxGIOFP14{$fj!EQELRLet0Q%A9r%UP<}5BE>yLqsnk4VT=r+uHNmB%_KKxRd&x*LfKhujD z=_&0|N0p|g*#2OIwx(O6;2M*PleM+AQ_(P%p;@~d_i|S&UU4wI;=I;|Y*(k(O;b@l zvmw;m##O;Fz!9a$7HeP(GjM_fXyB~81B%$F|qQ)9+YkRNG+Sa84oRRR*8m1iTm9Ylj@Vgc?nzEE!)%4_xV%5h zd#(Aol&ktu7FitEO3`}^D4dcvxU)5QP8-i`Igex$ zg1UGX82t}2X2(GIAMYDf(Dd@;w4_5L+8Mk|qMGRYfh}>D(LSd}%TpFyxc;cR`!eAx z^*q4UTTQtJRQjRpO`e_Sv+6$Pv)fmfSb~C|9-)I!^;Ngg?e&szVnJ0*Yu&_j-&6y9 z11l6EyTFCb`wkcab{HP^nR9yTt0rOY4586VO34*(%{iL_N%qfvlt)RU{#DE+kLv8L zWT|#<&%4I308d>?6nsYD^IOidR}~>up3_c&)$}hi`KNNCd2_eoKchb;Vyu_KLx#Br zI#WzJsg#3ghE#TP?J|{3^PR8N^YspXf$f4r6BjH6A*ayY&f!e@R9AOwt{QP}+nvME ziF}Q^C)HyQx&zp&j&jWGhW;r>J!ybt2n?u@;1O76T|6&Nv*z z(vS5ty&m_&iT`SCW!;8_tE6fk?cTP(LS_zAtc}$GF4j%ZqoY#8#%hMz!9aMH9J?rx z(%z{&F$`N@e>tiZUE$8D?U!(th2>-O1Jtah*8_TNySEZT0ntEixtT$@8*H=#nSmnJ zgIyj63?k=B6vQ+uDAC#Heh=JYJO~L#*=?9Lyg`nCU)qR`a7iqO@7;fJC#*IdJ({byFXH6cRymH{xYPl?V)BWho{X2UL?( z*4C6g1RWQ99%wfCY<1`?`7JdngdjVGvptV%+dN!LJOdrq-(qZ4TOq~VYMxtnjBkfx z-?Z&YZ$1dOh!O^#S8zzxyzJ#ct4(Kkj?@PHrP-A3*dooR1MQiKtbD!kg33`(0^N<> znde%4ZlzCA73uSO%zi=~22{7Yw{&~ZUiV4^*Az?dft+zduk z|7+JN-bx-#eYW=}{>h7*2{o0Kix_C2D+)_(gIrZN3~<^wFn*u_;LowLSs&A!xI6ImrK=@97ULNspWO{Kexiz!7yqt}o-H^P=4J;C z1%f+}A5kpDgE?=e^JrNs9b&Or^MY+E3zEEO&hM(gjmr1lo0rnr74DbFMze=;*dO?d z-S@-7l`28VuxgPCh_z!TO~eg03m`S?_aMsDAJg8dp~%tAsG{_>)~|^bQp{^FfMIoY z=-xn6&LBeG-VEF10yG3qF=yV3D@cKO++w@$znt8v;kpM~gfmahJ`6kYt8C@WU(wW0 zJ&4Op2Os{Pi#7_gU*+M1XHcOZT%$cvjTw2hOvK_`L8hYwS2tgK2sPGum(!|=E+Wuqc?3Dp3I z%eA=pRM>lH;YDBwiLI20j(R&-En%1$6b<{H7%e{^mvu`UrmPosmg&YjX9u%`=&lo1 zoTdZCg<}HUk3oX8;qU}!&IgiV_E6$ye}~T3h{zNI@#%_z`F_(A}`@~ zo@Q7$zofBoOC(C?ktT&qiV1flM9Ie+oS@z0l)225{FBBS-~ET*7T$eBnVFW9ZC7p3 z=)sG-kQA~f*>@z>;(^161>biRXl8l2QL?dxbW^Wev5}E_gD@{*i*hcF?zhT&P2?ll z5oac&Sz3o2-`;x5rd26xrdRyCak@>JSr?myq6SXpnC=0UYP~WS!D6hpqzTpxh?;+P z=`8z6`+~F=)@FhCl7aU{A|>>-jNY@}(j=Wu3FBC7sd2#jV-HR!e;%J$PSTi)+2|?> zGJV$@CHtx;drKz$-5?p{p@cL4p#s9`6A!>!r;HRHa+?(aGPgJ17+s0d7i+0S-avWX zRY!smlLu+dy9aJ*OxzS6S-9s)=v_vGBR7Gkva(KiMl)cHhgS^GKaaH*olo1o;d86I zko@DrsAQAwkF^}^VIy!+91|VLd;!^Co>~qdn+sX!p#-Ra9x;82xX~pR$)QclsM{`( zfyd?iggVwoyGN?5R*(+xEe2Zn8~d(M>Ez(uEhB;mL^%ZlxXq1o2~7B=%46@;+;b44 z1N?WQflg;q1*Ea47G3ApJ8QD`Jk!6hwsI+2-7o$UiX|sQ)?x)+pfC+o>IK-|D7^wc%{=s62{!W49>1dlx|ET&xSbXkG+2{Ef)}E`t5d9g_N<; zd&^B>i+DH|*BJ&y9e-m($c&Yx-SvCuD9)&Sd~JAK14;=X3d~Jzd1-GEGw`V@-PNS@ z@6){7d_vE*{N=NamSwGgagX|W+`066>nR_Fzm8PiA4X1AheixC zf&y$+r#@E`N#lB(hbVYoz!)EfjZk$8{8bxzI6a30AKtlrfnZ?c0Dx}ll)+H<*u!ZY zIqzCtayNsQR@GbX+@=^;GY%D=&0dUXX)5XmJL2C|@ki};Qh<8xo%%$Qki&kdmm`U5 z!u;_}VR~H;Hk5+96KuA%d0sWAF-)zzxa$;1DFKk?Qi=9gM*=5sBj42H&_zK7SpL zm*DsYScp|iYCkvvqEQ>mp&*ioB8Jf4{=@%o7aRi^Zl-UhPslW}q`)p#tF1<&Agn-^ zTvKOT)ds-se{-5C%F6sg$}(o@KNs(MmgqsMw!QB_H|;|>l~p5mVT%vL9EY>N%iW%B z|C}iR51EV&0F<@aC*EQW1uNBY_+=^vTk?H@Im~2p1)2I2c%)y8!bdClA!cO(03%<{ z4ZTH&<&_jO@+advY1}7H*{2S5}0V0@{QG(iiIqxXz{+(86@7xiNYe@eobA3le z2XbwveMVi`PEsy?txHhGoCXGvfnF{~xN@@0N+9L1Yrzq7q^Gzyl>9`ulr@Y znD+Rd6QQK@my0HXg$1)*Wqk5avnoE$yXQyxJ4d`C$aZ)rXEd@y26T@~a?h8ODp);& zPP4qcEvQ}%V-_6*Mqj&Ff@GMxeajlG?odKtayv2rr4H;wf(oYJ-2SU)=*wBaTX@a> zW9cBI5C7*1`Ct1}+x7cHbe#~V7_a{@F$^va61WWE{FbRfTM`rm5ryxaJx`L>5+@fM zOnWcsgkYGi=*a_G0aqkJ>V_FPLaCNPYVkdq$S^fpF%89LP8YURQ`^ccv_U)p2*zt~1{y1PtYg9u1f&g86Q znuOZ`8>C=Tc_^py7E1zne*>*a|Lh<0eUO1_nU`5sILNv@<)xN2*H$e zb1{ipIrlw&M`uk&%;m+EluaH191Dq<{s9ySZT>vR2c}JpxcMj(m$#<9In}2WA5hbU zuhX`nOS-sfX!{{X-HYIKx}HWAThuT@GP{H34(o6?J)ws#))rWf7->9Ry8ixNj9(y& zT++nlSsR+kn@@H%^&ly(dt()w5wLrjpSPjGNR{z>TBbvtzTTD&kj&j#Nt8VxO;vYnxMsz(QI^b(Vtb(qz$qE3(8n zUH1)@UiwTd6oliz5Pf=DI2hsT-=Kojf$PODzl3Mu()YX^FhMIh-iNjq_pC>rsiUU6*tZ^Ebs8&-pEnA&fh|$m>p}He%%sXU@7|3n zgEd~>*F*TzHh+>HeknPXyz$ZbWjxXi@AXRL8Xa^GdhyjYiS0-Y$wddQf9Bk_6bnIy zRs4AzKW!gTX{p6?;pV&zG*?3bG`0c)Rh34x_%|Q{h`nwvJ>76?=N+n@r{82sp3>UF zKTpyLPe1ST4*y_7^#}Pw4K+5_xK}G72w3D{I>qzy14(jc3QOc~z4a+zd7Ly;W*`99 zWee~z3__l}wOvCuB9q5nbnZ>BmL_?^10XHQvraO1y*s(+V#rURxsgDnsuye}Dv7hM zV`O=;$ELs$W4j^6pS2wO>^7Zx6@OY4<=$i9SeZ#_#b{do$pd=e+GOlkP!>}4DeI<# zcsXKmsfG@4E=|&FeeF7IuIdp!fJ%yGJt|zLCV%BulpS59w`v*|J4a^6pULHaWNrCi z)tN_0*(CV&E}CBnrb@b<>b`5rE)&rGHppNj++Yo+b2`l@E?^-k>af*!3neg`O`v)_ z;H%wr9%hbhc zw^m;pzEtgqN9(e=YfW#5{72OV?hNZipSLs;^PiUJ!gOr9Q0kz_AODdKF8hi>4$F~E zn3FW1K^#Tm_RFNpxL&w)!E%~t7(Ae=`|3#9h~KdR(pifM`I35;xhR#t5EpZrk@xHZ zKJ1zKlR$&1!INm#G=ASA-d}r*fNK5&A0!vnzOJ3gOPfg(_!(^8k&+<8JNB&inhpZEEXtY= zbUps;26)V@({KPYy$07g-tWhxhAn9X7Cs7>s2#c|*>2yylvk$kmnU*0Yp>uzI~!4t zq@cdu^VoZ{c_QV6@@${vxNFpXpLTJD{p9&o=Q){9B8&Xx>R~+Sz53IuI)Q~V=%%44Rm zsdZz0XN|SH9dWHM{`##nFtw-bzohe`p(zg6>qLfS@(bAtP{DskA+BkTVubiFYMCcr zD@qX=TQ{#0JuTdk>rg^Z0b%95DeLwp>K*rA^ZmUcwkK7zfhO5^y<+_M9EeG#FY#7( zIygk;6MNm3s2EN^UZeNe?xK4!WuK>I=09D$vt>g}p7h@R{m_6pd%EHdTW5qYdnr0YdxY<1f)$gf@`#$Oln9428Ue;&PWwalFV4yB!pW(UHIkEaL1zToTUeexMg!^zWM;E8vBnHc&p?v8ao{uJicIvMv9eR zYSHDpCV-Icwq|hNqeoa7A0KDM{fm7wnJi;y^x3wW_n)_R*H{PEbG6DRY=i z`8{nE+rkJ~DPb?SNz-QDZsz@msi8?N$BLyludasnqVE-U8O%SWPAKw`YJj5`s*nB? zCupJoWzAXvocziW5jRp`Imp*|`{AGzTVqe#tILb0pQgRDGBYbHvvU5_U%kDSe%)8H zPGAR}$SB)hH;^Jyl}VD>evwo8RfKq|U>1!#{zU1o%Ej@l@OgQA?X|Q1A}o{uUeGNn zgfMReN!mNLainuTjt#8fki9*i4)EKKIUPa_R}Z<-!LJGBG%^URM5(MFK`HHI!D$<^ zkV9B>abC&#sw>#=(De6|?gKm>P++JzDp=u(<-w1#e@Ui>tN~#xD?@Ac?_@}5pxyScocTqufn}Z6V_$C=fAU2kzZ6DWvd(1Jj4_H z0jC0xSZUF8pUj_AD7Qvm(AdO{Y78h$Oip)`NAO&ev5Mgyk4ZZ3-09Kt>sqH`IhFb9lULgs zDWLf8BBe1%hyCljWGx#4G;iu!1Q-AigIFV~lf{2IE2IEz7I9#Gdz) zR^P8TG>La1k9K*E;UQ$o)Dh;3Z~A&lIXig2SjTi!bEJkLt#!i85Wn$OftmUdKOZ$_ zY-A%3MBH2!z;>u70K4z5nf&$?bKTuq8JrkiPwQ(kap2l=sB2zL`ZO5wiT|bbr*Q(f z29nQe=dj#qC8_8X5LEsX7>yvi&&|z!fAIKbDw0=zDadcFvC$?iOeNQJxH<~1qq=~c zEc@9{^D5Irx96HFx=R%h2je;_qFBRxrR_-;YRY6Nv$^*lkCF}Pg+Me9>)q2IIc*rx za%^zlTry#ke^k_Q!Ul-=kpA;Bbf!tV%T~4R9V`zZ;mb*ST_VyiaO!~kYf8AcFFWXJ zwmQN+R^}CASX^e)o|9oYQ=by%zR=~F#u}_~$F12P>lUV#Ni!yLuuL#LKtEY7>l6q> z59T;*1(j+s-wKZ7RIohVF?Tex`Qy6==u2n4x;Y>dKvBj|T6kYIN8^_PX@3COeQLmg zMhB6%FQ?1j_|OUoSXJZGjRYxdfEieCNO8G2v<0z)-2NCcY`)UBPgkr#Ji;u84!`9K z$^`&zdtO>$RP@3}X>!;tJ|sRN#LZa!sy^p`iF{ z5v0IV^>pwR!@Dc&x7ji`nP^5of}hR7$C@x5okd$!^Lj0b2P@6UDEo?$p8Eh}{2ci~ zj1eF70qkvY`LNp8)ojzkFdgdam1~z<3jt z4A1NT`T%Q$zSI*pQ2{C#bqLD+nh-nxuRxs5US>x7DcqCFa#%cH{DItX23@xq-A5W0 zBS>1w#i-2ah#y)&ta&xPh*M_i-jb>sIYWi0v7Y{=*oRETLgOUXF8o97Iv;$`GvQZ% z;DqtI?Zz{c+TRU8f9@*y{AfbWq0&c#u+f~2gmf5Rp6ax?~#~EiCZwO7a z_Uq&!{@JWHI$+NIXK-rBNB#};Y=CO+ZCj@$pyK7rMdt9S^QR4h ziHa;@*g33yJ3Zj|h822Ais6Snp{ts6VEi^h%{WDfRF4n*bHy4cY27T^En^$0(Ap{I zHxfDn+Uno`GsJE-ZlT@q!#;Vb98sD6Xz4X<@&UHso;xA|bH6K+)}FUuFjMH6u|=V( zY^piKHqi*;Fga(4x}4sQ6r?Zyf$WAqx(I$+aKL~a)p8iq!X2skPk0%h!6Aj6Jf$jN{saFtS=zl*aZe>2Bh8oRjfuI^Kw9@?!W|7#^&VJ*ttE(ns+ zvs|8!CbZtC=O_HUJ65`U;fIncSDIj7mo{P(_R@gGwU zE;&2#pxWbCcHBEYvR19Dn5X)%L`~<%k@8u*#c$=RjMlI1s+Fsq!M*29YeU|KCx-hk zH<^8_J-h$Y=|w^sqIY7Z(Nvt!T+0;{bs$ZEgK`|taPsl)Nr|z3DOPR9b4Tfw}|1+&9+*t#D(@MUu#}@ z?Z3iW_fk9m%r2MH*KWM;OXk;vd$@?2>{xsUKRiV literal 0 HcmV?d00001 diff --git a/img/javaeett_dt_039.png b/img/javaeett_dt_039.png new file mode 100644 index 0000000000000000000000000000000000000000..db59a2395292b1855f0dbcef657361e7796f4308 GIT binary patch literal 4210 zcmV-&5RLDNP)H7Nmw6e3q!oyr+Y;0<3%gf7EQBv0A@myM4l#-Lm-0jKY`Oe<%+UD{~Oj6R}@Wj~b zBOf4yfr9Y$`gL-1ot&KB>GXk&n5Mnc-01UZa(&d|@ML0Rz1j1+(de?i$>QwwxWUWD z+3ak0gruyrtgEZG&*r?+=qMy6lbogK@b|*j>d4#dARHYmC@DilO5WYw-|F<(=JJ`X zz`D-k9U2 zt-Z|C-R7OL#*B)KnW3t*&gQDKyoi#WEh;M!3=BLxK^qnp%-rtT+1cIg`gMSf&fxIC z%hsK!w4k7$6cQ5r{QNpNI4~?Nw9V!@IX$z@<@EUbVP$K^(cS+3{xL5wz|`tIIXbq{ z>MABE4G9XHrLi_OI4&$MS5;L&JwBwl%>V!Zv&`jqb#`iPay>gdpRK#3v%}5T;*zDg z!_(up(C5S0>p3xyQBP6l@AuW__OZ(1+vxJd*XxLehSTW$M?^+sZF!5FuRlRXw9Vz1mX}&r zSjfl6xYF!_hKrS{zAr5>+}qo#x5a*ZeQ#}TcX)lz3Ui;NWU#XklMr zpS8*g1Oue0ujl6Hzt-%ywzr|DuduJL&EM^;xyE2=b!TN|*w@%bNl!{hNN{z0;qUuF zKR|MDaNpnG!N9G~77!2A)YP-i=jK1gC;$Kr2uVaiRCwC#nR#4OR~E;w2~R>mB4Ai# z7mYp^K?K4g@DLKDsKXc$1hu#T4x&^NaS07k3|Pe7S`Y+l!HuE_p`ua+gefA5f@QJo zC@mprq8c&SyM-@JSxwkl*+H?z#7z2f&+n6K~>8yovvtSaM_h z$T9VK%zPe}im?R7x37<^O%q;e%$Mb@Du@^}T)Y>tVa5La8X9iCMn*k+7>yfueD?ea6BaG9v)i<3)6}8723%UhCYqO0 zIz|K_-a7D0cxfT@mw(`$;FsV!2Vp@Y_!=!-=zp4!_7}Odw}zGWt*<(~G}PlYpGayq z951WKxEV65fL56>tp*I(vdcu5a**4AG!MRej36e!I3MF#hjP&v++ZXZRA3E2Um1_u z0m#|BmK@M+kL1z8Kn7d*m_JZSVMlcXV0;yg2?f<@Y*F8<;57;7wRZe4ykycw%?n?L zLz2qxg5CJxc{T7Rc3WiCN409jVGSmT%fsk6KweJ<)zl6L)_}FBGe_9ah!P&OXltj# zS1py~T&%A+pKOa5M`hk_Xf^RhYQ!yVhOPAvAz}y=sRb8=RpeV#tzW|nu0q0J0g(i+ zskpQ$%Dg5>te_4rSiT5e3srb6QAjFxt=%xZ%uqbE2S|DCpsz5h(hPuGRuWz$fH(la zZ4?z(k;HuuV~F)gZy%(ih7&1}Lau`l0KRo+F&!jUx>U1G$o1kVq@n(PJ+U6eK>HQ| zb13&m!E2+8*SiES++dNgQmIIjTfuH*USrPr5J`=U-d*^WlvkvbmnD&OI#J_gcL8Qy zG=BK{(irr@uw1w@J%_@R0C zz*QcqO&X|WqZTBBm-)amF&~gvgRhF0qO>3-gDp~v*G7Vun}ip!H7fBsHC^d0z^scF zygM#579R=U@zchEb<

CrLrDW)m$z^v@(j8Rk literal 0 HcmV?d00001 diff --git a/img/javaeett_dt_046.png b/img/javaeett_dt_046.png new file mode 100644 index 0000000000000000000000000000000000000000..f0ca573dc89c7c4de4a15d4eb6c367fc6ed79935 GIT binary patch literal 17268 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

S)VNEGiq(&XRfr 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 jmGOm6(aW+E7|lYp>8!yY@~ZR_(pTj@W9H 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 literal 0 HcmV?d00001 diff --git a/img/javaeett_dt_050.png b/img/javaeett_dt_050.png new file mode 100644 index 0000000000000000000000000000000000000000..35086dfe2a45e07b4672b107c9edaf0bf6de3c01 GIT binary patch literal 9767 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 literal 0 HcmV?d00001 diff --git a/img/javaeett_dt_051.png b/img/javaeett_dt_051.png new file mode 100644 index 0000000000000000000000000000000000000000..804c3240276435d375fceb35d943eb6f32769fcc GIT binary patch literal 15554 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 F{|7AAzoP&E literal 0 HcmV?d00001 diff --git a/img/javaeett_dt_052.png b/img/javaeett_dt_052.png new file mode 100644 index 0000000000000000000000000000000000000000..567ad657d5a36ec34a117c733b6387d34e9bd412 GIT binary patch literal 16009 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 literal 0 HcmV?d00001 diff --git a/img/javaeett_dt_053.png b/img/javaeett_dt_053.png new file mode 100644 index 0000000000000000000000000000000000000000..482836c923408519f2f8326126ed952aef43392a GIT binary patch literal 19137 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%0DNc{*@!)+2p2s+vRZ?i%jaXExicelPtB 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 literal 0 HcmV?d00001 diff --git a/img/javaeett_dt_056.png b/img/javaeett_dt_056.png new file mode 100644 index 0000000000000000000000000000000000000000..d2103931f260b971c2cf229af75ef60f0633c10e GIT binary patch literal 12498 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

=&QV;REs9AI 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 NH6=~ON_mUW{|Cy`Y(b%y)7#^& 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 literal 0 HcmV?d00001 diff --git a/img/javaeett_dt_059.png b/img/javaeett_dt_059.png new file mode 100644 index 0000000000000000000000000000000000000000..9143be570125e680bbc350027a6c892d45f84bf9 GIT binary patch literal 22237 zcmYJa2Q*yIA3nUSvQ}HYmt8$tl&Ha4B}|lL+uPe) zTU*ur>y=$|_su&wIk~*N+}YW|?VoLKZvGwL8r>W{KRw{3jOH#DJkx^CrQWp{VCZ*F&W z_q1VXqXvt^F6fGZX9o%oL~98dxxFdj?FBZ+dRIyx;j2SUfDVQGrHN*+Pb&5 z_w{eV`rcVma`OJkWmRMQ)Y{SJ;rZ11QRDE2g^hhkO!C3$Wm)atma)x_$!&2d*|w$j zhQYPXgY&h$v+kLlmeEa{w;m(Q2geu3YrCi2(>s{Fyy3-t8~Zn2{vrMIdxMMnEj^XzZAACwCo&R7{0WaS>A~LR9M*RhSW%}cnwh>zdm(sGKszSnlv zo4>Z0-(mA@^H@UL1b6!k5QGz@QyEbWOt6l)#ZY;SLOadVqmKa5O>sp?xfyE@ZFp(a-* zySlp9caJTdtlB5Hr`8TRIH4`QEo9{6)9Z(mxUFg2QRnowkf>1kNO|+btRh^Af|8

4gLHyJcPFJ+nLgbGyyM>)4g)uIcTrnVk>8 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 literal 0 HcmV?d00001 diff --git a/img/javaeett_dt_060.png b/img/javaeett_dt_060.png new file mode 100644 index 0000000000000000000000000000000000000000..1423edf548ef78494024062dde3f7dcafa598373 GIT binary patch literal 9797 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 HtC0T#uF_)7 literal 0 HcmV?d00001 diff --git a/img/javaeett_dt_061.png b/img/javaeett_dt_061.png new file mode 100644 index 0000000000000000000000000000000000000000..83b7c48961ed29469b00d6324dd423fcea008806 GIT binary patch literal 24408 zcmXtf2Q=H?`@b%uingfQRkLPoHEY(Mtr4|rgxWzxQMC4`y(tpnV-vI?w%Vf+DN(Cx z#7LCH2aSeC%_M^UW z^-E1?p!n4nD@fZKWZ~-u3ULZ>rBHw4>+JeS&)dn})!fzTO{o8ft1<<}4GL4km)e(? zm&h*U4-_gYDr#(ee1CsGNS7b6h{&#Plm1wb-Nhap9Q5_|m6wA1`TA16N+a_-R+B(E;94z68US3|a+p{)e4B!voCHxZp2rsKB_XmH3 z`SbSysN(48C?X;vs<1U6Fc42X-QC?Ko}8`jue$oW4*VV%U);OtS+sGm(KhjC_uwQw zJspR`Efba(@r(b})Lfay#>%{~xZv#Uynnn8%52{Ld$LQ~1(prC$HO#V=q_&)x3;!U zPEL|Dk}KLP<~9zt4!0&YCfwJUw)T&I?~-~~dXLCQ)_F+aJ0S6txOcRdRN2EXD43X- zgd^hS)(=M4N1^Q_3wsMNj&!r??1ivdi{NRe(moX z3Ww?*MO%gzz5AFuz3g@h8YLsG$8s1=Xa9Rv-AGT zOGm%yo?40f61TjvTu~2~;ABu1de|}0(KowQ+*Z7bKht@e-uvsw{zKXR@#WO!)CS?` zLoRF~T-jPFhW@vSCvtFc3X6%kd$>2Zx2*3T#>U3YVi&g#FA){# ziyL@4db;Q8>WlLjdWO6HX%)`yUIFhSbe+I=@7`V8KHz@zXm(=cb56l4zoenHq1xQ| zwXNOr^Yh*PUAv6>t&KmAcz75X7`m3apit=05^3=#y1t=dVP+f#gL%6;6n%I*|9e+Q zNxC0ijovt&!=3%yI4b?}<cjSA`dsu7nj!!y8itC*YMc-SQl#jd%6fqAu*=(wSY(sv#T+} z@S|&6xuI3|L}IhLu=GH))+@^uDNEr)X4hxpnGh+fSK?MVVa)4hukoW1r+O5|OwdyegB>VhrSFddK20P#86!%zZ>6DK8rs}^=22m>fdggn{6WW^seh}guqy>?gRX{xWDw`!%c>6JQBXUIw)rUI62k7Ru0?Et zmY4)f8IhT{5fm^Hs*t>N$CmKj_^Au!R#DT=cO8%;rkIrXSMqgTywN6bMua|)I#Azx^= z0GTw{e2W`6dL`&q)v{I1Jz?OW0Q@i8*Q=^!914UTqMj9)S`@Dhn~F3UK>{_3bGx3R zMorIHUWt-_zLr~-+J13}VnXqTESZb%IlzSmS^{>~=i>l67asQH>-sw(=&A=|&ix4k zrW$U@U!E`{nBE*q2k{nHhS;-KkDOB47bhP>hGqX4+7{}~d<5v#p<^BFl2N?UCzT#u zxi7^5FIj&p2yjG|r3&uY@r+;t4viof>oEg+MJsoh5wz^E))K>d|Fg`UpkLV>^q4r| z#DBBKuo3j}22{*o6Ray&5n!gh1I%&NMc;)zFLd88* z!bhisHRzx!K^I)~fX!6$QYZ0N1|}A)vtFC1tzB1_UDYJBTix%ZED%$6gr0rI5%k3C z29Or5wVQNh<(&~@vH$W~Vbpq7G?YE)#KyR z1Mc2QQituta82C}z~k+GG|2~@aHIb@{q_d?vnr@-S#YJs9%pn}y-ECJ1~J}j6Ka)a z`hxCk)20QLZyBq&_?}@f^iOix6G#F&cN2<(w6JF2fZ~;A`&1QOt7_}DBWFjx9g(6%rZ3>M`J&hDaPHbOP{>f$`x#{Sj9=Yxn$!&P)-TlYpBgKf!_^E z=YCf4obj<(?qq7g@P&=NVjQRJIH*Q#+FIg-Ma+{_qp4yLfEUy>$@AqwZ=gL-JK?RV z*pJ}r%Ydvc`=1KqWqPfT(ah!2qKeauIkx3(p5aaUX@-X>Qg*uxLkmA;DOrQ>Atto| zD(aK=yS20`>i&BnlhqPBxO=-WK|brQ^1ggn>0KeZ*m>=iL_e7OtH&uzL!pRR_1hvAxiYBi5>?DRZ4JeAFj9@bfMdk`m9FClM3 z6?us|5taKB$FVdc1C1?T`_^gumge{3rK?1ui*hS7E#0t`q+gvf>fnJ5o1N`nTn#PF z&JW-l!rO}%{w158FB6VPDH9pkhe{H~F{z50oa=c3A)jeZMcfA0m}&BMB3L$M0aAK` z*iBy5>0!3ksQ*3p33-mNv-F_6LnX$R&U=)AxHzH5do#L>)z!5lzgU`xx-!d*o&Rq3 z$8!3Ze5A2@$D6L3M=SWbMNe?=5C~~0$K)iv1Vai4?Dw-jMd6>eZMgFQ(I$my-%TOm zE+km)X0)P2@z_RK|Hrb?-;Owh&k{|YNURh}px=l4$&4a8^8jTD4V-&l1@nFAEOOiC z#iJEth5l+o2G-&peL?KcukUwt%^hk{^Rml`vf!bMf1`F?#DB3o^dXcvPng=bhUV$=1uPPN@@IhhC*6PR~|Q z==6FY3L)6YL0b3tb)kk>gu1kp$<21fL%BOBQ1}DB91MGkle>^g@8*s;r-4bGi#Mb= z7n9qjUYDWsGxmEKoE|=I^Q2DG$hB@LT+$%zIqVfGsNX*eC?yl1!&po6d%r{JDW<3Z z14tD|jv6d*XWoO!qV#@&L%ebgIY{((eu)<^nd(`X%{XmBUpO1;WCa6x>-=?4i77Ln z>OFu18ug7q)&@}Qv6VcuDCN$F{Fni7MJh`aBjM|&-Fv7^V@;P$)z+4&O?p_HCfxCA z$cU$S#*|&(Wee}L`>QHI2W5b^bzn2~s=W&1DUd)ePdgycyLMr%=TPJ-=4E5>0iIfQ zt#X)20}*J;oz@bWSe?mtzvvtoAwN_2O>J8-$6dqFtK}*O-PcT-WF%u($7uL)nj)6g zP|ToZe#OsFpchI2{m0O~NDv;<@s}H7D8cF#gT13eEOy>1XX;n@ifB+)HKQ2!Z~UM&RDq)G7Gg!Rtn{}sDdf27cg zsBp${$m$<2jlPdqL~G~kk0`4YM_9rI{2Rz2B(%LFyw6N}yD1d+7TQ8f+TE2}v`TIJ zv*kmuZPL;#R@&)=rh_mVDU6S`AqFU&8m-? zyy?MsH9e3W^^BVIb_|7g3=hB9e+nv5ceXUktR32b8bMnaTIpqN5GEoi#XCDYWYB>j z@M?N*BP;+$hb4IZc4EUFtiB0v?plf|c7LdAVVyQ%V4FRu4LghNq-n?poj(1?J{=n9 zc^Rtj$>}A$m-JGRs!YI);FT7}_@1xqHLr!flGf&<(Uw1Nc`yh}B{md@HMO7{<=Wkf zL#_I0NX(>ybN_VOV8ctI0YL8$-hcj=mP}#p4R#^koLThJf0K!R05-*rFQD+V5j6fV z3vF2&G<=9^(=g)7TCHaTFvPK1OQBTF*pxb6lknSgh4LQNVm1~|BBRYtjKnOhg?h`?eX>wb`fVR;IVz z^8{>9Od~3OB-Pon3fYN23+YBWX>K?5eru}yc~zjwp_>`=I8!v|6lJo4b9~F)G7B7y zs>1IXq#452S-yb2hI;IUJl=$$p3!+CtOXYR&Gr6MyBdGH4Gla{8>zt<;n8YDY4@ef13nm7peVghRwe zCSXtM#5^{kE$Nlz0t8hP$dY4Bf#uon9Ik3p+przRdXGukXFf*X~o?kaQd63-dpjx72jd?x?BqM0h&KR1`n;`SS%S%^9-gCR}c)lx`hUJgbh3wZG89wJdX2iCI+|WE)pY zie|oA&$jZ>|5SS!p=bQJRPel`VI@FN_|Px^N%oGkE2z>iGq<~|CVS~GavfVZ8dQ>2 z_iO0XUOSX2x5IqB8gyC(N{4X2{?EFSZxQX&{;wl>M^NAQ8*oW^J-tXz0rID!CgjVj z^@dC0&qzR^I<(42KyQkh2G`NWgnQ9lfQkpaAnOa`l*A0WGm43?l~5+@(C(YK5eFU| zGq12w?XnhlDPGUy%u5`y89oaw9W^lN2rm%BVR$e7s*tIQRj6DCKiu0$l#V&}Bi0a+ z_$a(*q~v}PcUqndwWtIB`qe>{t!EpWV$y&T_cbLvf z=q9lDlmUdQsMDu%9?Ly@z6sHb%FBClH|xv%VT`&J#aAYj`XkrTy`OZm7CIw@gsvW8Hv1p% zKFztKOcmQ%`=UDass`hJ9{QK3b!Uyz?M23k%F=)6El66<&FG_;zrqL*S$PqWfkg&s8+=O z%8vVqzPs>v$($~ z%$%N|h*IT5Ncf{u`jsD5p2v=|YAcjC1W$V@lrfT}Syf9*ne}<>#FF>y96>iO9alU! zIBxa6SPdbo534*>ezp~R((;ljEFToe1(g|xD}DbBhU!42Uo~i&5s+V(DyqTD_7FPR zw#xL9;|G4@9Mm#`>MiUXQ4*<9Zco25bA9NgpmG>$qYdl5cf4XBF-@1YcW-*w>E8k!{0vG{sBfY+>=Hs zZ`4p`maDQjy37U&z8W&EkEW1a^JzL&zMX0x@r{>~;V<$LwJl-gN2dB+E!342gt`5S zkXx&2uef)rauU1>C{ZxbV^6-6#IOu&3Gv3IZ(o~BmS|ou4yAtJy?a4T-RJv( z_uiv{Nu$CC$;CISnmv$$VR`k4s?sH-@Tw7?LRF^gt)sN>WnA7yiqov|;vq%Hg8~V> z5I9Jb0=iiO>WN7vk7N-m8uvJ|^b9U7O~W9A>s}QRSPQ#wP#qs#+|ukjnTMKmi7yGS zUp5GZ`~GLIr)cMEi7LG@qi5@ zu1r-Krhoy|1<3bhHm<^hD3Xg;V~f7D+<)R+={_a*7Wrd^J9R`0r?<~(*hea_RQhie zgjmV~UH+)JS852b=zfRjhnMJ7Q6pH}i9p8m+>#zpkqzr_`wF`VzaJF+*!3QA(p(_oQ|BYHaRBGHgP zcD&m^h^WAy*BgCNd~+TqfS;imgk7x*B8BJkd28Qk=1=41YQ;J9C3l7)H<0O>NaRVp z?F5`E1*z`Hy$gXh$?sMPHZ>W)Cj6Q-Zd%HMzii+WtI0L=7Ek%U6qP^WNWgp$N^w|; zz|#Fvey{TI`32}p?q*ons#6MmQOutvweRmI_N6}{rLF+Ebl^Tx3mg`61mWKfbW(ky z-*4V=+kk(p8~X{ydi1If{wjFs+hCeiRj(s5-rdhOJ0AH$Kbf!z|D& z_`fE+wkE76g8ybI+7U)Nh_DIB;HeD9(U(g2%)xMwMm6{lE?n?Cy-c+(z;?gXlF~{a^&dSSl!$jkzge2bH6#q9};ULl`@9 zG%Ol@>B6J1bwgj^V>_Eghr+9F=5^ja^4z<%lPxk2b=8WB*lvRHwsI@ z`R^P|d?0n^wpsQ0ohnSK$HURLLU!mz%`tHj{`@<#7!c~4GWs9}Y1qj)Qx2lvsro!= zc7^K7pb||>o%(&>f2ELL&Y$79jVm0CuHBi%fKjM2)lu^Y-Scs^zp_>5#s&&~)=^bO zZ!v=>MvdCXs)~uxoh3rX-NN@?5s zSY`P>8SOq#Qe&)l{Y{4nzINz^ zava{FxNmp(+CBP22A+ON)(StAxTRYRb7{#DhYMba*;I1d$-NM(E5#)ixntWvmT2Hx zPT+;<&%op}(yeAwwK{ucGxJEWUbxE7e@*$sIZ;T}L%m3Y65wAN)|dH{*~E4aDQ|f+ z2wmR(xACGc~s_dL9 z$B>S_*XQ#LpFty@7XuY27?iq{fq6J0#6ADyS0Sxf_)nyR+0}j}tmn%euig?U%Q54Q z<(2xL4R*2G)=z8Y^G2I3*N=kSayks(517?M4GbaDq#b<+3eQh6+OVnH$yTFqW7w++ z`7AEBM95M-KXALZ-RbIB9w-DEqk2AWRh>mo!KLdv%DWV&$Lu)=PJ<9hHU>K%$%gUI zu67Kd#nioaRVJxnAqzZ2iE;@P2v@SJ%-zywk-zQ`e)_!1oK0aa7-#g1V#r^$hh2BM zM7#3E#{xcYrtLjbuuGjN+JsTFcm%{=WZZuFw@-iBI2#xa6!eJubw}6ogd*Nj;5o&> zeaR2f6LdWd927|2l_%;UGRF6&jXqmE-tyIk6Uy?0XKX%_!Ahu&G9O}vVWvj-6G?O~ zSB*&kqua)FtcR}LU?SY9QZncnjOh$_WG(e$9(V1UfM3b2JuV^6L;qq5cPyvNVhmTr zw93P~zn@b_f4CbDT)t&jIRR;@63}P=h~0a0Wc*Gx8%WxgR}HPECRNq*ae%9q2?{rW zx{Fpej$XQMOr95p5=XTfcsxt)$@977XGh7&>`bSk-D<3 z;>R-vMCm;()ZU%_=ROosNfxMmmYnbXQudu4RLeJMpjFR-dn=|TI8jJT4sgfgpu#&4 zhpR)*IFy?)`6`?&*Qft8%*G|dJ#{hE*qyPd7c&}f`jJY0@i)~Bn%%Ru1M(fB2W}7sq88NVENEh z)`DX+z#Tt@UznGvb)>NEpFdPMFWmC&%W{DtWhEN?DYbOaiAmEi=P#MOoji*n8Jf6S zSS#wIDetz0aaAT`(Z8oR>YUiQbkNh-zr$6OW%WVdUf*jdA&!|>T5Y*v&0$s3dJQ=S z5|W=Wwx{AkGOy1pyBWc_T}|&db)PW|qNb+V|M6zGHm{|rs*Btr=^j>F8sM5OME>f@ejm*J7vn}TfV>MM88Zy)_! zHKn$BaW@FE_u6j87ru8af%I1(%4I~Hy5_^>W^Mzyw0>N>^(e^Wnu)r%?97p-(Z7+g zCK*l=sS>qq>Ki?7NG&)2b#>zcCGybsL|8N)bMFT>rZ&6knSI*OnqjvN;!$-Dy=rA9 z@KpU%%UpTJeO2DQBMS&1i_6j#+ZwEmhti-eDqlL{c+{@a0!(&J3&%vdr;s0gA#EtR z`DXs2)nF8VVa_FWA zD^81vq6Y>w>GKU9u*!2)q$ng)Ekn^dQHqL#9~_0>{z`RjwOb4oJ4weARFa=C4SMl%P&DjA!} zVHIERJl#NjE05LY6^jKkasU&iiymoBC+ZC+e0O?Ht&`6@@VQ0kk8vbl-_x=g9(z%5 z5@{Nc^^boXK24SHpqKsEwQha$nl4NVIdH4z6yJJyW(c8;8e$>!V3a->Gi@7;HC+&1 z-#DzjNN511;6MYi;bBEw!aCAF1Ddb%L37vcBc$4VT+)=)ZoRs}M=8Hpva(4piS+G*$e~ zuPd@Sldn>ckS{(wUPVi*&h#&eaz&Dgqu?+97TK^54&e1h1Zd>s#F0D9YgD$kBR{Tx zV!3MWWu$U+Xvmdf(j(S2Ohq7)q~Z8sJX3y%eYkA!gYI(znec>EUu%$d zr&R}0`-Ii_j-+TsqD+@y(dvHq>bu1Oi5}C#{p`>9Z@1>a{RB;SiF1#g1A03D^%rl> zs*%koQ-I*iyxAC3qD559%<6rJ`{?O*@*&LZa&XHifuC2!$_mRx8W)A!BQ5duhuLk} zQ2wV|aeZ@YpC2Hno>})4oKUgHRP=RIX954Ty!9kGq|Bu0S$zpyYth{b`vF@T>Nx2B z+j4yaRbYDgc2kJh#HH?D6p~7QRrVxE+lw5^N=AL(3%RP>P_80BckA38VVV70OA^D6 z_YC-OG+8a1ctI@fFeg6KU(xTV&5}nwCX4*UJVZYeQWOwa0Q{_%JKDK+U+{ws%^CC^6 zo}2$Wdw6k)8!J*w5tm+NY0!_F%e!+Zgua;6uTq;eP&$3ep4c(>bbzkczb*HkpskZ- z&kr3&aUjpc6#q)zg2bck;m-*~b3JfEm(0E{I)4njA}O|g>m~XDgaqq;K5fOjS?tXE zshdl7+v?T^It$fS?GDJb=hbKsRSJgrKa9iTYMC@5nsSXPcUH6J^FPLTy9?c{`>}Or zvT0D-RtU{;-n3Hm+i(Flm=<*0+}~X_4(GEo%m~)4rsSHJBvGUaW3+IrQotG0vv&14 zmY>}xzuSs&&HuJZN-x6OzfO0$eD2p3r%p{GUlbYWfAd*=615a`&?A$!KupD;$%o@H9g0p?|F74KcqW z54wfF@qxohkX7rHwRiM(1w9ary*EV>4^n%bBE_hc!F>Cse5#=Vbgq^6WV6Ht^unHh zpdGMY5#LP?h`PqGMPfo+Q+l}a`m>VoiL*BT3S`(4xLGKwqAB40VEa#-w?u@?0=alc zI!Y&ji)2@<{_(!8$c1b(NDeJ6raxAFdEBJg#gk>HpuXW}K*#RZu<}RY9-Cca-@f0+ z4VL|HX-^f8S6NK_V*9t!@tXH?U94N}lFTaUpg&an8cA-~Z2PV=IR3zTB*d+$P_+Km z_K6gY_lf0|`7H-^MgMAJarpJk`$F!oe1Z9z7U8YfG&IL)A*W48WhNEmd9AZLD++bz zjn2=IwYlA|JlC=Drk((oXh}M zGUH@#Oe zo%b0saV$uu9)rZ|TiBaX$M<4Az$j@clv|l9oX)t~eDvwmJ4L%U3UuR4-{2>Il5FLNK$s^(5fPbW)%jyQE$q~oo z1~YwsUnH@is~2`cv45vrwNtl~HTCIOlYkM#I70IFRH>PIpyiBRADUufxHJmQ z29yf&TV+{*4C1}75lU|-0+%_}!KqOoA6NpG4JaFAGu0O?k)t!UWBidf;p1I%Z8itZ zjlrtMzI^5OT<+THrcB%~a|^vpO|eo>?SCfAeG*+KeJtnhF~{x#VoTlLd`6l^?sXW9 zeoZwC_uRvvp*Stvs^c{6jd7a)bPZSvVMR5byRHBS>>C{yf$%}*a$>AZt0lnw6jE*- zfxz~i*+O#U#^F4qJjt41wWhFRykN;Y=h^?x2$61v{f8Zx>1amCtBU5qq#@sEj2?XP z${(iJs%w(^@3B=yZDdaZ+{lKT8Gt7#wPm0JMSdeqJ44O7(72>p*8;eklQ z+}*C5(wduRr9duexA8-|DYeVt#a#IRd6>4)4FzfL1>$njtznx#_?6^H6HO zQ1Ja8N~jk`YGetx7x+CoJw)vy8l^`C%bP5z_Ivu6i#JoE#d0G=d67}Z05x21dKZxu3)GDpc)p~PnF563*WoWimioM2X5bjUJ+(cx@WgX7 zJv#tN&Di2iffmwh`(^c_C1`poo)a!S)ty_k`aF#Il}#Eqlv2&VqZ0Prck!KvQ#HH0 z;`pxtA z#j}%!k1T#8URT+5xM(mC%pNqIyPKnw);o!#CkJwDrClDB{80vD;Xg{RXo%(nR<$lC zLK#Z22w2t4Y|yV4SGAu}Cv%PeF z&jNoSy_bCF8}lT2ZoqJAI$a#|h7DLDV)`gZeLFw3aSZbYU_TBG)HG_gd<&)8VIeFF zT%{<2at83LE29VM!<99xo2Aa~*1`FDjMX&7t=37i}Q6c`mgfo zMVqT(5R1vi_dWvNI!J4Ex;pkaM$%?*3VYSN_xWA&>TGU`;jk3Q-#PZ+2|x1`GVUT1O;%&Y3! z@hWXzQ(q0gp}uatQ4Fe`Mcv-ks?F|HzPILWuuvw~QsOH;1H`@ATO}%p%0~GJv@Hxj zn^hmnza-C;8q0nDrx*p8v8l4%hX-v$Su)Lm^D&v0re_=j*+MVAO#er8t3l^D*VTAu z;Fy9K?VqG8ZhdeDQCa9D8nph7KSo+b^9A;OQ28|Ep}|>TqgCDC zh}O3v-j)2@8(cv3x7lyicSC1265e00^K2hHSg-1mHzl|?^145Mpkwn z5L34v@mhW+57E%vN8ei3sx|`|g~)FjW8b;JeVO5ISA7E=bV@rur**-Z%3ChVa-CJ< z@+h)e9B{=uGT#9(HZm_!=Ifxtvzd=zbd5m}d3Oj)_@^t}ensxd)G_a7?56AuA4d0q zJ7bqs2vcn_BZypbE4Cn6EW067syH9>7}$Zn<PdZ@~WBR3-Z)~<>VEe_=e+=4y&=*JM^QDwh$A{QTzE=?a zDYC>ZBlHJAW)?zTvM%0|yto!3Fm;#AFATh~tuy`3XRU`uXb~P@pqa1y^9wM|M{)wL zC8oFeL6MhN|B9%VrGwE0*J;&dm3#`;c6nII!6%Xo{lUrale!k>;#MZ!R)X_YJ6nBN z@#%hyvdb3Xd@IK`;=ng#TfZAR@W zr&4=63nX5hPW*vdJG4Mq*?od6tD2=$)1Y7x)Ap~Ue1^r{remQrpM``zbpHsseR}O_ zPs=-kQv5Cj|39HE=E?yV$ET^>M!y;$IR;5T3wQJg`mW@KDSUU(oxh3qGnJE~{!OlR zM{GPWs`Sm!D>QGIr>56ml+Ew~gqByVPyfwc(fX+~eZ6ffcwPW?RfqtAkAs?waI5t1 zPKJb`BG=wUQr(fWL2&U2W2uxAqK>RT&`>b!e-U9`4LP}X913!OhzPSC2RZ8dzNEfG zR_|W9Ve#A-!cF~OxY&@nzC5>D$Bv!k%$aXT(5yNwt#f|tnbPvgp})XueWy{~0}LO(s6|6!+Lu!!#$Y&U71n=RIda{P z^|+T7pLdpPgPFImPv2#Wzm&|Mx5w_x2u^{Vz@b@#3 zO|&SONkSoE(r{P`$r^EZfoerufXX#K-fW!Af}ha+q@Yk0rL*;wQ+znEO!vEru?9LA zu0WL96B$~^in&9Z@2YWw%lPch1}><8ECc3yM^i(FNYd4 z4}K|fx^LFQ)b0$-dP_CLUyj$nTzjX-b~N+9MztVCgg%F!$q)UVH;7kQ`GaYGTWA2a ztn`q1e*GeHJ71D2!sKiD$D+;U@Xbo>!clkdjuXPrtC|^;;yCs#g&UNWfO6%QX_JZY zGtE%#ct|%WJ9pbZ`~UR%?5=2qez!Y;H%%M9UnqZtp9&%4`8c->`4p9u1|zU>s#J=n zTJCqiVH8RDC7lbRqp#k$;ED5f>O>R45~)veGx_dEm#znYj+erGuRfR6T7UrvQhoUE zpHs=9|Df{6h9&NZN0eiE*o!IEPHz1w>AKEv6A^F2@CTDs?O!6;z9YPh#{B&_OlnsN znp+H=CFK<F;VCuc=@ZmU0iRm6fNz>d~SGS@xeGzTk5f zwaZCTH|K@b1r2CEZ?Qf6Y)CD_GE23S!eF@^fs1?OEhQc^Q%h95{Vx#Ow&m#sA!ybe zUnvt*om8i9@JXk@RCb@qcHx={e{ol`x&r_b!H_nlf9wT`ByuXCqhY32l2P`DCk9i> z{_ieZmSg#O#oWj=w}E1z!qH5$HQs%GxOfCy<+# z+oSNALK~YM=dlrzl$e>9be)OaIrHbrIZTG!4C{8P)e~qW(zXyNgnXWbm;8LiqJ_)# z#%jx7r9Yk-8`~M(v|;tTq6^4c8GdAoVjMB(w zMn;oxo}eZ%94-gaGLH$+|0FsifGQ7K8LIKA7?b%{`uz~Mn0BsZ1)j~LHM=84SADi0 zvll-IJnk?3=4dORviMq2egW_phbH~rK*?HzBgeew->{`3Ba!>d|BOt)Frr4*LAUfU zabp6ybNvs)8B``P=-=&cM9?Sr#YUks)r{d)TU=I`ykKGL(^?9g19L|lKufpu9Zt$8 zKyJ=;o$AKNT(mKT;=0;ADvQxqz=E~nJ7=-~96AwtCWvoq9Od-STLcTdyj|I*s=SV0 zI3U(*1j9?s6>U8=y`e;qG*GDw1F(YEFZy$VlCS8Vc7fM9)H-S?-N^G7t#r0~Ze)z$ zqRTXEs#O;@-_mTM1+(^Vm**1^ln;lRULH0?kZNY&Xl8M^D%aN159C^J*stRr2ZkJx z+lpSe@7?=0W2jHlZ!f*$*bA)YM~MH@>g`B(RCA%=@jff@8Oo+MHzSJ6-Lg2Y3j<-m~sIi3?T6L z()(TS3jGzPe3XYD)tm5d+_yF|qHt$R8D^8aik#E##yGPE*Kz8I+Jn_xn*FLdipztIYIn{n{; z9EboEm~bmkceb9M{*}p(I2cK7IVMEx$yorM#*d}f1y19fLJy6QgAaZOj2Vg0L1QB3 z*NV3c(hoHM)(n?^f)|lZsx8B+zFO_co!Yl5nkZyJW=Ms}!vh(UMEsePTKLS#jTh}c z-t)w7>XmBbtr3qk_8NSoQADh!72@)rN^{3LwMq2LUlU@H`eLg*{S`B=1?A@?I~U;K zqz5GfWpR0=qIJX}dsodYLPipO*-d0RCZX(Ge_LJ7pZ7wUvqft4Yo`3pw~!We2_-Ie zVq#SCvcr(7F7oQUnhfQ2TQC;i5Uvm&TVaW~zdDvxA~&yvkljQrmuJh}2^yS2O&bZ(zIn1tu~ zVGa^#i-61|kt@H=ff|UzWtLX`(8j<9tQijJc^MdWN?&Oy%^7Ze`TD`zZo!`~Q*2)! zofJNucX6!M^Lo?$eY0x$!W^2AKUu4>sX;#4g}y>FAM$OItQv;G?i+N>)^p2ln=mQm z0meZ_Lp5r0in*;DJI(i4PhVS#WUnYL9lu;WI%` z6#vTB+S(Bj*&`YVbggV(mLsjcl@iletBuHk2jNEOdG1AHeCKIeqhy-pKFcY)zR~g) z@J77ymc-Ts@3TwbU*cbNFlrY#Q(1&o4oZs(uVz^wYwG#B0Xtop9E9p zyNZi(ZW!7A<#s<(`?c?sb3t7F9x0uXW5(`^P{~?pk{y>#ffpgZn}Wgh5ML|Z2IOk^ zbk#U#En!2h z3ud9L*xq1!_f=}z9((2VV<5#}L09xIkv%Hl-d}vFRK4C!(d}Ci=#+wYA8Ku; zEJfISn^DNeo(`^%(Qd6)RYfoMY9YURvlM4!p%k5w!87?6%MnL@nqsdi%ZT3XKr&8E zl*7dak@y*>SYJoR^^4guF5TP=X)c?tRx9`jh9eEx=|;viip$)7e0y#hIi&Y5b+d#W zjQ_^1+K&IGbU&o%xqPFg2_(IqdieN1I|=-&vzEuB?#np++z_3LAE_S1cfN5i|M7yW z2vkS?r^MCRoW+d`BEEmSCFki(Ly&U7nDo4E6^!BQN!t~bG6M0yrvE zf#^koe`U+gYeC zy6ErjfVp0{RCutR0~_b&e@0(GB3$VSUT==&W!fLQ1HvXo(n>qqHY5Dk`OXXl``&}wZmj74Axra0T|NmbhN=S+v3x#qj zr<{cxXATM3LMextq0AxYW0H{5WX`gg!<-s&R?Z>XW|(8-Fp|`UhWfqUpX>ME_qz7y zuE%rNbJz3ndcGd_+x?zHBI3$0qZNtAU48hiJ+@|d^*^d`Ar)0*%#}(rOgKU(vDcn_ zFMvpiysK!zd_5rN{@u+K!|3jnfA)W@bYyZl7Q@HDjBCY|B`!@dt)#r;@#%l#U8p8F z+nsV=q!y`Y+*}R|`TSU$3NN39K7OKP(rW3+6KKEiccgXiH-~Ujlj`@y71`viI^ zk#Zju45xAEFo;+c@XXZ1K9k}AVRUqW4;FbwWh-vp`ft-B`yPr7$fuE z{QEF$`J;*-5)rXP@wE5UaBx?M=ogw!Rw+Q4Q06sCQ%w&I*PU56s>`-)<&=*aQt6!E zz0Heg+mo_5kiKNWFcWy~X1chulI|>!0%}?#hPl()j}4F4qgHS1P0m-ov9`|sQG{BE z@H1teFH-rn3lAPPI$}B0IAlYmwz0_sSQNElM=}7eA+zErx5`rANE?f`SPNn$#X4o@ zG6T!bx3xPc91boX(#N9oeD6<0G5bCZ1kcfRe7aBW`Ii+2{PGsa6{u)yd9iGlK*#VF zKixkmzxAu(zQLqH^QR;-XQ}Jn+s~A^Jb2JV%xT*2@9o+8)jmAiH5!RHqFMc zuX%2Vg>ix28$=he39{ZqeYRh4@Af41UT8?c+}Yy8srnCY*f0T)Oxj)j2++H0 zrK`kBo8W{Vmn@ikN=et%%;zf%P;p>}rr23dioF)`9ixmyHeS;e??&~8i)M&_iz{~g z*=G^^z~T&B{4L9ylzw7vZsWsgAB@kq95T0NV_%lzh@Q9&c5qp|m7(t43E%zowa^l) zR?_*SHLpHUc}QcWrE~r^M2B*M$TJR!Z>mtZ_H{f!=b^}t*pX5s-ywb`o@Bm8feb*= zV|iwis)2_ee6gf4#mb|0Y`+b){g2*oLYTNyF=r!07%G!F#3nb0=WC9k`#hq#9A5X} z?FQ_HJXlOQ4zn`#cf{akmipVK7`%FUW=-WO`NJOgG=tOzm7aO+@SJJMX|5Dav0lLQ zd*5~GV!Jc>`_p~bsE%}19SR#P3C-@CHo&dXon3bqAOxaTUyFd!iUTVnEojbMfNeMazDuqVqNNtt%m z8CL(gOooanj5H{#s^kgu8IdF%w0VzUzWBS_8l?DK3hU$$&bB7K(ar;51ff2= z;AbY1Qr~gurFcb($HY>%h;_xYWWX1BjzUt3rw@2)H+6ZdkZKYC+WWDD*jDX$%(ly| zjf&c^OLO7Fc&C4D(-tE0GB^5guQ7IHcmTl>|2MVKXXV5u(cYdzFvw>Xv4+l6NIS&z zR|40xqY{4rlsx0z5{M8fU7ZGSwlYdOsyd)G?&>q%b_k z1+NT(6HeD~>WF!K&PJ}_p;KUW3Sy6Ltffg`}*HFjk2;Pn5ifT?P7AslK~OabduAZ%(AsIoMV)68KXM5U~7G< zvpIJaotegytv-3-oEU8Gh7;G=<;yg7t*V7jHvfq17%`RFF-el@R&ytCs7ebp4&24dttf{u~lI)_i%QI>h6}({w&^Yy8=KFXB%CxkBaZKo#fyxyBT}aJXsTGsF3*= zolD>gw7Aba{EaS}48PBKE4)$qTAefSWoTP>{>;6+7>fErB}IgL@Y8~%MHD!rP&QLh z+G3eM^Y9rw@%x{(!6!a~b zG%gMO3_1fUwR~ID^1GcCKUyj$IiBX26dk$Pi|{^47N+HJV-)V$!5oFmMG~k3%7LEl zDa|f8yU{(R+F9L;K*C z{zdt#C;K_^@AcoM{%OR3vU3Yn65Gqe-AC*=^80SIGsG^Kh1`-^({^1v#=bNr`WbNb zv~uYF9DrZH)EiSgi*;ynM69gdJt8tzrHQC&+S>?{P7C1~uC2f_ukC;_$938eP|0+2 zt35Xu7{9DCV|WBD_PD&l56O*VOD+p~1USxA^i2|!$QO#hs1g7vMP%ctjnm0b{KbuL z(wmgPFGqlN^I08N6_cI;J7BXIcS+V4iHm5pdg9(1*=h-G#FA?6cu;l7M^?|LA(N52 zfo}^TO-$!JOF+QWiJ*zt5&5ss+@xUQKkMSM$~41ES=rlVyN@Sc`lUqQ$JpyuFa%p?Eb6^6uZ3zv;ChDL;=LFvcJVrRWw1dH~;CE11&F@$3SeC3O0#X1XuO`SX3*#m-b5 zDhsBw>#>t2$YQY1nu99L$g>2Qid(NWm7RoWVFZguE1Ts>$)kqO_5m*$&CDBt7o7Be zl|r6vyZm?`(=b zdOol&ukL~Fx%?hX-01UL`FTJJA@*gF%*IO6n~cC&E{HcU?KXGXw!K_tWUhRH9+7%n zJ@QpJv@+D~L2>!9ztN4z*s1<&<9w`Q96vYHW*%sBNX=hhP4uP@x#zl62zsY8voaIj z-jG?o-O^7SY&}e$qziuX?fg?WyyCV|QI-zS>)Ea2t#t1{Q`&-gVjC`b7FY0aZuO5n zQ7k?_EGr5r#ok|!=cf=xB~GYIffulGAYqpL279}=l=5y zm08_0#mrw$nM5icJulG{4gOHFSAZl2tiAyWo`W?0?;+FVi2orK1VGm`bH|b~D37Wd z!2lRd-E1UG#7L7vd#sl>QwyIrRo)}HR-)Z5+POn+l9y98j3gAl(G!asGTjZWWExC} zd|pSpBDLwYXFGU!2Jic?>yA|txHk-kiB%;0o|z9E=7jc1QI5DWf}D`h*kV-!7i0N4 zqC4&NYgzXL?Z#MGQtX#rr74rBHgBo_`cE0Y;LDGEe%>GFggTj+@AFBkfpI^I1dqSU z7`^E_DUcR0*S3nesADb%F5}VYO%IU}Nnn+*(ivk371J|JGejb{Z$sd1xputeKx8d`D z04)1@enaZ5jX_GGR&Jm)c|k`YSW{-OX^mF);Q7;C2n-wCITptuqRBo+q*i^8_|E1_o^yx>k%3q{&eMACn%v zi2rYR)R>(F4yCg|0%cXI>OReM0*e5sNuYHm7Xw{|_Is;*A0KWS4i zA)ymzD`oY%^M*o4C`V=wLSZOu0+QhX1^uSU)%wK0{eEvC<`~)SX3%ke&c>-F_*CdX zXeCegHd1}vlX<{KQ)O6aOs&4Tj!f;A&f}7Ja&F@_kanVWc$HHV>U3^{bIfmR=Mvl) z7d){1q~9F`2?&86E6NbR;NNx+`NKwMN=H_CyY+VolwRG|6cWkSyigi z|CQvi`{iSWoydWc?%1_i{`YbDwApQYE{to9UOnZdYC@wsqLFahSs>O3fBmJZO#CyM z{QLF(r7QFv4-u2RxHuJ!E|ViQpCPH!Qn%oi1zy_Et1-Zpq-oypG;u7xwQ*d~tZ^P+X6aexxh=>3fJ5u*wPCs~J$%X%i&tM@r(5?{ z;qGsSU6k)-kU(}$P$I=lYD2Ar6WO2soOSz*Pv67Llz3Zyo-pqZO5I}s&__ zDOk+jt9O22JUAn$RKh{yJdA#qR|X<~@~f8$ZmeHUcKu)pa!M4P&~tT@jbPQu1d;8! zeu%{y`L)pZ<9@D*L~B4aT=(MEY+|Bjzlxa*bkK1Yt@l)RpF6AM-+ddYCE&#{BmTf0 zLrTmfdRKQ!JuzM4&_4$c|B)CRl1^_NbH-+?&sC`(6;J8^OY*LzvQevcPdFV_05dKk zF$`G^s|N@OqWf93i>uk`CfsTwXAN{9`W(`3jg;Ws@)0{O4%`3^Py^-|t* zL0p4}#>dYr-!ZHG)8;nDA}a{pcE`>B?ntVeVH>Dz@nd*55@NOZ;8$*zuB8ZX8~(dJ z1&X~h8#*7nKs-Q29*1tr?Z)g~)Crw-uZTonBlodqN1=i$jl(8<-_BMwJq`K=@t2$k z)u;b5+K_39ib~T{>u3~ec3|@9vCU7??O>)kz&UqM*i@s7v?;<^XbwOPRhnhRyS;^cRH9p%7?Kv zIHIdf6b%l{-)%cP11x`bj_A}Hl-gS4V6h2>exz{ZfRf36WYe<`QFg|{bK;*)iTc!j z1)Z>NvdPzMN5w92hxy8gW+xcKl?c9Z<3?Y#${irO!xn;g)jpN3Q(WM(hkUhWS>{!% zq}9>jC$_*}zzE^8Lw9%sx5-s6)5qR4QAps-hI7C^sYGDVY><^z)2pa8kN}-?3n~r!uTYBT4Y9vHZ1|vM}FXo`23hTVOMy zZ{PA5fjFE+Jl}*%sXIw5x*s&{zF{ens8!YBZBGPom!(t>tlSY!2(67XDyi8cUpXqV zEKA(K-s*5BawuN2aLpgb?m!86YrVb}yBGTGaY{uC@JsBma^LR=-ur|^Q*Ud@0R3=~ zki>XDYo3Fb57QHl{~&5{Lib2QUl@^u2%UraC$xz)(Ycfb!5W zZo<;j2>cOaLG` zq9KsV#V5lGg-v0(O3W^^87aJwlMQjYt5Y)c@+eT_Z19!*?-k!3v(nswzGja9N*Plv zoqyOQcOz6AIEk)x?;N+}p+sqlI>DU?S0)d(w(GsHIg-$r7pRa>Uj8N|&kefV5i416 z@S=D^MfF_bXy}^(UiMup^(>d?DiOIB=-Y@dkkzfCw?(vJ#TkQox%$vrYC(V4gm>B6 zREBzE6Aqt^60mu#wtc#U{8Us5qTOLbJ%1MSRaE|LfAU+|33>6<<$#OV$;Z=*XyQWR zHMT$aic$UW#~YSwFCp?K_-192RtZqAv$)L>KYaxeqykRV{fr{$kf&N_P8tZMCOq;b zNU!!9$C?mDdlD1K8mITjqNmliza?H$MFwd+myx@uYnerPtW{3_OCP<(4_3x^$?Y@= zruiAQEqvLwuNp+QMh+8IDOt0p09hm^!Qj|jKEFr4D1ZMu+$&X?x#ph4FGIXKJaJJU zchKE$BZBJQ_1M<7y2r~Gpnp9EQrUK^kNCOE9%8|JMKz0^(cF9g&Bd2o8nt1&mDy!7 zX!Ep%cQSAvJ3kB|BlOAdk574oe!tE>fReH<--4e73#& zwq&@O7%co*)bW&|uUXpXQi}uYZD5Hx zJG=#L&GR78kJ7nSW%gTpOMPj#H|tcXt32ux;fDT|k|{O&sofXZqAs5^NWOA1^1Tkb z?!z2*SjgmDx>|SH9cBU(@J;PoEQ4DM58A#tQgS@qfvv ze&XdG(gl7`NM7{A&F(u3x!o;8)!6C_EYhfPjY zyvvIa*}sa=Hp2v)7SlLnC#DOgqu5Pi?L6d zfFkX9Ut&zPuLi|OaNPP&)EXQ)&cu5I@8h4THBAl>qoZWjFu_)5St6sS#{jTsB^;AB zFqJfTAslqUD$!V8|NkHR(JZsLNrT0>@QMPHW?X>TPu4jyeEhZ-> z7<)ZI`F7@21ywjq?f5X#s(L8b%4xfJF8lq|I@3>T(-@@;Mj)K>E`f{1^~G0Pzu2Zp zahHgt{?c+;R31;NBRXy0I1R6Mr$)DG3|l5ss?>W#amg?mg29DZV#|D=Rx8vmye;suu;$8bo*+-}p>FA8#pQD+ta0d;1gp5o|-u z^2?x2d5cbAJpv)ZQ_%*i9MVqeo2s&-GEf_>4N zocdKNhc_*#Y+4!l_{$Qj+u709Z#xSvmQjGX^4-h%efC}l#Fbe;99idEHmqCaXlE`0 zNgKlxgcxq_nDJKE5oGD%n_bbD#3?MUvU%iQ>jZ>#2gkAAsHB7Ai9asc#@ z<|$3^(f{^@c@*dz>NzZLo_F!PPnx1hI)vMBSyzp< zvxj9zB2!Y(88%&y)tt&%fl$$nbIhxl(Kv(=R1s_pex&<3m0%ASF`cnt8j`J*5aK>n zKwnEHFLMiez96On`Gfit0p8{$`rxFWG5TyCI`0y`loCYIs+X?rb;@oEuB+f}t{}8C z({T%>s%q*f&3CA;sXCM}%ZsC>S$|($LhL;tiTa&_wduo=3}{YMEaG%c1{OnUR@W>4 z6^NmGUZ%-cgLyOx=$sTkkX8z~3M}mis>0JH+)~dy5*RU5OAKj)`fU629x{GdHhS=d70%RV{v!;x7;BCb+v;j^b`#elA>9& zaEU~pf^GE$VHWP%>UXX#a)80b&qhm@ot-a6OOJ=}TvLyB=D4JCZ@+61q z6{_m|DFB9!Y}$Atd!)hUdmO%4rEJ?Oe& zDi8MQ5ngYKlGgN|yFr;mr)c7eq)F;^_Op+lW)otWr=w>%KA=5yY#Qo^V zX(RhC%1Q2~hm&4QcY-X!!&zM!Aj0753llHu|ld>8^BBj;g63?ZegqHeeWcI=8DJSe##g`lEk8 zxTnua{C-uIOY=%>R$Lgo8J|amJNIv@@sZ8FcJ~{E@gdvedp+OWB;TDzrMG(x4*yNIlfu`t?l68!0yS@ zfwB3;tv_*baZ`&Mv+GA=%lq9ETfe53HxEt#Wwq(0jq&+4O!Ke7*`1Z0?9#eHLhIPZ+TP#U<<0rk?SsE(HO(E{ z+uI&~q21lxzvou1AK4aEw+zhgbo37w6cn!S|1IyF$}Ff{SlwxBYrD9(c$=8^!1&=f z;b3lMYybGn%FfBc+V;oj`qb1^#plmQC+D^8!=|RDdwsPs*__Ms_#Lz9}?+FC3jG%jgqXh=ujn2DLC4?o8zaQ!Xn+w}70*xV|9 zdSz^uu)g=VWndD&u(N%5y1M(<8UB1~^|0gjrn0KW+w}bA-qHH5;l7DA4Q<`njN+lW zT@b(E;K+DY_jK&r_uqzAA3He{whq3u4lZx*}szII@FX=6|Dx=>C1_qxI5ndOb7 zq$F9n+e_=aE#27u$@RgREl1e1sm0Z{v2_L}=H;C~KSoxo>zW5gr)mb4+IxrE$JXZw zTZ?PE^DFCLvCB)_f4YCK!abi2kI#Ip>-&f)AD>yQ?48GrP0uW?{hlMd3X9s>JKQ_? z(?7LgW^VZ=>(koi&dlom#NyW1frXW|4P#U2?^!}penoV2^x@I*n@r5`+*XeG_D>R$ zmvZ{|HO+%2x4tt5v9G58ogt%^(+5p850jC);3p}}ybhg|V|&fqK`j{?8r8g%QSCoT zHEF0m`%gWkeQ)$v-`UB+30M4F?IgviDPXarR?9?x;&XHCUshYszxH1YrWj|+e;4f* z_wS523{fXGH10O+^5`oJ55OUy3Hdc{UO8hw!oc&(zYV*;{^bva6tl!g+!vxVeWS&( zxbwz;4oS1`7N{SxX}juc`ls6HQX!w`tOM+&B9kE7vnbtsayS0Y+yy(^+`k>GrF|WT z5b`C@8*Bc$5gb0zrMDefeQ_>kvss*YPa1|!Ti+BGmk)M=y& z@b~Hn^Kb9aQRL=HJkE~kBtV&GZT4$FxZYE&)$kF|TB~f-K*4;+E=v*V1}K%pr!CQL9vF$`6`mnY8p+-VpfCkE?5Psd|R$ z5d>)F^WS>)VR9;8HV-~~;^s(e<(&vwm;Dq1zaOjHZR*0?qoNkL4s6xAx_HLhFLjyc zndgh{kO`V_z+3vuU}Q*H)}ppYPVNE`m%2M~m!T&y^qdnbO=J8H0l^dCwUY(~mMDVN z=e=0(ez43KO^qvklq(JM-M0AjAd;)7j6L6fxEB>Mr!r$J&mst+-0|8=&T97EM@x>} z_&H5(9=;0>`osQyHLCE2V+o!-J<>Z#>Qz6UM!diIuPSDJ?n{xNY;~x4_9ZQ#BC34| zW&)Xm%#^t`;j<`Q{RhX3BY8Uqh+1ayaLC}6*ViTjJEm(UD!Fd zS}2qHzU&jPpEV2XydX(N^4}SxjPf3d^Sk^{wjk*Z)4O!`84T{s9UZyGbPzioBI`7pSe_;|92^aNLVP%_#Cf=ODVKj5b5B z?VRYW{wAuXh-1Jy-=4oUs@SC?Hj6Z8CWDr);%(P9a{Vgd8VG3S+k&c`R%=^5AEAwjrW+?50q_G>&7cZ^aa5)p(=XslU=&W!T$DNg6(DPJ#W+p?Ua5497709VgM4SY^nE z4D~jU*;Nf>)>c?}rq-u<2n)cKG!Ci8;zC5BaJoR5nn=Qf35|l86TlM3@yu5`782l} z=-7C_s}mh;P74en=z*}5Ox*H0uNtT3p+y(2a5MUl2U%&X0`HDT0=SEKHn_Q8`$t!9 zW_XJl6;7py2I;t+tsz8*9gY7G!i4H0ymx&BkH%jd_i8g^IXgp~47s{FG!5Ci{WJ$y zAj#K@>0DB-@340Z`VgP#Sf+vZ^2IE=B;6y+x^Nx7X5s)s#)*>vLxw@{J*G`?`e}K5=5zwctU?l)Lwnqt>Ju9gc4`Z5kqMrqmu(%sb1w(IG`g*&m zsa41PrU1cnRf@8f!#EnP;nOT`u>x99Dd1Tz6$tq{0Jls~Yv*;LLi`9V34Jrh`+hb; zM0YyWdnA&&{SUSx>AsO_C!OF+CkPjA8p8=xMD#%~Sh5t0z^#%-ugQ?T;Zv$C)^~35 zAU{7ewZuI>Ylwh!rBucGKKp~?L(t!gh)n~P;A`bKs|LxF*F(c2{6}VRbfkgTq)ed{ zWN02}+jeZ`zO4@QA8AknTq?S?f((=}fL`G5G7WMyP)cwltAG|i7OS8!l8#P%2xmEU z-y|~{X%fEgJx!`k@yLxMhO7k839=Tt_4ngFQW|yi+tYI(T00wN%BkBebtBRt}kAr1g`L1Ox3zom#`fMz<& z^yn0(7V1lu0HyaN>)p=Ahy)|7(#wWylMbpZ5{JFy$_N!r#u_cyXPsHuvnFUD)i3k;UJtGR3Pet{sYPn~_k zNGJ3++=q*0$&H>_{;fs&dXh0BECab^$NRSK8Y$d!6lK)xRDDgArRu-1McX6wp_)lo zj3kUg)*?rh)2M66Uv_E8pEJT%0I9DW340Mf@YUAm64*|+Oo`{E+Vi|%A*kr^(5P^^+KUwRx6qZWfR9Ogs%X*Gi#@eo$Kn!(a?T}PagQ73 zPIvqEt*TEdn@`TuPCVC7OxQ&CnGZ4p#}n^fJT7=obqcNUyU;7&DaFARR`ZI3ZHxJV zVENb1=-`szzL#viqUYBH`vbn@dp>DdFP;@lX+c13o9$xN-PD^hbRAl64W((-QV9r=dc)3 zB<$^9_cHhK>TH--(DV+gVqhL)xP+M_$&P(VD_qVm z2IRFK5YpX7O970*^&025D0Sloc&Oou&viYxeDIxUcr1a)Y71lvpMI_I@Cu*oqfE`||<(OD2fb zqnjLQhcNL#H+b`fPxzK!+oAy7>(z|HTie4_g9|M8GL)&X8#mx)*~ljzvA#^$G_SF* zU8VZnFhS3pA|7CAn0EIk1JW#ihOmG3vJGlxW%ljLPab%x1wVRR7e4CY7nyAT(v+I< z9YO~1l#hZuC{0GeJmi5J9GVKnx!zPph(~Y~b)5LUkp}{|V3L|eq;4D`;vVZAU7+xF zxUF%XUO+d+Oe^;gy4O0K!Nj}Ydz6yZ^DCIF?cpEEJ@RP-4Uq>%#kggU5Hmx@eBP&M z)8Dk7Gx#c8xhr}in+vJ!083mYI|k;zylN$A!kYt9zcsNni>cQC%o#XjbokzP?_=CE z&%i2YiaJ&}1J^jro6*{~ox0;@E1hYb(_*vH!p zZIeE-4!zYQ9x*HtPKcC!YlJ{Bn262`;etFoRUgvk)fudn;5!ZzLQi>A3*s!mFIyK% z+uNU&C_IlUi!JjWbpqdQHD!Dc&2AHtSBrm`$_}qh2ibVQ;S^YFzxKbuJ^)@B=mpCZLA} z$^g>8eWOPlJ)Bew5diJ+ecIS26#!Jfe$9|5176Z0ipsrkJaNU5#{jI}m7-vDV~z?v zI$Az_T}fCPOy&{bi}UukqQ_3#eb1I5_b}H?Jw;IL8(aHBMP$KRMf&tc)s;gohcd_e zC?QoN@-lz}`Rq5UZ{@AFOOe4+XI|{SZEjnoM(=og6y!d!Z7k2sHB!s=^&{|wZ7{*j zM-`-i&COl+VSJ$!meHn2IUt9Wpk$AcByFNa3o&0StDu02o&uUvWC!=Z_(stnXr(M; zBJ45ia@^$(G`w;Aew%h+?mPKpOI~D*CLSl`<~hij6kNF(wbA<`NFI^_&68=YG;@;n z2@uBh-lR><6AMN|F4g|Z*_58L+I$N3tjWQ5R`*fEzZ63#kRj{Q77q~h!zJ~JB*k}y z0QXtGG{i~!j_y!dIX1L_Xsd-Asp?=#8CT+^3meUw5 z7J(&IhFcbCD8!nH7#o@Hp!IFo$C^v^71Tu2AUr@^Cpx+1oFhz7oEbz*Tm*!0WnEnF zw{{*Vw2%~7%=P|^1QB;ebL988sN^tRBU^dEy<6PDN(2SVU?aXa0@A;)uME}!X{D+g zVZYpf3$R7O^5o%W&uo6)0kfHjK(OV8s9(=Q%&vn|@EoPFVn2|ehJAOdFT=gJ@Di_d zjVAZwWx?(xP7QrLKtrKe7Vm91uo>MG6k=coS~+J;^KXA!7^|*Pjo+)z0zY6vTDYUK z%0vOFQdaK*HV`)B?~B`NUFooYFE0l%$``pNcM1d4^q;?8L^z~m=dZmrCX>AskhoNo zsA;g|1RBynqxc)RUlhn`0Q{*3^I^F82=l|_y*l=mq6gQp2M^p5AqhC+C0eOOT;RZS zk1vAxN=3m7dS`G0c9UhP#^SfyHQ`aPinsgj(utxU~mIp{xY%aY{-GqEVLxR?CQ&r z_0zS{MUNS)qzGnPO6351piE`KlV+)OSTa%E6G`w-;++D>YA=sk-h5}=#n9D*8<)_h z&8gWZ{eHOe^t+LUOd`5{Wiev!ip6Fi8D6#vA4-3{Z&n1SM8h=skOck*zv-_@Ohk>} zP@;)8u!;{^Q zaX~)6GW1t=e)s-0*wBN}4yv2zUC>@eqQcZF~yTAfk(05XsfB{@6jUdI4w=w%X0Xf!Vf5F1TPxXYUDOQ9M8!7I7aUaMi?p!*kc2IG6(3ul- zVaT$4Pw-98Y*0w6S!%>Ei=#-TIFnH>Z4eGu;gg`#OyEI+_{}lEE75?9bv=(;*=%r+ zpLT8@hPN(!Jf(ogXxpl(Mcy7ex%0%RHmV#?G$3mF?}7LC5#a#QgmIorBUnm%m9x6kq(C)`p@v0d*H@iBW^YEdc^IAp~?hRbX7dM&3>R^=oHu z$#ADq8`%w~swDN_N~9s419E1pkx!|f_j1Qp?ax=K)7;EPXsW*{%68^yt9%t;FhUc= z@OvQ%OF6LaKnT*WOf4lJ__Zj)`);VI)xuIA`@yg?p^w6P-y-3wvn_?NC3*Dqac6EO z%J^YB{_ybEhh-Mp;q!P#>@yxX$N9+Pp94NAhoN82=T_E_kz1N2PxoFL&Qht? zA5kDzxRi7+RoJ%V8tn)fZzibEWTS4cZTV3##kMoKC@qJ-(Jp7_QUIIL7=0Pe;fx?W zwVFe>EY%5A<-!aMK8$q!Xr(pA_dLq1ET4MU;TdRir>2>7@HNA&cgc8_#hSWkMwaFk z2JYC7ODAu0U8=kP_MV^o2~c7@v}LSbwqY-I0ck+NinzjCA4E|$Wj|@lKG7ME7D-js{R?P)rEZJT4Aj^15CvE-bG1cB?8wokT6@ohI{f37wjAaf+B8Ne=7_0!GTPHDxKeQTxpR-Ow{ z*YY(`aSWXZbo&HI--s1gp-JOTdtjn3!tS-K=|Tpz$zo3zqe9SHI`wIqU_a#CcaP0w zwR)rB5?zM5+^!=}$j!a9DoRf&&JV-Ad5+0^%61=Zx)ZGfGjRwwzK>Eys1h>@P4;3Q zPdX(LsYd`9EW)tuK48qP`MUaXaZ(8t2J20I&xW{c`Bf_$yG8%tXl{l9cUsTBk;)i{HpyB&k z|KlaX2d>f@*BxcwOaT;Y7*!R0Y^M}~DGdHog7a1HuXFhY1jM3F({2De^RlOS8dR`^ zFI43AU-#4VY3ik7NU5<%O=n4RBq2IsxOY0_W!S z0-a1lHN}s?%_irOsHXyJe%{joF~t1w7Z>#~(5<7!kh*8j`E8Ds7*~f}pzF~FnBU70 zOdiYA8cdHlKS;?`86+Z>L8``NB5IpYD@pxFxSuVcl)p}p9`9`%-}AfG$iIFRBHr)SRudDp;*H!>5zDx z?d=zNhA<1<+Q*eUKMU@Dz|nXL_gwirM}yaGl&%{OJ_!;&R3~Gky$aA>Riid0-~Sya zcXX@y9=*B~Dmd#rbq3pND>o$-4tpA!4bs>0)iQT4wETOr+^;zz7WZAgbUACYS$poC z+Ec-%b8Rl95y~?$4^bxqY?Hj^1Ef!JYfA8OPO`==P0;DHF9{kU!BbMw6JW*^^(+LQ zLN_vl&hbHE%`>5Fub1L#C>OF(Ue4mU zifP`Mz3Ec(08>VFQ?m+rQxlgx(G^vOyB)G;=?#v7`Gb|IXr9i!$5Ff)R+^q~@$0*K zhig)=p#Dqx5uo)N)=t%i7I-v#!dN@?Y5W(18-!^Cl&PAUzQKxqMAQ4)VHuVv7*y~G zI}$FMB_OU`gwM9*^M;fzBn<r?XEVNTE zjWjWxg=X`gQy+pJ?E*Nj=_wk7o9_A^-hqz3Z_C|vU!rr&eXYIl--l~2pE~SK_K|-x zFkFtkeg9^{ZZz}9GlQ|-EJ9+9xR;0b@KdJPeUi1s2+~JYiD*o?Oh&TyBymB^BT*>&g8xR3*%MG%|Pax;v=hA%p!@13O4Ac}QZh6<6hi+-#q+}+QlaL3` zTdqPkES1_UzbUuBd2TQArtA0p!ET!+S(&{I-DqhBTB;>aM!Tbfg8SU+3#bW9*Ad(c zW{O?JZH;*6Wj2w!!|pT|YaD(*@JZZU*49kRbbNfL|MhMbE&E&mMk@+`(vquqTqS5A zBHp)~8ZO4=Y5sh}5=PlNHC7Sg_^qD5^`FT<^8pr(larOS@#`R4v&D#kCFQK~FQS~F zIv&`Z4LkjUjoz*A^Aq}!#PH|MIVfN?^Q+>LW&WX|f~>zpMb3U%sJP;2dsXf@mHu>=C=E)Q5vBt05xrdJGSF zzJirMLUQ6vgynTdEC0w3)$3{Kj7tg1zCz2tFA9b8BqCnfz0vfI=)9yq zPt`uME360=`=ciIPe|ao;~QI!7{ibMT;;UKnu+Km(>1eER27C9~AGhvyj_0W%aI`YDj_-R4I$xjT2b(+LN?1(|N` z*SFo(UZ?dkI1+*C7T0Ph&yXyj zG|ziu?iB~D`xPiU`f|RK&cL@)v!i0fPY!1UGl}Yd_~>)8K6{q`(q5+@F8(k0i*Xck zgg;-E6~4yI1zLE;h;07uVnZA|?2LbQ(|?YICQ792tjqr~Fo3pE!M^2a$!0WRCq~Q& zs^Em4cu}cw_{i)+<~W(}N=Ng8{(N8dPCYZ{{_2bUt1tVjGQf|G3!k5H!{d_Yn`Q@b zuzhW=4Dqz@el5{TKpAK@Or^^e`O4U0QPZNm=c(lD*^ILu3);L|SH1ddX2FZKg2Yc{ zWxt{DP~VxEbdc3wAEH;e+mSd9E}s>ufFQG%t4X&AWAeln{Wr z+?Evh+qIM^=g@G(hlaua3DRg;9F&$y|Fjd^#n)2mU;R?!{GYV;BK`*I)P@16{(-2~ zjfr#HH{T4d=z6rAm!qAEij5)A2Qy&tw4Z@gF&1EoNLihaape}Y*t7&Rt68c`QC7Yv zz*fG>3@j!VWJbX@DdMP1h}=lP?v5#{t^AM$sRWkCZ4J7?VG^-~mJ4&_N5EY=k|+(d zeE&xph@pg-ecjO24JSA|zla;a3>VJIJR$s-*D+}i1GkGwx^L3AZxqk_05Cb0tkjeS zyD4`xKO!{#Enu6(n^HW?N&4!gv_|WdffO*GCrygD7w)*B|0M#KuzqBe&my$}B6$OF zQjY&<5*M`!Gm`=yNit?ea_{O2ucNcjw}HFS5M4AHZ|9g2UVNJgL4AS?LdpE8o|XZ` zip9pwoC4b3Oz?Rv6jJe37Zd*XA>RfB3Y=$G0~@5ry1zbKr-{yU=&$WY@w~NAldpQd z`Y`A^C-UL%5L);}=*0_aBoeu!ap<@A+r^JlhiZB!qV;azYt_@iyQc@9Wx%{32=pn8 zNX<_FB(VaE?$Xi49B4@$xK|O&O>qMSx}FFg)lNnq={+0B0$orp4S4|!_B z(yaP4{UkHCPEnkEW~*lUwFvm;>{~F)`w!nDx~guHv6hiiadV&0(PK+DpxHurp0)=; zzdkaHc=Jxbo9)VP1p4`7HU90)B;T_Q#uJ?f;EN;rlaCV0y7|Y{s6Xpp+sTetQs^+gfD+-7QUFH@;6aP`TZTCLU@o%@Mt&%S(w8M4Dax2Etu*xQ_FkuDaf zx=E4C^m+Wf!tEl`%P7E&%P}XYh z5@GRDuD#>sIPCpN`AsMCXhgR+JvFv;n`w<^ZpSNjQ0JRSZm4%o0)t&6e;()2l|4~X zcuKVYY3JZA!c9kBi+wD3dhk+0rB;^j5&gpJ^Y;4z0(8_D+LbN~`-0O8I6E4?Khy*h zrt{T~B=xP&afH6)h}?<=NzyCUuy8GHU2!fX%-duYB}w-mKdwC@gLjtx(sCaY)9w&8 zKGcbKpP2xCV2k`59_FU%XVhO?npMaJvah{>1e;SI`qi28uSo#UEAg6qpdqx>-u#{) z>2c;(+&_Ww#Cg2KQO+G9Aff0Bc9?ba+s)q!6d?BUPs-H%H(Tg%_sAs_rx>gjqf6V-H_q%@cWK)~_jI#OOrhU*gDx|uP?9>cH(-Pim<`W0;Z%CZ%3Mpt0HFn+ zEO0B>rZKvwAxMoiPy-sJ=ost3H}*^lF{KsTRC`*YK~hsvQ{y7SxHVFYNn3JwQTuN; z_uFgh>ifjXahk2AJGkBl3M!X!y7C`p5;%RRaXX{tUqu*a9_Rzs= z=-+X|PM`OPiz%W&w_}`!SyOe2GpR(J_M~(e_e*kYq`n~!)}8Q~M`1d!eSrghzx0>2 zyPioDZltpzQb_K@-F0_8LWKD zh1>=z7%ooM3rO!%zP~)_IlnN`J{<8(l&{6`w12uoZg4S}`|L`a0z`!A&gd-liQR6B zfSsejm|}l^%3*v}0kj;`z|NaDEupCJmUys0>hnlrN7myo4S>(BIiU|KSr)`SNZPtl z#`42|y9!Z&1^JvkA)8s_G%eDE`w3M2f#fQRA9B+h+4BS$-cp*|2HT*@r(ES5?5gvM zAr{5mF# zVXu9pBKh^XFl!x#Ho2WSIxc{TkwGQ;YX1HGH^VB+-M?ZrMnD0AF}bPL;(OHZubYqa zTnDz+I-_Exj7AzY3R_A;ABRUlQiz?B!j8D7!^AU{uz%C*hxur~4G)ZJrKTO<=pyPm z{QuQ;e#f;hR{oQ9t?zN;iNWaK1j@?qgYR)4yn|klxx}9tpM?Liy470!)BnA3zW1?t z4dWvzse!ht39q`v=uUVz7yfmJN277atzG3kUe*u)7DyOcaec<}PqX|biHQ;$YT-bp zE#t=p*6t2*mKQf!9GZ?}EW>*@J$*b#Lm!=3Jt9|fd`TH5eiiOp9Oq3u!}ueusJtg{ zhaDK-eXf*OE zg~zcx%YU9NJknW5#j+gN*LZK4u0hv!Hni9N&N8@=7ly5%D4S^1{Fp9GH@68$pZR{mxzV@ z!(z01~ zi?RtnQU9S?lR;cW$W6_bObVE+3V>qpdJ>2L+<;YC@}j%RC>au83;_e~J(wq@$sY-= z5qz2oR$yRVcB0g!{69=O9PCMjNHMlP$@7scEj7+SZim2)2MxN!R&j6%aQlH93IGMP zkH`<)%fyvD_h5+J*SGU9I|DsM*<@?OQ$DGK*^Bxb*)7%8^a;8AfHXKxtcWwC0G4qV zE-;`9&=KLhgS&hT<8Lr}; zWP?d5PB*z0x3}*cLeprL#I@jR=qA+S{z%Z9t-K3Y6}EFB_E$7ll3ZcDiB}nK1mAT2 zW#7-dI5B-;$O%PW@lV~9N_p*ZAl!g~U784ImFd}iI0~y;*3%@aM_LX`QecOlY}i%9 zWYLbxSHBxdYogP1i))`hGO=dG#0;7DL;t&(=t!o4gPMQxfasy|;Mv0p6(DPy5Nf^h z?3qzBNIk(mPX=Hfv=eR;&YIxO9(~r7JogE_-o<=^>r5xS9KPG!J88WUV(}ql03kvc2s_3wLZ=jYv;?ougW zvwC~I`$DPcQ;Fv&Q-bFaV;62Ooe&GdKob$ zwlM3NpIRNC+1>t#m4`$S+&~i8Q16t&TyFtTt2rU&8SYzdU__Z$L%dI9%oeIjLnlUo z<|eELOlH{om_)txX4j=eh=-cQFvR`1l`u^y#vajK(I`k9e4- zz`{~gVB4MLl^;p^jPg^8V4k6xsZYa_C=hf-%AF4;$d2gkCNP4x>=QHM#A{x!d4OhzF2|?O4yd{(s!6`cOsrz zh*iAkCSwALLrqx&knRUU3itKKgz7(e*mcP*ivyp|q6X3+UT4wD`BaMT&5u>TiYb}e zP@NrmU!MAU8#AwZ2MMDqX*RI1*ErNS(4TqK`B0mXQDZ$miA6)C3~(z#p?f>lt&itR z723KU6{@`WmQHO4^XN8@kqY*pgOe10}L@;Gt+30G%&H|^9T zJ4k`FGv)Vc9X8PAJw~_qOm+661&rWOUal&o_i;21KU}N2Rd+vcc+Dz{q|U;;_P*W$ zfg2d}SYgv=w<5*Tk=zR7URhx-@PWToWhwiC?TRCOq`!f7ZzGq_j;~IR04r+2TeX`q`1xg#CGviQSN3~o-Kx_oVIaKShP>K zj;F*B^n=a#sYj=%eBL*rQxv!6Z9UhiRj{-Y_FCWPf&{dL3kv_Cp`U=bfx0cvshQIR zx&B0v!qyqrnf>!a^)FZ-VSqnmzN>-_S7=u{Ijx)YNaCRsxcT2}GlLq3j=zw?hM@|L z@zeuLQtV<^(K{ygJ)KBtvZQ#cqh`dEW*kUeW-8kb1?v zwh8wX>4x-YrgBmQ*iYRt`^BbM8Bx{W%=nBE>QWFT#}XZJ)uE;RUKr-(cW?(k4(9?Z z-kle-^$mRPiao}vxrjP$@xtX~NSM{96 zh#C6|^*p*m`a=MFO!4zt{z+bCmx86brC%S0I};GcnJg{^Y93zr>(9KRd#dOXz+Bes z3X1agL&l~SqROjH8IV{e__3KwLFzY=%nLa{THbs8+X8t6F*xt++(ekL#nmQo%=A~U9*fmjEi?T<)vd_#x8y%MmR+KLW~$0;#nTkEX3K8_)6_g zvXHIj6)J}Kmr zTK)R?{9n>@uATbfa(1l(xc_d_$-GoSiUA^9wC;msEbO_Y@~e0L;S)V58}6vsAV?>X zk{V5qzc~WFrsq^Ax3DEfC@6jsG8PG9XiG+Q86psTw_OTGec*4Ze+3MVuien{P2oQ3 zd>!*BaQE{N3#cL+6k{gRNpSNzElPu&Za6faPxq(Kd{h^$$@R~81V5gQhU9+cGkn}w zO{^V250AGwKoAHCpmV$=N~1$T(K($86aK#;3NKqXWb|9)X!Qc^6gdr6%+gx(Bfxa0 zUY6CRK#C`8+Q=z~?Po@RO)W$<1Uro(dY!tws?i%Y2`c)f?(P%8$bBRW`E zL9L&@q)hCu;1f@dl5-$SmGfFnH{?k!)fNroZN*Oo-H@*VB?w;L+bxu8Z#MGX5QyH} zNfXd6#TOmpd<-s^V{$==4*d8VftaWm7^|mO?HdrUvay4(nksck^{)tGwxL=lF-I#k z;&)6WW2mHo2pM8g`P&om>Eaj4>FOFqH`F{c4)Vk-FL@_#(PopCbxuW%mgz)?w$24} zgo?l=W!uCTF9C(jH|o<~F`XS)vu_lAYSS_+>#+8oY*E!YnQog!AvdpPvCn`BUBF$@ z)gcqd<32CR2Jxc2oSoUDOR}kMGs^9$os&uzz=D$wc8T z0@+>7Q6z+)zNBYEVk#|$k9VbWUw9sRH5mLkze>ea-j{QWzx9#^y?#~=-!cd34(p`e zS3wI47@C5}u!*AD1=BSTzQ3Efs9-@Ffoz;^{`NSNvO8i?AbGe*e%*tjb;@|?kZgXt zWVL~GFL0DzhBW0hY4N*P6gQ-ejwi}`?Qi*)PERDo!oEW+t!<9e=!z?;mjJ32eVb0mEjAoJv2$p0LAMtf5kl!1DmA}okUuo0Ocf*1>O)! zjSZX~8XjGXm9i2sGDIA^D{303&m}Q|Q%eMU(qNdk+<&LDcZHz^yQ&Hci)UB5=!QR2 z@o7ijW`!0cJNwgonCJ z48HlcP!Fa#9ps8z&eTV|go~}6q*dY*m;v_cQb|1o09=!;*{{Cu<)WU}IXbSZxc_NS zM0|gzY}XidvY-@80em|KuiVX(=%ipQ?fO2aXk^I+m4ENf({q&I0_iqQ^D)FKiMjIq zbrlFpQ!9KX67oMuWMa;q14yOA{l8=YX{V|1mBc7it7C^b?$%ik&(Y9=*m3?&w9vd` zCWTR9{CN~Fv2v~qHy!bkZA;KiqolM{jjcHCq-`!loKHWJYGY!~t(m3q9>(Oqin@*~ zk?HubGWw*qJVx_7Ad)?io1x+NbVx}8eM#D}&>6Y-f0m|J6c59QH4@VzzB^=qB+ieK zp(@NpxA>zT#cf(__?vSkm0y$!O+>PLV9Km>WNQQ!AvcnZ+uuz-BetIoz~?DbF)~h$ zL@ObYy^gySFpYoa@`{@O8qaRsp=SJNNvufd8hUwALCl@gVEy9rirpbr%^05=RV@D` z-?f+$j%0y`mNzlQYp%|Rie{-M<6m6$+iE1s?1pdk?2l1^NfOsqIuQ$up7@ul5CXzOd*E zXT+sou>EQRdHG$`g3XW%-**nDj(w6BzAxxZy0wd0UeLVX+5VH@=x}0(B z5Ks1Q(y=R{GM3q_N7^|6{EF4>#9-#GiwUTF1=VobFeEzs_|W?2kjwM#;13fjmNmg% zgaf6%mFn#N0;HC&pS}vErYM_a&Wf3}WCocV-B@?g!w%W5y|&t-$LQeTp4BI*pD8p6d=Jzn46 zp7AXK=nQTX)!X9FB!eAY7bYWQ>Q}w3Cz3I+_r*!0_%k*&osjJ%n(-+DvQ8su`nEb6qO}uCtf>(0=XK7_ zq!RZmlK}Fe6o^Tc&NBb&$0xfBPl}Sm39<5Uc_|$(oL)k5wVN$cw8@9G!B&BotmVIx zt^rM-=wr+9@XQ5(U7|-jSYT8>n43e&XzZgjl+G2mWkHIV=9Yx)SZa40j8Nan9G1C5 zR(Tj{dh5YGZ}E33qpGH*^4ETtZS4qewnZ(91gjW{5|8H$4?oRuM18|6nh1c-CLK0; zW<|wpDy#)!&5M%Px-#uZ*G5E9)#N5yYaOb6?2j$Hd1ZB^fVq$ty017sZr@wPc|{lA zX7h_9(c=$!EIYAF?wvk5MwWErr({oONA2*j=n1khE&!2rIr#6P=_B$3Z$oalpO55Hlvmv@6M3V z%alfqwEF$Fyql$1H7{ACVT4f76NnvWjrQ*G5UJI`>8bv4qyKzckr_SQn~=2qtK)ER zP&!Vu!0=x4ckT~e4=uh@kCfI>=RPKV@h`k+n=g3sHDZ*qjkSiS>eja##@vHh;%P3r8Gz*NJtCnci*4i zIlpuE-`O+s%*?r;xv$rC-3*T~&Hd<;t}hp^&3^)?1A@|uGd~NTX4~|>La`q9sLtxu z*`Hp3^k1y1S5P3m%~}s=;X7;;L5e~Pv9cE2G!(UUf1lDSQ4gtq1ar;=&!BIj%@Zh) zw|tG1vK(J#t~+6daTTviskC)}Qgrn6N-vSfurWLibq~#7o82B=5u?5qxh9fZr}-(- zVIxgbUxS;n*yYjlk|dsO$ZOxUef}U(ovM8`Sdm$L9@ho)Z25p?xw-1(jV^U7uR-_e zCv(}Qz|Z;eo{Ch(v$mb9p`WPUGx8f-jsguJleb~g+_s-3SL!J}EsG>lKYDy-)9jwy z3MR?HvJ}rknFi0LPp0zHU-sqxczeD0lR_zU>9ChVQ&c3%?Pc`2$A681>(sX8C0w(| z&r;iZ6v7Nl+~~?R<9B_hh4tw=I{Uf^%EcQ{&aZl4QEks#{J}Y`+|MwY%14 zmG=z2&J=Szx;-%^_~h(i@$6PLqN=giGFqrlyfOU!XJ*cb^MIQ&{6}hCQqI`MQy-em zpqs%K-qcNtoJKE_{|;6_VD`-#^)c~-%1lR}FK}1y4#h$ymuUgY!G(9f9=q5RDpTnL zYZ4GnK`q=juiu)(A{LILsF^5nKbjCzWtSxqjeToki=Vs@W!v|(e?-Ce-s$M{s)?zG z-a|wXN--CWs-t+$C*Twc5U6&Lpbqzf{rxaaN<eKICe0C z^UdEY8px0cK)yMaCPm$Cjog5=cq>*V9X!p3&hMqSlK(Z@`k7b0>7w;=)Z-@ zpr)akVSojU%FATyL zxA<6D@AkP7OpX7{*$zf}V+S7vN1xA^ zjqf>R4h3AzYqI2eX_ub2WQiz!zSH?}#Q3p|QRxY)xH!!-6BpzJhD@|+@{#~ideQx= z|771Ts88e|uezTj7HLHz56Zz3>JK^iVG^crXNZ{1Q$O4TS7fj2`_@)sA!QS2?r=6y zBLDN5C?_@4^lQScUDu#-+$JVN2%WxcPNFNc237DF^}2x+Y+ks7fHp6Jm&K!gVwRQ4 zt7==Gv5vDc5?n$?ByW1c;Pa#O(gmWQrxZaFbQ z%nT%dvo^%C&t)4k0|!I zUFNM{3rbHoK)!g0SWu~KhgW_a*?S<3RI5Gv-+Ce2`Z2j?)_vt!0_w^rKadc--W{{vVGtIr6u#!0 zG*KLK*z=YRQT@(l|Dt88$Wpyn_zU`I;G1h0SS|=d(q}w0u4V)^GP`c~hsT#j`FdKF zeQ+8+i@(aUs>gQ4ay(pYPvMgr0z0W2qf(E6V0=3_N4H^dY{k_-zOiMwRJ^Y>aF=d87^sf-=LR6yPt7Yo-XTpDApM2%eR*B^2NW)-XbLSm} z3>SAnVBOd|`l$`qQgc?oVyD=dQpkJEH{bomAa-`Iiroy01#JbF7$qU2Y%mFI<&Ms| zj)TQ>U0V>lG-R*)9-z{#1=Z>v@K!iA*(2Wa8X|dtMuFj(>vWvn;k?={@@F*1>TbyI zz3;-3U5Yf~4WMOAZrLxMk{Qz|wHwpHuci3|FRP3N_r=Co;d6I>MiAjKDbpOnw4oQx zn!LcpU2g-SG;9+GGUV}#ls?ER8iX7-fwZlL7u- zBuVTpll7)heL9hfkvl% zFC49Qx!wcaI!puljCyplK@~Ej4C>s)GKJ!Foj2ms!?d820&(bv^gEx%F zRy2IBcvcA%YJX7jiKj>c>b5DUslu&x+(j|+z(#3)6s0Bz)cCvknGL$Be5D5bD}9FQ zKRJ8CF!Xd7ar=$!Kus(yh&4hyOX)9@qSETzqxeX)NPOfj;?|tjg)o^}Do!$TA9eXkUQ%)V1%+wsPx~ z@YPXCLu7%>G(u1aOVjPz=E6g1;Gy1OaFhQ&%_7v!PfGqQH=nIbrE!c5N7hH(4^snS zC)IENAqMXE@7Di~i)?CG4yGK9{+kXO@^ry;+0%=BXgH}t9$NXCCf5l!2jJ%XY#Vs_1LhAf$d}a%IsBi9hCOKClY6(k#Hy!)Y@;cmelK)Vl+51j zPQM$8||L$^<>a7u7c8H6w%fSz^rww;WkNIE@o7V_0Qs5hu;Gd|Z|ZLeo+v zA0j*VZf<7_Cy68BEP;GwRfY|@6<~T&xa0*&3;SV%2QR%&sG1gJF)j^@0dJFWXhg!Z z4`bbG6wk=@YfQ)4vK=K(6OSb3`nlE-Naf+g*kZ%>!6;6)y=GXp1@#Q z#oN*@HZXE?>hEbn35acVpFkTk4`J)L5T3eqE$X;1~(BAcu!8GM$H*2zFR~aJfVKc${ zHF}$*<6rZssQn)E$L>->g`0AmL_a|ztUlc71NkNmUY>hviC6xjrr>8mizBZd)(r-r%6I(J%kdQ2C`j7 z9iy&tYNRPHk&XBbQH~*#TZ1mRN=}Rx5ksRYf$D^kNu&joK(=7n5h1Az zjm#FY%%mJ2@H=PkX49KYm)gB&-{_LSYL!3LuPAD>`XHt}ui39v+G^kRW_)6_;hXy; zQ_)%T@FF#@ z_(;%KYQVheXV+9D5Z z?!ytIVD?FRbH?yR&ISPP=S7O&4%27Jd!z3e;PMxy@A(`74*1Jm@s)v}HaEeX#grq* z5%u#gutga^r$#mPZ!kEr0?bi^v4-VSNhjiJ_`BbI(PW1f)=LnE3wp~gR>$%#Y>1|A zs;rJM#2zoIv7h$DuMH=qfJKAcgnON02&YQ$m4RNE{VMSZiBTNZnerRj&mMyH0IdS` z-2Sx(JNY95k~lp^=^{xxWYGytHfNWG8s!ekA(Iln;egHQCfMcv?UzJ0&Yv0F)aYa& zMkFWBb;qAbXU~DsGU=e0(0wjrus_iGJ3@J6i}g>TIQ22!`l%(>-)z^S<54 zPRKVmcsH<=uS#LvOvdl+JZ)S;%?QsnmN|?9MZ(|tUU_!m$!cK{rF21D@4%Ui6xJz= z*QA0PY~(QZ;gKB@UD@a%h~%sY>%dNINdKuaH$eq>6GP&f0rT>mb#O$eB6^iH8Ea-t zqET@wvs=8o&_azVpH`|NPJ;etPznZkSxSChoIE{*haav`U!>j`nrmYReMOALom!Qd zNPsZspbxrojljYxtr)Cpov}(<`pq>^4yGeOIcs54lOjkd>Dm!gXbPA~aD3$?*aT0K z)r~J8rnGY#cn)*EhsyMYh9-Z>qMDrC64cc{Lk=N`-(D^y<*^c@!}l1pm3WrUNxeUT|mTlw1IX&F%@wVJgrM2vl2{WYntM+iAWT%Z#B@TDRu`{IXzC^Pa z`Ugsy$`h*nhtS`3S;f2U)jU+X+J>)moKWwT26Nqy-l&Zlz0W~(E(Vma zxetIBl?~t1yMso@a+D39*DdT0eso?k>Z_Z*FflXI$lV#h8zg*iK_&~xECUZb*Gztj z4r$cu?@MvIRSLLj&V;wHD)<5HsV|mnHbkpC_X)8ztkeVdtU_KRf&V1|mY!qI3a>QM zg>4tsKX)#|Zk)k!t_%x{#@><}ve!z7xE$?Qc?+}v`VV!<6FlLFr^eu~(0aNv5vn>* z+%4BCBLhf9MYQYdV20m*;iYrm3W}5;*zrqO;xYNl4}K@rC*GTGDh#>o9bTbg60 z0BfF&&`L|wMeoKvf&|T?9<2DxfYiy6T8D1cw^smfJMssZ8uN`@gUqjvYGTxqkpScZ zZAxLbDRgsA)9QQKj>S++_&i>Nk%@WAjZl#ZKBcYFJF~KtiJ;auLC3u7nl!R7i=wbI zp3D&v_=)omBSc?z{K@G1zBz%m;QZN}SxxsOLPf1!Dy?t&8rhXaU9*~*$}l+~nWyW3 zxpi;dh`0LDBfV_Z$B;4`vXJuHJf1%#nJ@gLE>NSGE|5YRnK!?P=~oF}C|Zx8^Isc( z9*6e`n}lU;*qoT(X7!-#@SQg#h9HUSx-#--avJZk41E9vii z&Q8a%XzzP5!h!-)tW9tiDeC zRmV|Gq3N-dv{gond@3f7w>Z&?l36`qDM$(AmwGI1RXMlx9`wnC z)I1+p0X}&JY2ez~?JoivMgm0JO*g6s$~lSAGtWnJI)ezVfJX--6!4mlA7xxzL6Q%P z+;w3C=jpj{2c)=;5;bl4Xsz@_6@wa5ND|V>cO5MFuGp=Cr!f|+{+KJn1;E619JVt# zr}=`trfS-dw*m~f6)JBBXsMKD{6g6%5vz|Q7y#p$-l_fTFOlAFU()G_i7Ymx3ZeJq zD!gviEg_z7$E%w-6os~t^0dni!N67kr&`$?#7rmIn6zv}`hDjHZ^upODCfU_AA)$kh#hjAQ=OD<7k!#zia_P2 z{Og_hg@5cq&88jvSt#S?(Dq)F;05%%t-{%d8y)5|CS9u9dKPjBJg-dQjHfV)j!0=B zJ3Zz8rR04v6$~T@#2~b1c|c7@zbNlR9Q% zlpnI)jt#OIT~yeTp(K7wYei+}z)L+0vK@RB1)8mRftX9A#e=ZpKW7jjfRNAh1^`3_E+7w8BCT+H`> z#cJ)qcoWDb{qegC+|y)9ABGzY=4S$Gt0^oKkDM}pGD=JTue`n1tNj*5ePlrm1N6U@Hp@L+x$=lE~RIVsU^ySs;;x+e}@Ht_g?Aa%>`#rtRZ zGZ+T!9ooyK*CDK)-*;}SeiQoatg>JP1H?G0e^lyjR{HeURWKWV1yWSmS`_FJkVasl zDRXug!S}A>X9Pcl`-Lg;6SRqXnpa3MQ5YI>_Qw|WRsz!I+%yL(Hmj^Sug~3OR}v74 z-+wk*v%;^JzwiDoPg_rIo#J9wsd&;JgAwVCa~J-ukP4z+{4r$H^QxmP5m)?DT}svZ z9ck{nE*crrC_-W)a^{30RY=v7dD;Q<^)70=B5(f1@uS?h-9K0RZ-?zdyI4IvQ(ODL z57N9ydtg_NE}i#O;ob4eguB*&lA5y^}J#$_&tz>lBJ}cY`GritD9T8pWEXb z!wBQli~xNIWW?G!uT>-O$=bKSK?jbrIo< z9{Iru6SQ>L5UT&JIN^M+*Jw9xPn9Ef2yc0UmV?n=ZpE=hZO=97sFScru;Lj#3jiP+ zNgU~lH>=w&PyAH14NCu3H)v7-7?k`Vc9IJ9^U8^R!A?Uddh9tn)*3K3WRY9azzJLy zy6CwA_EwvJce^wVx=i`6!7XUSkD*gL>*RrD$29kmwx<9t3 zW&IjX<>gK^eDrfev$egT9TWEU5PGWc+WpA-H=QzsZGX3BLscyYe0}79k78dkj2hOu zPgn9-n2jp-V<22!Ub?B>03{q@ha#jSw_)bag_5Qbv4}(UTy-l zo$0lWa}_^;F8t#nrmO}YwUGe%;1szr*kFhnZu|KrLVLq?5$Cg|` z%4RG5*1X)@kN?>2C!O8+wfhqju7C>e@jr)q@zdrP5vfal2IX8BIbBJJroJzEs{K*( z?~fpoWq`#1h`!B~Hhx#D6{T9$LHhF<)HCLQ!@wTwP>TNA9T#LtJDaGcY@j|dtoLpH z@-%zbroX^tlm&jVgyi-unG}`858t4zpFx8dW$D?lL8n*cU-~6~ zoLw$xHEXP6{l8n-Eu$Y{O8L21>++REGs@c`(n&!N(a`K4n!Ji+uU1DOzkNC^MXdiw zi(tAh3J~wo)+@jd%2lEJ&$V~PTd4dw5mU2n9TI;5#JW6MulAQobk7_=PVQPhch#5i zS_0Xkm|u%0L%H!fpyRVye8U6dWNPpj=1t|k(uoJ2vW+%WP-@Jb4=fd)yh28G6ss;5yP2ayq8sM$lV7ne-5<_&cy_rL7ByQj zDDkN;ffQC3XUNKvwk79XUU%f$GdB3cu_+M4(R1G&l~@Wjd=7!V zR81`88`6$M8)-d)*( z>E&iyv*bUkppxxBvO-&vh87I4=p^t3YX!Z{{F8B@{62xY&Q{b-+&56A6hbZqaw3k` zP1e%}m5xAB+67s?r}aIyuB{S;v{6BfqoLto$1c8=;VmmPPZ}i;|BtTo^yPV@+Y9P&mz!0E(~~fALTl( zS}NM%ICq*gq7UJFNr7ff*&Ur&^fU10f94jZ-YW3CdrCJYzsdf zCbpd<);?;xO!SO-Z{(LSUkV>KMt+x~IaYXct`lH)*2>0P-V?eVT9nB!B32ej6AK0= z%ioLIXFjYi*42KWn@8}JID#%sUjQN!*_*OHK3MW08K%9(9KYN4MW0?i*h2=q$d;>L z`1g+-pSQ?UBrR$;o*&LIK;Mx!@(MB9`fRs)6Zuyd{d$tjm>x?OCZog zwWt+qd@P_M4&h^#4kQK64$;HIvfx!%bj2tuaIOsGn-TA7H=939AD_=WErJU>S?)+y zPNqh0vNW7Lc=Ynj<2siCV&O*6pdw~Q>ZI$YB*JdTIAm_Lb!gLdyZbJ(Z!l1@8_ry-ti|G9lF4p!kSTMMb}o4$(VW_dWL5Dd_D1}nUNe6tU@;m8|0XFyt1ty1V zS7t=-KJ>w??94eQ!K8e!K@ikN=dP|s=akY$S<2G-JDG6F0Whfo9^}}wYBUBe%f~Kl z>BBv)rvN!Ns~WYB8l#jBhQSD)fFQp#-MZgDcl!m28dGxvZYOXEVwA1|Gri@dpX8=` zG*G*EOP?WCyM*qUn}YJfR?u9y=-P0_Vc^?TCOdwgSI&O_TMB^QlP2*(Jo*31a-~# z*J5_N@qn2aR+mJ6$No^i2%H{D&#S|gIuh*B{)t>iyVJiNf8)ochvc(*t}aq2@~ds^3mYFtK#qk~xR+=BXf;Rp zPt2M8(1ZHSkmL8-#?~WOx4b8GXbw3ATkW$Mc$CN zeBCpiuKcX4meenfG0u3ppF1yYjQ~$%0>y!^9v?xi4n9#tv}Oj=U;FbH$fAe8V{e*# z93>@N@jY$+1iDBHi#BUu1W>LVcawE^K<(VPtrRH@)#~My+4Gl3aIf*o$vX**QqgP7 zL}1fTuVPSE=b7LTmd-j0SJQo>TAB{O!(O%Tx6kC&|GBp%<6MpYOP%k?g!^HXx-R&6 zEUriAf_}DKo&|}rKcyeQ=E3T0VqI=qLomBWjFQ-2I>|kB*|&|)V};b2j<08`SCR(* zITzeA6__V|9{M-6wm8)4UlbU&a7qA?49YZW%rKxOGapL^jQa2zMQsXuCo77Bmp(|0 z*JV4NdxgGsli^>&GVJh_eej4IZof>)e>pE?I=B}P6@Bw4nk!P_b~TBP zPiP?PT%mu*BWucBSxKJsD%4U%>IUdWvt?`vdb=)R0)OrdhXWOKKQT`e{RsmQQ8MBN zV(yRr@pM{`c9>o*=M-w2o=425+WNQe*amh>kA223=+aE+UdZUm{d>C?`xJ%giU84O zW@op#ADQPcJY7XtmnWK(uX zFh%;xdutn=3u^a9mQ94+#dW@&dDZd!jf`Ej4kW^_Zslba1Dwf?kaBd15&p$<-TbXl z+C#|2i(6R=_!BmuZXJRp5Er%-Mgjj8zyx;+Bm|t-DYfcg@?ZYpigoSm(w^n+%ExRiN3&-t3L=n@Ch4jbl9ssv3-Eiu&TglMEzpS;~7IMPy@36e~V_uJ2lX4riQa|U<+`wIJJ`8Ie z9YD><=)5Drwd79|ri4%PBZb*Y&y>8{>>3fKzVdLadCKU3RG9ZmV?{#@c*ZDuMlz+) z?=hDwodx+rWb!UD`%_sw-&gxay;r8Tqx7eYxCx0SymG4}FoFtaGIVut)aAQXZH)|b zurS6MQbJ0GfZ9dzKER740n=|szSd(;9EjK8M~+C_p%KvJ!OdGgmWMdyI3vN!YQEv! zpR=z;>iXX^0!HNgcT!bH8)m{*#NK}ex@lp4q~ncHc1EY?t*2^Gf^mmqbl_Bt1`f z^X_r|pZ)D0yB|Att0{qZp$lmP&xUV z%uf{!AAqyv=lLeqpFA4~76)BSlIb7V)z9a}3+|6)BIY&M>W_Fr zF49qnXTN2c9`&nFgg!q@^0aY&j2x<8!@t?~<|Ll!J{DFk;0;riakuY_4a4374zy|OfG^S}rO z9C;DDm=z%qsxca8NL zl*c^jpFoa#dZoe15R-IYrwN-;14F3VqIlvkHX0CwM?-kxbA88VClMSu0-_;C4&At;D)Q=K}=q8e%wId_fFW;1de}r5hB7YNTg%sJRbMP!CG_^TJp5H zpNuO00d)XFtSeQFqbqBz;wLmjtu^Rd(f$#liaV&c*xl5hDzLADCi<{}==|=wcX{^lF zXOpH@E(7)3b}l5wa^zSMm_a`=d6&ZD*`q7i^PmF#5k`yT9jxY1I%`taf5e(T zMsMF_k^*hY&(a&eu28U3|4AvP@S8J+{K#@l*UBi%4uJng)#&{%2~36C_%Ha__%#fO44~S8(q=m zyP8~Dh{dRpBO)GKUFVmz@q8h8X5B~^T&>r01FS31vgG#2IMQiNPA^C!)i-Xem80<@LlFdKL}Jyiv@ zP#-$r(&ze>ybGw9jYVr*f~fS84rTG6OwuJtNQScb9;B4Z5XxCogC))6>j1;aQ7OE-P_9!(;7N0c78R{G)Kb&{)u8g443XENxhsa}-ga zzNo&2j)yMZl^y$%H#%-Vh!gx3cq>l@uWF7G)j(tf>Zfr6|JI_HGaNK07{&B$ZT~pp z@nC0gWUtbLu!X{*2x$E=zmHvEN{I3}2xYI8sgQgWWzK9SOsPZGO6>Y|gGIVZMIDpx zUUCZEHxtVpEVl{AzF@6`57<_fUrdma=xRoT*>lUp=O?!jk|iWg+egl*Hl{$}ti|-m z-f&38Lbq#`X;jt=ylB2TmQj%8Hg$B4(MGt7u9NhRRIS3wY|?ZehbK&a*$!nZEFdr*Zez58rt`0O7YM3l)1RQNEdJq=okrFUq68Y1pGeyFcSD*`t_b z4Htu6uqr4l$m=RGcY(@>P%4~I54nB9Ahcfxi*@nCC+2w=*YlR3mFFU!R92>JcXopareR27&XLUn+UH;={R zq_25G5e`VDdIb^sp)HJcTD8m^`5H)ZkW|P+0TyO%_r(-2VWeb4gwF`n>@fr2p`si_ z=vd%f74@@nhz#j%HJ3e&eKm+&UF9HUT8kF5yJ)NYDJxOwuiE*o*mKDiS^6f35-pwa z4u#YyN*9~z|9T;KSuO}PrB?Wt+fd4ikRMQMIQ&FVBh zvAN))xd`F(jNZxNmcy2R$HgLeReh@;A)DG(s?u-7J7!FBXBMqrzIauXh3IIh*422Y zAG2%bQadcT>f_dpz=}7oASBX}3QG4ei{_$EF;eHZ#C8jp*f~8P3%!2(el%qhzZZ?& zUHo@?FD`IR?+>fK-OE!j@_w<8WW zJ=@e*6ft4v-KWxx@w?Q=(vW~;cxdI!iY4SYsA`c7@W2mWN09 zBx6gQS-b@D^fK^wP}-e=TG!Mt|4>j0A^wi+J*rXS&%(8?+MkJ#opGApbtwgfwb0iS zH_dE5U0+h|d@#On{U7r|)x?o!XJ#0lHSdm{HRN#WQK6v%B2ypMy%zrBiLBAvs_Z82 zfS_l3Y1?X&x0QBJICH6tpDIZVO+wkRNn-DoF|3G!jq6E&*M;%-D~zxp>veMvCoNb zvwr1%T}`j_X7o3`_Imxwdm&kmZbdxUcnx-(4$vD%03UAn>LW$$s{zAMh4Cv?klt%) z9~9ztLQJi{25h5po-GPQw}db%Lcq^GxK~ttSH|21x@P7G0I~BUPc-i0KDoU+@$iMX zy>#PDiwngEOu7xw!H<2A4S<}=W*0A5B@uv}Kh+6Poe}=_id640@;hJG&=~RxW04kD zt4IZ#ZyKqi-BEFZ#_w$8G?*HeR}IV!kOC3~zm-2=Yyt$|HA%+|t*mKW##Q0Lb!7L( zy(}6+8DaC9x(IKG{g)j2+|WDVVTpe|bO~rK~fVw_EH2Y=mwCxPx8V=caoXOFPCZq#%mgVAGJ!)zv^4Eg$>N4f;Wgf=h%6R}Qr&aq;9(7R;$d(r{ zZ6av*UzFC>>6Wa7_s(gER@XfKI$lXd-=&=>#_voLNX@1sP@Ny(Sh09(Bk?pgzf#W7X_av zy#8vLa~{w$4kVhQXfx^C!W1Su`IR(k!9p=a9DMVbubA*Z?hmt<5KKmo%Ic!qlX6@O ztRn2oNy#h)$e6r)NF3>Y^OG4AF7*5Ze5UZaY}l$NLUHW8khf8tUDiAC5$n69%8$Ka z@zEF4`~b({=MwDe+lrPTQ@_uJR-18C6^CYqj^)?*@&&oz4iGXkA%yu=_Aq!15`sR_ zy0TBb!*4S#r$|tUqLm$y@_+$`!q@l>ly|?fNoJLm1q4-?iDQ_;I#MdxSo#vqXZZ%S zV=?LovbAfFh_K0OV5m1yB>N9ZX=NvEF@ zc;w)ft#WsHc|WN~dZiXI982x3eH1kzRkr1DO1mCgCN3Co*{d$@9+Jq3HAzNN%6uJ2 z#_aCm)Obc}ZH*berh<85t*_@tcwWRw(`pCt3m}CN&z+LEnp4#PAw2qw?GL^4BLi*& z6RXC7%Hic)iWNVeyAZ0zd5^krevTqlw@2$8s6T{gAN~Wi>L2n_1A{8g&w@x5b{h+V z0_undP9I?BebG!JCruju5m8X~25d`B@R0!THPhiI9>3WHoXXF7(7}biPTRkpK3Jkf za<4MJbIg^{Nv9&O-QpJqm23m0;^b8wUop^Sr3Vr5na;9R-3rAIk;{s!j{BbiWi_I0 z$KutEu1J6d>_2ueWaRWZcpY}S?$mFC5|Q~>^iUPLSg(ywT8Hba~43MCLFu_ z=owzx3NzlvqHr=|m@1i7r3v}QKDQootl>V*cmp*GA)$pSYsg64aZdHaw&(4>DW1)-?mqkvC!2Y~D#OP3h!&04PBeLsB0d7zyZYw z=0=vYp;eOR6J0Mw{7fL7;O@P%}m)f5A97*`MNxj+B&P9FpMK zS2AZ^H74Ie;Y3=%xpLrZ?bIQqN6tU$ALkudl@jk!+W4i-O6#tF$sC;ha6H-W4!~BA z2JgQ2VCD&Bm*?{Z<7D1*TnVg}BM(rIjN>Cn-aU|(=cfY1&SBHJ{c1HWqcLOPZtKb=U>| z>XnG*JJP6KP8YDH)U{>2)ZQ@xbaOvk(!_7esY4|>5cvZLf7q!8=zGWUy-oQwD3Z-L z#4)*vI64~0`R5ws|9$k4d&cVQkVu?g9qYIl0vYN_+gKbHMp2%-SeKCR$x90;EX-F|w4fuIc{oK#2qvDuxluP5HoZ9_?0m{E{%>TO?_rn8@ukXOD-%g=;uupro zFZY1ki0Zd8+Y1k8RpL0=DH?qNJ{WZwWHh&W&%n&`<~$9EezVrAY_};6`~(HvjWf|< z-X-Nu9oOTAa>^qa|0*_WJ$JyWby7mQ>P&Ig9uy+3LI0>lfmiEmO>!Rw>0X`WAe;VM zYoEQ37^q9!w7{M-KI|<2PFZ7$@{7_z_v32ZY?%@~*yt1qCdZ4g_+jD8xDN~hr89EY z@)kkg6<91F_s|+o3wY7V;bfnx#KE{BJ$|}gc)8%oUpILoP6de2#fk)4OO{~*DQ~r_ zY@x$jSE?Xf1?=1&LxPM8A~Rc5VZFlrlcd$4NW$)Dd2uExxOq)2QONk^io~lYRDke; zx<23jXH~QQ= z>S|;ZDukAmJbU`b1;CiID@d-hAXLK|^ewi41@=_;!Cx)@)nJ#(oC+UqipTir_(b?L zRB&zK7N}k+kukjnMCcrf31C21or~%~s0vh!RTm$(DPuxA(urqOjFF;g@#2YV!u>7u zW(Ab)Kpbys-5hze7k1A+Iq$sqc{Yg;wPNjJ0+(uP^{}Tmr}BjeJ^RRPr90_F5S`a1Xgl`MW$tnD4AYOX-Lv?Qko}Qpu4;|Hqba z#aSlZ)1Dh)`M<>jB@eeGtAi|)znE+(YTqY6>4vb|35j=4ZBkdKzCJzM0Sq)vMJ(3L z)VrX?K*pld`nfu2>VO>hNqgC@m_rl!h6PBiqr-U4#MOVuM84@X=4g)_}|a__0T_Z37iEbz_YJu&NtYB={Q>I Lde7=W_A&nlIb5gU literal 0 HcmV?d00001 diff --git a/img/javaeett_dt_063.png b/img/javaeett_dt_063.png new file mode 100644 index 0000000000000000000000000000000000000000..c9e062026549af74e63dee5345c9f56ded101102 GIT binary patch literal 30976 zcmW(+cRX9~7gm&Ni;7t_sue8~qeZJ$DOIi+qh{?9v-YM|+o05n*foMsY6P|S-m$mZ zvG*Q7-`^ki-cR0pbKY~#J@0ewd*0_os3^&j-(|c@KtMn)_dyy)KtKrG9PD?9Zd!yJ zQtNIm51nPSoYm~jo!yKa%?Kn-?TyVI%h?)Pn8D19Og$Vr%tQ$YhzL{^)Mc)(uZz2v zHug^gwuLR8*O* z`0DEF8})2c`c6(x(B&NsBWqDnQA=A#@I<(ilT%(^UjN*7Lt|4^)lzqN_sHU|qo;py zN%7$HiiwFy=hP3LjD6VSO)6<{dIBXuA$L}1A%PPBm35}_YnO!@m7+9%nY){Lt zkg^DC=pG3Sjg|#elZrbqwL`^Ym$2Z!6Z7jyjce^~ZQ@LJ0QQ1Y69V7G8_>;cb?cVW4t&bm@XO1yl+s0;=Gcz+67Z>XG z>b1SIB|S^uOJ-wHiHL~Uf`Ox!me#qs+2!q{(UB3`u)OlV74O_JR}Y`I(bcyw41=udjdo z`gL`6Wp(SYYhpbmIc0Nmlbqtg`1si3`W~PUn46o=EUiC>@ESOWBxhhAJb2*Z=8;-E ztEp@Bh?x~zTDpI_pPEzjv!J)HuWxMm(A?5`VrHSdyu5eu%>MJ|f`S5vpM}|3*{-gx zXBSuawe|1czZ(S_rTt1fI=il@s3>m04Gat{Z|v9B)kQ``%rCAWV`Jmv<7bw)w6(R* zF3-Mv`NGS~H#fh4?OFcx>C@@yX<^$;Ui;$X$B$Rmw<;ps(cjfB%lY{)X(02VB8}tFGU@trH-Vr-!o66 za3n`Z5Gi@S`(>S|FFbRIOO~o`Mqhmxt12iM=(M)g)Y(Yy**wFHl4MV79tLuHm3E3* zn6vkMc$x7KzF6Kp%Zu2of0%l@=GI&NK{o9tz*Dgp_5YJKW(cW)m_I}wN=l5dnk~rYhQCnq3)JGAwT@4SV*-rB3Dd(T59OnNKAU9 zboXpy!V6QmJ#+s3jJU?faitWP#FgX~Z`KU;0(i0TUfsI(v-y*1-E_~uwFtBwyp0Rv z88M2pkV`K2hU8OQA@W7GfP=Od?O+Uay3rmn;PDXwPT4wnCyG*ufJgw`j&Q_?N9xow zU3t;6{y?CNy%UtNU!VzK$*9Fproa=6#DiYlyGYGDrOm$28;6-85&3yIT%`h}$Ymy~ z3~RT}MzB7eozpw!OweDM!FUHNy&aL)30f2NmYo8MOy$ns%{i;zjotSj@c=qtgw#Et z3+FpSwuIZZ0j&Kv$!ee32EIEZmka(oERQIpT#}}D9|C?5C!l+VsJy{};%LUpaFFBV z7PNGs?dZq9$CVb!{T`v@1c_hNBiv?iSZ9ky5Yu)lVR?h^7bFEUVOzlF`O)nrmx2D2 z%E|RFC3aArX3$!M*B?5-jRO){<96rQhi{kk(r~*468v_$)@SM4 z(T1>plPbmG%)n%@^9*Zyt!^gL6;UMJ2WE05R(m2L z33&b2wog2LpCI8y#ayZqRdRVd)Rx*9f#PMJaQ?}#Al2YQTJK+3Srq7X#5CmqOfwkj z7&C?OofC=GBQfag3g|QmMJq&blceqFmahJ^Kfg47E+s>?-iJMI$^&S_4KgA79j5*% zuGd$&e2YZ;D1IhEL=6A7SpR%C9XZ9?)eky0;&WjtFQ8!ZyeTo95C}Q|b3LrhY(U3{x{@Vv%&r&KM6O_0-d1Ei9H6JftoLae56(;3p zgBJgbEJ9;z+8mb8>C$fE3W~r}gsX<1&Q-c-YfXR)j{m-~kNDDiu29yDhI?pFaOiJ~ zHAgB4D25K>3LsFj)`N#?gN~&K&PptZRDJ=dD~OdXI*zt zDm+Ji1tSeTw?zrQrB0l&ILv!7S2DFtGB^BjG&zIp9*sMeNw-NeHBNItQ0D76aS);$ z3Jl=_=caqMlkI0czhkirb8oIBDU#;aBc#9S2_jvY@+WU4_?BtB<@2ZZYnb#Xs@2U! z&JgjXC-zDL-x?~84S8xvuN`acSkInT62-jQ%qVaR) zUZCB7^1D;4g!LQJ-dFiel=c$`JiUW%l(qDm~`m7&?YMV$2Q`Eve_yWO-`Kj?mr>&}s+^W+}K&P*+lA*)Nx zBc?Bx4$jInOteAx+#=`ig~XH#Gqsy~=anuEO^G?Rlg-0!aDM2F9>`lRTvSG?JMM2U ze@pLd@gZr6EDG7G>#-hIh~tsEK|-&!nv;$hpYy+7+vgWG<(ZBM@piBQ+1qFJuN-DP z8zT@StO`IcQimf^s@UAH=5R#!k&&X35?#~U<2)=Ddk+~7Ay<8ALDvZC)Ak>l5s{uE zYCZk1*cRluohFk4JPAa&9wGmTygqw60_J8wzOQ=5`HYO6F&Ar!X-`0*o~P%gryDbk zxE7~)DV5xT$PIfXC4aM`T8^5N3_mBdH%F;}A+$Qx@}Y5>@(0K)o%V8R7hW9z&l^$F z^2T5r+NcMTXx|mZy7T#@&PGj0b!Eb==H@#y$-)&p3%t&ybd4z-wcFk(Z$pFiqMoB* z{649JFed=;N&Pux^vACF4lubg4l6K8el%#@4Q8u}+)8VSKFfUY51a*~gZ3f1NS)%cY>nkdjA~B^6Cq)wqh^+x1 zfNOmt!cm#E&AX--a@bmeL54UP;a3nW9WyuS%}lP`9YRK#g+(zWwCluF2y7#-p3JZs zLot7$wg#3!qs44>1`~Z2jnYRS9@~f|&>wUG4FFe$MIm+Q>Z67lq}!Ua;SS3le#~n8oNTwa4F$HqLRZ-rnM>1*oNn{P) zH%Tx;!FuWLH({ZtTE6A-!Q{rMe@}$8)Q5biLUp*jZ37t&CF~y>JO-EolL`$%Ul8vG zpY)&)$$*y_G23V&_5y z8OtwYwVdE$gSb|803EL@-`H$I)*H9MjMgX8l86N~&GM-qDfObsEaf8bP^2UZD7qGN zR4=MW5)((?QGg^ILHzYVmWXv?>Xje_i^2jSq+#K2{g;}}*Gax{2jwOSM=Y-mtQ?H9 zHBQ?)PC-U+!hM=javhRMj!1CstwxxtD!y80qVAJBpF_B#F&|hOTB|n^RUc!DSPw`- zkx@TIwVEJ7$x($gRbFJt26yYf5;B-K3s5*SW!u^+GqvG0JWb^cOyO-4J~E!apNupc z7qZW(DA8~zDHhV%^4xf%7YCvqboT_%N#!e69^tgy?Yp)O5CmD4Gb+eRr@8{0G8)Ak zL)d@k`14bO%G&1yC+aVY;%aubB_lNNacS%%`@=^X0>~Wa%VL~qW!g+QW4RsGv2)0= z0J-)U1nFQc_y!=|@>j4oLHiE5@tJZm4Q)8KS@NyXlGkhZXBx*{Q5{2-ikNOO^7nYJ zH~wKqnL?+}GhLE0iDMs(Vs>+>_$-pd z8*H>ZCytHw549tEm7`ALO~}B(F-IW#!{Gq$a62A2uEUW)nRD~^5L4k5V zv$SrYI9->^w8WG&2F&{T7Aux`G2R?z=LrLX$R=RC!y z=oF{h5tzjMk|GRSKFR?R9*=?>H$ZKv=oCcNI9L=Ckw`QYVVDj9E7u;@7f^otg)Vq- z$3+tO_jB5UGGpPjA}fo4dt<$VPDrn&W^XSH$uW0P^<9zL43T4t)k`Ohrhm7>oj4iB z2>C)jT5clN59@M(Tw~>fwfSq($gNWWTxO5~B=bKEyOpKbRS)uMG;NYpF}ORWFJ!px zNThEXfqCrC7Yd!V!^B| zZOIU_Y)5ClF09dWE76P~-NCp7%g>1-WEfB<7&KDq;nU2+v?W2cLg{=AS@Ky**6tnV zzUD}$n}X4y+%ph?Y9mM;S&{sVGa0yCqA}t&^>5gSo^fw2LT@dgf*6|Sr7XbMjc4C_ z;m{Z#EpHY~8o;9SE(m-wETsivRPf&478q#mU?4*Yr>R_N;eR;wR>3AAO3cg* zp4BSxCY?fyl#7%LDvV{9;oCKw?*;4djU!ebU|+2lf_`w+-QZbG-G1Lkh39G+~3$X)>4rk;lFu&$(Z$(ZF8mg@Y`hhtpmHyW6$Vo=+;VYNj zbSB7XChp4gXr#WW;>akUt}1i5@}EP}ra5-X*w1k|_G1xaR!}^zug|Y{6-P3<) ztFx-B3z1`i2=YPVM6}j`Bj+iWpsUAC4+_PC8ycDe5WEQ^ON}sD^rXOCP*nGF^z`jN zw9al`=pHnb9{`c48Gq`=4mB9V&7YETB!5;20_VFf5Na96`(`Kml^BCEIG+N{ksq3; z4NE_!{4RehH$839$92xbTL`|@&`hNm0FB-2>&1o+z$#Uh1UT%J9%^y9R!vi_{Hk#* zu-}3xWR`TE$NJEPHdkO}P-tvJvp=F2F$}WcbJ@kV*x0f`&AuXBaLwuPWC0|jB1icn zx#H*N)tyK>baCH6wy5yvvr;rP2CWbv_aN(a_5o7bFkLV^$N>9J~*l$bJyZ5Hc9H_+He79VJ?-$VaK0^5zBp!; zG68&~8qOU3wGH-fzKH#9^mD}=V%@bzha$jz6z#jm_o{a$pmjuUi)rYyHqKIqgRT|Uih7*^&tpeINSao2Jo_cQ zaW7VE)7UR}9TLzbFm0WdXaFA|N0asXnGg`%L)TWHGa)_lb0SyhzVzA(WV$DqsRup= z#p^&qPO%4jbY%Q!tBHhsv~a1XX|wq1wp({{xZK%J1aIw!@}Va+Xz2FZV61Y;ixMp> z2laE5ZkF}NaSjnlv~R(mU!{TMYA>EyVhUSu5`T{U2AmM)2;0u)ZwTeV5eOuCYl8`v zM=JZRhvHit>Y0b~Q@KJGKYmgq2$k|cyySR zX^bLuax`pkUiCpw((RpIpOf8}e%@cd z%Hd8y*q8}siA6ER08bN{&Uc~5MKasrsc4-L(KfH}e81*5Aj~%RbJK>HokiOuZk6ZD zvp6m}J~UpOP8kk~CnfzeHY7yJs0fO(^CY1|<7GNlfV|b1=0lQ?D)+W1I$=ht6Xej1 zkGhwahsb~tV{)(LA`~O-Jwv!gf~r#G7O*Dy2{1P)?RssxueUb34*h`BevVH`w0i;( z+wTtb%S@MZ1oDd4e{@#`7PFr)etE+O;@6G&VeuvkjAvZ$drouDgp+i-ZP0IbqLCX@ z`G#+mX=`)4{O5jV1?8;A3Ws{%&!imFDEC?{*ZMcjtQs~PC{o$HPGd6ywel-xxlyWd zXi>olsHyr;^cKm!A+CDaW`?mu#Vq1~sDt*|-8Y1ePepR{ur1S8cxBUXT<3?@JO z%u)6)gJ)qQc6I`Z{n|vz?8XIdLn7U=g1u{=Edg4d+Vfk~1Aa_M1s<;GCseFOdI>N% zrs`jE5ZLP1`O`ExPXNxUU4j3h09B2sdvAGHGqXq~jY0bZ5apUWcV$v;dM84I^tYgc zoJB0M&;H9{FS)Z~Uvq1Po|e?~u3>eGlzoox2~B=@+N-j&K9ll{R}J7F;P*F)8Ky=z zeVqEFa$89p7~I_aM*1@oiOPIRZ}*|~zyXrrXhbH4-D8?A;(BY(G>n4vgyoviOy=%b z#3h5D#EUzZJMYu$W;b4O8*T$fpG2Lq&RxZUf}^9d0mf925b3v9UCU4Dd8XbPg=iQj zc`Zj&6cV#)E3bNdI*Zw+C6UR;5nDghk!rw}q*eSZwWKcy4gTZQTcI=)k40VxQiOtf zqJ_4rzl1c>gx<_}rWSEr<1o6LY{hJ;BZ~AEFQJ#O+-h{8MecN2CK83 zxG4Gh5QDA}T<+8|jBqf1vcp5T4qStOquzmHc=?$@v7#s@35XuoG1f;T3S(X?X^SH@ z^E)AN(tlI^+r0kNJSEyyzHGd{>6TftcyP*7 zQ_gl<4fmT2-Z?%cG9HEbn?XPzV%9OAu6?%|`jB8c>eg!b19Ad3spO-+Mn89}PIYE%YA4c{& zoJ&QWc8&QqQER`YUweBqRsqWV!CsC$DJ^G);s8DD4yWHDWGiPT_EG!WO8Y`uiica4{*&b1^#$+pUf1)q z$j;f^di6j*r1kHRn#=B?sgC`#Kg9MG-FBRHJqA)b0SR_WKR8-5Ic1TS71D-;M@RgE zs{}{k&k5K%qr&av0PQCRW0POLdRSuUN!{=KlZOad#Ph1%xu zZZe}Aii%X|jXDba_2rME{a0a)FnPWf!QrS1XKq=Z;I4@a76F6G$mcpQ^go1f2-rrA z;jV`Co^jh;=Jf_(h8u!XIkRrj*k0!!v{wrCJU+s zKXrA0+<0g?APwW?oFNeHenu-YV8DxOW0xP?(a7aWLx1ACMY&*}@9xfVe`g>){>7N(J=+#ut*##2mGerCYF#cTVCC-4 zM9hpvH&}k8|NIWHBj3Q8V<}SOHeedocRuGoxSNNRh~rTrB~`Gj4T4Z5tUe=+%IHX6 z>;dx;OOW46o}DGS@U5BICKdCov%8}OIqSE{ML$)yXJ3hmS=YghMgUr8-r8E78GO4d zxcmENdUvPlp{DVo$dun=?`M8?L;@NGb6*~5d*X?N6zNeG4Z+$WKE~b_4>EN;oepOV zKuGW4m-BS7E7;};Ik~BXO7rctnyyBit-;Lh*cG-S##yG9qBW{dv-pn3h}po@=l>1Ryn; zeCV4rB~A_;3lF-68IH^cb1(5u@Tccdp>GO8mms`H@rBrcr*V2^zp6mmp0SP6i2>Ou zx4$8~Y-9@r$KX zWU^=&m^ybB(=FWzcc7cs;CXm0dG+;XdD(l6KJU1|ze4@FqpF8dh8`&E?$Y3A??78| zuY-CepPE9)@a_ooLbZgg+{|w`qvNF-;D}Y3r$_;HG7_-VrtTHyPIvDk&-k0b*qTgq z+~X|DPa)3+e?U+Wc=&?*GJshjPMJ;pW@J5ZLDd`Q9#{CFy119vOXwLSt@dQ{`PY08 z&#rfb#}1e2h0SkTnZLZ#o5{UAA6x`=K^3G%x04Kuu*SD#d9;TcW_$%&^&{4XV;sUg zL|?_7PKgZTy3Q#jc7geNAtZ3nQC>4mxWUXkT(7UgNHSzkF;z6{L;NFA@@3yPE6a!B zO!jl*9_qe=2ciZ#zmeh-b$)HssnpLjaVt1Ik&S!+bKDe}tsP_>qHElTPKz|$=6n%% z2l#_a=Uh@B+`kQnM6Sdcr!veM6&>vP<{DQ>C-S)v`S7!BuHFe)!@)%5FV~tYkweMP z%$?Y27Rjl>$6t^CXfl+# z9Q)VWM&Rj9LePokB+$Fj7CusKl?BN+?gKYj?$AU6lqx9Wmpk^)l9}Coi>z2jlNQ!$-pxe@+%!tleRkc0sbKT)f2LZV6{ zG(^Dvqj2s{`jds5;oQ9c>m!s1D7petfixAD4yLg4wVx9-xn+TmbttO18A^$!X)4c~ z-_3Y51|#Oxy=)$(qE(5E@Sx(DOaz_cDD%c+cI|EoPA9}#n1;wfa0fMq^P^w4UuXQI zz}|J|wA)@QUicg~2si$?)c+&fJimd7pWq$XQiIdqzmn*7kabK=v&N?sJsmpaC%T`2 zblazZeei=y^{~89k&V~hpVM`fA@xMif49aGS-hn)1m{H8Y0|93-`DcoiUW(p0&djE zpIILV-X7n&bhqniE%1B(Hp<(4Uk)9E{A9iiy4>Son%uRT8leg&$v`h6xW9r^DSN83 z`+v}o%{O*-k56r!J+$HK<+4m zxt>g|-K?p~*g8+mEoFySo#tj~$U01o8mUyVU3h=VTJ0<_aju1 z&T1?Vc21wD!8JdBFzJ|)TLu+7yLqGDCFCqr^jv2KM#a#12<@)?rlA`I*+KmiI&UTpfk9uXzO|M2?*&7^Bi@08H zvE<;->`e>gs?q=NZ}DDrJWoZAm2b!>te#GE7|=>LdLqco20mkchqvP2LzPXv}`aE}mIT|hMOyCJ6GEV)NHlGne(2;NV-@#8_8!|dbdR4CVx))#Wy zN7BDCXSiPu`Tg=)bTP%Nnc{)jQy>)19a0>MT31q(s_i zzEFU(=gdJs8K(QfXW@+cQGp1dpl!#S#AcmJju}6ie^BC$vUyG-8XngLkN7^A5 zi>g8RN%`lP;Hb=FA#UXqfziLyk)IqJBDy|409$R5Lu*nLd1@YPhw&c#{&UfJ8c_NB z52ovCqOv<`0>>R8eipqh@mR1Z!dVzgvn_!F@SkKqs?-T(<9VkWj(w_e1t_#8|g zx3S|%<+=LG$~;Mx)`0uuL|Y#gVVq~jt+5UYI}xKF&CNJx9x7K?Xy$s-)i?}~QG&}3 zmR}WIN6V&qe^FHP&a6s$3G7~ViBxMg&Tll9J{#HBNtl>6&y_^_?yUk2a7I-zIQ0+SLXmIXJ@sMQa(Al5S?u=|14AwzKH8Z~QoAVG( z$mLlNDa#3o_x)mcX_@N|302JfX8=^%e5Ph~-*q&y3%y#j)FWFNGGhn;mcTR+;2^isbgC&?DMS-8r% z`x0X2GNXIei*f^QpL*?!*Z!-d{N(e62|s53uPTKesrXRq$(izjsK4?cG7RcM8paP4 zDLA66U6n~G$e#f3{)k#z^Yueqa=-Chxk=%kUhlGM>vTR)8%bu11qXLB^iC>U$@gZ7 zpb~KAH;6%O2%7dMtmGSp0ri$)+I#Ug1I^{N)ja|AM}Af>Yp-jqcccT^>^ck!ZXZ61wPCJo2k;R@NM6>D?xE`OJNwRZ43}DlWknK{ozz(<ymVR~d9m1#vk4T_gj z+pbDsuF_(Dt$MjJRPq7#cDmp6DOC8MsrRqq^1W-(y*sAPWO6zl_{dpP8~AZ}Fmz=W zFq2C|Ig@o}QAX&M8?Ah`XN_#cEv+`XOqU$v!1|a1bFCNepa)S z;S0(JWcQOTpF6}pKq}ZNM{@?SOUgb+`tIZ1YHyBD*9XTTVC^_w17vTMR8i#9MBla{ z?DBr~qkRgNi`lr6K6HyJ^kY_bo(W1%%&Z?LXVAfryI{6`Jw$h>-YxGeC@n3mLs$&t zk5s6s{muzOT+ma=a{H*@vQ=O?YYc2F^+Z_c{zK5j4g5rl;{JEXsb=UI0_K5?A`b|?)?7jp%2G`7Ny2|>>gxhc% z$d)HPmM=tF@yXfBeGp>4*h)UWTJ^8m7XNDl32r()Rf_==4$c|6pwiU^#l&1LPPTGW zj%QgX^#xa7RZMdz|EMY-CB8Pl=FfCqi;S&f+croSfSUma+OMA`vKX2UHrV^_Pxw{s zPO^G?^;~}vLhh+*v;>kFb!G>^&q8`8Fk4t1k#Fy$~Rf(eI~P&N72cv;J+znO^%)Di;JcKmIUw%RBkRQ8Q|Jv zi5Mh;3MbBec=bg=61cv+V}z*o;-peY?W|~S&$1e^2}lT^*`2PFI1$dRQ-$Q|g`_8h zQ#w9JslW!H!k3?W)d^)HkwaLmGhDX%3pPcB9%%n;rt4xtqqA++rhp>pB^aUFe2#SYx)-kjurVGJcRaRD zV^GCBJZgMx*P$$Up2J3={l@pgT@c<;R>frmZ+^?vDlC=~gpM+JEcYC_8p!mfX!~U02)t=Xg0CKqxEYhJ#Ulz(Brr$mh*bdN=&jtVp7M z$szg3xpe2pFEHI$17P8|RZF|qeSoH}MtA3uEm$guhW z3e+HQW)TFQKbk^u+>O?ZbPaoIFni8b(kwcA@N9O>ds~89@KajOtMre*`&hOATE#)) zveHjgE7ABh$1yf7X#_;I;Eki!!|Jx=pMtt`h9?S4>n>Oh`<>^@gvsV&f_T#~2Bi{S1|o zGf0CBM3Y&`SI;1Rjvm)eKqB|EE?Kv0wo*qoL>(9RH(w%BvAApPuBdMG#pk{;^+R=+ z!>u5+RffaP-6W4kT7j6l)4IBV0L~-lEZzaZ%jt`)1hB;oIu!*|GM}DUE8C70Ry0OU z)`(o2=w0ou<#K)0D76kl0)ZcG%If<+$n#aiCTO;$zLO^d?kiqD(Umty{zqMxr?o#6 zBvX_G;XI4TAgU-{!?S!;F3k%;0{v0Lx#r!qPmvuuK(qb%`k!BhPf{4-!sOU=L9maF z&q(CgXuG;V7&4`ryu9omd_O%`D@-?;7>m^clVoSp^OEx*WC!;(p90c6;FMcR@UtGX z@u)(_1AR@12oS{a9bTTt_=2B8Y0wel^ue~g$uf5%G2Ui3{=JRZ`@FPUOCWv&W6J>4 zr#L70?&kEVU49)G6I4We*-??QlH?DAzBBN30C*HDt|nJMY;ym8L!d|_3=*e_1J_(t zYL+>d>IOuA{`lI{!7X-RwbEE%f&`De&ocNk&*JRvt{`?XLRY6_5xZB%bay<;2GOrh z60r~#*vcIkSjLUj+d~zoKh=vtlT?BOKp0H(g;%hRT$!|0ZZB`%TKw0*B=W{IZN@?{ z*_A1dDl-{Xm5?->P6>*Lg@Q2>TcHEJ ztRcO#VZTei>yjWNyo*(mZhQma%}WWq`_*mA^|auDD)PcvK5dWfTE*joQ>=DC!q-N# z!QuA-uzD-AWgPALpV~d{cYzX|anF@MTJs17upG!zS`r7owI}m`VTpOnI{p1O@Aj>o z^HtW^;|C76CE8i}Yqe64G$HZ5J1tfVv^2nol0c4Xg}@!?A;sn0-kMAMr+|S`wP9~( z*rx(VZLK|OEgHHx(xrEmdo1^g1rqH!?=`UYoON}5_tVf+YSy@r4dX@Tfpg%`y{U|f z(=A?NI`kN^jMiVnEVsmr-3|)1bUcQ2LZ(08SL^uGPs9uxzT?wC*?j+g>lJOsw==4R z&?Rd!Gqo!_LN$x*gmyH(_tt1EK__Nr0%kUxdi~H0PbC~@TtV#embKaTLA|o*B*|r( z3i}G^@M$Z3*Ek4GHi6G{Boou#3W4Hs;Jb&E#JOI3*BjgszrBO_;gvejfn~t=B=|N4 z*Mx{hXH#iQ?V}64sV`)kBTOWWy^E@$l8U`e^tQVTf7kH6S1+06eg0%SonfUMDh!`r zw{`n(9p(+g=3i6X?zVZzZxAq;mEy=;EX~vwOu%&hmU8ny`>VjgQcI%Mlk!Q&nxpO( zR?wQQuiRoaLzKL-R|+@m9$zx%M8Vzw?~`YuN%!#oHaJ~Kpi-f zv$BeM8JC2f6<}QDPsvIZJFy;*`i|44o1RJD9x)VB6n-?+T7=KcF24K(Xvr(o*0JmA zIC{C&>Z;v#)zu!g41WRj;nIzQnrX%Dn*qgOL}yEN)RX@jl7IpOK8TNO8M|&L_I{lq zQ@h#T-b^ug925!kvICAh9mp5ZXZxn;qtTm2*w>1oV~a4N3P06$q$%)FGYb4)z{kL8 zS+aCJ_5Tx6osOVZxE{Wq^1Jx--*4we^&fVKbAC2>DBWZDEaBaNgM}Dot z_MZ;AxmTgr7GxVYw?TziY1bb%a9`a)!Ooi=aO%&mh8WM(P=~v5abbQpb;J7KNTEn5 z6aYL`SiC?lFNKAE1Qyki3l(3yKIOg{qH<}g@jbHlW_~IgjRdj~eBG0z>;#KlC{?g5 z;T~LMr85zT?V7G=tB8N_9!632*Fm;#{b%j(J+^t_z(qCG$xL$scX3h153U}m zb%U60ziT$Yj0PSPwM3PxPeo-_J5@_;amarFdM-9mgSK}DRPuIae+%c0NOWbF05p7g2ww z4&-p=LWi`{1;?hG8a3ZB5UzT(ep)YMBFVq%T z$j^s{j}aAC{i^z+{R3+iu3`II$3&3rS6gX*zB%Al1|=&Gnpg+yz!)|iHEb&=pX|J+ zy+rzSmCH|DNi6tbvW66E^K1_9_ouH88r95pUMnewIf#`I_{cD~K^=fzIvt6qX}7OA zQt5`@t8d7-2TW8GCYeIZ?EXP6-f9j%>=*4hbU_FGrS3I5 z$>^BXA9*_MuX1BPkI7kJa$33uK=$wCpdJIhwC0$qzV%J&8H$=Bcc-0K)JM-Fp$!>Y zr80}^C@7~u{$zRT!0z#1fq3bSk4DJ*)6shIF>mnZ<}hPiKGn|6!>Zs3&?L`$q|QnM z?&vT0*14+y5g-FWmX&uR9b*8Ss@KQJR{G|sLRo~3+zr>)4x^&*&IU@AZ)zvkjsRDp zH;d68U1$f-h=_=LMKQ@b#&zNQacBH&?&i)_7N z;sCN@+*(p9T{a}HfHfVmDw4eaGG|P;vmK_PYXXnka<8RWAGItr>iO_!{sn{?w(LO+(v^mPYE2Wj8xa%JlCa^SMr`i%d-jr4NsoWG9b3 zjHL!1QgS^9XiL#DG7ohFpq$?XbI_4O&}CIjKdG9nOgBshp!&}}g>T{AQ4~6it-qV{ zn=HeuAE{#APy9m1lXdGaHiS%w%E$=X(xSe_i16rwl7Sm`#3sWCkqE0258pFKX>DWU z+z0lEQt;CO&{PxZr5z_4?10R9Kau-AZAeKQr!~npMl%e$NERJyCSI0A@}>U*bCLYJ z3EC+3IKmm7XF^j#>1<92Y;$oaccoP*v5v95+{1oO*>A@rc>KneM@$OAA05MRNu2~kN&l8I@)ZY{fJB>nOo5xyY_yL(x z=6KybW7l-_k+1R13ZZcH5DdyzB(I7zf!Uf44L+*odMml<`e*-e;+CgYIDfH8RdDyCb=>CdNKLnF&HP)!i2(2_62lkvn=dy zxMVHi3k=BFSq&?zKv|n6#uM4|!m?84K}O8N>+c^W(%M31)*1>e-KduHzTZTNoGDMy zhOx+d5!G&w6x46reF(TblWGWLC4&X0Z2;oh%5JjsAm`QuM=WPD*kKTLP;@uF8V%XKr{KKU@ql1PR^z8&%Qlxt7=hDp@h{p@b?5 z(C4WWLVLcec9{a-gJ-+zL2Z|xnaFRFZZA0e?}rG)sy9FK@35m$dO7PV-xl$ zia5&%!py;zQEr0}j2m0#PeRR~yQgPp$NHn?(yZXn2F(}6(pcQoj2$bV@zY(`B!+eS zn^epb7eq?kCH@tu-V@yjCA-Jr`7SpI9BT+XibuW)v+XI2C&*&5dug2CR#djoA5}!Y zt_nZ24Mf#4Tko?QtyvZQDu&GIV5uR=Pxi`>7nXeeZP-6znJKgO3z!}0YAukJKKngbd^D)TpnlFli z7#j$sxwYyMoCAWNdhTS|z8j66{Dr2Ybsf;p;Z+FBmWtpq1v)C4X%&7~X>}RHGc>uo zqrMout#s_Fe8!_`I?2=|Dg?JKDD|f5+*}bF zFCzT(zxs2ytvRy&{r6MYNBSh*8!WJWnu(4)8;lDJ0$X=Ir1W6^>7bq#bz?6&#&CYN zk@4fCVc!wlhjP~PnrI+^VOQK$<^HXQjmG1x> zRiQMfv6;5sKq1(ikE}k%67hh$7er3&DK77YP#UF#QoRBjCcG58iD#*)+x*|`LO&#I zb|GJMfk$qLf6|*v_aQ~)&6eNu(Hju-sf#*B1ELFx2P_z?&LQd^RaMq~-y4XnpTgx9 z6s<9(zeGlU%8cu)czs<7c&G~mY2_c~zxPMN_*x7wK$C>cjo?o7vbe12&@YxJGr!kV z{iL@G4`>DY*j*hGd=#`2@H=)2CYbtkw}=T7=nn=_s*Ug^9c5cIbC#{L_#1#YPHVU+itB=+fwLzgtTYK?R(W;hGq~xAh5$qn z(Tvp)O<(Lzgvbx7(1?X+m%i&i+uRsC&6=7mF%Itst&V6on|0@#n)4ATvQ8wiPVNdR zA0bh0%2*fY`RgLm87@mvvFNO{)?2lsj@)Z6B`YrZQq5uGI2|h+jWgma^L|`dy(*6j zgw`pDOEBxZQsHsNOyYkPu0=!c^>qx2#9?dg-{XVW1O-I@Nj5_Hp?V6U36gm9N zn=1GNFxBShje4$94DQGq$V^EIAJUDv9gOBoaK3#eg<<4c)3wz&KVOI5?g_@&iNuH} zONF5YGMH9W61;Evi*gOjuetg%O(v;*m+{`cD&wkSg=0N*%qG(}HOIm4!-fIBs(5`{>rxX&fh<6$~pHfPe%0w@334arpiXG=CZR?wmBFPd+XfI(-SSB2Y zg$w;H8X&edCHA#~MEy-(=q@4g$pIhcbPVyjLVpiznFD{O2U&G7jWz+KS!-0^2XO)B zC%;iqf;GXtuGq5IDbY}913A)$wm{YX@~z)mB=H+VEagdm#Y;_v1a^Q?F;y7GzMYUa zf%`7g;-Mgy|{z=G}N+v|G=xE&f3g5dx@^*4Wh8n6U%Od9O*YKmn#QYMJ{GrYkFZ<07vi!yOu)NCT-d z>?))sFQ>>s?h;gtZn1`AVsAdyorkpubIhT4C3flibNas#JRih&@OIJO^{FuJiJ@Gs zd^nB^&|$=C9i;sHLe-H+gpH__%)i*KogArd8{UI|{;f@5`{ikYDGrB?+LB z2I~W<95kRIx6Z>TK_Z!@zc(_Zba6dj=aGyJ8$W|j9-T7(uc)((YU_#CJ`{H?Zlweb z?!{WP5Ts3UclYA%?vkKILkkpl*Ww!7-3t__NO|+W_pbGR$%>qFX3rVfv*+yJljs4u z-W2*huxd6U)VcS=Iy-vfx{carN;YAne31*BUX&5~0y(iX2jNH>WpRGr2a(CWjbjUx z%%S-rrc+oGnZdoc)AC=bn^&-cem|`H=t&=27LefW*cbj<7+TXVM$L|hLBNpH^j+G? zk6hr~BEQ=B5QJS zFBDC=3S9&|x*mUw75}i7abo#2>yKRvvoMJkkN;7`wRG|vFtu}cGDMAO`E_lKFsTty zSH|k%PfV&x1Z>2@guBg@+c;SNRq_Xbf`Er(5hyqj;kt(VAkAX(pP>!1nlS)VU9(|# zei>rnw|cs9W;8k6g8QA60!FpFPo8OlEC2u)c-LHJfh01_S7%=t5as(B<;%b z31N%*kuB>|ivIr^-B|poetuF-46!7xZK}678b#pSh!FJu*XsX&goQ5&-br-G9(S+b z8##@aoo!aJ4&I%Ql{C6)xY?1ppEB0Dtq6h&*S+4HN0Wc@M?K-HHB6ZMSFHOBtT#oi zS79|@+1HlQz*(xKU$i`jdejW4A{)_7=s7yl99rSbF!N45i0VD!By$A6s*hgqz zJEv~dhD6Dds8UET+D~aXyBJ$IkKRT592V3@n!0m#NXj_fF&`7$t$UvPUp%082D)yr zGz}pZ3$R349i^B8Ih&(LeF!0-6(DponAY)xRDk{GEW=iLxk@GB2f|wvhJK(@TV(j#6(!x+9v4H0+S^;QMn( z?f%BkKG!u#kXv*6Xi*bJQN%i>>H2dStijvcDWqM47vxJ)Qy=VjbUNp)Qa<_o=u@qg z2Kx@H?hgb9jevJoJ5 z-rv&D*4@GqaCdu*5;SMrUZ=dX3^47?P3ssz~x& z&pZUXv?70)`JwnfgCXCXbeSM2=q*x1km4V{mxxTUw5H5Gkuwu78YsplDb_gjO!V$g zS>(q0)b;I(bDY=C|8 zqv4i}G0NMlDR)?)FbKty87y2n;&SaN|Kjb1>f<%5QDc_mAcMj08cSlVb$L zV<2&7%I|2k@1^sf$+3vzGgnfR-9qry=FIt@rPn(J^3Sr`+t?+(79gGZ zf={er5-#ME(dUb$=NtbZd+m1*_ul99mwCqTP&p+yPSINYQ*;Vbjtq~0HseI&8dgW& zxchS3b;jh=|w zZ0i7LVp$nkHkvT&5bXOQVuOkO?l7wL>u${V7x2!Ug$+x@UUYkNb~MZ(FEUG3d&H+# z{np0tA-& zV2G>sP32#Kot%t%>_*B*;ewI3oqu}8wM`{?-xGr#`5OA8v1}h?$RNyIndso)$R zr<f-`8pA)x!f;XEyA>p@lG>Dd zxb;u*U;{D_fc^-S1SS`F)UzS^&ubOFM5D)tyejVzp6ggTDd)Qw`rcj(8D)*Q8ZP$M zLY^@i#ww{Jjvn%h_H)j%&TTWyl4mbA>|&o3q*RpuK_ng~2B;wof-veja0dAcQ&;}P z-LXR5FQEX9N4&WiN*br*&C97HJdjQ&+kl1gDi*^aGghECRBuz*z zZ0t9?k}k+#7*bNNi&Beft6s+6oH+>hl7~>u%}*4lzD?V8*8ZU^onq*B@oUh?&u@J| zWVIwBRA0cHZ!3Qme;~(silWcm!qNLGMQ_Z9$$w3+AEWfVM|Cjfu}_HD6hg<_ z(n-e_rs_tmkqiIxRp-YLvOGr6TX(DIn)>unxVaC=ga+T`v&a|BaD73g%D?&}w+;VR ztPa@?bU|pjTK1Yu!&X9iLzKcP*O&ay(JBXB8t zTGFzVEFhm3Ke8_eIS(l!8jD9);P{Xht;lNYTNZC)T4F+CA|w%HYeT$If&S}ss`=L| zE9F0Z_&@{y?)X~>#sqYe*(X>FM+&#QybO6n$yf*p;H;d(%N|_&1Fio0m0946^6`XH zqg#0z#0?9COjwFWXFZI20AeuT7Zb^MFgocnz~S|W41hm$3wi;Zf1S-g`h7Rc6!7~K zZ}rW4KT$xXC6D`cQ;}~e0?ibwRbNK?{TouB2DogIi+g#92NMNhFQR7ja?r)hzNZh9-B^kiH=gegT(EP0vE z!I#BTqs?yFG^?P?7xsO#@dJn_mA#^XFpwvHhOGJfthadHeA3=rJ zu5ruA^P){gI$)0Nx)qJc5{{sn;#fU+Kc`JHpnOSR2UZB|F{#9iyA6TFWY&@yS5%!> z#ds?0Lk?LoW)C;t6KuK-qptcqXP||DC%7iMf>~~VWP8PEd6fpOCdG^VIRyrMQq5uG z@5ah4D*Lqvp4CGK-$D8zU{&mH3?`f5pva=?b4DaQXF-NJVvdq)NK&yaYiVs)(?S6g z)6HKlf3HauS&7uB67mC+I2rzxZBrgiyaUjiH;|uYhxQhGzwLX$7L-pYs@WqWRwI^= zk5*PYw2bjEQKai%zeJQ&{gkC5$O#c@9m_i7ULxDsz1f2IY2MgXax0j3q^l-8A7m`{ z`JQkM_kQ#WNAz|il({~vGu}a6<>X12d*N|G99fda^uhe9#z7b^bk?P0d4d^uTh;8e z%&u2(ofyz@{NW?3;{F%<^{WXn;SLlw|0i5ZmB6tEfUO$Z%4daosAn89Pej5_KEM-7 z-Mu41>ntNj)SH4#H)u1hK&sv-kDQ@V_MW?bRu5GnxlHF1;?cSEGf&oLV(ZRxG7Pr3 z-s{pF{rS_>bOAwd615|fxb4Z?TL?j}QAoCRgj5va3MNL2j$44DMTFk0*jA9#p`0ED z!9mI`*-uhXlae``&|iE)g)Qbh2-8C=UwT!my`NO2gUAE3%rHfi*rs@&{L>>FY&n|@<0BK zS3C{>qMA=q`oQkK0!hH5KI-+B;DjSH@C^OIMhc;__#-=7Dk((B($6Rk>G#NMQ)Xp7 zQJ{+DbYOe-pwsZ&Ivq`vEEi(iXIdvn@(R{UJyd8{$gC2Wwg^{H=#4x>_!$D`GDQBS zK<3{YtJ_nvnrk-?2=_$;1G!#w&qfX)NaZ%mY_t}b`f-anm zO%OX-P4N`aCC`Iv!iE)3tJOgv=%N9jr`d2vx^Xx&9Z0Y<)&En+u&=r=5);I43dF)=-d{f+EmCR+RJN(6(ElCxFQogcxGbl;JW?(2 zR;BvN-mroYR88|e!7!gag3a&1F4eEn&gvOp%h>)$)*;*I!+7a-VVIPu+3J>EZFPTJ(<%}Hq29q&LB-p1 ztBYM@|D;HO@mtHp-N8*vXg-Pe4ly5HVb-?6j_1CIL1V=y@gycxb7K8UVD6}!5RhXH!g9rGE?tH+y%Fh`mNTJ!<@w;MO#p|)Wac_2k3)dB%ML5Ckgp(oBo?N zv0X;)p+QdX&^O$e8Q+80smgxhBB%43AL3Ec<_~-hC%*~l-Q^k{0B^-59dXiCqg-Y| zOSmbv>(g4Bh79&C#C^3)LC8}dRWp)c$@dkwhaNcTvCSF1ZQjzHer-^Z#}-@fY6k1>g{GZp=otpGaSPO#>o;*vvDx^)QWp9hi{ib49@1CaGTty~jY zKk&0BE`Bj9+23U`j%tmnN_33@!%YC${(Mc+3Vs%<` zday|}c`6bpfPMsq$Cj1Cta6?NnV8VyT0(Z@KokUO3mQN8+LvJ)w&PFlPL98SgUPV3_WcCOW}3KkPes2d4>F{MN`qr&5sqS9Y~nz$PoNpFy!GqlI|svunC(B z2g(fb#(#}D?DiI?Buyt3_3p5wPWDEwy0v-nRZwRUDaI|l(t7F?AAK0-k}3iq!-Uz+ z<=QE`&YO>_DPokB3{X$#X)!eS1FpgOIi4(`Kh(v0T!@A45> zpvj=9E6Ev$Vt+vwwepSp)5(K@jLAXSVZsUOVB(R2$eJiEcfY1YBY^^lW?O{R;$Vko zLI*)=fg{hz!AAqxSgQKd=AZZ3q43|O*KO>j{MKT2(u^P-bP^Wk2Xsqg8;(rS5_qBH zyweSmpoM0a4>Os;KrO+$wpNmu3j^lnN+C2&6d6ji1IJPU2I$lu9Zh?QPmYujx*^7; z0_FcmEN$-GoV&yJ*XjNKAiq|*c1a*oDTd`7fJ=JPRw;+Y>`WQ8An*8A^nldOoT%^n;*+fRw06zfD;T4rg=m%SR8kCh8k?tYJr>B%}2!+Z-_ zY@Vab)aqd^`?IDivYnjDUBMTe*N&sC8OKj(l=ie6`!ya$3dorteMqHtD3STFzeN8v z*bnY@g#ggF7(k-KFfFQnb&@L;FMo}CK-yNZXdJ%Ne_y%D4 zK8apZLF)v+?O7zhIPE?rqg>w=Dd5wH`lNZWYzWbZpO-gc(e6@YB+S9etC+hi)CcLd z8)j_?Zf}ct&wR8=nU_mTibG(6A5*pdDFHuJ z@A2pcGT2;H^%JAEc}#0D+=B)}R45UY^VeQs2PNIM=o&iY8r&Yq?Rbm5+~OPVqnjz2 z-8_BBYy^T~WBeb6jmP2RH-YENJnSk>&_esgtCkeBJ3iOAa3H>uVqFH>-LVk|-@7!u z!4}sqm%U`eI51}u)0uv!VM(grQsMg`0tRJn-Xa^6XW+e=(aA&Pa``fNq_r*Qq%dE9 z+o(F)#7673hiN3`y|R8zGm!ElsILSAk@G9iAuHviC_jTIb^Z`JK(_Z>3;1C7J8BdV z077IJ+9}gyITD%J%o2*r?ZZ*hN}z|+vMN1^?dX79joaMoz1_|cfU)8(gQr*e4`X8f zAuMcWgg}JrcD*?Q9@O_?pi`;;qGFvR<{Fo_`{yr0S)>+F03rL#gVl?8q;nMgHIAB* z69G+$B}99dMJLUM@L?&riqsl-8Y7+n9gl&2(3Y$!xUEwa!@nw1pvw}6CGkZ zkh27Znev4}ff(N{gEr@1Gd;TmG2HUN3&(DUU`ANDxh zwv$!)U0{#)B;RsXo!Owal(ZIh4N(o_v3DXz`Ao-;)@eP0X=#(7fr zO*40kKo90?EYPZVAjS|Ij7ARx7m%3b8+DA8teJ=eeK8_AqsG}Ye-|H1QD`tl;& z1v~y`j4I*T{mdGD^gsY|mu1f6_Qov{#mV`quzI%DyBPRqP76!PC=!kLxkCUVB+_c8 z5wyNo&fC!J=%w7s&F^7XaQMi6ck9j{Yjp*8qCZC`);k<$&A^w}-M2WQ3Y>7V@hKZu z(Us1iyKj%BSsQymmg!$v#^$_%;5NS{iiF(XEw@c0MY67i@jPo{gPhuXE|#B#-C>DRN3aGQowBU;JOng*R|9nyZSSNeUTEehx8m)<;=6x@Ck` z(PA0LS^G2aZxZ^D5-xNM+ay>XgW^lf{Jh|!pY=e6{qHK?M_YM?Hzl9dn7~UL9R?TJ zS)4uE(p6zTGYc<+cVsQF3puCgmbSDNKFkua;t4>dMfZ%(vVToQMD?`^8}Cj;rn%6` zRt+`##`{o{wC>$fN*+1(NIio?2K;?EKMxd=20KmB$r?+Co!S5a7++{+_Hj9*4ba7N zVX@>Z;&kRm|C*U1L&Hd2sEj`-0R&M5RbPIrIsQ2yX+a%qt|Bp8C9bXaztCImG{~Ix z4%X&!Abosy!PukGj}c9(t?F4sN{1|97${x9U3bBb^Z8|kmJi8 z2QUFOe!ukVkX{^ zQTlL;E_c5c0bXMPFyy*M`Q1_=z!o=$hY=*S@F*oHFv|p7a+sg18kp1wIQNyhXJUcO zBDs-!k|G&@_vzad1oQ;jcyj}JR2zZx0g}_k44ml{@=8B*lkZ*@#xLwxrM#4q--4Pen)?zA zf587!v)Ci1D4I`2Xf2!!t05u>aLrE^qtC(fsa6viVY)u1bQLUG(c2TK8?B zjjY3(2#9NKcr~3Co&0ArfG^btWzKAnKnp?qXm-8)uA8gO>m=q8&@XTuHY%cXy=%RC zStt)Hp?})kpM?3Je#wH>7`rHV;VyD^m(ZhFN6+5-Tn-WceRW{C38#v_+11$fxg@!` z**)1g8RqvuWR_60(1jR-47Rnb%+~Zq3|9Ck_P}4+R*q;M=Z_4{>ePQ$BFGrVeMPMV zsS{U~cnP~YskTO2Dy3STEkCv(ptm>*3c5^jZPUW@KXT!shn_n}pMACS(PRLLZq*v< zZ#0kC>{|1MqaRwg@(|l$_w0t<^1f8NQ!3`6n_WEy7E_78*!ADUJNUzNTMtI9b0NO6 zy4!)fI6j9QqTCm*@vffL`zZo4&X;_f_K=vlnK@pNMi>G$5)=~ByzRVrZFckc#cu1* zZH)V&tW4jADq_zjcqHmOGnn$|RN?{u-2tth=#3t+-ttFX_5lZ>c9g|6k!~4#$PdBp z|12q5h*5w<-Rvsh1s%pM`droHwYm3FFmzy)ucvhol)9q>st&9sq|`%X^r_X?!X$+e-EIR zI(6QOMS~FoO5^Quz~|I+gieNUe7g+5WH^~#Qa`=gTwqzeWQ}}qsH|1nvavK|;Ch0v+F1wN8qo>9 zKzz(jhIfWfhGT24QOP7_139b4xC@Jos54ti#1jE$Y$PMF%+*idt5)M&qno#mCYoWL z&LUF!5Q@Dxg!KKuZ3beYs64e{Xx@<#ClX@qn5RuZAQk7z%NgCNI z0yRIfIwjF$kRpOU`k+!{9FkFJ&ZE&%x%e~Jw#}rz|EQFbf(K88nkoxj`N!&6FrE=h z%#`d?wB!c$BmE=t1Mbt_Zp6v3)W~!H!5bn7oIWN>dmyW`oX@~XcsvX%Zpp+&;&R8T zr}cqLx>+(b7P2<&sjg%h;P}t00T(I>Y(S069=`ccYpy5srbB?_6{9;X1UyjWBKBur$=%elF!Zu&<7P`N>NSZts!4M z)#M#1r_feezUCli_kAahhiov{jiaJZyKJp`TrAVAfTx7k3tE%esb^<&I5a!L$F&1Q zITt-x56j-&-)C-dTR6Rnk8b&}HPJ%fdEosmC+FZTehDoa5cC^Y!Miu`$u2`52;zz# z4E;@~1{pL{pi3MG|H>CiawMapWaE_34Tj=!JzHM`=ZZ6mOowGB6YJ&Ntjv`ec8BsM zh}Saz8VV%p=nBPKUIK2?HptMFSG2?zs6+j&`>H%F1!R;5vXn~TSJwAD`yBh~} z28vEjIj>H_HBtsDde`esPzK@MVs6PzlMs=VYHPi7BVy~J`KVr?cNDk8B>53a0MvY) zoJ7Va;Fl&IsU6#-VOcOR0sm z4slDYkb{+)^Y><5KjAVE$Ayh5y={6gu>*6w&O4=6-2{e4VUoXnnuplQm4D(p|LiEZ zbH#DbeS$1Yjb=K3g2d3C#scG$V!8{y(KW3g9;i#R48q^)SMSagv?nJMNd!l*rvVtn z0)%@1v$8e0F^&9~p8P92qYy=>0XM`P>Ym+ z!1`08UCEWiTdB^s_l;(eHVPEaS=IHf7^5kNhnd#x0?MuaXm$M>ht@9xnBP5BXQ9h3 zy|?uS2Q=<5o!7r8LZ)wHWAkeU0BHTpvCn#rwDhZq1&P_;@SVRD6c&{TuM7om0}8Ub&yEg+E*}NZ z;^dbp1vcj9WXjT+&5cc{HgD3tmq?HXKsbaV3^|5t?vD1k122kx=+xrJ75wu)?`HkB z%6z$IC?FuDwgXtcJ;%dRS&3w{=dPyUGs#Hfa35j8`U2K2^j`fe1^R3M^5N<5d}C+; z#Awjn_n2au3~2L*hndtG4KVD*CutA&_4M0OV1x_gGKDO@P7g*H=fnG>^S_aLkx%icoAt>R zx)7V9bvKbGCY->pH3k>I#DDZ1*-=L9noy@0_K;6SUFn%|k0`dPUaern%_O1|$p5^7 ziLCf5+BR~Gq*$lhRNNj&VviAZd5Z4&&%w>TQBH{GsFiDrPfc?HzzDriHb;}wlm zA(=D;fYN;9zu@Zz8h#7APilPdRE!hR$c1;C?#^r#iLe4*?rdL{@w#UZ_w{zksx!=G z=l;dVppRW^=b3=g-0TZ1$5^_O2K{!XgQIY>=x5x&j39-Q@00av%PchVk|3sRy~BO& zcZ9ae)azK5r9m>Kn-)tx0T=QpH|AD%33{IwuDuBGp*|M^rl$>s|KbA9a!Cuj&Aw)}{_XJo}w5f#u{un7QZ;sQBAH9{+|PuRLRsm!*GTLIgk+HZ!epkaaAZwvxU z?y1O~=6vx9x}otl`7bA04;bG{%Gtz1C2UHyAF}R=b;?&@A3Cm>G^pt4x`izIj=+KM z)&7d+_*&hPu>c&pfzz*9N8J_@H=i^$jZzwx9Pi5o>p96XL?EWZC1XsA1|u>$rjD&P zR90>jAR3RzzM(tV^!Ax)z_rBPXjK!%gLn~u}h@trCm~pgI zYcdfJH!dDAEsZrDi-p#v2@6L=(Ac-{PCB`?yBW-Tv6bK#Pa9PfI868S%WrU|Xve%< zw@T}nW-xi;m10rQE++ndN4o)yX*00lY6Nahs7)+i-bqg$7FRw7F*bcOVl*CE~HAxF9~UtGV(=U&xZ8oAOq>>pWG(jfdHqG2um;pEVk~aci)kVq|0r**<@T z7=^(+;TN#qtjkSGN3XcXi2KYy4qwc8sN*`-)Yfoynhb^6t1O>SGDZCC+!NR~SW2+~z#yCW;9gPtIB#Nr2M293f?p zH>E1~CTd@GSVyUqA;LSqP?zU`)>U zL6%(nwGc;>o?$b#$qG-ZVd{<|NeKH%G_OgT2UmI(~lK1WXs4o#@$V2Hg<`&BgYkz20Ak(XJcb+@#@E*u^9Q|rv7#G}=MVp;@ zo(!`#CO(YjA^^EIEaA6k7627P6{#1&0i~@$Mt3#!jUVq*OtU2GR%mf>a42BYh&hrz z(+l{#BgG18x%u#Iw$$en!f(MHbdQ}hQ*wZua@nV!7SFqkE`d!HflXm%itAjPL^_26 zDx2a7&BXEw-Ozvstp%yd2ftwqFw2M1tC|(QTGCWr3t4^&*IFjE$;VF+(;&7XC|%n5 z^(!?VK2TT*)m!GsY5^sWk*&v+ue()JnoNb( zMOOEpI&DMkfw@xjzakn!vU{=5@u+|N`=Rsj==}k}J^q*WG;u5iNtyGT@ZLL#=_^n` z`kH`#4j|&llQqs<>1`^_0ce6Q*J}3j@7fZbt|5xj^+cU_svj>iiRbGstLq=#M(zq? z#foH)xYOA-$_ES=ig$7cDUB8DOT!sJZ&=aX z8!=53dj-fPlqG6*uBDUHaN=y(k1Vf5zOPx&{R}Y6ESZvcCmPpv`v6LxYZ(lTWqC)h zI2gDHab@#w$Bs~Q2x@?`%V6M{i|MWN+AE;v<59&^mA5?pH%K4 z=ErMvAQr_;RiPCdv9j6_I*G!U>8*iL-br^bVy4Jmiy0v2IJafrg&weneBSrlpK0xX|MEY9!jevwo zE2xSj6(P5fTI3_;!7K&J}sDrXz{mh!&^V3m{>wK}BZp|rlhZMS})H4B9ZU`Z_bqrf8lff|U_#>9-Nac%O(nA$dIbucZ zUrKaFaOk5pBkSJ4FL*;d!?#L@b`J-$DF-$UlE=VjFh0c5Nm5aJWZdHOh(BY(`Hh>{ zVP5I$nis89n#TU?EA8HQLqTU64KH@F$k6su2Z&dls9^W(#+Hi z{teWqOQk7y+C-$X){t{VbGrZ?*2K}EsM;~2$-c+tf(Ia&L}m~%D?Wf+YuhFv$;}G; z)2m-arKMpY!E|3O0P;r$(c)oLwN~M9aonX-dwH2gqFnkLN{ zSHDGB^DyAwv9PzTQpgM44H@2(v-O>FJd2>D_#3E(n2DAQe>rRfEQ#8>?!D$Sa1^UO zF<8%cBC}+%nCe0UdB`>yNJSEXS1g|X3GFgTh6zwTtz8)G$Qj1tsg>NbqzEw&Rmyv? zfX&GJCtW{|0*Zr2UDfJ#W%aYE)T~h|nk_}r8m#5+D;ueQ+dj?M;~2&doS5_I&izLK#Ie;P(}(z~3UzXqQdU;veaMxWVS@st`l2(CAW71BKMOu>ou7ke=w68kyyf1s zqHCxsMLPU8x<$4FyJa&PBoZ>r`n(DmgxZs`p$w+1gGz*6rAJ;ohoA3KzOHt2Qpz>! zHk7?;rr}EL!^#~m`F3&m`X0@D8z5aqXQK_VR~^_d#PBmR)p6Ytfa3$#vU^>4S_*@2 z05qu7q`z_a_FNE%zgBRc6Ak{GI5H2`Yz#`jiI0?Ju2_mWg@;2Ep`HS;uRsK08)MN zYDJRtiAZpfF;O3&Q@I-zRn`r-`0VLQv2ggb2W)FrD=?J6B(xAN?4)N&5AEsN7BoMLKM*~rstYU8nm?Y}ZWed(k&HDGFDUOoWBzB5=BbKEo;e1|pIF1tS8<=8NJ64i< zqsBE>Jy`p~dqZmkzBIWGQ$8BF?=2A9fbmA}_Y$J3`AS;$Hm_)7=3!S(>M|}UTIDe_) zjlNB7oNya}Fe&R68N@IKr*o)>DF)=os+1ljb`xXPsprzwO0)4PTI8_QJZz8$0|-rQ z&aIXCc z4fE$O%Xb!Qf`0%>c`(a4<1o0n@rUSNQPz46r@r09QIlX(hsez`#jOxHGkyunSlON3 zi6jQ(y&q&u*Fvwa6j5X^8i3v6IB)*P7{S7acGT^y-;S7X83N;JB_1tIJ{!;sS_0#9O75HUBMzHa>MfQjxc8oT6y91$t_`u|1(lZVzc*5Hy8WAi=7;6BV_urU{a44-zf`mzy6APZ z!cL(`_!Zu6RgP*@Msfq|M_trJ>d*P90^I~DAsa0#nK^;)Iz5msMF=fz&h5uKcSm;& zm(hX2A64FKxC2YPhK-C`+h~tL3?uOMTsm*68poUXMKEvu z-&

T{E_hc|Hm~x`mv}6ykZTpeLXSGchNm=kTiey6u$HouKd0h2b0bmUyLO9c+X+ zo%^(7G2lqIjB;KhBt)CfPHdS+#R0qnyY&77TFVkFQ~v|_L%@_u5?@M|PxMXEkD?VBG~Bov*62+@BSk>T0k-2ZOnT z!~9BjP~)Ll!~u6@TQ{8=&}(R;lar0jlJ`+>xJ=}?l?yM$8oPXpM%9KnEfR+FK}7$+ zj)pz~Yc9ajGbK$6M&A5^%}RC8H>VIy&|K<>U9??@ZF=cX?uOp?AsKCR?e4Ew3d?+F zL=)nn#+)?P$MV=xhVO_p*0MVzdmo6aQB5;O%-&ppF+m&A_r%XX_Zm2=1F-tl=Odz_ zOb^5cIG)Y8h;gM}mIb>9Bl0Kb3|Uc(Uh$^;mL(8D*2!-GFzt5ryIFcfpF(WJnnCtO z{D$@Qd>{H_5q-b9Uduu;?yVuXfgs@jMiZxQo#=qLqo>j@L1V1`+IlOyRwbKh`E$_G z(fE;I881~bF3vcNFRr^)=196~Hv%dQ^9ooRN^}B(sijER2j@mj$xNp(E+d0 zzprrVqpDVXetp@exNJ5POELNLzGr?{^Y=O>j5~e(G&C3mYr5E}%d0@zr(M1C5fhh+ zHRqwtj?3ti((ulR5nKv$2aOmnC&iaW@SLu8m3$pqHmdedH;`lmi9zwU_?)YhP1MiW zYR*1f%CO8qGUwmyT5Li)!K6%;$S3vIrNH9B+=D-(ryh5A8yT;pUIo8LxcF-nvR<&* zb7TbN3%LM~NdBR=D-|xCd&2ot=#$Z(?#-Y=vtcn%v-JP8pkC16{83x+gX0YS?6()UP@ucdtmux8&Ryo#>b zl@<#7Dk@Gh?<;WIWl+3b6mwdC^tbBm(W;ql$)^Xc*V-|O{xdwpzle5AqNLPbebS6bcc`)hlP+2`}5 zrlweMhwbzEH9SM>@%e;{lf>Qi3JMFy(%iS!^Q^eUv%JRX@%Pfxq4NFzqO7*!?)!_A zo2j$Bsm9}&nVPx7%)-pq%HsLS+wEj*bnEl^GPGj-R=7SuF2%Qyu6^l-RbZ5 z%iZsq#O{%{+bl9SOHo&buGG`x@%8ldM@&(az2qq@FCQT!FD$R&fDmPorzajM&0Z82M7q%Gx=QY@@)X1_lU+d5Y)w|Dna{W{tDk-G8h>;eJ;+35M_@AcK=^-WAo*WABOQA<2)o1(hX+vW40z~ATb_i&Q2+v)Sz z==a~}@7?G1KSDV>JU!Im^Y{Aw{r&$^QB=s+=K=%*>+$xuCA`>@A>!k_nqHS8sgWRr8+2x4ZB2%m4xjB#>np zxBks&W`Ieo=cf}p zS37n*nkm`cU#ebf{R# z_~ZNc@2^6ZNNBYN5}91iFf=lyQmG=4$z=8QwY9a|w{PG5FtTs%s62Y=Hs5vELcw#3 zzc1^Bj2{-M;S+Pwts)xUsb%*kk^nI44mso-hbGGoD1o+AF(S{ zoHKcc%CJwdQ#sqt+3ww(dpQ?>^R63CPg-kuc^y8>z{mjs&eT`7`c*~q}KVEp9z9a9$JbJR)vxJ^~i>t0X^2H}dd-fNh zXQAq3ecTzqe{A2r?{7&$_`yy49^~HGwrSIYN$if~gLiB)h9T1as1&(>0wA(l zdJ-kmqq;77woGirz<0++X#bKg?BDU=gYEF(gRXMu*}oD!^5y6$ z68Plevp~;tnc6D35gp$K^t!Dr&{kc2pau@$Lp8$Uz|&jeo6*J2@6BV@3# zI-o!#y`Y{u$=el{m}Zk#~pjT6=QfIvV& zO>`HB1rjFMhHu{$UKC7T-2|i2d*$CPA zC;Id;*ok@Kph_ZBV2P<#B$HQOPv5uk3jPRH$`Y>9i*GL6WY3{zp~I&%dhS~sHs@Ad z`Qk(56t}Xq2U`bsMxl>yAJlM8fEuhlo4#EGS?#HTY=gZN?J1oevUGY1c z)5jQ+B(!C<2gf~cS6h(wY$33{MHBnQ&to9V` zY~ECQ;ImM5<%&-pKDfx0O^=W7GUVbOq&FSW9s984{EmkvGW+cZ;k%pe_%3|u`(Q-A z_|8O5+;c;l?4^lMnxCcGb6^W>JX{m?S8ueS;Ab0xBBMRnHgAi!?fkeV3Of&MOl~<` z6OL@=Kj-Ozn$iZkmhbS{R5b8eMtm~(WcaCYdib(~@9*|K`XKE4r6jzQ-G~BYAAI+_ z+f1m<^-GIiC=5$BZR&uU?--+PIdRW@YuDMleAQJzd=~J*02S)**(gb#+IXNkj^pF% zKmf(Zxb@Ce)u<)*wjYv_osz@V2X;!XT-o(;HUD{a+>hzmx$;0)sg17X1D|~H$-{@J zYp^EEibS)XI$Pu4{_+YDO?b(qo z`VLNe??Nu%9P#aa`#34){J?*q?!Z@k7izjA^}f;vx(YSf%dfhM&@_~f*@ zisO@0^a`fuIum^ETYZO5xm8yYd}`N`o{}0}D+WGA#U~%1Y~gQ7?I|+IUJ#%A);w%3 zDn3i`sa;>~S*FodH1H|f>MDXy4nHc@Evh|>Ypzm~3(E_eOR2g_zz5s9Y0t`|?3>CE zAAY2LDL(1)W4mSJo|Uy{Ed!qt#iuYn>p)K)J0J1ve0EnUZLa$kg*`dlg~$&Fv*mBj z1qXj~9za&9^yCZAl3MHA%LmMNEUvT)4Us;+h#M_$hJyzWW})H1X>QK{)?we}Q-iVD zQ(L67IZKac=dsNM&|+3yzi^tP}Uvg*pCr}0ahZ>;@p@xEkR#$l_lk1{2DvcqRA z(H_j(@kTBDP{#CzUZG>g@RiX>p8Q?ToU8DbV~HwJl_*w~5G4{KZ9*gxiP2R;EY^y} zVgvdi#ax{#7Lz$PBA=h1XOLKqAp6zWug)y8iw$^dxTxB@w-4>AKF)}~cXMqV*?ai# z{`>FOzW3Aj@ag@ZzW@GvUqM&zf8`ClJ%YB~Z#?|Q!B(x({r~NSpBrw|b3?SpkanWz=f}k>;Isbp z)LsWY8SOFr=-zu@2ri;$_&nN2&yQXpIeL1VNU~`Z7q*FM!Zy=XK0T_{&{JCiJr7sB z_6#5wA72bkQxDmL9657>;XFC&WN7Co_M}tkBSPMy7)IB8Whzm}2ow9UwMVOmLPZ4}7SbIncx%kV8;e2{5tQ`Be%RIz+ zlC>}ni;-r~(b2{GxN_)uxQO;RzIQJ!+9K_t0PPNk)D*X&!W$?cNdT9eWWg$=%s>gH zH$i*0FZ<=FTUswbW2^5Ka%!W6vH29yQV|Aoo$QT-ba= z=_!g&?u?wY_Dq_%Z^oCu{KC(VSLJID{@&=okkKBN1;_f+Q?mF}uJ$C-Rc@Qh z{g0f7fBt2}&+uY;=7+$T)t(WtT5%)jStEQ3^!J$Vz4ssfdiJlm(*68wj`j=>5BEe& zI58qkkJl2oP0uRYTp}HcEx+|G-owZ9=wX;17r3+9!!UM>qI7yxH;tZbU$aa7*PiM7 zT~j|q+Um{LT<;jcZg;nX9rsu8^q`hI6s3n*4|g=koM)m9}dCG;5x+iL^XDLO?s7DHXt?s@LS)yJJa+6p`7z^dyMm>FgYSX^f2N! zOph?R9`w|%nw~E$8YR^Z40L8P(h`?DwU;}QO;_Q<563!5vNM57JP;zu`9!G9VbZk= zo44Ou^km1ms$w`?P7HY(J=u19NQ68YnhwSIj#qJzK|8Wo5cyIZyqWauE?s*T2HCaw z<6OA4wP>JAF6WMGMo%eKSBdykr1mTxV>gHv8eQ0x*nJsK(#VIrBX7V!*V}w-F%WBWfr02TvsdVjGM|xIWb*+TY`e_e+gXk$%!b;Vi0@RY0nL;x=O;QQnjaKdMcsn%JJ>)>((Ca`qNXE_~aJxme-z&pl5k} z%F~{;%51*gs%x2V$nM+Pvn)L;Rb6G_vnuUbS9oJ$m%7hKu--X)dMFrCNy|nQSepuI;;v@>58A&i-WU(HD>YB$gvS zO-;DmO`o8G$0kWc&&e5F@}`pv>2&JR)-;cbtDnJT);m#gJ414Y?jO_->h(C8+o>NM zbSjn3Zd}rC=U!CWU=WpcPxq15?(TD_eCGzyp}uvGOxB95Th_h3yb--6@`LF4;vY6_ z_`?@(GBWs=SgbvA`_|*Xe(l*8U;IrDH_jP3NjB@TBMsIbx%?34NXDrjW%S68gM%~J zk%Jf{~~leeJc^?mYT=mYzgpS1&4e#DNO#k7^J-kq9cPyd&ZuBbInP zZovsnjHH8+%TGkw8RkSZs$>{fFg+0$`mWSRqcRnN@0bfy zdkC4-L=b(!h?}U7#4VOf<0ePFtUP)a=?|jk$+`_M)jfHW=|R85V(mHT*n0fg*ZvaW z^OGEUB2$M*(h)(9?D0pva>fzqz=IXY$4uJCNYKrZ6G(MB!Zh9Qk6N)aEu05s%5$tg z9`=nOmtuM%F2oVK17GrYoRih2gfiJU@^SrFA{OLh;k9$C!zW8n0qt?2qCNcDYtPzIEKlA31CTR$8({%RNU0WkX-Hp;TYqxfMA5CK;RJg;sT{F z+0OdHQ~eZRdVoS-8dnqqgbJsDJFcA)5aPJIk2p64u0AU?3LD)rfn;pFO!3JtCZ?xx z!-mG2PETX@vJsE5BYXya@Z#}jpMCAwXOADv%}nK|86ZEpk&hWU3llMh8A3j0cprO^ z;0VD@)3GZlC5>*XJA|BBgFKi*9>hMr7M_w(faw8BM!1ufx_)%2!*|35{j z~omL)IwNYD`bEhBUYU(_@TP#bR82?MCGv zsj-L{+N4&Pa8k<1hpo4 zhK7r0`ec0yRwgSSp9KNp>8Swi$|#+4JrYTbqleTXA2-jl zm?8WMrH%wQL_MoEOiHmj|Rb5qCdV~Q~cY)B* zEAdfXUM&e~2{UY(MLdB}kBq_i7$hd_LyZ6t`$6$gAuxS~Yt$ggEGoqD|7ZuPvP@-rd6)&_v@HB%9n4VFIPk6=4u+XkCDc1gd| zBpIRmB}QS=+Mom>3U{R7LOv!`DAE~gO!7V^_DGC%Nvn*2Iu!R@1(&$%p&41Q>ksg0 zy(>B%YpJb&sB5hLy6{=5Jw{x#J8{u6fe)sK6##n>*n}Xd82}^F9wRsgx>&3|U8oMV zXt*W3d|g9skTUYRsM8BBhJtu}t}A@T2VBARsOI8~QZ}&BT5Hlp;5*`7VHI&jO6aF9 z5#W+tv&<#^UfH;GqWn>rTn(xy?fL!Psk-OWagSC@ed9&!V`N)%nyV%c_?W`cOdPV zh{sQz`tYI~g0jJ>b{V+#ARk}xduxN>uB}~FSWr}Zq~ANr7wyHZqHNU#!i4#h7b%Si z;ucVRf{NOvbAbqJPdi>xh9q%Y!Jc&KB;*LK21^`FIPMV$d`Y(vYY#m`*(nGiL)z2N z-$CHG=ON#On*f$zBW^Dk$Jlne*W@3UvB}l6E*Ff`o|h^?dtTb`{59R(zt6O}v<6%I z))x^!FTQwm>u+-DiOnj6Kr+b3aZu1Kh%Lf8ix_JU7x&ELui(5yCjif{l%^#9L-gag z=OKq$qC`H%?JmlLd>jk~QQX7dQP0Ia52+r4xMeXt2 ze0u6qPv*3_w1z~-_l_QY@#xW`TeZ1SGb`7`6+p(2k15}Todu>{t!`(yxCeLsZ~{)J zBxdypEsmrp%9r#gp^+YGFoFvC_?&YO7x&<(IZ25n=#FbwJSc$fQ}v;U^C1ww+mZ2c z?e?qiz8D{T`?1CiUrRl9_e&eTcK6+PZzy`)fR1n6u;Y`LOm$B_`89lf zZL@*L$7|BPwRP*(A5124=@H7gX$HciS0svo4pm~(iKLXq+M~m|{=Z*#F=9UB`1oeVd>2o?rWJtY%!J|5$J{Jsr>@0ab@?ZvbQ z)3d+oXTFZ_z4g{N*nym}3Xp2GRXPwT{8(uGaRUf`+so-8APfwlFGK;7=6HwIg^i1^`)q5~3@X)xu4M6Rc)vApp^^6uR z=TnW1sm6bPekz6Hj^`U2mpN`g$LDX@u})G~SI1w^rsE!M;%DrSI({S=$e&9pAW4xQ zNWXucVVeD?1i**^#0&_Sw2wLM842Jx!0*Qo)bz(2l0v0&uK)!DBF@J#WgSmXo!^gp znEi2diC#Yh!gt#!S$*xEJ@8O1@^P}w`fj6oyll4?c|KQ0d#b9Y?X2+!nxElC<}&nn zFQYOKOb$(U;(qqdN%3S19Z7OhL{3`0lh(-)PY-Dg;kmS2Hg_l_!r=}b3evPFWDUiX zv^a$635k`Vm})QXZWf1d-+D0ifYoBdg$|ApeIoQ9zAN)WNOoQLWcz!5f0JvjYjx@; zb9)Q91o5Hi&Yuk(%p0Sy#*hy~lk=U}h4N6R$SP;7R)(>PN35I$`2|jc*0fV;WiW)C ziJI*r=tzizp^%tRi9^_tp|M~LpGCnw6?HXT=fzo%lQXkCb_ZZ~aOl~|LgSp{HXqxdgozCW_xtjV=W{fK{ zH1h!3Rhg$j@*^`3^s!UicnsR{;(3H@wvi}tRIfn6+&YBFfuQXDcGq5)n%O5L^jg>qoT)3o_)8F&bh7Et1 z{gl%lL#_+2J4vIwadx6!JeD_9IwpRv{`&CA*Pi`roTO0(J&Q-$>+4G%6fRiQjP_JW zU-L^>r~Z(uJvW0MBFCrvBimN-rCdgP)`*_ca(tG{5i2hvrC?brslNx~^Zd2cwcjQ3 z@hOL%m2-SnN)gM;(#sd)AwH|aXQ8-{RNOe%hP$UWYs;i(jm4)RJ=cNH3fgmH zt1ji5<---Q3e%nqIdRVl^sKt-TBZ1u7ZQ}AJ!@Zetx9}WgHHu!Xk_A^)dfCfR9$N- zKFjd4NP9B)3~Se=>Qa_H6QI5vdcN?*f8OxLFWh8$@Gp^RB<+Mju(4PP2@GpP6_w}^;ET(68xCDCm&gSLldEkLni%*I8RJ8UCi+^$y zJJsw>~0vNgtM2|&5plcwjB*MIrj4I3_|)rVte_#|(r+?}0VM|;yr{mIc`R8FT} z@9g1^VFU zK-RjapTODv-Ncb|*NsmlYtILot#>}Vcus|$Gdao4pTN^o2Akya8GSc$A;Vx_c6W2n z8sH~U@E5J!t$I9FrL}tyyHhD^?Z)hMw>t44Pz>R7t~HHK_nR_8)`I(Ck&A12j~;1h zY5hv~k+LF!<+Nvi)!!V(@NC$SRv%7y1kq?j5{*i<+6$3LFM>y#3P=5H6KSw^SS+&| zZsDSEJEEsaVwTIBB9Rje{FZ=^M($L(C6@@5>VZqhlSF-+#7f9q65f&LQbIy@2EC94XDzcq&YyiL zi{( zvuc)Y3xsg#&2vMf+=Z8_mc~IqGZaV#Qk_MhH2zbEP$x0B zEl^+L+^Gw@TndvlVt=n}e3m@bmZ!(}@?_?%ZNJM@T~*W5Mwp(ytbNDS7U(b-d=`6X zAS8rNGU>YTi3e=B^bT;5q%Izl%S~;H4u;_#Kp+O6HEs@yV*-9gh0_TXt!(H(cPLd9 zoT2G4@DXg_jEZncP?_B@Ha2#V7*nvnDZ~eLY!6YmBy2-s{dL*Jta#| z&>>_Wrp6r>07542y1Mu3oS4g|YV5oCSW%h|vOueob5 zXte`ftgmapATeo&PwJb7~s#Pmqo<#G|aX)cE7K^3zDq{5`PhoVvCuBOcY$bf^Z&~f3-r}ZI z;E4x+l{2S8s2`kGN6>ljv|frc3MnCYQLIdQMGOdW+%uZa)ud@F2pd3%!^Q{dz>8vm zGgjnZC7y>NBRW1r-@`o;Bh?kkXpeYKK#U1e2qia!WFc_l$cM7l9--#y1znk`bJwjs zoe%Q(ytMhb>6}Iv_n-l76&r2RfJ+NHgF$VHh8?894-*!(hATco#tl+A$!2C$pn5zW z9?8t8IFXrALDOthZw09`eTP!{Pg2$3YzG1C%r#4VuFXsINxKTS67uk=zvZ+iz54Yx zjux6z(PgomN($1GR7^2Mj}K_v>e8c{>lBW0G+BCR@HO!7d40g;_zcQ8dahovTDz_S zt8yf*^FR@4?Lo{C;}=;V`aebbBZE(|FUQ`jH70#O4JO^I7zrwOrcguF0;YrU_F;oV>H@a6)2eaRMB2FG+rg!ih~&*`h*+Ql$34=kx(Pg^0<|?~ zgmwzN$Z*ZY-?5hh9QRDvRGAqS)L31++cVpS^KgqaGE3&Cg0;tHKAM?RF`OUwIJ^e# zENzo8h#n)-9=ZI4(9S?Rj&a0UdcAMOp@*YqKF+f75#-Pgh(#iJOW&vUxXaNI*Oavb+) z#YT`Lda&zG%pljHxMzeMnO8C#Jts~$S+L^(Xk_Hfj2+LW&^t~&#L=T_S5LJg6&Fj) zMx!q2rQjU0al{Nkj3au+LtwA9quQ(c+;*cx7rMAzHUrQq^HLL`LUf3noNKJme{L~!S!L6pPvMe2H|7XX>IHE{Q^%onk>*Vqy_@ z2kzYh;YEd!2wJf$1!reH_9;JVDg=m9@hMW^rz*I=M>C~+>*&_4Kln)^j~;HxX6`H( zCT9>mV(dCrqCjzv4mDr}9*!QP*DIB%M`+L?>AtE#{uLts`uVs=Deby)Rf!*9hM{rJ^QPw?xTdAi^kdU(*dkLNUdWkRmf`%5rh}4eaqsrgrE9bNqe*he>Ulz91!P?_-KOZ^AI}3G(ov{ zNZyQHH%%iqdNt_EiWB5<@QB^XUwA{bGG_H!ga4uwSsTRG29?!HAWvHH@<>S0#ppAy zRYXW7V+1i~MULzXSwnrORcnm#Q#Ia{NXJ)+PeJV|l;fj4h)O=pWjFnJ7(ZPyGpnLk zE|+H<(2TEoxH$pM&CH?nB4X%AIeI8F#X_azCj=-}{i=R$K0v>cuA9R2$OsjedrJ_r z#^ncS3gNS;*p;b08S&vKRpimr%e!%&;d<_y898<&)7*nj41@f1=+GhFm&kZ`awA%J zs>;9g^PW_y2<%VnNp5L274jvQ%#6VKP>4qA}eZ7 zN%WMIsCXPv~S1b3FrPa*BO-m0tAXDuk#1RvS0sy#Qd>RJQ|*b zYgl!yN_@&Ha8ZCNUVBz6KJ?m&&x%cvwbY)q7N51lr$E7P9qqY^;G{I7KQg` zm>HY|-#R!dZ*?;KgaT)OD{pkGlWuULPrIGUz0MXrf~N&PeSm0f#rU+~Ne5!w13TD) z4L^qfUmd}T@`H$%!B=t5j~HhhcE5_PWqW=7zqMd&x?ioYZ^3WXxBOdCdN#bY;iW$+ z+fc!A&#)EGsW^W0Cu9yjVM!z!5IXUNBodJr=k2Cw#N?IB^{%!^z(_N$Ks18iVFE5% z8jeJw3YR+~kpv=<03DE?(YsBNh{>&2x&tmksSLO=HwrVMQt1OJ6)`9YpL>9iqPruJ z4zKKpOC3=d#|a`JeOD%v29N}Ghr@5;OYRQqcE?-pFLxRbN%snJAxmdqq=#X*FM5S=nJGi7SR-ztB zQaJU_C2fyLeZCI3=3{A~9&lNvC`ui5&9D$Xqf{nYTz8r0=9PVT?QcSQ3LJQGeyLQ7 z{vY*J+|;O(betog5mjD|c!65M9JpoZ65a8sL@m1*5g>Zr4M2Tu#C+|VOZHgc;-ZS| zHa#~XL!!bQ^d+9qeht$SOVeW0BN667Z(x4hi!pNc#6fD zix(So5VBkfj)|^_)t*G=ITh(S6^UGWaC!y^$)xafcXxM>9ZW8J_oPS&nr5b1tch`x2x3zb zL=VGV3zF<1np?#fX^#tRI8=6kiv`!57tw=Xj!8O*J>iai)z}>Cn;Sve)6(*)cq+_- z7x8k@J0=6)LxP8Nh@Ok+j#Fp$Gy;lo#-_sKQ%1zcL-9s4LJ7&d@Rf>E;%`Rl!R|?-VRbi<%)J&(V0r3pe8EuUIQ67d$*Q=Bz`af5QHmw zBm`GwLcnoP#4GEPj>}|G)&<+$5S^3QzEb~K*KK-kuJ$DOITd%N=TzkM7-H=i#t*1~ z4jlK04t07xY+J-@1S@WL;aLSz*JD1g@!Esp9$Sdc($gq}5SMe86tb|_26mpFK7@`> zGOv_Pfg}PQGA{19mb4iGFU&hw=OMu7^?H3k?BVa&)5zap=jL6Q{oY2fx~HysQ<6}< z3vSbMbK@RNkNZbQ@sx@?Up%_ikV{W*PZJ9^bRkM4#66C1^9(rztPNOwlhY9wP$2#d zo@Ow@(Szci|Djxb1R6C~&a$TVJPwH_6D;^^I)@%61vyh!8mXhfvECxk9SJ@TMO z&M+eyFXIWK>kK_XJi+vgCP*vAUi4pyRZ6i&+0Y=;i1`7FiyAAT+UpJBo@c8!=Ed}Q zt%OYE)p&#TM4uP6=KDn6cfB|e8n;?SUQCbI`mS}(!%aB#j=vw&c&&ZoR(w<&q@?nzXE_!=Od2>%sGhP#k={a<$M=qyF8SXhtc&ATfhPw_u zfR7Jw&vEGQe*n)pkTsyTx-9d+ZJCTqkLQ!*`Mmf&PMjfMTZ`LWT#CG`mZ;sseX?h~ z7LRt9bEfe9k!6H~+}2QsbWd9G{i*H1g;vVXVCXKB}_u!Ti+M z=Ce|}rzkydeE*3XVfQ?-C{5#|dp^pw&(d}m-g4|wye-(iNB7}mIrQ)+p65djJ?*3BsTHDjSr7_CT^VCOAak%i1@N8sZ$N+Fh+U`r+{n#Ey zmdc&IU}Zt@zwne25C8=c9WNJ0E?vhBWkBt9$PQw~2wWopk| zg|r7pEv3;zrp2cqJ-aJ3uQ{;>;4te?XFg+{bqf`~8XVt+^QG^O; z&oj^MibQsO{6zKPa5NGP?0mZVnZy1_WaH-Q>hNLo`Qb3Sh~Q72sovIxZar24Jz4Ep zLeIX%Ro5N);*;ClDnidf)m6W+7Ih`ZJ&AY4CBk>>5jr?Ievqb}t=JK*cmer-F~*0>eQy~=uIa`Z^8GDNr4qk$ zWU%`>`N^ZG06m8-{*4{#6!p@yLx5S@A@3d{)67^SCPi#b=Z-nY<*s^oyuIO_I zByBru0)YdiY7d7`A??|>uV~zp#b^JLuz4ZyS%gn5|7^g@)t+A4f1mv6wgvUU^e9{g zg(8Mmeo`n%`Ls_WF}X)^K~oBJ>P`9O@}}7^&h=4*B@&5(oskc^c1aY}C@ocBM<}E; zJu@4|Nk7~je%7gUUc=98k11@*euX3~N!3w%)&w8kmeR91y6f111IHAS>Y9lI)dvp1 z#$((&Z=c%uG}NFQY9!UHw7Xocj;MpC z;2CH@YjJsN6I4t9X6!3sK^PT+}nRBMON5_%5ogtx1o{_0l` z9H_1V6x@6ahj+rqIJ9Y#@Y+*@wPz>(War1Q>+rU(9y_oG^el;cN(!5oh|dB(6-f_2 zrJMZa%Njgm==}xt;pi~{%*x5$Spb9XlzV!>I~B&|49)p4QUbZ$7jB#C!HcPi#o`$F ztkDi@EF|Su;n(9;_%B>Tcc{3vMn}d(NuR3StWpxv2(U^wh{UlGrRh??YR&jrsy(=3 zIu?mY0@WKQB9Ta3a$sXJ^8u$l8?pABibj%cn-A1PlBXokmC)g{2HH~~Y+fWjMD|h9 z6}w(D#%K7KFMD6*-gtl8qv9++KqWxkWi?p4)Idr)hUKSQKj2n`WK7{vc}GOVG=+7> zxlTk+9iI|k2RJ)JY#*Wk=aV6NoM9c+g%`xELqU!MSaDpcRK_e)M2{;vIMO0hO52TQ?pqu-=T=?$;*-IrzGAfp{q|?=hkuuONBr{RIrJDn*d;WeAHd1+WIz(;mNJ&R zz!p2Dlgk}RuLy*Q9t(|byYVXg$s}Hd-vL%J2oXK_j;JZ-2CGuvVNwEn z;#xcsow6#e;LdNltJYL|P=)j~YGxs&K_YXYdNb6Zcb<9rnWrOd)vys=U@5|J54!8Q zaP>0>HYazMqdhsD&5thI;gi?sS{(S~Rb7klkyY*rEZj4P+`C?%=HGbu^)tV$ew+EcuT`(P)b4EV1jrYx{Pkkj9v;#F$flS9IhUp0xkAqTOwUu ziW)@E75ozX)tfg)CqVH!`e@e#M7C_M<^v#PJ0+)1g?An(d!TEX4xeQMpC#h65cw>| zr!v>?;ePwe2%ivEo^3;hg;5JU7e^?HL?c6}=5m19Gbv1_>2ZU_C?{Ru2~LN=I1d#1 z)(F8Vo{h6^X*hu59{v#oF3iR!IiwEsR(R#S&ZGppEZ18akFt@tT4 zQn7j4#~&X%@NxBKt|k8QvGh9_hhyjh2SMBc+qRG2-gcn8fv&O}UH28Oy7I(Fx!{9J zrDt>c*T?uwf93TY5q(S|M>e|FbhD}$) z&y5^oFR#&+JJPkOK;TnYd=~01I_r?irRR4GPmLMy42ZSGGBt{imM)X4QFvWZt2J-T z)aoUQ4!f7n&w9|a+D6y%;*)N6<={i-IHZ!bhsS4FyCly?TP{8F73rb>MU^+?&Ogv% z8GKX~sXfayx>gK)mUQ_PuDh}>;=E9?anHg6#>Lab)({_hnT(CX{HQ7_?pZR*o(Ipq z(gwPgbogYV=A|{4s>0)*9DG(GKC8y(2Jn-kJx@Hnw)RAtnrEJP=ALKnx#yXWK6-|m zg!6Zwq3tfTJ^FW#{+CD5{_RJ9cs_?8j$+oVE`>_~dW+nV7xzRBYT+arhMCM^zR*Pi}l}UF}P`8)qM9 z_UzSn@cy0e;2(S{!L}{@{H}tvrv!RRuDjL*pMw0TN~g!;J0{@myNmaQ&5`~=$Mo*t zf6!rd=0+Rdzt6wmUZaiQ(II_ZqS?5eJK6rVa^s$K;C4gAXSMhg=4S$(>%eCf{47II&XWcvGbKZjM3r`_EiTXE0&vHbA4RcunFo$8vod-9QwH#) z32xTkf@SBg|7UF9{N|2|)*h|q>tF9Q6ce9e`Axy6I6p-Q%6-a7x?t~!kBbUF*`$Q0 zNfs@_(qD49l>L$*+P%8~L|Kk@RI>JHHGli{uYWzH&2w;*{`BdS2eFrXVhEqpr(5xU z2>qb#BuO?6;+5jDxAm>9t@`Fndi*HeI>=?n>v`A9Tb#6$TM~YTbG^O=y&S|n&Mi(p zUA|>C{1o`3Q?uM32#3S%)=)sGWEi)iF71B5l$QGOCms$T zsh_s_T@TRc=ne-I=s)r|tWJOyqqJ0e&VK9OdtV4HqUZc+v?J5^aP%~t#!pkgLocnP z=_e(WPmgLf^wgF>&%>3jJqRAe&hyXb;WJEGrhM&^_8zUl1{177OQljUn@VZ$A(e74 z(ny=n*Cuh3q$%E>GM_TZ<=;%$Q zW+9alDwnrX@mZohKmNnL$bPmsV>kIp5KQIh+c7n09Gl382WR;jS!D)>mKvE#J zPFtm?C^=Axgs29XPDzJT3Q{_k9#SmwM$PGUF>IG-LPpq&*Wnl*?X1Nz-aNDAb`ENFO|shglZ#l;8nQ@Ps1Ra?)$@gHwse5x{w zi3!2}$-#q{-JRO=;Tq#yr-77z0#vV@1Qu&M!-Bi#LTii2N`}>Bb8|B}6_!I?ORIi1 zDyI=TfhjSQOAm7SiFQkt9!D43&jPJfAtic1xkB_@DnU!Mhvn#b;s1#9=%E1Zmt#Yo zsQDn$9*&-9fFW5hbWR(gb2?UO^i=372-wBa4-q|Ic;jnteBm#?{qvTsKxp76>2QulrqLmvYrDP0}cri+4%DPUq2s{{lY9(lcU? zT3N`h&`X!ZkFq@N*}vcQi!?sRKd4%yJqB{Pw0Do_qo?$-jiTR+D9AbqjAiK=X zIOWGYf#V(_6;{aQ&34c&G}(E2(4Rmzm!*de1!i6O^pwQUvIH&Bo=Nk!xT@>Rh@bhY zgf>TeaHC5HhK%;G#x4(wQzy}@)wH=*M^DM(Q@PrsP2+>$nLeBSin_tobfL)|6;w$& zQmOVX4L`lqKmv7n|NhS}xS{Uks2nHC&qfo@8D~{=mXCXUfc=guxjcGKoS5kjs2Au_ zI+E(e^pu8AafB9YPgRxshX|f;-TT6qfBwRkj~jBe2S3tIH-{CKr)SzfB`ld9x)gd= zS#|BcwX~<|?4;3*DlY_&Hap&xxV(!?aSwO8z~0$82}WLf5IsITilY(jI>ma>*A+^73Sjf>rIEiN`Qw!eb){+ldH9l}4$73DBb(UNQOXw+spF#{R?eEzDv_MP0 zZ~BLOzjf`e{}J=^<)7!qJ-xj>Cj)IHDiBW(X@fSHFG3GWP*VL^pwd@{@-wEe@{a2iywJ39>Iq{{MHNiT648$a?*on#vML5*B^v< zetuEyxncB_icbY=4~Nf(NO|(|#6Ixa9Bxgo*5*MDKkIQLN4qBt2CdtTwZ~5OOxn`VMuN+^ZLrW{y#q72+Ry??D7t#37V71Xf8_sw3*!WlUn(%|H zKwtA^kEiN?|G3H{ZPeYJ7xzS?mN3OFI>~8|lq9FatDJ9eBAd{CGyh@ zKj^*C`-xWD+soz1UqJMn$Kzdx&YwTubpHG>*?YdJ>AbuNchZiIj-E#iuO<{e%b6zp zjP!qH3`v))Jp4 zPI3B~RpCRgjrJ@m*bN&dT~m6N@KfR1b7Sx+n6XhhKlIvZ&l=NHX4rh)_}n7eQ(E1% zZupc3(E4f5jiRR*KDUbYlqNpcjZYc;&=sIPYgBcWh0pF=h#sxBa`7n@pz^e*I6iAn zPwC>5i_h*`g&wWpKJ6NYK1=YqZhq)B*PasSk*^0m%i**8mY_#F@cQdne3qf-X5zCl zL2Ir(*Go@nRoAlk?5^0SoGj2Y^zwHfEeRjPn&MMFKg%LiOnc6jNl%$!^ID6~5_~H3 zNdsBsdHK5!|K5|2&*}4t)2BHne{;ht|KE-*KG@A|(nMR^W#sKxTbtG}U{nO!ZCQMVJ*Ggw*h5O&aH^Pj zlGIC0iZ&s)mOQCe1Ok5PD5;ime*wM2q)-?|w48sxpP?OQ=8&`9hW;)wbHE&<0}6$r z&F_ur0&4pM=@;nli=}D}Iy$(}JgmkmLx1SmvIVfd0)vbnbpY zsecv!>#q)C?KyJ>(KGlewpIj9cMHK?6GZDPue8c!Ek~B8X9+&rZwc+;@IlJ+pSdZR znp}Lqh}VioZWaJ&hfNW4&6LEQ5&WTmT4K{uV&u?)-?uaK5*MR)082A;jY6oXQ5wzW8i_QX3NtwhRRTP{A2+ydHzR{?qaxy`@jUcd6c zHobg*w(bIB0>E@Ian^+B@y!V)J3VcIjN&_B`hv)a$EsrqQB?{$BeR;&Bnu9X9!iu5 z0fo+}3YhPdm^9N?$DEK`Qywq2>yn6=a2!}>L}X#btVJXWg&g2+03R6y7x%)3>Mbt+ z#~q%-M+lAyfd-u@QP+j;8$<7sN`i)4KG9z=~s>>7?%jE*_F%0_pxN$0pP$+DdIQr|*7o}Zd)>DA>4k*=L zr31j$r$l$u2`@?9gi7KfBBoS|BCbkODalnCs~BH_o~8KY=}(1f52DAl<@MjD-}(6M zg*FP-p0>G3?c`h=Xv3!A;nS^EnoPi81GBWV$!4Gc2|YO*VZnZ$X%;!S#pI!`wZ#nr zOb?0kecXrWLp?ZYo^8SJ)3Z97VTDO{p0R=VkQbpcI@osU5KU=bb%RZ*?Dm^+y)}o^ zphLnB0YC0S@Tx9Kr!+*XFv;I%r(IF;O4?J^`GXgaKl|)!&m!@uTA;@w8PIBzLT$n* z@z2UJJx0=i7(w(Ht$4x+rboa%OQFlk(CrE&c!-`6@q7?`!N{yPXl21o!JuA0h?j$X z;F3RVCI|}7oH-+cYlKuXRzD#X2ghWy?ZIHX>D{rgR93F|+2eN}{d|EQU!=VWYtQ*WjW3RX2Swn# zyuA&*g8^@8xq#`3McbQa0w$W7w@^9@IYI&Y!~-rCJpHQvd3T5cywU~I9wlvQ)LG7` zC_teOx})EulZ8MeeyLj)e{9dW$4<%iq)e+3p9K-BRPEWn|EwpC&$ib!XBV2eSbNyn zz{$WY3)(KTR?AXm$TU|H37ga`33w@>D4{uN$2syO+2r!zMOC4L5*ouDJUs}o>3Kv? zDv9GB${6UF2liKZL0+UiQV=7Iq$4xx*=FWMi;^|^)iip6NYLT`dC1wU#PozDvpCcl zwEIt`togSI=j=Fr2sKstra_v`@|LAXFBbH!I`b}h@#BbBQ?RXjfb^Vs2Bc&f1W2&G9Dq(Vrvg-`bOp7&+x zQ8-REO(UODAgYRWg3z6GoosU2q5?kdA?0Etp!3YkOpgs%{mjXkFix76Gw6LeNaeib z$h}}cVFz!sy~{;6+f9f1=UqVK7YHtpSRjJp4MY#)f}y=A)UkyXjv=SVq;!s<`w(_3 zYtQ#kiwoO}TeaD$3xxY;B?BNFZbyG^Xk$oV6-EJcV(pp5anBIfWJi^(F*-D&G=V<= z?KrBTgdK7FHNeXU>s^{gz}ZVkd-}OM%mj{%>N?^c0$hC#f1TsQKnSi9GHDXglPrOr zW$>w7?MdTv>}Ac5s}|EU5S2s+gvo>eYBZBD#2a`YG!?SXch37u*;n@tw7aAa9!1|A zJu;*{!Bdya=8ouI6!(n%Dg<=|NM&~0p4KsNgzLJy>%ubGRghf|J{7DzeC4$(UwIHc zR8`WYHG_HB1&JzF5{)Qy8F~y3eY7u_ zCsUC)_@$`D&b=>?r)FpHtP3f_(1LIzET9=hm}W-isQ~)eO)J8jWD&0Ge( zPZE((BS?=T5y?pUKA~b{Iql)XX06c7;j{IvfgE~-iC!0g&;|BMtCxGCf(N2PoEi^4 z9Lsq5#Y>GAaL+UBgw+~C$Z$=p6Cf0;qb|E35Dqn_+gy9uE^9Ez-9gA?dq7Bph3^X0 zo*15|A9lOLDVa;O=y2PxCfx zcL)Tw*s#~Zwcl;SJzlrKp*hd3CGWsXzIjNw17Eo1v=x2iAsPNPdf(IKL4O=a2vuM6 zHi2z^gt6g?r*zDQ?xXPw-hz(oamX!ji)i#eKpQQ>_bCU%i^HCL?cv2|lKtV2e(;U& zIXZJXo56+3(*aUNSS#<9hvNp28p0@W10MLUxpuy{*#i-=oU!;vM@PjGMf!nz*d`OhAI=WOmU`*}P=|C95>7w}kx;rytf z=>zgSqP&R*-Z?XxUORcF2~*DHWzWp;lRpr)biebQ6Sceg@#CG9`WfXp{NM!TxpT5X zJk~XMj_AK;BF+uId9I!y&K>FgwT$RUjmt_EpF;Rlw)T{c&xH&BH`*>N8E`KPAG&FU zq4!ew>7SuX(4O4Hx9c2cFKL{eA1W2u^T$fzPN+4(j?YXgm&ke$-wt}C>zSxlmIa_eyFu4}lr6nz-QvRa=Ws8hhL3^&d>RKD| zSq(mwNKf_OudV%g(Vg4YW?#mh&extaKHBr-y3n%H=4($n z?{?tr9m6Zpv)Zbwbn&@9d@7Khzx>)dnR=c6oec%FM?3KPj%_>U*He6C&Xw?~Jy#|^ z6-dvzndzl<{s*(#gOulW&+o^!rPT+cQ>7inBXuVaYPF}i2_a5HufDbQG#+L-c^aq0 zlQXR?t*tHHqw^cs_0F%*B7K7d^c8Abb!!zkOu`!iQYY9_cQH!f))=YIn8ykx|1# zI)%dADJS)U4!>I1L<-Oi3V*6|UNA)prqK12z~=Y2P5J$5dP+bmNy_ioolp(7sRs!{Fw6Zvf<(Ov-JSAu6H^W(KaME`&zqOpMDNwtPqit~ zC!+Va+fua`ulZ*^Z`NK+`BN8b)2EbY_n$C5Pu4Z^TOfU|d;Xu-ReSbV4LrAl%h^t= z4_|K?!DviLe7#ywceJ;62()Iu&KFP*eZWTAQXP`iD1~k?`XVMd1!y-?#;Net_I5S2 zxBFK45BWye8?We=q!LtuN3xs}McnQ#2~BZQp*4JJtFBl(pwCzxE$r``T;h zpni?N`r1qDtUdcb)}$lpvCY5KX7Dj4FJJDgiEFfAoSgJd#tcce*WdtKXJpFL=@lm3 zMi3>$u@vz1h{Xmg7_C+#SVJ*Pk8n<44SHt7Ar_K#GfH6bLs|sjXi#38u&M~NB5aoR zb1Cv;DIkm>2#P!sH37mSM~(<_npmU6Z#pNdheo3BVhYBuO3u{7wZ0%ccG1GV%UbsK zai_j9iQxU)anAwbFfl8&_u7Y8 zuwCfAAQDV+3Gi}Ll&1$>+dw$_FI+wkUH~?rJ~4Bm-wje0gi$M^2WyYmV(xb;W@Rd+ zrLiVTBkg(R)mLPus4Q&4UB(_ak-TQJAuwgKZbiyy5zAyrcEg6>c0}t&8Z6F)?7`YTl(47Sd zj(ao)HVhF(s#6Cza+bF?QK0ZE6cPu+(SxonYU{7K_3pXlgTco&x4_3jEUc69^gNJ? zp7DT7rIK0(t>92mfd1DCiJJf;etuxfeXoA( zJ%2PFbO9m-T%RVnQ|)8%KVf?AzIyc`ZuehJUwvVHwP*kR>@FUkW7|5jt9l~sL2dRb z@S(T|g+1-l=Z9Q)TJ&DF_DrHM4wkcfLZX+LuQcGnh{u_J|}|?3dKEb_28<1bHlIe zjEdQ-aIy9xT)hf?wS924mV@a}m7bS=pSG#Y#fEj(o~mhf*V`ft&ty)Hj}boUJud($ zihBm8r>A?|>S29Vrw|+Ft35@IU|vvJRfCMJiTsjyz}>~?{h1$v~-l%{7y zVGgtt%2>SP(j^m@B7f#g5Li`P;9U1$%cWTY>bj2{sRJ1iHeI^Z-W8HTV_)BxE?Ey( zWtw07`zwO#`m^W9^6FYS z?d6o!(=Mmhbv%x@_j&hDLJ|^4_-C|vcG!C-JHX!0``O?3dH4Igd&A;sSnzM5#Pyyj zQwAno^}O0+>c;AGa}XXcJ)1Wx%)*-m-W+%xvZ!uqWsa$4r$$K=vLHSNOtv8gzV$Z` zJ^AF5`5F27w|(^FD_*eDltiT!4^+%jATK>4i3@2(^EK|OEmRUcgvV;c*sDSwh3+2G z&=HSL2T5wZg>(%Kz-GF;3<4qo8CjX1RH4k&E&t~Dz~M>tI6m+$_zXvao(DmXS9?Hx ziZvDg$K0N-z>ZQLVzFG=isJX7UFYLUy9qfY1X`lU-BJC3Cz#s_$;j>aQBwO3+?J<#$OIam(b&-gT0EaIP%dVKV(OVINGw8z9` z78C5AuE2hFW*&{rW-G516yPPBtu0|{*=(93HYe`9e!uq$|zYtGuQBAcs$1OH-!v8{E1CJr7oU zn9Kt=L$WlE_x3i+@$(bpr1h3?dtveFaV~e8T;6{T7X6r>emQrWI^(R`*V%QJe8#i* zXug0P+;J3ir+vOa(AwVW?d@t8uZGzw+}-u@$Lhw_K+pH>K+MODFP_Sw(;NA8oFz|h z{2q5!oN7sL!TGBE*Pj01o|IqOa=qnyeh$CI*z&iW9DbwmwNk#-larw5fohM5X(|{g z!7!=}!(n^c1)}IvHHM}peQ-pPo)g&dj{8n?a{j1j;3w#LpxP5lir8f06U0wx%Ll>m zP}Z`T?}I5p&jZq)DCmh*eDb5ECo6``$Z-7lEkRFwX;17`*J#8iHhj_(^u(F=Oi0x= zKKO*=Cp|$=JZaB3R$Z}(&*hQ$Cl8Z1U)gwJ-#v4 z*}j!T+%sV&edM&q*RVc$(!26TqLjz`3|;Frp>O5nBXewDc_;5`!p7ZZ-lFU;tUKPd zIgi>QCMv86v)yly_Tzx=` z@PyjEJ5vUB-&^!(YR`{}@|{qdBl}^>z?2_YeDYB|yhNL8V%p z>a43*uigb)aCgRn8KkZ7S)I?){FaO-uNC3RYsIA1Vxxv_%}A*I9vg*6JiYeX zYu6{Ao}X}=D|7mU(lf}hLL7QHNsAtUJ zQFeG>-Q?3F{VCJ4VPfc6Q$I)#2@h7EfC`F|pYfn4J;x_OOCAV4=7jc4y7sJyQhREL z(33HQoHCF{?bPBA>%A4%)jzDcdNG{#%m|}B$!VeV6a~}645TMN zn4SQ9N=p-Mt_Pw$8$ZuAo69%Ur&O5DW?RMfjpRyFTYbtVyka)DQOhJhZz0>ao6Qxl zR*|yNY~EPEW>dwQdAVzXv?q|B7_`R}fu4}6i{fX}>G?{R(4Lf(O)Ptb(3M-CazU7s zn_6_qJT?mu8l;kaQ#eZ?`q_JnLt*~oE2z?0%i z%5`Dw+33@rS)aYRF-0OF>E0 z2b>GIV#)>Wfq+Qp{Iy?uLbk)37chtCHnzDpt>JtZi}sAz=o%XMgw$PLekP5cAE}4* z&M9OS&Y@OM{&ck`36U5HaGic3Eoa=PdRF9o4yJCn$(`TU{PK089DG7Y;^_VlNEqZ`U9Zn z$IEy+`IDu`rzC9^PUkUJIVmZa0cd<3b2ywy8z8Q6Vf#H)Qdn`!{T|=+<1c^@oKHkcU0%&sS*J@swd z%gZ-maByHVz5Mf(aqp^HbNJ6o`5@Zp0Uz$*u@k-RS**+^}(D zef>sigUyVmiXq$a8s3h3DmJd4wZ489L_HsUbT!6C*N`hdL&YZ;pCEoFmmbf3vY%`1 zji0*qL~opO&i}_Z(nAezBzr2#GIuAmXWX+3Lo$3~3VedZCp7X2Xn6VM2meeeJtQ%GWaBII zr>Q;lDX~oyALLJjDYV+UN=3{e-0Y}J+Yu@{L)u!HnSyRmoM)cl9w+7I$tMM`k`Ewx z!u!M#wg2%Vt1bogv0u-bSmX0`r|_JCJ4jCH{Qa~OWuSZJ zyCBRy)(s9gstZxyp@WYChakn_Gja+!3**8VFp-Op7h~|v;JaZahF^PTZko^<*^kZD zyCf?!!US{yiIZW{Pim=AXu$#9?bD~p`uIt~>fo&Z<)v}>e6F&2hqTxf-j{d6ui;GT zoA7H`TO0UBr_`DOHT5$N98b4CT~63-+vT-`tf7W z`mw14jIUm$R*Th__~J`G`x{be)>6<5kjHsKp!C!`S}o|1t6OM9%l0G3tE(NTWpp#~R&@$Eex=u*H2f5uUji z@rjFJ9=ABmlNKXCV=?qGieY0$u)hUATMxJkFfVx%Uvov)p6K%ZBhkYRNx2OkYZT}7 zH2-7f;kcz|geNlw;4@h@*R1i#_m6t45ghK4c&4X2bN0(m6+F!JERIBvZy=FxsF8oj zQ9ZTr4n`us39~ip2YJC?Tr>D5@GTww@Q2@BU9;wQf57Zq{N2@y%PuZkc5%kt6|h)V z7h}FZGrG|t_@I}^GdZ7MxED%@YPt+tl;{77^{zhJT1bT8SsMN>Yii!$zMLG38 z_t$Gu+LFxXay%eyd#*WmJK&R>1hcuhgY=Y}E0X4J^!)~}hDi|NVT zISc>M3J%DR0T#2u_rQeo{zfy_D5&b9MmokZJ&J#QdG_qtk9P;tBi9+EQiD!jqLK~d z4p?Y%uFN_hwa~;|SdoGeO|Tr0N*a9h$W#KA3^qurTCpRvGJ#G;Q;S48nbIn~3}3d4 z7d_$dSsa!gw=g$1*OipwcGzrY+ji=`-SPPbvm-ax$w^5`suY@q=aTAE+!sE_sZIV4 zyvs?{A6_HV0K*q%(d7 z$G<#|=_#Cz?H`AO==oM@r8Xflvl=CL?s zK6(&Oz(eqfy{`e>@F5S)*SH-=L|Gc7>+2JuzCKyjSm_x?d;;%+Fh~!XYMbj$K}mSv z&<5|2Bb4+xYOCLn`yJo{8|EhA!ALLI>I3L0N9AqPf6o&7{sh`!cWjzIeUrn!flByC zoQ?2WH!JtTj0@#67R*C!b)&pJNZ6_?Kz)A3=f^QU(%D{ojxz`8*(|iHdU{lL;btCU zb}{pifs1&|t~{%=ii;%rJbhkC2I7^ZzGXo{^l-UvsgUGD@B3OKC z>d4-#NvEeA4ILeldOik||K9s?p52ath>AeIrbZUQ~{D6t3$rBQ7FkE8g6x!!|Alce$uDc{*`VAE5O8A27Oy}o|KuanHjgwrqN zlAXS}n4UIP#UMQwAbw8DHKP>rS1Md)0E}$2Ur6GhtFvZZy}+3TTdYajXRTPbvpm=4 zw#ImahoM(|g2ji#Cmjzp;`7(Vul95+elvUaD{sFI&33Ruf zJ+_Lz?7l4-C>zH;1NlSfx!|XVp68OWhofhdRo9Z};~p~K7A0+H+t9YrKjg?fcm2lc zzek&dES&I`0`Uzhum3eN`{}Ve@E|3e>QBWz-{E0P8)vOAN1t=POS${IpQCb+pINi+ zUYyZ3uw&WXzjM%V7kq*mT_cS(3LGqwLsnn$OAnJ-D|`Eu`v+;L96n*_ z!6T+gDM@PkyzTSpu&l?i@x}}0&o^w??*4p}yJFMln<~&Ipa)BkkDd+NL5nv0+KKS5 z!e1zN*PD;w!2y-#l)1<Bc3 zef=iR>7PO@5U!= z_S3T@8tw5V@NZlX;m!Ju)R3e4jcZbT1Bv`&i@a}A$omnQbE&aL_3OPG>fv|S0902u z;(jhX$QmN&9lxVGx@PRS2o_7qZG^E#`9b(R;d9ZS>G4gE*MfQ~nmRhf9oI@qu8Hx{ zi91TfVsX1z4oBJE-U*ZXcBeceBjapi|9})vvd(@%f1|O{*xpaNKy4KD8*wLBBc5L} z(#NUlij2>=^pbLtlHgSy^;o0f@8~&f;1e$L@edZs5@pf-{5%x&Fo*P#M$=82!IR)A zbGUBO82U*^6rYIrj0-&*ef_Ah-c2~{AnRf7@DO&aQGVb+S>MjSv5U`=5#yf87;6;MebFL`PdI!qKUwswC!TmBF6l9i4?U4mGz1ewPXInk#$9`2 z%Pt&=o)N|xF(Z#Pn(rMcOM326)}CnS8DrHI8J{JSOHTki-upWQB^O2<ASMtY*F zx*|8|9MX7*r{k@Q(>s4NGeRY6#NyQS%dcjjATR zBa}$Hwy(Llw;7L0lK097t)HBAbaYT7kvhoHNUPN1Rrr#axc$Xd zH$L5X3b#vJ8e2#+dZ+6~n5wA}Mb-Wp9$iEx@?QUc_V0$pSNr$Rh-2+3V9$Q}uiX<& zPb^hebmCJQnVxxR$>E+R7+~HmgF&keGLy;Io*q1_0zDGO5kp)MaNMhh9xgsi@)32b z$Q+Ep!yD3+jMLG8UhOG3@R!-MUw*SI7@tmT;%`ejjh*nq$?!NmUYyV6lG*WMaGJ3L zoTjeM$QL!@T=)#C$D+F5>ph$$zrVVAf3=$QV*7rPcz+|%b7{XgBujpj;uFeG06lfd zK@H{P5$PF%&bZQ(73O3aa-5OqSsbVIP!8(BN%6BE53ahpJr=9g%Ihj1mmZq@xLj$l zSTx*>;~p9QK+OHjqXnmFJsF~Wjm5&tQ_CzjIIgXo%ttPfr+p;&e11=^!4NnEKZ@yMwd` z*(?^R%TR)s7NK3)q!ro+gig*jF8-v#u6Z>B@o+Z<%1@QC%mempoh3UP*|W2~^a!Xd zd5hIP(14xDLwhyIk(x!m{YLIt zqZ;U`J}UPLZ*27BJk0cvrX787O{nV8F)nDh zh&Od=p43@I(!&LM7>J>-qJ1;akf%oyz5aF}J-5#{sE~xBCyPLCPb1x%C9kiV8f)Ye z0Uw{o!_ZTd{0`9bd~&et5LT<(B~2$t1GV;K_ES? zt?G8EbG45i0;yIJh<@o351ne~(_Aa##y3_|8DfGUdcb@04S1eK(z9CXmpV`Udf5WMTLqGI9#4?YpvdIIRVS=?iN!Sn*J`~5r)@@Wsk^c*?TV|D7W z_y9c&gxK3MP-a1%UV`*_4f)~e$%>htB@c=Ayidd8^ET97cu+;E7awG{SUijaL!d&|mJCGXxAyapT76UyH9e8T=F*3Q9&fW^v-Fi$X7m2?n^*9likUuocyE3A zzW7@*?m5D77pM@s<7`L2&<4=F+S{)}G%k{e)nWuRSL@nZAXo`^`fF7$= z>NYTWE~h=Wu*t7Iylx4Vs9WgO9s+G~N#uy&X5{lwaHA_CJ+X^VoN5n=PdB@8rEYVc zM)I3iX8-FJA3c(9zdcSm?07~K1N9%MV6pSGh2)TmBS(}tJ6`CZ>1Zr-h6YKLdIIrI zlbP|s^rWV4(I8D0sXZbBWo3P6MZ?oGdVGe^&zzIb0zLmcs67{CMMWH|*Ut|i`WG|?cs9mGORrj>4`pUj)+e@YY&ro0^hxdd8WCbxXIV(Vkjtj z7|Mc@l01g0M4m@TBs6HFGk6jSPod7>suc_#q3h4sHkHkjXd2Ff?-)98pZC%SLnqKN z;H#P=t=NaUOi@)Pc=8f0Q$(lhGFwL!pJ8ug8x1|hS4eySo+}U@`{*GMBQKfFLZCgh zrrH`LDQ2U>Jvt4<(JI7IC}eIWXis-{H=J1R0Y$CS;2hMRXC&yrTX_SH&6M_JFc3GN zh7cnoAKkvP_#04pf)U-1$5QuK(gf%a?@%S*Vu;?DMt3@*2`y|b~s zA7AfKH+G8qab~>O*w~Km<0ByN-D9;{;N^k!RYqv;w@^J5;%bq)8V?m{tftem+N&e? zcBMx{PZ)l}wAe{}u<`_0GRJ8%+j6n?;H%6?T5OWASawH+!c@y~Ivh^P3D6$OHyVd9 zTWHe+)LasjZ59e?xW$gOM+4fk&5ATnj-WlUicfIzc6@8kC{uhQk9|Vi*@<6W3`Mt+CoxD=YJBu1N(NWY059kmdT@b~F?MDjyHSmeVfxvJ%kmiwKEVKm>#2as>%SF6!5yW=`MH0i0M5}%mx@mcr`jpC(bmPYbeI@vqKWUuLX(=!r2e*Jl9v}Zg5pONXA5PZV- zv6CYj#+srLl%r8HnjDSD^yG}t8d&}iY0sFeuKdwgU1964oH5Z;JJf*LIBZVd;s!*%b+&oUv(7@??h1 zqY$5w?i&)n+5;{+p+7in+Tm%t{)D~crAMB}lgW5_a-~ehDTE(3NB<0Wo5ph!d{wAD zt}9ezz)GISBP-;{Jj&>+t`Wp%4EThnr>G~2sJYfO96bdEBZbY|whdo(jRqh7!=OFj zBJE?lp8Jpg_~o>N|KmT)-q)J#+1d7Nt-@w=Ae&99a?9l0n@-^Y@D<`6*C5+ASkYK* zHsmnd6dAFLPZV`mdQL3-gr`UGd|vRVoMzHa6v;a0i-p3&nIw#Baa=jQ>RK=I+oWJ$6lO%aEKxgj`;;^JmVCK#L^!bi?!zZjNIM7ZGRWa>VQJ&(D}Bd}81yTrVlW^U_PtKOcw>a^O3E zGl~#W0zEE76c_6dVi)72!deOX(o2uf1#>O3n3xLqW;auUtWxWMi^HYa?b$X5?;5zF zgzRVMa^V{~+{un}6`h3{0<+Sm)5r`C(h!8ySf<~`z5N&a( zvPP`Cavo0Yk-WPL2hCuQ`PvsuoKIKKD`z4J_8S=|Hc1hc)&let5NI25tP0b^_0uzM z;xi0BIkC{QR13;}RQ_ne%>5R<`br!48 z!ZI;&qI_qs7{#=g>Q3R{Y73tauxQJ+iza;k1V8P?_JY0;9l%dcRON9|w!vWNL)?7$h75VGk#Udhg{pj{5on$4(BJowl@y*GGetUxi~5VDZdoJY}v@xj9hd^H!D zkts!*3{r{4UwlIG3FRjz8hRMg{|0(ao}9Dw`FDx};+_S%1v;p?7#y3-UIX;tFgp8K z9z_qngO3U5`Lc+`u??JI-mJ{F*~}~)_k3BaLj)Vqpq^C>4qb`z_@D$uU9?r<*<>BmJWk&4cGcrCS$WItY4~=`~k@#!{cmggMB7^dZ z@=DrG#MpyahGN8^A)4Zf7BPUHVhK`!naJDWa#)CMVrtw9rH+lqTO2=r{2Jojv

v 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 literal 0 HcmV?d00001 diff --git a/img/javaeett_dt_066_slctmny.png b/img/javaeett_dt_066_slctmny.png new file mode 100644 index 0000000000000000000000000000000000000000..04f990a21ebc2f209dbcfe513ab3e01115b94764 GIT binary patch literal 8007 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 literal 0 HcmV?d00001 diff --git a/img/javaeett_dt_068_txtcmpnts.png b/img/javaeett_dt_068_txtcmpnts.png new file mode 100644 index 0000000000000000000000000000000000000000..5a5673f4109c46db58de71eb15d458676c21b216 GIT binary patch literal 4510 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 literal 0 HcmV?d00001 diff --git a/img_text/javaeett_dt_001.html b/img_text/javaeett_dt_001.html new file mode 100644 index 0000000..3b682bf --- /dev/null +++ b/img_text/javaeett_dt_001.html @@ -0,0 +1,23 @@ + + + + + + Description of the illustration javaeett_dt_001 + + + + + +

+ + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_002.html b/img_text/javaeett_dt_002.html new file mode 100644 index 0000000..f2669e6 --- /dev/null +++ b/img_text/javaeett_dt_002.html @@ -0,0 +1,24 @@ + + + + + + Description of the illustration javaeett_dt_002 + + + + + +
+

Diagram of client-server communication. Application clients access the +business tier directly. Browsers, web pages, and applets access the web +tier.

+
+ + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_003.html b/img_text/javaeett_dt_003.html new file mode 100644 index 0000000..0f00f1b --- /dev/null +++ b/img_text/javaeett_dt_003.html @@ -0,0 +1,23 @@ + + + + + + Description of the illustration javaeett_dt_003 + + + + + +
+

Diagram of client-server communication showing detail of JavaBeans +components and web pages in the web tier.

+
+ + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_004.html b/img_text/javaeett_dt_004.html new file mode 100644 index 0000000..fe8e19d --- /dev/null +++ b/img_text/javaeett_dt_004.html @@ -0,0 +1,23 @@ + + + + + + Description of the illustration javaeett_dt_004 + + + + + +
+

Diagram of client-server communication showing detail of entities, +session beans, and message-driven beans in the business tier.

+
+ + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_005.html b/img_text/javaeett_dt_005.html new file mode 100644 index 0000000..1ccd052 --- /dev/null +++ b/img_text/javaeett_dt_005.html @@ -0,0 +1,23 @@ + + + + + + Description of the illustration javaeett_dt_005 + + + + + +
+

Diagram of client-server communication showing servlets and web pages in +the web tier and enterprise beans in the business tier.

+
+ + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_006.html b/img_text/javaeett_dt_006.html new file mode 100644 index 0000000..0c25bf0 --- /dev/null +++ b/img_text/javaeett_dt_006.html @@ -0,0 +1,22 @@ + + + + + + Description of the illustration javaeett_dt_006 + + + + + +
+

Diagram of Java EE containers and their relationships

+
+ + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_007.html b/img_text/javaeett_dt_007.html new file mode 100644 index 0000000..4e6bc16 --- /dev/null +++ b/img_text/javaeett_dt_007.html @@ -0,0 +1,22 @@ + + + + + + Description of the illustration javaeett_dt_007 + + + + + +
+

Diagram of Java EE APIs in the web container

+
+ + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_008.html b/img_text/javaeett_dt_008.html new file mode 100644 index 0000000..8634c2c --- /dev/null +++ b/img_text/javaeett_dt_008.html @@ -0,0 +1,22 @@ + + + + + + Description of the illustration javaeett_dt_008 + + + + + +
+

Diagram of Java EE APIs in the EJB container

+
+ + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_009.html b/img_text/javaeett_dt_009.html new file mode 100644 index 0000000..292ae44 --- /dev/null +++ b/img_text/javaeett_dt_009.html @@ -0,0 +1,22 @@ + + + + + + Description of the illustration javaeett_dt_009 + + + + + +
+

Diagram of Java EE APIs in the application client container

+
+ + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_010.html b/img_text/javaeett_dt_010.html new file mode 100644 index 0000000..e0f80de --- /dev/null +++ b/img_text/javaeett_dt_010.html @@ -0,0 +1,23 @@ + + + + + + Description of the illustration javaeett_dt_010 + + + + + +
+

Diagram of EAR file structure. META-INF and web, application client, +EJB, and resource adapter modules are under the assembly root.

+
+ + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_011.html b/img_text/javaeett_dt_011.html new file mode 100644 index 0000000..9190c98 --- /dev/null +++ b/img_text/javaeett_dt_011.html @@ -0,0 +1,23 @@ + + + + + + Description of the illustration javaeett_dt_011 + + + + + +
+

Diagram showing the structure and contents of an enterprise bean JAR +file.

+
+ + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_012.html b/img_text/javaeett_dt_012.html new file mode 100644 index 0000000..72eb414 --- /dev/null +++ b/img_text/javaeett_dt_012.html @@ -0,0 +1,23 @@ + + + + + + Description of the illustration javaeett_dt_012 + + + + + +
+

Diagram of web module structure. WEB-INF and web pages are under the +root. Under WEB-INF are descriptors and the lib and classes directories.

+
+ + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_013.html b/img_text/javaeett_dt_013.html new file mode 100644 index 0000000..9771bfc --- /dev/null +++ b/img_text/javaeett_dt_013.html @@ -0,0 +1,23 @@ + + + + + + Description of the illustration javaeett_dt_013 + + + + + +
+

Diagram of web application request handling. Clients and servlets +communicate using HttpServletRequest and HttpServletResponse.

+
+ + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_014.html b/img_text/javaeett_dt_014.html new file mode 100644 index 0000000..9cc0814 --- /dev/null +++ b/img_text/javaeett_dt_014.html @@ -0,0 +1,24 @@ + + + + + + Description of the illustration javaeett_dt_014 + + + + + +
+

Diagram that shows a browser accessing the myfacelet.xhtml page using an +HTTP Request and the server sending the rendered HTML page using an HTTP +Response.

+
+ + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_015.html b/img_text/javaeett_dt_015.html new file mode 100644 index 0000000..cafc170 --- /dev/null +++ b/img_text/javaeett_dt_015.html @@ -0,0 +1,24 @@ + + + + + + Description of the illustration javaeett_dt_015 + + + + + +
+

Diagram of web application technologies. JavaServer Pages, the JSP +Standard Tag Library, and JavaServer Faces rest on Java Servlet +technology.

+
+ + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_016.html b/img_text/javaeett_dt_016.html new file mode 100644 index 0000000..13477b7 --- /dev/null +++ b/img_text/javaeett_dt_016.html @@ -0,0 +1,24 @@ + + + + + + Description of the illustration javaeett_dt_016 + + + + + +
+

Flow diagram of Faces request and Faces response, including event and +validation processing, error handling, model updating, application +invocation.

+
+ + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_017.html b/img_text/javaeett_dt_017.html new file mode 100644 index 0000000..4104f8b --- /dev/null +++ b/img_text/javaeett_dt_017.html @@ -0,0 +1,25 @@ + + + + + + Description of the illustration javaeett_dt_017 + + + + + +
+

This figure shows two Faces flows, Flow A and Flow B. Each has a start +node and two additional pages. Each has an associated managed bean. Each +defines a return node, and each defines two parameters to be passed to +the other flow.

+
+ + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_018.html b/img_text/javaeett_dt_018.html new file mode 100644 index 0000000..615c89f --- /dev/null +++ b/img_text/javaeett_dt_018.html @@ -0,0 +1,23 @@ + + + + + + Description of the illustration javaeett_dt_018 + + + + + +
+

Diagram of filter-to-servlet mapping with filters F1-F3 and servlets +S1-S3. F1 filters S1-S3, then F2 filters S2, then F3 filters S1 and S2.

+
+ + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_019.html b/img_text/javaeett_dt_019.html new file mode 100644 index 0000000..a328813 --- /dev/null +++ b/img_text/javaeett_dt_019.html @@ -0,0 +1,23 @@ + + + + + + Description of the illustration javaeett_dt_019 + + + + + +
+

Diagram showing a client and web service communicating through a SOAP +message.

+
+ + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_020.html b/img_text/javaeett_dt_020.html new file mode 100644 index 0000000..dbed160 --- /dev/null +++ b/img_text/javaeett_dt_020.html @@ -0,0 +1,23 @@ + + + + + + Description of the illustration javaeett_dt_020 + + + + + +
+

Diagram showing a remote client accessing an enterprise bean’s methods +through its remote interface.

+
+ + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_021.html b/img_text/javaeett_dt_021.html new file mode 100644 index 0000000..fae1a1f --- /dev/null +++ b/img_text/javaeett_dt_021.html @@ -0,0 +1,22 @@ + + + + + + Description of the illustration javaeett_dt_021 + + + + + +
+

Diagram showing the lifecycle of a stateful session bean.

+
+ + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_022.html b/img_text/javaeett_dt_022.html new file mode 100644 index 0000000..255627b --- /dev/null +++ b/img_text/javaeett_dt_022.html @@ -0,0 +1,22 @@ + + + + + + Description of the illustration javaeett_dt_022 + + + + + +
+

Diagram showing the lifecycle of a stateless or singleton session bean.

+
+ + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_023.html b/img_text/javaeett_dt_023.html new file mode 100644 index 0000000..30c79b0 --- /dev/null +++ b/img_text/javaeett_dt_023.html @@ -0,0 +1,22 @@ + + + + + + Description of the illustration javaeett_dt_023 + + + + + +
+

Diagram showing the lifecycle of a message-driven bean.

+
+ + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_024.html b/img_text/javaeett_dt_024.html new file mode 100644 index 0000000..9190aef --- /dev/null +++ b/img_text/javaeett_dt_024.html @@ -0,0 +1,22 @@ + + + + + + Description of the illustration javaeett_dt_024 + + + + + +
+

Diagram showing the database schema for the order application

+
+ + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_025.html b/img_text/javaeett_dt_025.html new file mode 100644 index 0000000..03ecae6 --- /dev/null +++ b/img_text/javaeett_dt_025.html @@ -0,0 +1,22 @@ + + + + + + Description of the illustration javaeett_dt_025 + + + + + +
+

Diagram showing the database schema for the roster application

+
+ + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_026.html b/img_text/javaeett_dt_026.html new file mode 100644 index 0000000..5546ae2 --- /dev/null +++ b/img_text/javaeett_dt_026.html @@ -0,0 +1,22 @@ + + + + + + Description of the illustration javaeett_dt_026 + + + + + +
+

Diagram showing messaging between various departments in an enterprise

+
+ + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_027.html b/img_text/javaeett_dt_027.html new file mode 100644 index 0000000..20cc066 --- /dev/null +++ b/img_text/javaeett_dt_027.html @@ -0,0 +1,23 @@ + + + + + + Description of the illustration javaeett_dt_027 + + + + + +
+

Diagram of JMS API architecture, showing administrative tool, JMS +client, JNDI namespace, and JMS provider

+
+ + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_028.html b/img_text/javaeett_dt_028.html new file mode 100644 index 0000000..7e56e8c --- /dev/null +++ b/img_text/javaeett_dt_028.html @@ -0,0 +1,23 @@ + + + + + + Description of the illustration javaeett_dt_028 + + + + + +
+

Diagram of point-to-point messaging, showing Client 1 sending a message +to a queue, and Client 2 consuming and acknowledging the message

+
+ + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_029.html b/img_text/javaeett_dt_029.html new file mode 100644 index 0000000..7398089 --- /dev/null +++ b/img_text/javaeett_dt_029.html @@ -0,0 +1,23 @@ + + + + + + Description of the illustration javaeett_dt_029 + + + + + +
+

Diagram of pub/sub messaging, showing Client 1 sending a message to a +topic, and the message being delivered to two consumers to the topic

+
+ + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_030.html b/img_text/javaeett_dt_030.html new file mode 100644 index 0000000..845f5e4 --- /dev/null +++ b/img_text/javaeett_dt_030.html @@ -0,0 +1,24 @@ + + + + + + Description of the illustration javaeett_dt_030 + + + + + +
+

Diagram of the JMS API programming model: connection factory, +JMSContext, connection, session, message producer, message consumer, +messages, and destinations

+
+ + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_031.html b/img_text/javaeett_dt_031.html new file mode 100644 index 0000000..0ad7a0b --- /dev/null +++ b/img_text/javaeett_dt_031.html @@ -0,0 +1,23 @@ + + + + + + Description of the illustration javaeett_dt_031 + + + + + +
+

Diagram showing messages being lost when nondurable subscriptions are +used

+
+ + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_032.html b/img_text/javaeett_dt_032.html new file mode 100644 index 0000000..ddc8889 --- /dev/null +++ b/img_text/javaeett_dt_032.html @@ -0,0 +1,23 @@ + + + + + + Description of the illustration javaeett_dt_032 + + + + + +
+

Diagram showing messages being preserved when durable subscriptions are +used

+
+ + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_033.html b/img_text/javaeett_dt_033.html new file mode 100644 index 0000000..b8e7ec5 --- /dev/null +++ b/img_text/javaeett_dt_033.html @@ -0,0 +1,23 @@ + + + + + + Description of the illustration javaeett_dt_033 + + + + + +
+

Diagram of local transactions, showing separate transactions for sending +and consuming a message

+
+ + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_034.html b/img_text/javaeett_dt_034.html new file mode 100644 index 0000000..55b49fe --- /dev/null +++ b/img_text/javaeett_dt_034.html @@ -0,0 +1,22 @@ + + + + + + Description of the illustration javaeett_dt_034 + + + + + +
+

Diagram of steps in transaction example

+
+ + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_035.html b/img_text/javaeett_dt_035.html new file mode 100644 index 0000000..641df88 --- /dev/null +++ b/img_text/javaeett_dt_035.html @@ -0,0 +1,24 @@ + + + + + + Description of the illustration javaeett_dt_035 + + + + + +
+

Diagram showing a web application in which a managed bean sends a +message to a queue, and another managed bean receives the message from +the queue.

+
+ + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_036.html b/img_text/javaeett_dt_036.html new file mode 100644 index 0000000..7d8f983 --- /dev/null +++ b/img_text/javaeett_dt_036.html @@ -0,0 +1,23 @@ + + + + + + Description of the illustration javaeett_dt_036 + + + + + +
+

Diagram of application showing an application client sending a message +to a queue, and the message being delivered to a message-driven bean

+
+ + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_037.html b/img_text/javaeett_dt_037.html new file mode 100644 index 0000000..e2e0d4a --- /dev/null +++ b/img_text/javaeett_dt_037.html @@ -0,0 +1,23 @@ + + + + + + Description of the illustration javaeett_dt_037 + + + + + +
+

Diagram of application showing an application client calling a session +bean, which sends messages that are processed by a message-driven bean

+
+ + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_038.html b/img_text/javaeett_dt_038.html new file mode 100644 index 0000000..95a3587 --- /dev/null +++ b/img_text/javaeett_dt_038.html @@ -0,0 +1,23 @@ + + + + + + Description of the illustration javaeett_dt_038 + + + + + +
+

Diagram of application showing an application client, two message-driven +beans, and an entity, as well as the associated topic and queue

+
+ + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_039.html b/img_text/javaeett_dt_039.html new file mode 100644 index 0000000..03adf65 --- /dev/null +++ b/img_text/javaeett_dt_039.html @@ -0,0 +1,23 @@ + + + + + + Description of the illustration javaeett_dt_039 + + + + + +
+

Diagram of initial request from web client to web server for access to a +protected resource

+
+ + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_040.html b/img_text/javaeett_dt_040.html new file mode 100644 index 0000000..2ffe351 --- /dev/null +++ b/img_text/javaeett_dt_040.html @@ -0,0 +1,23 @@ + + + + + + Description of the illustration javaeett_dt_040 + + + + + +
+

Diagram of initial authentication: server sends form to client, which +sends authentication data to server for validation

+
+ + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_041.html b/img_text/javaeett_dt_041.html new file mode 100644 index 0000000..ddc7e43 --- /dev/null +++ b/img_text/javaeett_dt_041.html @@ -0,0 +1,22 @@ + + + + + + Description of the illustration javaeett_dt_041 + + + + + +
+

Diagram of URL authorization

+
+ + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_042.html b/img_text/javaeett_dt_042.html new file mode 100644 index 0000000..dbad70c --- /dev/null +++ b/img_text/javaeett_dt_042.html @@ -0,0 +1,23 @@ + + + + + + Description of the illustration javaeett_dt_042 + + + + + +
+

Diagram of request fulfillment, showing server returning result to +client

+
+ + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_043.html b/img_text/javaeett_dt_043.html new file mode 100644 index 0000000..7781a1c --- /dev/null +++ b/img_text/javaeett_dt_043.html @@ -0,0 +1,23 @@ + + + + + + Description of the illustration javaeett_dt_043 + + + + + +
+

Diagram of authorization process between web component and enterprise +bean

+
+ + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_044.html b/img_text/javaeett_dt_044.html new file mode 100644 index 0000000..2a1ddb6 --- /dev/null +++ b/img_text/javaeett_dt_044.html @@ -0,0 +1,23 @@ + + + + + + Description of the illustration javaeett_dt_044 + + + + + +
+

Diagram of role mapping, showing creation of users and groups, +definition of roles, and mapping of roles to users and groups

+
+ + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_045.html b/img_text/javaeett_dt_045.html new file mode 100644 index 0000000..97ebd0e --- /dev/null +++ b/img_text/javaeett_dt_045.html @@ -0,0 +1,23 @@ + + + + + + Description of the illustration javaeett_dt_045 + + + + + +
+

Diagram of four steps in HTTP basic authentication between client and +server

+
+ + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_046.html b/img_text/javaeett_dt_046.html new file mode 100644 index 0000000..51ba192 --- /dev/null +++ b/img_text/javaeett_dt_046.html @@ -0,0 +1,23 @@ + + + + + + Description of the illustration javaeett_dt_046 + + + + + +
+

Diagram of four steps in form-based authentication between client and +server

+
+ + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_047.html b/img_text/javaeett_dt_047.html new file mode 100644 index 0000000..b8c5ded --- /dev/null +++ b/img_text/javaeett_dt_047.html @@ -0,0 +1,23 @@ + + + + + + Description of the illustration javaeett_dt_047 + + + + + +
+

Diagram of security identity propagation from client to intermediate +container to target container

+
+ + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_048.html b/img_text/javaeett_dt_048.html new file mode 100644 index 0000000..087053b --- /dev/null +++ b/img_text/javaeett_dt_048.html @@ -0,0 +1,22 @@ + + + + + + Description of the illustration javaeett_dt_048 + + + + + +
+

Diagram of six steps in mutual authentication with certificates

+
+ + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_049.html b/img_text/javaeett_dt_049.html new file mode 100644 index 0000000..82852c7 --- /dev/null +++ b/img_text/javaeett_dt_049.html @@ -0,0 +1,23 @@ + + + + + + Description of the illustration javaeett_dt_049 + + + + + +
+

Diagram of five steps in mutual authentication with user name and +password

+
+ + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_050.html b/img_text/javaeett_dt_050.html new file mode 100644 index 0000000..5f461e5 --- /dev/null +++ b/img_text/javaeett_dt_050.html @@ -0,0 +1,22 @@ + + + + + + Description of the illustration javaeett_dt_050 + + + + + +
+

A diagram showing a transaction between two beans.

+
+ + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_051.html b/img_text/javaeett_dt_051.html new file mode 100644 index 0000000..c53d2fd --- /dev/null +++ b/img_text/javaeett_dt_051.html @@ -0,0 +1,23 @@ + + + + + + Description of the illustration javaeett_dt_051 + + + + + +
+

A diagram showing Bean-A updating databases X and Y, and Bean-B updating +database Z.

+
+ + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_052.html b/img_text/javaeett_dt_052.html new file mode 100644 index 0000000..a26e4a5 --- /dev/null +++ b/img_text/javaeett_dt_052.html @@ -0,0 +1,23 @@ + + + + + + Description of the illustration javaeett_dt_052 + + + + + +
+

A diagram showing Bean-A on one Java EE server updating database X, and +Bean-B on another Java EE server updating database Y.

+
+ + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_053.html b/img_text/javaeett_dt_053.html new file mode 100644 index 0000000..76ef432 --- /dev/null +++ b/img_text/javaeett_dt_053.html @@ -0,0 +1,22 @@ + + + + + + Description of the illustration javaeett_dt_053 + + + + + +
+

Resource Adapter Contracts

+
+ + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_054.html b/img_text/javaeett_dt_054.html new file mode 100644 index 0000000..9f615d3 --- /dev/null +++ b/img_text/javaeett_dt_054.html @@ -0,0 +1,23 @@ + + + + + + Description of the illustration javaeett_dt_054 + + + + + +
+

This figure shows the trading example components: a deployed WAR and RAR +that communicate with the EIS over a TCP socket.

+
+ + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_055.html b/img_text/javaeett_dt_055.html new file mode 100644 index 0000000..ffeb1b3 --- /dev/null +++ b/img_text/javaeett_dt_055.html @@ -0,0 +1,23 @@ + + + + + + Description of the illustration javaeett_dt_055 + + + + + +
+

This figure shows the classes in each of the modules of the trading +example.

+
+ + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_056.html b/img_text/javaeett_dt_056.html new file mode 100644 index 0000000..6a618c1 --- /dev/null +++ b/img_text/javaeett_dt_056.html @@ -0,0 +1,24 @@ + + + + + + Description of the illustration javaeett_dt_056 + + + + + +
+

This figure shows the components of the traffic example: a WAR +communicating with an enterprise bean using a JMS topic, and a RAR +communicating with an EIS over a TCP socket.

+
+ + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_057.html b/img_text/javaeett_dt_057.html new file mode 100644 index 0000000..6652e58 --- /dev/null +++ b/img_text/javaeett_dt_057.html @@ -0,0 +1,23 @@ + + + + + + Description of the illustration javaeett_dt_057 + + + + + +
+

This figure shows the classes in each of the components of the traffic +example.

+
+ + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_058.html b/img_text/javaeett_dt_058.html new file mode 100644 index 0000000..ed1a192 --- /dev/null +++ b/img_text/javaeett_dt_058.html @@ -0,0 +1,26 @@ + + + + + + Description of the illustration javaeett_dt_058 + + + + + +
+

This figure shows a batch job that contains two chunk steps: step A and +step B. Step A has the three parts of a chunk-oriented step: input +retrieval A, business processing A, and output writing A. Step B also +has the three parts of a chunk-oriented step: input retrieval B, +business processing B, and output writing B.

+
+ + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_059.html b/img_text/javaeett_dt_059.html new file mode 100644 index 0000000..a0ab720 --- /dev/null +++ b/img_text/javaeett_dt_059.html @@ -0,0 +1,27 @@ + + + + + + Description of the illustration javaeett_dt_059 + + + + + +
+

This figure shows a batch job that contains two chunk steps, a task step +and a decision element. The job starts with chunk step A, continues with +chunk step B, and then decision element D evaluates condition 1. The +condition is based on the status of step B. If condition 1 is true, the +job terminates; otherwise the job continues with step C and then the job +ends.

+
+ + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_060.html b/img_text/javaeett_dt_060.html new file mode 100644 index 0000000..22917d1 --- /dev/null +++ b/img_text/javaeett_dt_060.html @@ -0,0 +1,26 @@ + + + + + + Description of the illustration javaeett_dt_060 + + + + + +
+

The figure shows the architecture of the taskcreator example. The +JavaServer Faces page invokes methods on a CDI-managed bean, which +submits task initiation requests to an enterprise bean. The enterprise +bean uses a WebSocket endpoint to indicate to clients that an updated +task execution log is available.

+
+ + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_061.html b/img_text/javaeett_dt_061.html new file mode 100644 index 0000000..c1e824c --- /dev/null +++ b/img_text/javaeett_dt_061.html @@ -0,0 +1,26 @@ + + + + + + Description of the illustration javaeett_dt_061 + + + + + +
+

Architecture diagram of the Duke’s Tutoring example application. Two +clients access the main interface and the admin interface deployed in +the web container. These interfaces communicate with enterprise beans +deployed in the EJB container. The enterprise beans communicate with the +database.

+
+ + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_062.html b/img_text/javaeett_dt_062.html new file mode 100644 index 0000000..b66f75d --- /dev/null +++ b/img_text/javaeett_dt_062.html @@ -0,0 +1,23 @@ + + + + + + Description of the illustration javaeett_dt_062 + + + + + +
+

This figure shows the architecture of the main Duke’s Forest projects +and how they use the Events and Entities projects.

+
+ + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_063.html b/img_text/javaeett_dt_063.html new file mode 100644 index 0000000..64e24c7 --- /dev/null +++ b/img_text/javaeett_dt_063.html @@ -0,0 +1,24 @@ + + + + + + Description of the illustration javaeett_dt_063 + + + + + +
+

This figure shows the interactions between the Duke’s Store and Duke’s +Shipment projects (using REST and HTTP), and between the Duke’s Store +and Duke’s Payment projects (using REST and HTTP).

+
+ + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_064.html b/img_text/javaeett_dt_064.html new file mode 100644 index 0000000..8b74471 --- /dev/null +++ b/img_text/javaeett_dt_064.html @@ -0,0 +1,23 @@ + + + + + + Description of the illustration javaeett_dt_064 + + + + + +
+

This figure shows the database tables in Duke’s Forest and their +relationships.

+
+ + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_065_frmcmpnt.html b/img_text/javaeett_dt_065_frmcmpnt.html new file mode 100644 index 0000000..a795c74 --- /dev/null +++ b/img_text/javaeett_dt_065_frmcmpnt.html @@ -0,0 +1,22 @@ + + + + + + Description of the illustration javaeett_dt_065_frmcmpnt + + + + + +
+

Form with User Name and Password text fields and a Login button.

+
+ + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_066_slctmny.html b/img_text/javaeett_dt_066_slctmny.html new file mode 100644 index 0000000..1d7a432 --- /dev/null +++ b/img_text/javaeett_dt_066_slctmny.html @@ -0,0 +1,22 @@ + + + + + + Description of the illustration javaeett_dt_066_slctmny + + + + + +
+

Check box group, scrollable box, and unscrollable box.

+
+ + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_067_slctn.html b/img_text/javaeett_dt_067_slctn.html new file mode 100644 index 0000000..877ff1a --- /dev/null +++ b/img_text/javaeett_dt_067_slctn.html @@ -0,0 +1,22 @@ + + + + + + Description of the illustration javaeett_dt_067_slctn + + + + + +
+

Options, check box, and lists.

+
+ + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_068_txtcmpnts.html b/img_text/javaeett_dt_068_txtcmpnts.html new file mode 100644 index 0000000..1603931 --- /dev/null +++ b/img_text/javaeett_dt_068_txtcmpnts.html @@ -0,0 +1,23 @@ + + + + + + Description of the illustration javaeett_dt_068_txtcmpnts + + + + + +
+

A form. "User Name" labels a field. "Password" labels a password field. +"Comments" labels a multi-line field.

+
+ + + + \ No newline at end of file diff --git a/injection.html b/injection.html new file mode 100644 index 0000000..a118df8 --- /dev/null +++ b/injection.html @@ -0,0 +1,114 @@ + + + + + + Injection + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

4 Injection

+
+
+

This chapter provides an overview of injection in Java EE and describes +the two injection mechanisms provided by the platform: resource +injection and dependency injection.

+
+
+

Java EE provides injection mechanisms that enable your objects to obtain +references to resources and other dependencies without having to +instantiate them directly. You declare the required resources and other +dependencies in your classes by decorating fields or methods with one of +the annotations that mark the field as an injection point. The container +then provides the required instances at runtime. Injection simplifies +your code and decouples it from the implementations of its dependencies.

+
+
+

The following topics are addressed here:

+
+ +
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/injection001.html b/injection001.html new file mode 100644 index 0000000..eba40be --- /dev/null +++ b/injection001.html @@ -0,0 +1,137 @@ + + + + + + Resource Injection + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

4.1 Resource Injection

+
+
+

Resource injection enables you to inject any resource available in the +JNDI namespace into any container-managed object, such as a servlet, an +enterprise bean, or a managed bean. For example, you can use resource +injection to inject data sources, connectors, or custom resources +available in the JNDI namespace.

+
+
+

The type you use for the reference to the injected instance is usually +an interface, which decouples your code from the implementation of the +resource.

+
+
+

For example, the following code injects a data source object that +provides connections to the default Java DB database shipped with +GlassFish Server:

+
+
+
+
public class MyServlet extends HttpServlet {
+    @Resource(name="java:comp/DefaultDataSource")
+    private javax.sql.DataSource dsc;
+    ...
+}
+
+
+
+

In addition to field-based injection as in the preceding example, you +can inject resources using method-based injection:

+
+
+
+
public class MyServlet extends HttpServlet {
+    private javax.sql.DataSource dsc;
+    ...
+    @Resource(name="java:comp/DefaultDataSource")
+    public void setDsc(java.sql.DataSource ds) {
+        dsc = ds;
+    }
+}
+
+
+
+

To use method-based injection, the setter method must follow the +JavaBeans conventions for property names: The method name must begin +with set, have a void return type, and have only one parameter.

+
+
+

The @Resource annotation is in the javax.annotation package and is +defined in JSR 250 (Common Annotations for the Java Platform). Resource +injection resolves by name, so it is not typesafe: the type of the +resource object is not known at compile time, so you can get runtime +errors if the types of the object and its reference do not match.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/injection002.html b/injection002.html new file mode 100644 index 0000000..f4ef10b --- /dev/null +++ b/injection002.html @@ -0,0 +1,134 @@ + + + + + + Dependency Injection + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

4.2 Dependency Injection

+
+
+

Dependency injection enables you to turn regular Java classes into +managed objects and to inject them into any other managed object. Using +dependency injection, your code can declare dependencies on any managed +object. The container automatically provides instances of these +dependencies at the injection points at runtime, and it also manages the +lifecycle of these instances for you.

+
+
+

Dependency injection in Java EE defines scopes, which determine the +lifecycle of the objects that the container instantiates and injects. +For example, a managed object that is only needed to respond to a single +client request (such as a currency converter) has a different scope than +a managed object that is needed to process multiple client requests +within a session (such as a shopping cart).

+
+
+

You can define managed objects (also called managed beans) that you can +later inject by assigning a scope to a regular class:

+
+
+
+
@javax.enterprise.context.RequestScoped
+public class CurrencyConverter { ... }
+
+
+
+

Use the javax.inject.Inject annotation to inject managed beans; for +example:

+
+
+
+
public class MyServlet extends HttpServlet {
+    @Inject CurrencyConverter cc;
+    ...
+}
+
+
+
+

As opposed to resource injection, dependency injection is typesafe +because it resolves by type. To decouple your code from the +implementation of the managed bean, you can reference the injected +instances using an interface type and have your managed bean implement +that interface.

+
+
+

For more information about dependency injection, see +Chapter 23, "Introduction to Contexts and +Dependency Injection for Java EE" and JSR 299 (Contexts and Dependency +Injection for the Java EE Platform).

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/injection003.html b/injection003.html new file mode 100644 index 0000000..ce79929 --- /dev/null +++ b/injection003.html @@ -0,0 +1,134 @@ + + + + + + The Main Differences between Resource Injection and Dependency Injection + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

4.3 The Main Differences between Resource Injection and DependencyInjection

+
+
+

Table 4-1 lists the main differences between resource +injection and dependency injection.

+
+
+

+
+
+

Table 4-1 Differences between Resource Injection and Dependency +Injection

+
+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + +
Injection MechanismCan Inject JNDI Resources DirectlyCan Inject +Regular Classes DirectlyResolves ByTypesafe

Resource Injection

Yes

No

Resource name

No

Dependency Injection

No

Yes

Type

Yes

+
+
+
+
+
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/interceptors.html b/interceptors.html new file mode 100644 index 0000000..d8455fe --- /dev/null +++ b/interceptors.html @@ -0,0 +1,104 @@ + + + + + + Using Java EE Interceptors + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

54 Using Java EE Interceptors

+
+
+

This chapter discusses how to create interceptor classes and methods +that interpose on method invocations or lifecycle events on a target +class.

+
+
+

The following topics are addressed here:

+
+ +
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/interceptors001.html b/interceptors001.html new file mode 100644 index 0000000..50109fb --- /dev/null +++ b/interceptors001.html @@ -0,0 +1,237 @@ + + + + + + Overview of Interceptors + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

54.1 Overview of Interceptors

+
+
+

Interceptors are used in conjunction with Java EE managed classes to +allow developers to invoke interceptor methods on an associated target +class, in conjunction with method invocations or lifecycle events. +Common uses of interceptors are logging, auditing, and profiling.

+
+
+

Although interceptors are part of Enterprise JavaBeans 3.2 and Contexts +and Dependency Injection for Java EE 1.1, the Interceptors 1.2 +specification is downloadable as part of a maintenance release of JSR +318, Enterprise JavaBeans 3.1, available from +http://jcp.org/en/jsr/detail?id=318. You can use interceptors with +session beans, message-driven beans, and CDI managed beans. In all of +these cases, the interceptor target class is the bean class.

+
+
+

An interceptor can be defined within a target class as an interceptor +method, or in an associated class called an interceptor class. +Interceptor classes contain methods that are invoked in conjunction with +the methods or lifecycle events of the target class.

+
+
+

Interceptor classes and methods are defined using metadata annotations, +or in the deployment descriptor of the application that contains the +interceptors and target classes.

+
+
+
+
+
+
+
+ +++ + + + + + +
+

Note:

+
+
+

Applications that use the deployment descriptor to define interceptors +are not portable across Java EE servers.

+
+
+
+
+
+
+
+
+

Interceptor methods within the target class or in an interceptor class +are annotated with one of the metadata annotations defined in +Table 54-1.

+
+
+

+
+
+

Table 54-1 Interceptor Metadata Annotations

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Interceptor Metadata AnnotationDescription

javax.interceptor.AroundConstruct

Designates the method as an +interceptor method that receives a callback after the target class is +constructed

javax.interceptor.AroundInvoke

Designates the method as an +interceptor method

javax.interceptor.AroundTimeout

Designates the method as a timeout +interceptor for interposing on timeout methods for enterprise bean +timers

javax.annotation.PostConstruct

Designates the method as an +interceptor method for post-construct lifecycle events

javax.annotation.PreDestroy

Designates the method as an interceptor +method for pre-destroy lifecycle events

+
+
+
+
+
+
+
+

54.1.1 Interceptor Classes

+
+

Interceptor classes may be designated with the optional +javax.interceptor.Interceptor annotation, but interceptor classes are +not required to be so annotated. An interceptor class must have a +public, no-argument constructor.

+
+
+

The target class can have any number of interceptor classes associated +with it. The order in which the interceptor classes are invoked is +determined by the order in which the interceptor classes are defined in +the javax.interceptor.Interceptors annotation. However, this order can +be overridden in the deployment descriptor.

+
+
+

Interceptor classes may be targets of dependency injection. Dependency +injection occurs when the interceptor class instance is created, using +the naming context of the associated target class, and before any +@PostConstruct callbacks are invoked.

+
+
+
+

54.1.2 Interceptor Lifecycle

+
+

Interceptor classes have the same lifecycle as their associated target +class. When a target class instance is created, an interceptor class +instance is also created for each declared interceptor class in the +target class. That is, if the target class declares multiple interceptor +classes, an instance of each class is created when the target class +instance is created. The target class instance and all interceptor class +instances are fully instantiated before any @PostConstruct callbacks +are invoked, and any @PreDestroy callbacks are invoked before the +target class and interceptor class instances are destroyed.

+
+
+
+

54.1.3 Interceptors and CDI

+
+

Contexts and Dependency Injection for Java EE (CDI) builds on the basic +functionality of Java EE interceptors. For information on CDI +interceptors, including a discussion of interceptor binding types, see +Using Interceptors in CDI Applications.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/interceptors002.html b/interceptors002.html new file mode 100644 index 0000000..b0de8c9 --- /dev/null +++ b/interceptors002.html @@ -0,0 +1,733 @@ + + + + + + Using Interceptors + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

54.2 Using Interceptors

+
+
+

To define an interceptor, use one of the interceptor metadata +annotations listed in Table 54-1 within +the target class, or in a separate interceptor class. The following code +declares an @AroundTimeout interceptor method within a target class:

+
+
+
+
@Stateless
+public class TimerBean {
+    ...
+    @Schedule(minute="*/1", hour="*")
+    public void automaticTimerMethod() { ... }
+
+    @AroundTimeout
+    public void timeoutInterceptorMethod(InvocationContext ctx) { ... }
+    ...
+}
+
+
+
+

If you are using interceptor classes, use the +javax.interceptor.Interceptors annotation to declare one or more +interceptors at the class or method level of the target class. The +following code declares interceptors at the class level:

+
+
+
+
@Stateless
+@Interceptors({PrimaryInterceptor.class, SecondaryInterceptor.class})
+public class OrderBean { ... }
+
+
+
+

The following code declares a method-level interceptor class:

+
+
+
+
@Stateless
+public class OrderBean {
+    ...
+    @Interceptors(OrderInterceptor.class)
+    public void placeOrder(Order order) { ... }
+    ...
+}
+
+
+
+

54.2.1 Intercepting Method Invocations

+
+

Use the @AroundInvoke annotation to designate interceptor methods for +managed object methods. Only one around-invoke interceptor method per +class is allowed. Around-invoke interceptor methods have the following +form:

+
+
+
+
@AroundInvoke
+visibility Object method-name(InvocationContext) throws Exception { ... }
+
+
+
+

For example:

+
+
+
+
@AroundInvoke
+public void interceptOrder(InvocationContext ctx) { ... }
+
+
+
+

Around-invoke interceptor methods can have public, private, protected, +or package-level access, and must not be declared static or final.

+
+
+

An around-invoke interceptor can call any component or resource that is +callable by the target method on which it interposes, can have the same +security and transaction context as the target method, and can run in +the same Java virtual machine call stack as the target method.

+
+
+

Around-invoke interceptors can throw runtime exceptions and any +exception allowed by the throws clause of the target method. They may +catch and suppress exceptions, and then recover by calling the +InvocationContext.proceed method.

+
+
+

54.2.1.1 Using Multiple Method Interceptors

+
+

Use the @Interceptors annotation to declare multiple interceptors for +a target method or class:

+
+
+
+
@Interceptors({PrimaryInterceptor.class, SecondaryInterceptor.class,
+        LastInterceptor.class})
+public void updateInfo(String info) { ... }
+
+
+
+

The order of the interceptors in the @Interceptors annotation is the +order in which the interceptors are invoked.

+
+
+

You can also define multiple interceptors in the deployment descriptor. +The order of the interceptors in the deployment descriptor is the order +in which the interceptors will be invoked:

+
+
+
+
...
+<interceptor-binding>
+    <target-name>myapp.OrderBean</target-name>
+    <interceptor-class>myapp.PrimaryInterceptor.class</interceptor-class>
+    <interceptor-class>myapp.SecondaryInterceptor.class</interceptor-class>
+    <interceptor-class>myapp.LastInterceptor.class</interceptor-class>
+    <method-name>updateInfo</method-name>
+</interceptor-binding>
+...
+
+
+
+

To explicitly pass control to the next interceptor in the chain, call +the InvocationContext.proceed method.

+
+
+

Data can be shared across interceptors.

+
+
+
    +
  • +

    The same InvocationContext instance is passed as an input parameter +to each interceptor method in the interceptor chain for a particular +target method. The InvocationContext instance’s contextData property +is used to pass data across interceptor methods. The contextData +property is a java.util.Map<String, Object> object. Data stored in +contextData is accessible to interceptor methods further down the +interceptor chain.

    +
  • +
  • +

    The data stored in contextData is not sharable across separate +target class method invocations. That is, a different +InvocationContext object is created for each invocation of the method +in the target class.

    +
  • +
+
+
+
+

54.2.1.2 Accessing Target Method Parameters from an Interceptor Class

+
+

You can use the InvocationContext instance passed to each +around-invoke method to access and modify the parameters of the target +method. The parameters property of InvocationContext is an array of +Object instances that corresponds to the parameter order of the target +method. For example, for the following target method, the parameters +property, in the InvocationContext instance passed to the +around-invoke interceptor method in PrimaryInterceptor, is an Object +array containing two String objects (firstName and lastName) and a +Date object (date):

+
+
+
+
@Interceptors(PrimaryInterceptor.class)
+public void updateInfo(String firstName, String lastName, Date date) { ... }
+
+
+
+

You can access and modify the parameters by using the +InvocationContext.getParameters and InvocationContext.setParameters +methods, respectively.

+
+
+
+
+

54.2.2 Intercepting Lifecycle Callback Events

+
+

Interceptors for lifecycle callback events (around-construct, +post-construct, and pre-destroy) may be defined in the target class or +in interceptor classes. The javax.interceptor.AroundConstruct +annotation designates the method as an interceptor method that +interposes on the invocation of the target class’s constructor. The +javax.annotation.PostConstruct annotation is used to designate a +method as a post-construct lifecycle event interceptor. The +javax.annotation.PreDestroy annotation is used to designate a method +as a pre-destroy lifecycle event interceptor.

+
+
+

Lifecycle event interceptors defined within the target class have the +following form:

+
+
+
+
void method-name() { ... }
+
+
+
+

For example:

+
+
+
+
@PostConstruct
+void initialize() { ... }
+
+
+
+

Lifecycle event interceptors defined in an interceptor class have the +following form:

+
+
+
+
void method-name(InvocationContext) { ... }
+
+
+
+

For example:

+
+
+
+
@PreDestroy
+void cleanup(InvocationContext ctx) { ... }
+
+
+
+

Lifecycle interceptor methods can have public, private, protected, or +package-level access, and must not be declared static or final. +Lifecycle interceptors may throw runtime exceptions but cannot throw +checked exceptions.

+
+
+

Lifecycle interceptor methods are called in an unspecified security and +transaction context. That is, portable Java EE applications should not +assume the lifecycle event interceptor method has access to a security +or transaction context. Only one interceptor method for each lifecycle +event (post-create and pre-destroy) is allowed per class.

+
+
+

54.2.2.1 Using AroundConstruct Interceptor Methods

+
+

@AroundConstruct methods are interposed on the invocation of the +target class’s constructor. Methods decorated with @AroundConstruct +may only be defined within interceptor classes or superclasses of +interceptor classes. You may not use @AroundConstruct methods within +the target class.

+
+
+

The @AroundConstruct method is called after dependency injection has +been completed for all interceptors associated with the target class. +The target class is created and the target class’s constructor injection +is performed after all associated @AroundConstruct methods have called +the Invocation.proceed method. At that point, dependency injection for +the target class is completed, and then any @PostConstruct callback +methods are invoked.

+
+
+

@AroundConstruct methods can access the constructed target instance +after calling Invocation.proceed by calling the +InvocationContext.getTarget method.

+
+
+
+
+
+
+
+ +++ + + + + + +
+

Caution:

+
+
+

Calling methods on the target instance from an @AroundConstruct method +is dangerous because dependency injection may not have completed on the +target instance.

+
+
+
+
+
+
+
+
+

@AroundConstruct methods must call Invocation.proceed in order to +create the target instance. If an @AroundConstruct method does not +call Invocation.proceed, the target instance will not be created.

+
+
+
+

54.2.2.2 Using Multiple Lifecycle Callback Interceptors

+
+

You can define multiple lifecycle interceptors for a target class by +specifying the interceptor classes in the @Interceptors annotation:

+
+
+
+
@Interceptors({PrimaryInterceptor.class, SecondaryInterceptor.class,
+        LastInterceptor.class})
+@Stateless
+public class OrderBean { ... }
+
+
+
+

Data stored in the contextData property of InvocationContext is not +sharable across different lifecycle events.

+
+
+
+
+

54.2.3 Intercepting Timeout Events

+
+

You can define interceptors for EJB timer service timeout methods by +using the @AroundTimeout annotation on methods in the target class or +in an interceptor class. Only one @AroundTimeout method per class is +allowed.

+
+
+

Timeout interceptors have the following form:

+
+
+
+
Object method-name(InvocationContext) throws Exception { ... }
+
+
+
+

For example:

+
+
+
+
@AroundTimeout
+protected void timeoutInterceptorMethod(InvocationContext ctx) { ... }
+
+
+
+

Timeout interceptor methods can have public, private, protected, or +package-level access, and must not be declared static or final.

+
+
+

Timeout interceptors can call any component or resource callable by the +target timeout method, and are invoked in the same transaction and +security context as the target method.

+
+
+

Timeout interceptors may access the timer object associated with the +target timeout method through the InvocationContext instance’s +getTimer method.

+
+
+

54.2.3.1 Using Multiple Timeout Interceptors

+
+

You can define multiple timeout interceptors for a given target class by +specifying the interceptor classes containing @AroundTimeout +interceptor methods in an @Interceptors annotation at the class level.

+
+
+

If a target class specifies timeout interceptors in an interceptor +class, and also has an @AroundTimeout interceptor method within the +target class itself, the timeout interceptors in the interceptor classes +are called first, followed by the timeout interceptors defined in the +target class. For example, in the following example, assume that both +the PrimaryInterceptor and SecondaryInterceptor classes have timeout +interceptor methods:

+
+
+
+
@Interceptors({PrimaryInterceptor.class, SecondaryInterceptor.class})
+@Stateful
+public class OrderBean {
+    ...
+    @AroundTimeout
+    private void last(InvocationContext ctx) { ... }
+    ...
+}
+
+
+
+

The timeout interceptor in PrimaryInterceptor will be called first, +followed by the timeout interceptor in SecondaryInterceptor, and +finally the last method defined in the target class.

+
+
+
+
+

54.2.4 Binding Interceptors to Components

+
+

Interceptor binding types are annotations that may be applied to +components to associate them with a particular interceptor. Interceptor +binding types are typically custom runtime annotation types that specify +the interceptor target. Use the javax.interceptor.InterceptorBinding +annotation on the custom annotation definition and specify the target by +using @Target, setting one or more of TYPE (class-level +interceptors), METHOD (method-level interceptors), CONSTRUCTOR +(around-construct interceptors), or any other valid target:

+
+
+
+
@InterceptorBinding
+@Target({TYPE, METHOD})
+@Retention(RUNTIME)
+@Inherited
+pubic @interface Logged { ... }
+
+
+
+

Interceptor binding types may also be applied to other interceptor +binding types:

+
+
+
+
@Logged
+@InterceptorBinding
+@Target({TYPE, METHOD})
+@Retention(RUNTIME)
+@Inherited
+public @interface Secured { ... }
+
+
+
+

54.2.4.1 Declaring the Interceptor Bindings on an Interceptor Class

+
+

Annotate the interceptor class with the interceptor binding type and +@Interceptor to associate the interceptor binding with the interceptor +class:

+
+
+
+
@Logged
+@Interceptor
+public class LoggingInterceptor {
+    @AroundInvoke
+    public Object logInvocation(InvocationContext ctx) throws Exception { ... }
+    ...
+}
+
+
+
+

An interceptor class may declare multiple interceptor binding types, and +more than one interceptor class may declare an interceptor binding type.

+
+
+

If the interceptor class intercepts lifecycle callbacks, it can only +declare interceptor binding types with Target(TYPE), or in the case of +@AroundConstruct lifecycle callbacks, Target(CONSTRUCTOR).

+
+
+
+

54.2.4.2 Binding a Component to an Interceptor

+
+

Add the interceptor binding type annotation to the target component’s +class, method, or constructor. Interceptor binding types are applied +using the same rules as @Interceptor annotations:

+
+
+
+
@Logged
+public class Message {
+    ...
+    @Secured
+    public void getConfidentialMessage() { ... }
+    ...
+}
+
+
+
+

If the component has a class-level interceptor binding, it must not be +final or have any non-static, non-private final methods. If a +non-static, non-private method has an interceptor binding applied to +it, it must not be final, and the component class cannot be final.

+
+
+
+
+

54.2.5 Ordering Interceptors

+
+

The order in which multiple interceptors are invoked is determined by +the following rules.

+
+
+
    +
  • +

    Default interceptors are defined in a deployment descriptor, and are +invoked first. They may specify the invocation order or override the +order specified using annotations. Default interceptors are invoked in +the order in which they are defined in the deployment descriptor.

    +
  • +
  • +

    The order in which the interceptor classes are listed in the +@Interceptors annotation defines the order in which the interceptors +are invoked. Any @Priority settings for interceptors listed within an +@Interceptors annotation are ignored.

    +
  • +
  • +

    If the interceptor class has superclasses, the interceptors defined on +the superclasses are invoked first, starting with the most general +superclass.

    +
  • +
  • +

    Interceptor classes may set the priority of the interceptor methods by +setting a value within a javax.annotation.Priority annotation.

    +
  • +
  • +

    After the interceptors defined within interceptor classes have been +invoked, the target class’s constructor, around-invoke, or +around-timeout interceptors are invoked in the same order as the +interceptors within the @Interceptors annotation.

    +
  • +
  • +

    If the target class has superclasses, any interceptors defined on the +superclasses are invoked first, starting with the most general +superclass.

    +
  • +
+
+
+

The @Priority annotation requires an int value as an element. The +lower the number, the higher the priority of the associated interceptor.

+
+
+
+
+
+
+
+ +++ + + + + + +
+

Note:

+
+
+

The invocation order of interceptors with the same priority value is +implementation-specific.

+
+
+
+
+
+
+
+
+

The javax.interceptor.Interceptor.Priority class defines the priority +constants listed in Table 54-2.

+
+
+

+
+
+

Table 54-2 Interceptor Priority Constants

+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Priority ConstantValueDescription

PLATFORM_BEFORE

0

Interceptors defined by the Java EE Platform and +intended to be invoked early in the invocation chain should use the +range between PLATFORM_BEFORE and LIBRARY_BEFORE. These interceptors +have the highest priority.

LIBRARY_BEFORE

1000

Interceptors defined by extension libraries +that should be invoked early in the interceptor chain should use the +range between LIBRARY_BEFORE and APPLICATION.

APPLICATION

2000

Interceptors defined by applications should use +the range between APPLICATION and LIBRARY_AFTER.

LIBRARY_AFTER

3000

Low priority interceptors defined by extension +libraries should use the range between LIBRARY_AFTER and +PLATFORM_AFTER.

PLATFORM_AFTER

4000

Low priority interceptors defined by the Java +EE Platform should have values higher than PLATFORM_AFTER.

+
+
+
+
+
+
+
+
+
+
+
+
+ +++ + + + + + +
+

Note:

+
+
+

Negative priority values are reserved by the Interceptors specification +for future use, and should not be used.

+
+
+
+
+
+
+
+
+

The following code snippet shows how to use the priority constants in an +application-defined interceptor:

+
+
+
+
@Interceptor
+@Priority(Interceptor.Priority.APPLICATION+200
+public class MyInterceptor { ... }
+
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/interceptors003.html b/interceptors003.html new file mode 100644 index 0000000..45509b8 --- /dev/null +++ b/interceptors003.html @@ -0,0 +1,258 @@ + + + + + + The interceptor Example Application + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

54.3 The interceptor Example Application

+
+
+

The interceptor example demonstrates how to use an interceptor class, +containing an @AroundInvoke interceptor method, with a stateless +session bean.

+
+
+

The HelloBean stateless session bean is a simple enterprise bean with +two business methods, getName and setName, to retrieve and modify a +string. The setName business method has an @Interceptors annotation +that specifies an interceptor class, HelloInterceptor, for that +method:

+
+
+
+
@Interceptors(HelloInterceptor.class)
+public void setName(String name) {
+    this.name = name;
+}
+
+
+
+

The HelloInterceptor class defines an @AroundInvoke interceptor +method, modifyGreeting, that converts the string passed to +HelloBean.setName to lowercase:

+
+
+
+
@AroundInvoke
+public Object modifyGreeting(InvocationContext ctx) throws Exception {
+    Object[] parameters = ctx.getParameters();
+    String param = (String) parameters[0];
+    param = param.toLowerCase();
+    parameters[0] = param;
+    ctx.setParameters(parameters);
+    try {
+        return ctx.proceed();
+    } catch (Exception e) {
+        logger.warning("Error calling ctx.proceed in modifyGreeting()");
+        return null;
+    }
+}
+
+
+
+

The parameters to HelloBean.setName are retrieved and stored in an +Object array by calling the InvocationContext.getParameters method. +Because setName only has one parameter, it is the first and only +element in the array. The string is set to lowercase and stored in the +parameters array, then passed to InvocationContext.setParameters. To +return control to the session bean, InvocationContext.proceed is +called.

+
+
+

The user interface of interceptor is a JavaServer Faces web +application that consists of two Facelets views: index.xhtml, which +contains a form for entering the name, and response.xhtml, which +displays the final name.

+
+
+

54.3.1 Running the interceptor Example

+
+

You can use either NetBeans IDE or Maven to build, package, deploy, and +run the interceptor example.

+
+
+

The following topics are addressed here:

+
+ +
+

54.3.1.1 To Run the interceptor Example Using NetBeans IDE

+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    From the File menu, choose Open Project.

    +
  4. +
  5. +

    In the Open Project dialog box, navigate to:

    +
    +
    +
    tut-install/examples/ejb
    +
    +
    +
  6. +
  7. +

    Select the interceptor folder and click Open Project.

    +
  8. +
  9. +

    In the Projects tab, right-click the interceptor project and +select Run.

    +
    +

    This will compile, deploy, and run the interceptor example, opening a +web browser to the following URL:

    +
    +
    +
    +
    http://localhost:8080/interceptor/
    +
    +
    +
  10. +
  11. +

    Enter a name into the form and click Submit.

    +
    +

    The name will be converted to lowercase by the method interceptor +defined in the HelloInterceptor class.

    +
    +
  12. +
+
+
+
+

54.3.1.2 To Run the interceptor Example Using Maven

+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    Go to the following directory:

    +
    +
    +
    tut-install/examples/ejb/interceptor/
    +
    +
    +
  4. +
  5. +

    To compile the source files and package the application, use the +following command:

    +
    +
    +
    mvn install
    +
    +
    +
    +

    This command builds and packages the application into a WAR file, +interceptor.war, located in the target directory. The WAR file is +then deployed to GlassFish Server.

    +
    +
  6. +
  7. +

    Open the following URL in a web browser:

    +
    +
    +
    http://localhost:8080/interceptor/
    +
    +
    +
  8. +
  9. +

    Enter a name into the form and click Submit.

    +
    +

    The name will be converted to lowercase by the method interceptor +defined in the HelloInterceptor class.

    +
    +
  10. +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+
+ + + \ No newline at end of file diff --git a/jaxrs-advanced.html b/jaxrs-advanced.html new file mode 100644 index 0000000..ac57353 --- /dev/null +++ b/jaxrs-advanced.html @@ -0,0 +1,130 @@ + + + + + + JAX-RS: Advanced Topics and an Example + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

31 JAX-RS: Advanced Topics and an Example

+
+
+

The Java API for RESTful Web Services (JAX-RS, defined in JSR 339) is +designed to make it easy to develop applications that use the REST +architecture. This chapter describes advanced features of JAX-RS. If you +are new to JAX-RS, see Chapter 29, "Building +RESTful Web Services with JAX-RS" before you proceed with this chapter.

+
+
+

JAX-RS is integrated with Contexts and Dependency Injection for Java EE +(CDI), Enterprise JavaBeans (EJB) technology, and Java Servlet +technology.

+
+
+

The following topics are addressed here:

+
+ +
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/jaxrs-advanced001.html b/jaxrs-advanced001.html new file mode 100644 index 0000000..b269c14 --- /dev/null +++ b/jaxrs-advanced001.html @@ -0,0 +1,319 @@ + + + + + + Annotations for Field and Bean Properties of Resource Classes + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

31.1 Annotations for Field and Bean Properties of Resource Classes

+
+
+

JAX-RS annotations for resource classes let you extract specific parts +or values from a Uniform Resource Identifier (URI) or request header.

+
+
+

JAX-RS provides the annotations listed in Table 31-1.

+
+
+

+
+
+

Table 31-1 Advanced JAX-RS Annotations

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AnnotationDescription

@Context

Injects information into a class field, bean property, or +method parameter

@CookieParam

Extracts information from cookies declared in the +cookie request header

@FormParam

Extracts information from a request representation whose +content type is application/x-www-form-urlencoded

@HeaderParam

Extracts the value of a header

@MatrixParam

Extracts the value of a URI matrix parameter

@PathParam

Extracts the value of a URI template parameter

@QueryParam

Extracts the value of a URI query parameter

+
+
+
+
+
+
+
+

31.1.1 Extracting Path Parameters

+
+

URI path templates are URIs with variables embedded within the URI +syntax. The @PathParam annotation lets you use variable URI path +fragments when you call a method.

+
+
+

The following code snippet shows how to extract the last name of an +employee when the employee’s email address is provided:

+
+
+
+
@Path("/employees/{firstname}.{lastname}@{domain}.com")
+public class EmpResource {
+
+    @GET
+    @Produces("text/xml")
+    public String getEmployeelastname(@PathParam("lastname") String lastName) {
+      ...
+    }
+}
+
+
+
+

In this example, the @Path annotation defines the URI variables (or +path parameters) {firstname}, {lastname}, and {domain}. The +@PathParam in the method parameter of the request method extracts the +last name from the email address.

+
+
+

If your HTTP request is GET /employees/john.doe@example.com, the +value "doe" is injected into {lastname}.

+
+
+

You can specify several path parameters in one URI.

+
+
+

You can declare a regular expression with a URI variable. For example, +if it is required that the last name must consist only of lowercase and +uppercase characters, you can declare the following regular expression:

+
+
+
+
@Path("/employees/{firstname}.{lastname[a-zA-Z]*}@{domain}.com")
+
+
+
+

If the last name does not match the regular expression, a 404 response +is returned.

+
+
+
+

31.1.2 Extracting Query Parameters

+
+

Use the @QueryParam annotation to extract query parameters from the +query component of the request URI.

+
+
+

For instance, to query all employees who have joined within a specific +range of years, use a method signature like the following:

+
+
+
+
@Path("/employees/")
+@GET
+public Response getEmployees(
+        @DefaultValue("2003") @QueryParam("minyear") int minyear,
+        @DefaultValue("2013") @QueryParam("maxyear") int maxyear)
+    {...}
+
+
+
+

This code snippet defines two query parameters, minyear and maxyear. +The following HTTP request would query for all employees who have joined +between 2003 and 2013:

+
+
+
+
GET /employees?maxyear=2013&minyear=2003
+
+
+
+

The @DefaultValue annotation defines a default value, which is to be +used if no values are provided for the query parameters. By default, +JAX-RS assigns a null value for Object values and zero for primitive +data types. You can use the @DefaultValue annotation to eliminate null +or zero values and define your own default values for a parameter.

+
+
+
+

31.1.3 Extracting Form Data

+
+

Use the @FormParam annotation to extract form parameters from HTML +forms. For example, the following form accepts the name, address, and +manager’s name of an employee:

+
+
+
+
<FORM action="http://example.com/employees/" method="post">
+  <p>
+    <fieldset>
+      Employee name: <INPUT type="text" name="empname" tabindex="1">
+      Employee address: <INPUT type="text" name="empaddress" tabindex="2">
+      Manager name: <INPUT type="text" name="managername" tabindex="3">
+    </fieldset>
+  </p>
+</FORM>
+
+
+
+

Use the following code snippet to extract the manager name from this +HTML form:

+
+
+
+
@POST
+@Consumes("application/x-www-form-urlencoded")
+public void post(@FormParam("managername") String managername) {
+    // Store the value
+    ...
+}
+
+
+
+

To obtain a map of form parameter names to values, use a code snippet +like the following:

+
+
+
+
@POST
+@Consumes("application/x-www-form-urlencoded")
+public void post(MultivaluedMap<String, String> formParams) {
+    // Store the message
+}
+
+
+
+
+

31.1.4 Extracting the Java Type of a Request or Response

+
+

The javax.ws.rs.core.Context annotation retrieves the Java types +related to a request or response.

+
+
+

The javax.ws.rs.core.UriInfo interface provides information about the +components of a request URI. The following code snippet shows how to +obtain a map of query and path parameter names to values:

+
+
+
+
@GET
+public String getParams(@Context UriInfo ui) {
+    MultivaluedMap<String, String> queryParams = ui.getQueryParameters();
+    MultivaluedMap<String, String> pathParams = ui.getPathParameters();
+}
+
+
+
+

The javax.ws.rs.core.HttpHeaders interface provides information about +request headers and cookies. The following code snippet shows how to +obtain a map of header and cookie parameter names to values:

+
+
+
+
@GET
+public String getHeaders(@Context HttpHeaders hh) {
+    MultivaluedMap<String, String> headerParams = hh.getRequestHeaders();
+    MultivaluedMap<String, Cookie> pathParams = hh.getCookies();
+}
+
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/jaxrs-advanced002.html b/jaxrs-advanced002.html new file mode 100644 index 0000000..a432178 --- /dev/null +++ b/jaxrs-advanced002.html @@ -0,0 +1,335 @@ + + + + + + Validating Resource Data with Bean Validation + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

31.2 Validating Resource Data with Bean Validation

+
+
+

JAX-RS supports the Bean Validation to verify JAX-RS resource classes. +This support consists of:

+
+
+
    +
  • +

    Adding constraint annotations to resource method parameters

    +
  • +
  • +

    Ensuring entity data is valid when the entity is passed in as a +parameter

    +
  • +
+
+
+

The following topics are addressed here:

+
+ +
+

31.2.1 Using Constraint Annotations on Resource Methods

+
+

Bean Validation constraint annotations may be applied to parameters for +a resource. The server will validate the parameters and either pass or +throw a javax.validation.ValidationException.

+
+
+
+
@POST
+@Path("/createUser")
+@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
+public void createUser(@NotNull @FormParam("username") String username,
+                       @NotNull @FormParam("firstName") String firstName,
+                       @NotNull @FormParam("lastName") String lastName,
+                       @Email @FormParam("email") String email) {
+    ...
+}
+
+
+
+

In the preceding example, the built-in constraint @NotNull is applied +to the username, firstName, and lastName form fields. The +user-defined @Email constraint validates that the email address +supplied by the email form field is correctly formatted.

+
+
+

The constraints may also be applied to fields within a resource class.

+
+
+
+
@Path("/createUser")
+public class CreateUserResource {
+  @NotNull
+  @FormParam("username")
+  private String username;
+
+  @NotNull
+  @FormParam("firstName")
+  private String firstName;
+
+  @NotNull
+  @FormParam("lastName")
+  private String lastName;
+
+  @Email
+  @FormParam("email")
+  private String email;
+
+  ...
+}
+
+
+
+

In the preceding example, the same constraints that were applied to the +method parameters in the previous example are applied to the class +fields. The behavior is the same in both examples.

+
+
+

Constraints may also be applied to a resource class’s JavaBeans +properties by adding the constraint annotations to the getter method.

+
+
+
+
@Path("/createuser")
+public class CreateUserResource {
+  private String username;
+
+  @FormParam("username")
+  public void setUsername(String username) {
+    this.username = username;
+  }
+
+  @NotNull
+  public String getUsername() {
+    return username;
+  }
+  ...
+}
+
+
+
+

Constraints may also be applied at the resource class level. In the +following example, @PhoneRequired is a user-defined constraint that +ensures that a user enters at least one phone number. That is, either +homePhone or mobilePhone can be null, but not both.

+
+
+
+
@Path("/createUser")
+@PhoneRequired
+public class CreateUserResource {
+  @FormParam("homePhone")
+  private Phone homePhone;
+
+  @FormParam("mobilePhone")
+  private Phone mobilePhone;
+  ...
+}
+
+
+
+
+

31.2.2 Validating Entity Data

+
+

Classes that contain validation constraint annotations may be used in +method parameters in a resource class. To validate these entity classes, +use the @Valid annotation on the method parameter. For example, the +following class is a user-defined class containing both standard and +user-defined validation constraints.

+
+
+
+
@PhoneRequired
+public class User {
+  @NotNull
+  private String username;
+
+  private Phone homePhone;
+
+  private Phone mobilePhone;
+  ...
+}
+
+
+
+

This entity class is used as a parameter to a resource method.

+
+
+
+
@Path("/createUser")
+public class CreateUserResource {
+  ...
+  @POST
+  @Consumers(MediaType.APPLICATION_XML)
+  public void createUser(@Valid User user) {
+    ...
+  }
+  ...
+}
+
+
+
+

The @Valid annotation ensures that the entity class is validated at +runtime. Additional user-defined constraints can also trigger validation +of an entity.

+
+
+
+
@Path("/createUser")
+public class CreateUserResource {
+  ...
+  @POST
+  @Consumers(MediaType.APPLICATION_XML)
+  public void createUser(@ActiveUser User user) {
+    ...
+  }
+  ...
+}
+
+
+
+

In the preceding example, the user-defined @ActiveUser constraint is +applied to the User class in addition to the @PhoneRequired and +@NotNull constraints defined within the entity class.

+
+
+

If a resource method returns an entity class, validation may be +triggered by applying the @Valid or any other user-defined constraint +annotation to the resource method.

+
+
+
+
@Path("/getUser")
+public class GetUserResource {
+  ...
+  @GET
+  @Path("{username}")
+  @Produces(MediaType.APPLICATION_XML)
+  @ActiveUser
+  @Valid
+  public User getUser(@PathParam("username") String username) {
+    // find the User
+    return user;
+  }
+  ...
+}
+
+
+
+

As in the previous example, the @ActiveUser constraint is applied to +the returned entity class as well as the @PhoneRequired and @NotNull +constraints defined within the entity class.

+
+
+
+

31.2.3 Validation Exception Handling and Response Codes

+
+

If a javax.validation.ValidationException or any subclass of +ValidationException except ConstraintValidationException is thrown, +the JAX-RS runtime will respond to the client request with a 500 +(Internal Server Error) HTTP status code.

+
+
+

If a ConstraintValidationException is thrown, the JAX-RS runtime will +respond to the client with one of the following HTTP status codes:

+
+
+
    +
  • +

    500 (Internal Server Error) if the exception was thrown while +validating a method return type

    +
  • +
  • +

    400 (Bad Request) in all other cases

    +
  • +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/jaxrs-advanced003.html b/jaxrs-advanced003.html new file mode 100644 index 0000000..e8e7d20 --- /dev/null +++ b/jaxrs-advanced003.html @@ -0,0 +1,213 @@ + + + + + + Subresources and Runtime Resource Resolution + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

31.3 Subresources and Runtime Resource Resolution

+
+
+

You can use a resource class to process only a part of the URI request. +A root resource can then implement subresources that can process the +remainder of the URI path.

+
+
+

A resource class method that is annotated with @Path is either a +subresource method or a subresource locator.

+
+
+
    +
  • +

    A subresource method is used to handle requests on a subresource of +the corresponding resource.

    +
  • +
  • +

    A subresource locator is used to locate subresources of the +corresponding resource.

    +
  • +
+
+
+

The following topics are addressed here:

+
+ +
+

31.3.1 Subresource Methods

+
+

A subresource method handles an HTTP request directly. The method must +be annotated with a request method designator, such as @GET or +@POST, in addition to @Path. The method is invoked for request URIs +that match a URI template created by concatenating the URI template of +the resource class with the URI template of the method.

+
+
+

The following code snippet shows how a subresource method can be used to +extract the last name of an employee when the employee’s email address +is provided:

+
+
+
+
@Path("/employeeinfo")
+public class EmployeeInfo {
+
+    public employeeinfo() {}
+
+    @GET
+    @Path("/employees/{firstname}.{lastname}@{domain}.com")
+    @Produces("text/xml")
+    public String getEmployeeLastName(@PathParam("lastname") String lastName) {
+       ...
+    }
+}
+
+
+
+

The getEmployeeLastName method returns doe for the following GET +request:

+
+
+
+
GET /employeeinfo/employees/john.doe@example.com
+
+
+
+
+

31.3.2 Subresource Locators

+
+

A subresource locator returns an object that will handle an HTTP +request. The method must not be annotated with a request method +designator. You must declare a subresource locator within a subresource +class, and only subresource locators are used for runtime resource +resolution.

+
+
+

The following code snippet shows a subresource locator:

+
+
+
+
// Root resource class
+@Path("/employeeinfo")
+public class EmployeeInfo {
+
+    // Subresource locator: obtains the subresource Employee
+    // from the path /employeeinfo/employees/{empid}
+    @Path("/employees/{empid}")
+    public Employee getEmployee(@PathParam("empid") String id) {
+        // Find the Employee based on the id path parameter
+        Employee emp = ...;
+        ...
+        return emp;
+    }
+}
+
+// Subresource class
+public class Employee {
+
+    // Subresource method: returns the employee's last name
+    @GET
+    @Path("/lastname")
+    public String getEmployeeLastName() {
+        ...
+        return lastName;
+    }
+}
+
+
+
+

In this code snippet, the getEmployee method is the subresource +locator that provides the Employee object, which services requests for +lastname.

+
+
+

If your HTTP request is GET /employeeinfo/employees/as209/, the +getEmployee method returns an Employee object whose id is as209. +At runtime, JAX-RS sends a GET /employeeinfo/employees/as209/lastname +request to the getEmployeeLastName method. The getEmployeeLastName +method retrieves and returns the last name of the employee whose id is +as209.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/jaxrs-advanced004.html b/jaxrs-advanced004.html new file mode 100644 index 0000000..3a86ca9 --- /dev/null +++ b/jaxrs-advanced004.html @@ -0,0 +1,154 @@ + + + + + + Integrating JAX-RS with EJB Technology and CDI + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

31.4 Integrating JAX-RS with EJB Technology and CDI

+
+
+

JAX-RS works with Enterprise JavaBeans technology (enterprise beans) and +Contexts and Dependency Injection for Java EE (CDI).

+
+
+

In general, for JAX-RS to work with enterprise beans, you need to +annotate the class of a bean with @Path to convert it to a root +resource class. You can use the @Path annotation with stateless +session beans and singleton POJO beans.

+
+
+

The following code snippet shows a stateless session bean and a +singleton bean that have been converted to JAX-RS root resource classes.

+
+
+
+
@Stateless
+@Path("stateless-bean")
+public class StatelessResource {...}
+
+@Singleton
+@Path("singleton-bean")
+public class SingletonResource {...}
+
+
+
+

Session beans can also be used for subresources.

+
+
+

JAX-RS and CDI have slightly different component models. By default, +JAX-RS root resource classes are managed in the request scope, and no +annotations are required for specifying the scope. CDI managed beans +annotated with @RequestScoped or @ApplicationScoped can be converted +to JAX-RS resource classes.

+
+
+

The following code snippet shows a JAX-RS resource class.

+
+
+
+
@Path("/employee/{id}")
+public class Employee {
+    public Employee(@PathParam("id") String id) {...}
+}
+
+@Path("{lastname}")
+public final class EmpDetails {...}
+
+
+
+

The following code snippet shows this JAX-RS resource class converted to +a CDI bean. The beans must be proxyable, so the Employee class +requires a nonprivate constructor with no parameters, and the +EmpDetails class must not be final.

+
+
+
+
@Path("/employee/{id}")
+@RequestScoped
+public class Employee {
+    public Employee() {...}
+
+    @Inject
+    public Employee(@PathParam("id") String id) {...}
+}
+
+@Path("{lastname}")
+@RequestScoped
+public class EmpDetails {...}
+
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/jaxrs-advanced005.html b/jaxrs-advanced005.html new file mode 100644 index 0000000..b374b2d --- /dev/null +++ b/jaxrs-advanced005.html @@ -0,0 +1,139 @@ + + + + + + Conditional HTTP Requests + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

31.5 Conditional HTTP Requests

+
+
+

JAX-RS provides support for conditional GET and PUT HTTP requests. +Conditional GET requests help save bandwidth by improving the +efficiency of client processing.

+
+
+

A GET request can return a Not Modified (304) response if the +representation has not changed since the previous request. For example, +a website can return 304 responses for all its static images that have +not changed since the previous request.

+
+
+

A PUT request can return a Precondition Failed (412) response if the +representation has been modified since the last request. The conditional +PUT can help avoid the lost update problem.

+
+
+

Conditional HTTP requests can be used with the Last-Modified and +ETag headers. The Last-Modified header can represent dates with +granularity of one second.

+
+
+
+
@Path("/employee/{joiningdate}")
+public class Employee {
+
+    Date joiningdate;
+
+    @GET
+    @Produces("application/xml")
+    public Employee(@PathParam("joiningdate") Date joiningdate,
+                    @Context Request req,
+                    @Context UriInfo ui) {
+
+        this.joiningdate = joiningdate;
+        ...
+        this.tag = computeEntityTag(ui.getRequestUri());
+        if (req.getMethod().equals("GET")) {
+            Response.ResponseBuilder rb = req.evaluatePreconditions(tag);
+            if (rb != null) {
+                throw new WebApplicationException(rb.build());
+            }
+        }
+    }
+}
+
+
+
+

In this code snippet, the constructor of the Employee class computes +the entity tag from the request URI and calls the +request.evaluatePreconditions method with that tag. If a client +request returns an If-none-match header with a value that has the same +entity tag that was computed, evaluate.Preconditions returns a +pre-filled-out response with a 304 status code and an entity tag set +that may be built and returned.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/jaxrs-advanced006.html b/jaxrs-advanced006.html new file mode 100644 index 0000000..e630913 --- /dev/null +++ b/jaxrs-advanced006.html @@ -0,0 +1,232 @@ + + + + + + Runtime Content Negotiation + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

31.6 Runtime Content Negotiation

+
+
+

The @Produces and @Consumes annotations handle static content +negotiation in JAX-RS. These annotations specify the content preferences +of the server. HTTP headers such as Accept, Content-Type, and +Accept-Language define the content negotiation preferences of the +client.

+
+
+

For more details on the HTTP headers for content negotiation, see HTTP +/1.1 - Content Negotiation +(http://www.w3.org/Protocols/rfc2616/rfc2616-sec12.html).

+
+
+

The following code snippet shows the server content preferences:

+
+
+
+
@Produces("text/plain")
+@Path("/employee")
+public class Employee {
+
+    @GET
+    public String getEmployeeAddressText(String address) {...}
+
+    @Produces("text/xml")
+    @GET
+    public String getEmployeeAddressXml(Address address) {...}
+}
+
+
+
+

The getEmployeeAddressText method is called for an HTTP request that +looks like the following:

+
+
+
+
GET /employee
+Accept: text/plain
+
+
+
+

This will produce the following response:

+
+
+
+
500 Oracle Parkway, Redwood Shores, CA
+
+
+
+

The getEmployeeAddressXml method is called for an HTTP request that +looks like the following:

+
+
+
+
GET /employee
+Accept: text/xml
+
+
+
+

This will produce the following response:

+
+
+
+
<address street="500 Oracle Parkway, Redwood Shores, CA" country="USA"/>
+
+
+
+

With static content negotiation, you can also define multiple content +and media types for the client and server.

+
+
+
+
@Produces("text/plain", "text/xml")
+
+
+
+

In addition to supporting static content negotiation, JAX-RS also +supports runtime content negotiation using the +javax.ws.rs.core.Variant class and Request objects. The Variant +class specifies the resource representation of content negotiation. Each +instance of the Variant class may contain a media type, a language, +and an encoding. The Variant object defines the resource +representation that is supported by the server. The +Variant.VariantListBuilder class is used to build a list of +representation variants.

+
+
+

The following code snippet shows how to create a list of resource +representation variants:

+
+
+
+
List<Variant> vs = Variant.mediatypes("application/xml", "application/json")
+        .languages("en", "fr").build();
+
+
+
+

This code snippet calls the build method of the VariantListBuilder +class. The VariantListBuilder class is invoked when you call the +mediatypes, languages, or encodings methods. The build method +builds a series of resource representations. The Variant list created +by the build method has all possible combinations of items specified +in the mediatypes, languages, and encodings methods.

+
+
+

In this example, the size of the vs object as defined in this code +snippet is 4, and the contents are as follows:

+
+
+
+
[["application/xml","en"], ["application/json","en"],
+    ["application/xml","fr"],["application/json","fr"]]
+
+
+
+

The javax.ws.rs.core.Request.selectVariant method accepts a list of +Variant objects and chooses the Variant object that matches the HTTP +request. This method compares its list of Variant objects with the +Accept, Accept-Encoding, Accept-Language, and Accept-Charset +headers of the HTTP request.

+
+
+

The following code snippet shows how to use the selectVariant method +to select the most acceptable Variant from the values in the client +request:

+
+
+
+
@GET
+public Response get(@Context Request r) {
+    List<Variant> vs = ...;
+    Variant v = r.selectVariant(vs);
+    if (v == null) {
+        return Response.notAcceptable(vs).build();
+    } else {
+        Object rep = selectRepresentation(v);
+        return Response.ok(rep, v);
+    }
+}
+
+
+
+

The selectVariant method returns the Variant object that matches the +request or null if no matches are found. In this code snippet, if the +method returns null, a Response object for a nonacceptable response is +built. Otherwise, a Response object with an OK status and containing a +representation in the form of an Object entity and a Variant is +returned.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/jaxrs-advanced007.html b/jaxrs-advanced007.html new file mode 100644 index 0000000..647e46a --- /dev/null +++ b/jaxrs-advanced007.html @@ -0,0 +1,499 @@ + + + + + + Using JAX-RS with JAXB + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

31.7 Using JAX-RS with JAXB

+
+
+

Java Architecture for XML Binding (JAXB) is an XML-to-Java binding +technology that simplifies the development of web services by enabling +transformations between schema and Java objects and between XML instance +documents and Java object instances. An XML schema defines the data +elements and structure of an XML document. You can use JAXB APIs and +tools to establish mappings between Java classes and XML schema. JAXB +technology provides the tools that enable you to convert your XML +documents to and from Java objects.

+
+
+

By using JAXB, you can manipulate data objects in the following ways.

+
+
+
    +
  • +

    You can start with an XML schema definition (XSD) and use xjc, the +JAXB schema compiler tool, to create a set of JAXB-annotated Java +classes that map to the elements and types defined in the XSD schema.

    +
  • +
  • +

    You can start with a set of Java classes and use schemagen, the JAXB +schema generator tool, to generate an XML schema.

    +
  • +
  • +

    Once a mapping between the XML schema and the Java classes exists, you +can use the JAXB binding runtime to marshal and unmarshal your XML +documents to and from Java objects and use the resulting Java classes to +assemble a web services application.

    +
  • +
+
+
+

XML is a common media format that RESTful services consume and produce. +To deserialize and serialize XML, you can represent requests and +responses by JAXB annotated objects. Your JAX-RS application can use the +JAXB objects to manipulate XML data. JAXB objects can be used as request +entity parameters and response entities. The JAX-RS runtime environment +includes standard MessageBodyReader and MessageBodyWriter provider +interfaces for reading and writing JAXB objects as entities.

+
+
+

With JAX-RS, you enable access to your services by publishing resources. +Resources are just simple Java classes with some additional JAX-RS +annotations. These annotations express the following:

+
+
+
    +
  • +

    The path of the resource (the URL you use to access it)

    +
  • +
  • +

    The HTTP method you use to call a certain method (for example, the +GET or POST method)

    +
  • +
  • +

    The MIME type with which a method accepts or responds

    +
  • +
+
+
+

As you define the resources for your application, consider the type of +data you want to expose. You may already have a relational database that +contains information you want to expose to users, or you may have static +content that does not reside in a database but does need to be +distributed as resources. Using JAX-RS, you can distribute content from +multiple sources. RESTful web services can use various types of +input/output formats for request and response. The customer example, +described in The customer Example +Application, uses XML.

+
+
+

Resources have representations. A resource representation is the content +in the HTTP message that is sent to, or returned from, the resource +using the URI. Each representation a resource supports has a +corresponding media type. For example, if a resource is going to return +content formatted as XML, you can use application/xml as the +associated media type in the HTTP message.Depending on the requirements +of your application, resources can return representations in a preferred +single format or in multiple formats. JAX-RS provides @Consumes and +@Produces annotations to declare the media types that are acceptable +for a resource method to read and write.

+
+
+

JAX-RS also maps Java types to and from resource representations using +entity providers. A MessageBodyReader entity provider reads a request +entity and deserializes the request entity into a Java type. A +MessageBodyWriter entity provider serializes from a Java type into a +response entity. For example, if a String value is used as the request +entity parameter, the MessageBodyReader entity provider deserializes +the request body into a new String. If a JAXB type is used as the +return type on a resource method, the MessageBodyWriter serializes the +JAXB object into a response body.

+
+
+

By default, the JAX-RS runtime environment attempts to create and use a +default JAXBContext class for JAXB classes.However, if the default +JAXBContext class is not suitable, then you can supply a JAXBContext +class for the application using a JAX-RS ContextResolver provider +interface.

+
+
+

The following sections explain how to use JAXB with JAX-RS resource +methods.

+
+
+

31.7.1 Using Java Objects to Model Your Data

+
+

If you do not have an XML schema definition for the data you want to +expose, you can model your data as Java classes, add JAXB annotations to +these classes, and use JAXB to generate an XML schema for your data. For +example, if the data you want to expose is a collection of products and +each product has an ID, a name, a description, and a price, you can +model it as a Java class as follows:

+
+
+
+
@XmlRootElement(name="product")
+@XmlAccessorType(XmlAccessType.FIELD)
+public class Product {
+
+    @XmlElement(required=true)
+    protected int id;
+    @XmlElement(required=true)
+    protected String name;
+    @XmlElement(required=true)
+    protected String description;
+    @XmlElement(required=true)
+    protected int price;
+
+    public Product() {}
+
+    // Getter and setter methods
+    // ...
+}
+
+
+
+

Run the JAXB schema generator on the command line to generate the +corresponding XML schema definition:

+
+
+
+
schemagen Product.java
+
+
+
+

This command produces the XML schema as an .xsd file:

+
+
+
+
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+    <xs:element name="product" type="product"/>
+
+    <xs:complexType name="product">
+      <xs:sequence>
+        <xs:element name="id" type="xs:int"/>
+        <xs:element name="name" type="xs:string"/>
+        <xs:element name="description" type="xs:string"/>
+        <xs:element name="price" type="xs:int"/>
+      </xs:sequence>
+    <xs:complexType>
+</xs:schema>
+
+
+
+

Once you have this mapping, you can create Product objects in your +application, return them, and use them as parameters in JAX-RS resource +methods. The JAX-RS runtime uses JAXB to convert the XML data from the +request into a Product object and to convert a Product object into +XML data for the response. The following resource class provides a +simple example:

+
+
+
+
@Path("/product")
+public class ProductService {
+    @GET
+    @Path("/get")
+    @Produces("application/xml")
+    public Product getProduct() {
+        Product prod = new Product();
+        prod.setId(1);
+        prod.setName("Mattress");
+        prod.setDescription("Queen size mattress");
+        prod.setPrice(500);
+        return prod;
+    }
+
+    @POST
+    @Path("/create")
+    @Consumes("application/xml")
+    public Response createProduct(Product prod) {
+        // Process or store the product and return a response
+        // ...
+    }
+}
+
+
+
+

Some IDEs, such as NetBeans IDE, will run the schema generator tool +automatically during the build process if you add Java classes that have +JAXB annotations to your project. For a detailed example, see +The customer Example Application. The +customer example contains a more complex relationship between the Java +classes that model the data, which results in a more hierarchical XML +representation.

+
+
+
+

31.7.2 Starting from an Existing XML Schema Definition

+
+

If you already have an XML schema definition in an .xsd file for the +data you want to expose, use the JAXB schema compiler tool. Consider +this simple example of an .xsd file:

+
+
+
+
<xs:schema targetNamespace="http://xml.product"
+           xmlns:xs="http://www.w3.org/2001/XMLSchema"
+           elementFormDefault="qualified"
+           xmlns:myco="http://xml.product">
+  <xs:element name="product" type="myco:Product"/>
+  <xs:complexType name="Product">
+    <xs:sequence>
+      <xs:element name="id" type="xs:int"/>
+      <xs:element name="name" type="xs:string"/>
+      <xs:element name="description" type="xs:string"/>
+      <xs:element name="price" type="xs:int"/>
+    </xs:sequence>
+  </xs:complexType>
+</xs:schema>
+
+
+
+

Run the schema compiler tool on the command line as follows:

+
+
+
+
xjc Product.xsd
+
+
+
+

This command generates the source code for Java classes that correspond +to the types defined in the .xsd file. The schema compiler tool +generates a Java class for each complexType defined in the .xsd +file. The fields of each generated Java class are the same as the +elements inside the corresponding complexType, and the class contains +getter and setter methods for these fields.

+
+
+

In this case, the schema compiler tool generates the classes +product.xml.Product and product.xml.ObjectFactory. The Product +class contains JAXB annotations, and its fields correspond to those in +the .xsd definition:

+
+
+
+
@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "Product", propOrder = {
+    "id",
+    "name",
+    "description",
+    "price"
+})
+public class Product {
+    protected int id;
+    @XmlElement(required = true)
+    protected String name;
+    @XmlElement(required = true)
+    protected String description;
+    protected int price;
+
+    // Setter and getter methods
+    // ...
+}
+
+
+
+

You can create instances of the Product class from your application +(for example, from a database). The generated class +product.xml.ObjectFactory contains a method that allows you to convert +these objects to JAXB elements that can be returned as XML inside JAX-RS +resource methods:

+
+
+
+
@XmlElementDecl(namespace = "http://xml.product", name = "product")
+public JAXBElement<Product> createProduct(Product value) {
+    return new JAXBElement<Product>(_Product_QNAME, Product.class, null, value);
+}
+
+
+
+

The following code shows how to use the generated classes to return a +JAXB element as XML in a JAX-RS resource method:

+
+
+
+
@Path("/product")
+public class ProductService {
+    @GET
+    @Path("/get")
+    @Produces("application/xml")
+    public JAXBElement<Product> getProduct() {
+        Product prod = new Product();
+        prod.setId(1);
+        prod.setName("Mattress");
+        prod.setDescription("Queen size mattress");
+        prod.setPrice(500);
+        return new ObjectFactory().createProduct(prod);
+    }
+}
+
+
+
+

For @POST and @PUT resource methods, you can use a Product object +directly as a parameter. JAX-RS maps the XML data from the request into +a Product object.

+
+
+
+
@Path("/product")
+public class ProductService {
+    @GET
+    // ...
+
+    @POST
+    @Path("/create")
+    @Consumes("application/xml")
+    public Response createProduct(Product prod) {
+        // Process or store the product and return a response
+        // ...
+    }
+}
+
+
+
+
+

31.7.3 Using JSON with JAX-RS and JAXB

+
+

JAX-RS can automatically read and write XML using JAXB, but it can also +work with JSON data. JSON is a simple text-based format for data +exchange derived from JavaScript. For the preceding examples, the XML +representation of a product is

+
+
+
+
<?xml version="1.0" encoding="UTF-8"?>
+<product>
+  <id>1</id>
+  <name>Mattress</name>
+  <description>Queen size mattress</description>
+  <price>500</price>
+</product>
+
+
+
+

The equivalent JSON representation is

+
+
+
+
{
+    "id":"1",
+    "name":"Mattress",
+    "description":"Queen size mattress",
+    "price":500
+}
+
+
+
+

You can add the format application/json or +MediaType.APPLICATION_JSON to the @Produces annotation in resource +methods to produce responses with JSON data:

+
+
+
+
@GET
+@Path("/get")
+@Produces({"application/xml","application/json"})
+public Product getProduct() { ... }
+
+
+
+

In this example, the default response is XML, but the response is a JSON +object if the client makes a GET request that includes this header:

+
+
+
+
Accept: application/json
+
+
+
+

The resource methods can also accept JSON data for JAXB annotated +classes:

+
+
+
+
@POST
+@Path("/create")
+@Consumes({"application/xml","application/json"})
+public Response createProduct(Product prod) { ... }
+
+
+
+

The client should include the following header when submitting JSON data +with a POST request:

+
+
+
+
Content-Type: application/json
+
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/jaxrs-advanced008.html b/jaxrs-advanced008.html new file mode 100644 index 0000000..b5beaeb --- /dev/null +++ b/jaxrs-advanced008.html @@ -0,0 +1,602 @@ + + + + + + The customer Example Application + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

31.8 The customer Example Application

+
+
+

This section describes how to build and run the customer example +application. This application is a RESTful web service that uses JAXB to +perform the create, read, update, delete (CRUD) operations for a +specific entity.

+
+
+

The customer sample application is in the +tut-install`/examples/jaxrs/customer/` directory. See +Chapter 2, "Using the Tutorial Examples," +for basic information on building and running sample applications.

+
+
+

The following topics are addressed here:

+
+ +
+

31.8.1 Overview of the customer Example Application

+
+

The source files of this application are at +tut-install`/examples/jaxrs/customer/src/main/java/`. The application +has three parts.

+
+
+
    +
  • +

    The Customer and Address entity classes. These classes model the +data of the application and contain JAXB annotations.

    +
  • +
  • +

    The CustomerService resource class. This class contains JAX-RS +resource methods that perform operations on Customer instances +represented as XML or JSON data using JAXB. See The +CustomerService Class for details.

    +
  • +
  • +

    The CustomerBean session bean that acts as a backing bean for the +web client. CustomerBean uses the JAX-RS client API to call the +methods of CustomerService.

    +
  • +
+
+
+

The customer example application shows you how to model your data +entities as Java classes with JAXB annotations.

+
+
+
+

31.8.2 The Customer and Address Entity Classes

+
+

The following class represents a customer’s address:

+
+
+
+
@Entity
+@Table(name="CUSTOMER_ADDRESS")
+@XmlRootElement(name="address")
+@XmlAccessorType(XmlAccessType.FIELD)
+public class Address {
+    @Id
+    @GeneratedValue(strategy = GenerationType.AUTO)
+    private Long id;
+
+    @XmlElement(required=true)
+    protected int number;
+
+    @XmlElement(required=true)
+    protected String street;
+
+    @XmlElement(required=true)
+    protected String city;
+
+    @XmlElement(required=true)
+    protected String province;
+
+    @XmlElement(required=true)
+    protected String zip;
+
+    @XmlElement(required=true)
+    protected String country;
+
+    public Address() { }
+
+    // Getter and setter methods
+    // ...
+}
+
+
+
+

The @XmlRootElement(name="address") annotation maps this class to the +address XML element. The @XmlAccessorType(XmlAccessType.FIELD) +annotation specifies that all the fields of this class are bound to XML +by default. The @XmlElement(required=true) annotation specifies that +an element must be present in the XML representation.

+
+
+

The following class represents a customer:

+
+
+
+
@Entity
+@Table(name="CUSTOMER_CUSTOMER")
+@NamedQuery(
+    name="findAllCustomers",
+    query="SELECT c FROM Customer c " +
+          "ORDER BY c.id"
+)
+@XmlRootElement(name="customer")
+@XmlAccessorType(XmlAccessType.FIELD)
+public class Customer {
+    @Id
+    @GeneratedValue(strategy = GenerationType.AUTO)
+    @XmlAttribute(required=true)
+    protected int id;
+
+    @XmlElement(required=true)
+    protected String firstname;
+
+    @XmlElement(required=true)
+    protected String lastname;
+
+    @XmlElement(required=true)
+    @OneToOne
+    protected Address address;
+
+    @XmlElement(required=true)
+    protected String email;
+
+    @XmlElement (required=true)
+    protected String phone;
+
+    public Customer() {...}
+
+    // Getter and setter methods
+    // ...
+}
+
+
+
+

The Customer class contains the same JAXB annotations as the previous +class, except for the @XmlAttribute(required=true) annotation, which +maps a property to an attribute of the XML element representing the +class.

+
+
+

The Customer class contains a property whose type is another entity, +the Address class. This mechanism allows you to define in Java code +the hierarchical relationships between entities without having to write +an .xsd file yourself.

+
+
+

JAXB generates the following XML schema definition for the two preceding +classes:

+
+
+
+
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+  <xs:element name="address" type="address"/>
+  <xs:element name="customer" type="customer"/>
+
+  <xs:complexType name="address">
+    <xs:sequence>
+      <xs:element name="id" type="xs:long" minOccurs="0"/>
+      <xs:element name="number" type="xs:int"/>
+      <xs:element name="street" type="xs:string"/>
+      <xs:element name="city" type="xs:string"/>
+      <xs:element name="province" type="xs:string"/>
+      <xs:element name="zip" type="xs:string"/>
+      <xs:element name="country" type="xs:string"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="customer">
+    <xs:sequence>
+      <xs:element name="firstname" type="xs:string"/>
+      <xs:element name="lastname" type="xs:string"/>
+      <xs:element ref="address"/>
+      <xs:element name="email" type="xs:string"/>
+      <xs:element name="phone" type="xs:string"/>
+    </xs:sequence>
+    <xs:attribute name="id" type="xs:int" use="required"/>
+  </xs:complexType>
+</xs:schema>
+
+
+
+
+

31.8.3 The CustomerService Class

+
+

The CustomerService class has a createCustomer method that creates a +customer resource based on the Customer class and returns a URI for +the new resource.

+
+
+
+
@Stateless
+@Path("/Customer")
+public class CustomerService {
+    public static final Logger logger =
+            Logger.getLogger(CustomerService.class.getCanonicalName());
+    @PersistenceContext
+    private EntityManager em;
+    private CriteriaBuilder cb;
+
+    @PostConstruct
+    private void init() {
+        cb = em.getCriteriaBuilder();
+    }
+    ...
+    @POST
+    @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
+    public Response createCustomer(Customer customer) {
+
+        try {
+            long customerId = persist(customer);
+            return Response.created(URI.create("/" + customerId)).build();
+        } catch (Exception e) {
+            logger.log(Level.SEVERE,
+                    "Error creating customer for customerId {0}. {1}",
+                    new Object[]{customer.getId(), e.getMessage()});
+            throw new WebApplicationException(e,
+                    Response.Status.INTERNAL_SERVER_ERROR);
+        }
+    }
+    ...
+    private long persist(Customer customer) {
+        try {
+            Address address = customer.getAddress();
+            em.persist(address);
+            em.persist(customer);
+        } catch (Exception ex) {
+            logger.warning("Something went wrong when persisting the customer");
+        }
+        return customer.getId();
+    }
+
+
+
+

The response returned to the client has a URI to the newly created +resource. The return type is an entity body mapped from the property of +the response with the status code specified by the status property of +the response. The WebApplicationException is a RuntimeException that +is used to wrap the appropriate HTTP error status code, such as 404, +406, 415, or 500.

+
+
+

The @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) +and @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) +annotations set the request and response media types to use the +appropriate MIME client. These annotations can be applied to a resource +method, a resource class, or even an entity provider. If you do not use +these annotations, JAX-RS allows the use of any media type ("*/*").

+
+
+

The following code snippet shows the implementation of the getCustomer +and findbyId methods. The getCustomer method uses the @Produces +annotation and returns a Customer object, which is converted to an XML +or JSON representation depending on the Accept: header specified by +the client.

+
+
+
+
    @GET
+    @Path("{id}")
+    @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
+    public Customer getCustomer(@PathParam("id") String customerId) {
+        Customer customer = null;
+
+        try {
+            customer = findById(customerId);
+        } catch (Exception ex) {
+            logger.log(Level.SEVERE,
+                    "Error calling findCustomer() for customerId {0}. {1}",
+                    new Object[]{customerId, ex.getMessage()});
+        }
+        return customer;
+    }
+    ...
+    private Customer findById(String customerId) {
+        Customer customer = null;
+        try {
+            customer = em.find(Customer.class, customerId);
+            return customer;
+        } catch (Exception ex) {
+            logger.log(Level.WARNING,
+                    "Couldn't find customer with ID of {0}", customerId);
+        }
+        return customer;
+    }
+
+
+
+
+

31.8.4 Using the JAX-RS Client in the CustomerBean Classes

+
+

Use the JAX-RS Client API to write a client for the customer example +application.

+
+
+

The CustomerBean enterprise bean class calls the JAX-RS Client API to +test the CustomerService web service:

+
+
+
+
@Named
+@Stateless
+public class CustomerBean {
+    protected Client client;
+    private static final Logger logger =
+            Logger.getLogger(CustomerBean.class.getName());
+
+    @PostConstruct
+    private void init() {
+        client = ClientBuilder.newClient();
+    }
+
+    @PreDestroy
+    private void clean() {
+        client.close();
+    }
+
+    public String createCustomer(Customer customer) {
+        if (customer == null) {
+            logger.log(Level.WARNING, "customer is null.");
+            return "customerError";
+        }
+        String navigation;
+        Response response =
+                client.target("http://localhost:8080/customer/webapi/Customer")
+                .request(MediaType.APPLICATION_XML)
+                .post(Entity.entity(customer, MediaType.APPLICATION_XML),
+                        Response.class);
+        if (response.getStatus() == Status.CREATED.getStatusCode()) {
+            navigation = "customerCreated";
+        } else {
+            logger.log(Level.WARNING, "couldn''t create customer with " +
+                    "id {0}. Status returned was {1}",
+                    new Object[]{customer.getId(), response.getStatus()});
+            navigation = "customerError";
+        }
+        return navigation;
+    }
+
+    public String retrieveCustomer(String id) {
+        String navigation;
+        Customer customer =
+                client.target("http://localhost:8080/customer/webapi/Customer")
+                .path(id)
+                .request(MediaType.APPLICATION_XML)
+                .get(Customer.class);
+        if (customer == null) {
+            navigation = "customerError";
+        } else {
+            navigation = "customerRetrieved";
+        }
+        return navigation;
+    }
+
+    public List<Customer> retrieveAllCustomers() {
+        List<Customer> customers =
+                client.target("http://localhost:8080/customer/webapi/Customer")
+                .path("all")
+                .request(MediaType.APPLICATION_XML)
+                .get(new GenericType<List<Customer>>() {});
+        return customers;
+    }
+}
+
+
+
+

This client uses the POST and GET methods.

+
+
+

All of these HTTP status codes indicate success: 201 for POST, 200 for +GET, and 204 for DELETE. For details about the meanings of HTTP +status codes, see +http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html.

+
+
+
+

31.8.5 Running the customer Example

+
+

You can use either NetBeans IDE or Maven to build, package, deploy, and +run the customer application.

+
+
+

The following topics are addressed here:

+
+ +
+

31.8.5.1 To Build, Package, and Deploy the customer Example Using +NetBeans IDE +^^^^^^^^^^^^^^^^^^^^^^^^^^

+
+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    From the File menu, choose Open Project.

    +
  4. +
  5. +

    In the Open Project dialog box, navigate to:

    +
    +
    +
    tut-install/examples/jaxrs
    +
    +
    +
  6. +
  7. +

    Select the customer folder.

    +
  8. +
  9. +

    Click Open Project.

    +
  10. +
  11. +

    In the Projects tab, right-click the customer project and select +Build.

    +
    +

    This command builds and packages the application into a WAR file, +customer.war, located in the target directory. Then, the WAR file is +deployed to GlassFish Server.

    +
    +
  12. +
  13. +

    Open the web client in a browser at the following URL:

    +
    +
    +
    http://localhost:8080/customer/
    +
    +
    +
    +

    The web client allows you to create and view customers.

    +
    +
  14. +
+
+
+

31.8.5.2 To Build, Package, and Deploy the customer Example Using Maven

+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    In a terminal window, go to:

    +
    +
    +
    tut-install/examples/jaxrs/customer/
    +
    +
    +
  4. +
  5. +

    Enter the following command:

    +
    +
    +
    mvn install
    +
    +
    +
    +

    This command builds and packages the application into a WAR file, +customer.war, located in the target directory. Then, the WAR file is +deployed to GlassFish Server.

    +
    +
  6. +
  7. +

    Open the web client in a browser at the following URL:

    +
    +
    +
    http://localhost:8080/customer/
    +
    +
    +
    +

    The web client allows you to create and view customers.

    +
    +
  8. +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+
+ + + \ No newline at end of file diff --git a/jaxrs-client.html b/jaxrs-client.html new file mode 100644 index 0000000..614e3b7 --- /dev/null +++ b/jaxrs-client.html @@ -0,0 +1,108 @@ + + + + + + Accessing REST Resources with the JAX-RS Client API + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

30 Accessing REST Resources with the JAX-RS Client API

+
+
+

This chapter describes the JAX-RS Client API and includes examples of +how to access REST resources using the Java programming language.

+
+
+

JAX-RS provides a client API for accessing REST resources from other +Java applications.

+
+
+

The following topics are addressed here:

+
+ +
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/jaxrs-client001.html b/jaxrs-client001.html new file mode 100644 index 0000000..4c94f04 --- /dev/null +++ b/jaxrs-client001.html @@ -0,0 +1,347 @@ + + + + + + Overview of the Client API + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

30.1 Overview of the Client API

+
+
+

The JAX-RS Client API provides a high-level API for accessing any REST +resources, not just JAX-RS services. The Client API is defined in the +javax.ws.rs.client package.

+
+
+

The following topics are addressed here:

+
+ +
+

30.1.1 Creating a Basic Client Request Using the Client API

+
+

The following steps are needed to access a REST resource using the +Client API.

+
+
+
    +
  1. +

    Obtain an instance of the javax.ws.rs.client.Client interface.

    +
  2. +
  3. +

    Configure the Client instance with a target.

    +
  4. +
  5. +

    Create a request based on the target.

    +
  6. +
  7. +

    Invoke the request.

    +
  8. +
+
+
+

The Client API is designed to be fluent, with method invocations chained +together to configure and submit a request to a REST resource in only a +few lines of code.

+
+
+
+
Client client = ClientBuilder.newClient();
+String name = client.target("http://example.com/webapi/hello")
+        .request(MediaType.TEXT_PLAIN)
+        .get(String.class);
+
+
+
+

In this example, the client instance is first created by calling the +javax.ws.rs.client.ClientBuilder.newClient method. Then, the request +is configured and invoked by chaining method calls together in one line +of code. The Client.target method sets the target based on a URI. The +javax.ws.rs.client.WebTarget.request method sets the media type for +the returned entity. The javax.ws.rs.client.Invocation.Builder.get +method invokes the service using an HTTP GET request, setting the type +of the returned entity to String.

+
+
+
+

30.1.2 Obtaining the Client Instance

+
+

The Client interface defines the actions and infrastructure a REST +client requires to consume a RESTful web service. Instances of Client +are obtained by calling the ClientBuilder.newClient method.

+
+
+
+
Client client = ClientBuilder.newClient();
+
+
+
+

Use the close method to close Client instances after all the +invocations for the target resource have been performed:

+
+
+
+
Client client = ClientBuilder.newClient();
+...
+client.close();
+
+
+
+

Client instances are heavyweight objects. For performance reasons, +limit the number of Client instances in your application, as the +initialization and destruction of these instances may be expensive in +your runtime environment.

+
+
+
+

30.1.3 Setting the Client Target

+
+

The target of a client, the REST resource at a particular URI, is +represented by an instance of the javax.ws.rs.client.WebTarget +interface. You obtain a WebTarget instance by calling the +Client.target method and passing in the URI of the target REST +resource.

+
+
+
+
Client client = ClientBuilder.newClient();
+WebTarget myResource = client.target("http://example.com/webapi");
+
+
+
+

For complex REST resources, it may be beneficial to create several +instances of WebTarget. In the following example, a base target is +used to construct several other targets that represent different +services provided by a REST resource.

+
+
+
+
Client client = ClientBuilder.newClient();
+WebTarget base = client.target("http://example.com/webapi");
+// WebTarget at http://example.com/webapi/read
+WebTarget read = base.path("read");
+// WebTarget at http://example.com/webapi/write
+WebTarget write = base.path("write");
+
+
+
+

The WebTarget.path method creates a new WebTarget instance by +appending the current target URI with the path that was passed in.

+
+
+
+

30.1.4 Setting Path Parameters in Targets

+
+

Path parameters in client requests can be specified as URI template +parameters, similar to the template parameters used when defining a +resource URI in a JAX-RS service. Template parameters are specified by +surrounding the template variable with braces ({}). Call the +resolveTemplate method to substitute the {username}, and then call +the queryParam method to add another variable to pass.

+
+
+
+
WebTarget myResource = client.target("http://example.com/webapi/read")
+        .path("{userName}")
+        .resolveTemplate("userName", "janedoe")        .queryParam("chapter", "1");// http://example.com/webapi/read/janedoe?chapter=1Response response = myResource.request(...)        .get();
+
+
+
+
+

30.1.5 Invoking the Request

+
+

After setting and applying any configuration options to the target, call +one of the WebTarget.request methods to begin creating the request. +This is usually accomplished by passing to WebTarget.request the +accepted media response type for the request either as a string of the +MIME type or using one of the constants in javax.ws.rs.core.MediaType. +The WebTarget.request method returns an instance of +javax.ws.rs.client.Invocation.Builder, a helper object that provides +methods for preparing the client request.

+
+
+
+
Client client = ClientBuilder.newClient();
+WebTarget myResource = client.target("http://example.com/webapi/read");
+Invocation.Builder builder = myResource.request(MediaType.TEXT_PLAIN);
+
+
+
+

Using a MediaType constant is equivalent to using the string defining +the MIME type.

+
+
+
+
Invocation.Builder builder = myResource.request("text/plain");
+
+
+
+

After setting the media type, invoke the request by calling one of the +methods of the Invocation.Builder instance that corresponds to the +type of HTTP request the target REST resource expects. These methods +are:

+
+
+
    +
  • +

    get()

    +
  • +
  • +

    post()

    +
  • +
  • +

    delete()

    +
  • +
  • +

    put()

    +
  • +
  • +

    head()

    +
  • +
  • +

    options()

    +
  • +
+
+
+

For example, if the target REST resource is for an HTTP GET request, +call the Invocation.Builder.get method. The return type should +correspond to the entity returned by the target REST resource.

+
+
+
+
Client client = ClientBuilder.newClient();
+WebTarget myResource = client.target("http://example.com/webapi/read");
+String response = myResource.request(MediaType.TEXT_PLAIN)
+        .get(String.class);
+
+
+
+

If the target REST resource is expecting an HTTP POST request, call the +Invocation.Builder.post method.

+
+
+
+
Client client = ClientBuilder.newClient();
+StoreOrder order = new StoreOrder(...);
+WebTarget myResource = client.target("http://example.com/webapi/write");
+TrackingNumber trackingNumber = myResource.request(MediaType.APPLICATION_XML)
+                                   .post(Entity.xml(order), TrackingNumber.class);
+
+
+
+

In the preceding example, the return type is a custom class and is +retrieved by setting the type in the +Invocation.Builder.post(Entity<?> entity, Class<T> responseType) +method as a parameter.

+
+
+

If the return type is a collection, use +javax.ws.rs.core.GenericType<T> as the response type parameter, where +T is the collection type:

+
+
+
+
List<StoreOrder> orders = client.target("http://example.com/webapi/read")
+        .path("allOrders")
+        .request(MediaType.APPLICATION_XML)
+        .get(new GenericType<List<StoreOrder>>() {});
+
+
+
+

This preceding example shows how methods are chained together in the +Client API to simplify how requests are configured and invoked.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/jaxrs-client002.html b/jaxrs-client002.html new file mode 100644 index 0000000..fb2b4aa --- /dev/null +++ b/jaxrs-client002.html @@ -0,0 +1,287 @@ + + + + + + Using the Client API in the JAX-RS Example Applications + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

30.2 Using the Client API in the JAX-RS Example Applications

+
+
+

The rsvp and customer examples use the Client API to call JAX-RS +services. This section describes how each example application uses the +Client API.

+
+
+

The following topics are addressed here:

+
+ +
+

30.2.1 The Client API in the rsvp Example Application

+
+

The rsvp application allows users to respond to event invitations +using JAX-RS resources, as explained in Chapter +29, "The rsvp Example Application". The web application uses the Client +API in CDI backing beans to interact with the service resources, and the +Facelets web interface displays the results.

+
+
+

The StatusManager CDI backing bean retrieves all the current events in +the system. The client instance used in the backing bean is obtained in +the constructor:

+
+
+
+
public StatusManager() {
+    this.client = ClientBuilder.newClient();
+}
+
+
+
+

The StatusManager.getEvents method returns a collection of all the +current events in the system by calling the resource at +http://localhost:8080/rsvp/webapi/status/all, which returns an XML +document with entries for each event. The Client API automatically +unmarshals the XML and creates a List<Event> instance.

+
+
+
+
    public List<Event> getEvents() {
+        List<Event> returnedEvents = null;
+        try {
+            returnedEvents = client.target(baseUri)
+                    .path("all")
+                    .request(MediaType.APPLICATION_XML)
+                    .get(new GenericType<List<Event>>() {
+            });
+            if (returnedEvents == null) {
+                logger.log(Level.SEVERE, "Returned events null.");
+            } else {
+                logger.log(Level.INFO, "Events have been returned.");
+            }
+        } catch (WebApplicationException ex) {
+            throw new WebApplicationException(Response.Status.NOT_FOUND);
+        }
+        ...
+        return returnedEvents;
+    }
+
+
+
+

The StatusManager.changeStatus method is used to update the attendee’s +response. It creates an HTTP POST request to the service with the new +response. The body of the request is an XML document.

+
+
+
+
    public String changeStatus(ResponseEnum userResponse,
+            Person person, Event event) {
+        String navigation;
+        try {
+            logger.log(Level.INFO,
+                    "changing status to {0} for {1} {2} for event ID {3}.",
+                    new Object[]{userResponse,
+                        person.getFirstName(),
+                        person.getLastName(),
+                        event.getId().toString()});
+             client.target(baseUri)
+                     .path(event.getId().toString())
+                     .path(person.getId().toString())
+                     .request(MediaType.APPLICATION_XML)
+                     .post(Entity.xml(userResponse.getLabel()));
+            navigation = "changedStatus";
+        } catch (ResponseProcessingException ex) {
+            logger.log(Level.WARNING, "couldn''t change status for {0} {1}",
+                    new Object[]{person.getFirstName(),
+                        person.getLastName()});
+            logger.log(Level.WARNING, ex.getMessage());
+            navigation = "error";
+        }
+        return navigation;
+    }
+
+
+
+
+

30.2.2 The Client API in the customer Example Application

+
+

The customer example application stores customer data in a database +and exposes the resource as XML, as explained in +Chapter 31, "The customer Example +Application". The service resource exposes methods that create +customers and retrieve all the customers. A Facelets web application +acts as a client for the service resource, with a form for creating +customers and displaying the list of customers in a table.

+
+
+

The CustomerBean stateless session bean uses the JAX-RS Client API to +interface with the service resource. The CustomerBean.createCustomer +method takes the Customer entity instance created by the Facelets form +and makes a POST call to the service URI.

+
+
+
+
public String createCustomer(Customer customer) {
+    if (customer == null) {
+        logger.log(Level.WARNING, "customer is null.");
+        return "customerError";
+    }
+    String navigation;
+    Response response =
+            client.target("http://localhost:8080/customer/webapi/Customer")
+            .request(MediaType.APPLICATION_XML)
+            .post(Entity.entity(customer, MediaType.APPLICATION_XML),
+                    Response.class);
+    if (response.getStatus() == Status.CREATED.getStatusCode()) {
+        navigation = "customerCreated";
+    } else {
+        logger.log(Level.WARNING,
+                "couldn''t create customer with id {0}. Status returned was {1}",
+                new Object[]{customer.getId(), response.getStatus()});
+        FacesContext context = FacesContext.getCurrentInstance();
+        context.addMessage(null,
+                new FacesMessage("Could not create customer."));
+        navigation = "customerError";
+    }
+    return navigation;
+}
+
+
+
+

The XML request entity is created by calling the +Invocation.Builder.post method, passing in a new Entity instance +from the Customer instance, and specifying the media type as +MediaType.APPLICATION_XML.

+
+
+

The CustomerBean.retrieveCustomer method retrieves a Customer entity +instance from the service by appending the customer’s ID to the service +URI.

+
+
+
+
public String retrieveCustomer(String id) {
+    String navigation;
+    Customer customer =
+            client.target("http://localhost:8080/customer/webapi/Customer")
+            .path(id)
+            .request(MediaType.APPLICATION_XML)
+            .get(Customer.class);
+    if (customer == null) {
+        navigation = "customerError";
+    } else {
+        navigation = "customerRetrieved";
+    }
+    return navigation;
+}
+
+
+
+

The CustomerBean.retrieveAllCustomers method retrieves a collection of +customers as a List<Customer> instance. This list is then displayed as +a table in the Facelets web application.

+
+
+
+
public List<Customer> retrieveAllCustomers() {
+    List<Customer> customers =
+            client.target("http://localhost:8080/customer/webapi/Customer")
+            .path("all")
+            .request(MediaType.APPLICATION_XML)
+            .get(new GenericType<List<Customer>>() {
+            });
+    return customers;
+}
+
+
+
+

Because the response type is a collection, the Invocation.Builder.get +method is called by passing in a new instance of +GenericType<List<Customer>>.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/jaxrs-client003.html b/jaxrs-client003.html new file mode 100644 index 0000000..44e6627 --- /dev/null +++ b/jaxrs-client003.html @@ -0,0 +1,523 @@ + + + + + + Advanced Features of the Client API + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

30.3 Advanced Features of the Client API

+
+
+

This section describes some of the advanced features of the JAX-RS +Client API.

+
+
+

The following topics are addressed here:

+
+ +
+

30.3.1 Configuring the Client Request

+
+

Additional configuration options may be added to the client request +after it is created but before it is invoked.

+
+
+

The following topics are addressed here:

+
+ +
+

30.3.1.1 Setting Message Headers in the Client Request

+
+

You can set HTTP headers on the request by calling the +Invocation.Builder.header method.

+
+
+
+
Client client = ClientBuilder.newClient();
+WebTarget myResource = client.target("http://example.com/webapi/read");
+String response = myResource.request(MediaType.TEXT_PLAIN)
+        .header("myHeader", "The header value")
+        .get(String.class);
+
+
+
+

If you need to set multiple headers on the request, call the +Invocation.Builder.headers method and pass in a +javax.ws.rs.core.MultivaluedMap instance with the name-value pairs of +the HTTP headers. Calling the headers method replaces all the existing +headers with the headers supplied in the MultivaluedMap instance.

+
+
+
+
Client client = ClientBuilder.newClient();
+WebTarget myResource = client.target("http://example.com/webapi/read");
+MultivaluedMap<String, Object> myHeaders =
+    new MultivaluedMap<>("myHeader", "The header value");
+myHeaders.add(...);
+String response = myResource.request(MediaType.TEXT_PLAIN)
+        .headers(myHeaders)
+        .get(String.class);
+
+
+
+

The MultivaluedMap interface allows you to specify multiple values for +a given key.

+
+
+
+
MultivaluedMap<String, Object> myHeaders =
+    new MultivaluedMap<String, Object>();
+List<String> values = new ArrayList<>();
+values.add(...)
+myHeaders.add("myHeader", values
+
+
+
+
+

30.3.1.2 Setting Cookies in the Client Request

+
+

You can add HTTP cookies to the request by calling the +Invocation.Builder.cookie method, which takes a name-value pair as +parameters.

+
+
+
+
Client client = ClientBuilder.newClient();
+WebTarget myResource = client.target("http://example.com/webapi/read");
+String response = myResource.request(MediaType.TEXT_PLAIN)
+        .cookie("myCookie", "The cookie value")
+        .get(String.class);
+
+
+
+

The javax.ws.rs.core.Cookie class encapsulates the attributes of an +HTTP cookie, including the name, value, path, domain, and RFC +specification version of the cookie. In the following example, the +Cookie object is configured with a name-value pair, a path, and a +domain.

+
+
+
+
Client client = ClientBuilder.newClient();
+WebTarget myResource = client.target("http://example.com/webapi/read");
+Cookie myCookie = new Cookie("myCookie", "The cookie value",
+    "/webapi/read", "example.com");
+String response = myResource.request(MediaType.TEXT_PLAIN)
+        .cookie(myCookie)
+        .get(String.class);
+
+
+
+
+

30.3.1.3 Adding Filters to the Client

+
+

You can register custom filters with the client request or the response +received from the target resource. To register filter classes when the +Client instance is created, call the Client.register method.

+
+
+
+
Client client = ClientBuilder.newClient().register(MyLoggingFilter.class);
+
+
+
+

In the preceding example, all invocations that use this Client +instance have the MyLoggingFilter filter registered with them.

+
+
+

You can also register the filter classes on the target by calling +WebTarget.register.

+
+
+
+
Client client = ClientBuilder.newClient().register(MyLoggingFilter.class);
+WebTarget target = client.target("http://example.com/webapi/secure")
+        .register(MyAuthenticationFilter.class);
+
+
+
+

In the preceding example, both the MyLoggingFilter and +MyAuthenticationFilter filters are attached to the invocation.

+
+
+

Request and response filter classes implement the +javax.ws.rs.client.ClientRequestFilter and +javax.ws.rs.client.ClientResponseFilter interfaces, respectively. Both +of these interfaces define a single method, filter. All filters must +be annotated with javax.ws.rs.ext.Provider.

+
+
+

The following class is a logging filter for both client requests and +client responses.

+
+
+
+
@Provider
+public class MyLoggingFilter implements ClientRequestFilter,
+        ClientResponseFilter {
+    static final Logger logger = Logger.getLogger(...);
+
+    // implement the ClientRequestFilter.filter method
+    @Override
+    public void filter(ClientRequestContext requestContext)
+            throws IOException {
+        logger.log(...);
+        ...
+    }
+
+    // implement the ClientResponseFilter.filter method
+    @Override
+    public void filter(ClientRequestContext requestContext,
+           ClientResponseContext responseContext) throws IOException {
+        logger.log(...);
+        ...
+    }
+}
+
+
+
+

If the invocation must be stopped while the filter is active, call the +context object’s abortWith method, and pass in a +javax.ws.rs.core.Response instance from within the filter.

+
+
+
+
@Override
+public void filter(ClientRequestContext requestContext) throws IOException {
+    ...
+    Response response = new Response();
+    response.status(500);
+    requestContext.abortWith(response);
+}
+
+
+
+
+
+

30.3.2 Asynchronous Invocations in the Client API

+
+

In networked applications, network issues can affect the perceived +performance of the application, particularly in long-running or +complicated network calls. Asynchronous processing helps prevent +blocking and makes better use of an application’s resources.

+
+
+

In the JAX-RS Client API, the Invocation.Builder.async method is used +when constructing a client request to indicate that the call to the +service should be performed asynchronously. An asynchronous invocation +returns control to the caller immediately, with a return type of +java.util.concurrent.Future<T> +(part of the Java SE concurrency API) and with the type set to the +return type of the service call. Future<T> objects have methods to +check if the asynchronous call has been completed, to retrieve the final +result, to cancel the invocation, and to check if the invocation has +been cancelled.

+
+
+

The following example shows how to invoke an asynchronous request on a +resource.

+
+
+
+
Client client = ClientBuilder.newClient();
+WebTarget myResource = client.target("http://example.com/webapi/read");
+Future<String> response = myResource.request(MediaType.TEXT_PLAIN)
+        .async()
+        .get(String.class);
+
+
+
+

30.3.2.1 Using Custom Callbacks in Asynchronous Invocations

+
+

The InvocationCallback interface defines two methods, completed and +failed, that are called when an asynchronous invocation either +completes successfully or fails, respectively. You may register an +InvocationCallback instance on your request by creating a new instance +when specifying the request method.

+
+
+

The following example shows how to register a callback object on an +asynchronous invocation.

+
+
+
+
Client client = ClientBuilder.newClient();
+WebTarget myResource = client.target("http://example.com/webapi/read");
+Future<Customer> fCustomer = myResource.request(MediaType.TEXT_PLAIN)
+        .async()
+        .get(new InvocationCallback<Customer>() {
+            @Override
+            public void completed(Customer customer) {
+            // Do something with the customer object
+            }
+            @Override
+             public void failed(Throwable throwable) {
+            // handle the error
+            }
+    });
+
+
+
+
+

30.3.2.2 Using Reactive Approach in Asynchronous Invocations

+
+

Using custom callbacks in asynchronous invocations is easy in simple +cases and when there are many independent calls to make. In nested +calls, using custom callbacks becomes very difficult to implement, +debug, and maintain.

+
+
+

JAX-RS defines a new type of invoker called as RxInvoker and a default +implementation of this type is CompletionStageRxInvoker. The new rx +method is used as in the following example:

+
+
+
+
CompletionStage<String> csf = client.target("forecast/{destination}")
+resolveTemplate("destination", "mars")
+request()
+rx()
+get(String.class);
+csf.thenAccept(System.out::println);
+
+
+
+

In the example, an asynchronous processing of the interface +CompletionStage<String> is created and waits till it is completed and +the result is displayed. The result of CompletionStage is important when +there are parallel, multiple asynchronous computations are necessary to +complete a task.

+
+
+
+
+

30.3.3 Using Server-Sent Events

+
+

Server-sent Events technology is used to asynchronously push +notifications to the client over standard HTTP or HTTPS protocol. +Clients can subscribe to event notifications that originate on a server. +Server generates the events and sends these events back to the clients +that are subscribed to receive the notifications. The one-way +communication channel connection is established by the client. Once the +connection is established, the server sends events to the client +whenever new data is available.

+
+
+

The communication channel established by the client lasts till the +client closes the connection and it is also re-used by the server to +send multiple events from the server.

+
+
+
+

30.3.4 Overview of the SSE API

+
+

The SSE API is defined in the javax.ws.rs.sse package that includes +the interfaces SseEventSink, SseEvent, Sse, and SseEventSource. +To accept connections and send events to one or more clients, inject an +SseEventSink in the resource method that produces the media type +text/event-stream.

+
+
+

The following example shows how to accept the SSE connections and to +send events to the clients:

+
+
+
+
@GET
+@Path("eventStream")
+@Produces(MediaType.SERVER_SENT_EVENTS)
+public void eventStream(@Context SseEventSink eventSink,
+@Context Sse sse) {
+executor.execute(() -> {
+try (SseEventSink sink = eventSink) {
+eventSink.send(sse.newEvent("event1"));
+eventSink.send(sse.newEvent("event2"));
+eventSink.send(sse.newEvent("event3"));
+}
+});
+}
+
+
+
+

The SseEventsink is injected into the resource method and the +underlying client connection is kept open and used to send events. The +connection persists until the client disconnects from the server. The +method send returns an instance of CompletionStage<T> which +indicates the action of asynchronously sending a message to a client is +enabled.

+
+
+

The events that are streamed to the clients can be defined with the +details such as event, data, id, retry, and comment.

+
+
+
+

30.3.5 Broadcasting Using SSE

+
+

Broadcasting is the action of sending events to multiple clients +simultaneously. JAX-RS SSE API provides SseBroadcaster to register all +SseEventSink instances and send events to all registered event +outputs. The life-cycle and scope of an SseBroadcaster is fully +controlled by applications and not the JAX-RS runtime. The following +example show the use of broadcasters:

+
+
+
+
@Path("/")
+@Singleton
+public class SseResource {
+@Context
+private Sse sse;
+private volatile SseBroadcaster sseBroadcaster;
+@PostConstruct
+public init() {
+this.sseBroadcaster = sse.newBroadcaster();
+}
+
+@GET
+@Path("register")
+@Produces(MediaType.SERVER_SENT_EVENTS)
+public void register(@Context SseEventSink eventSink) {
+eventSink.send(sse.newEvent("welcome!"));
+sseBroadcaster.register(eventSink);
+}
+
+@POST
+@Path("broadcast")
+@Consumes(MediaType.MULTIPART_FORM_DATA)
+public void broadcast(@FormParam("event") String event) {
+sseBroadcaster.broadcast(sse.newEvent(event));
+}
+}
+
+
+
+

@Singleton annotation is defined for the resource class restricting +the creation of multiple instances of the class. The register method +on a broadcaster is used to add a new SseEventSink; the broadcast +method is used to send an SSE event to all registered clients.

+
+
+
+

30.3.6 Listening and Receiving Events

+
+

JAX-RS SSE provides the SseEventSource interface for the client to +subscribe to notifications. The client can get asynchronously notified +about incoming events by invoking one of the subscribe methods in +javax.ws.rs.sse.SseEventSource.

+
+
+

The following example shows how to use the SseEventSource API to open +an SSE connection and read some of the messages for a period:

+
+
+
+
WebTarget target = client.target("http://...");
+try (SseEventSource source = SseEventSource.target(target).build()) {
+source.register(System.out::println);
+source.open();
+Thread.sleep(500); // Consume events for just 500 ms
+} catch (InterruptedException e) {
+// falls through
+}
+
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/jaxrs.html b/jaxrs.html new file mode 100644 index 0000000..cc169ba --- /dev/null +++ b/jaxrs.html @@ -0,0 +1,110 @@ + + + + + + Building RESTful Web Services with JAX-RS + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

29 Building RESTful Web Services with JAX-RS

+
+
+

This chapter describes the REST architecture, RESTful web services, and +the Java API for RESTful Web Services (JAX-RS, defined in JSR 339).

+
+
+

JAX-RS makes it easy for developers to build RESTful web services using +the Java programming language.

+
+
+

The following topics are addressed here:

+
+ +
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/jaxrs001.html b/jaxrs001.html new file mode 100644 index 0000000..5ed0799 --- /dev/null +++ b/jaxrs001.html @@ -0,0 +1,154 @@ + + + + + + What Are RESTful Web Services? + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

29.1 What Are RESTful Web Services?

+
+
+

RESTful web services are loosely coupled, lightweight web services that +are particularly well suited for creating APIs for clients spread out +across the internet. Representational State Transfer (REST) is an +architectural style of client-server application centered around the +transfer of representations of resources through requests and responses. +In the REST architectural style, data and functionality are considered +resources and are accessed using Uniform Resource Identifiers (URIs), +typically links on the Web. The resources are represented by documents +and are acted upon by using a set of simple, well-defined operations.

+
+
+

For example, a REST resource might be the current weather conditions for +a city. The representation of that resource might be an XML document, an +image file, or an HTML page. A client might retrieve a particular +representation, modify the resource by updating its data, or delete the +resource entirely.

+
+
+

The REST architectural style is designed to use a stateless +communication protocol, typically HTTP. In the REST architecture style, +clients and servers exchange representations of resources by using a +standardized interface and protocol.

+
+
+

The following principles encourage RESTful applications to be simple, +lightweight, and fast:

+
+
+
    +
  • +

    Resource identification through URI: A RESTful web service exposes a +set of resources that identify the targets of the interaction with its +clients. Resources are identified by URIs, which provide a global +addressing space for resource and service discovery. See +The @Path Annotation and URI Path Templates for +more information.

    +
  • +
  • +

    Uniform interface: Resources are manipulated using a fixed set of four +create, read, update, delete operations: PUT, GET, POST, and DELETE. PUT +creates a new resource, which can be then deleted by using DELETE. GET +retrieves the current state of a resource in some representation. POST +transfers a new state onto a resource. See +Responding to HTTP Methods and Requests for +more information.

    +
  • +
  • +

    Self-descriptive messages: Resources are decoupled from their +representation so that their content can be accessed in a variety of +formats, such as HTML, XML, plain text, PDF, JPEG, JSON, and other +document formats. Metadata about the resource is available and used, for +example, to control caching, detect transmission errors, negotiate the +appropriate representation format, and perform authentication or access +control. See Responding to HTTP Methods and +Requests and Using Entity Providers to Map HTTP +Response and Request Entity Bodies for more information.

    +
  • +
  • +

    Stateful interactions through links: Every interaction with a resource +is stateless; that is, request messages are self-contained. Stateful +interactions are based on the concept of explicit state transfer. +Several techniques exist to exchange state, such as URI rewriting, +cookies, and hidden form fields. State can be embedded in response +messages to point to valid future states of the interaction. See +Using Entity Providers to Map HTTP Response and +Request Entity Bodies and "Building URIs" in the JAX-RS Overview +document for more information.

    +
  • +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/jaxrs002.html b/jaxrs002.html new file mode 100644 index 0000000..2462e0c --- /dev/null +++ b/jaxrs002.html @@ -0,0 +1,1377 @@ + + + + + + Creating a RESTful Root Resource Class + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

29.2 Creating a RESTful Root Resource Class

+
+
+

Root resource classes are "plain old Java objects" (POJOs) that are +either annotated with @Path or have at least one method annotated with +@Path or a request method designator, such as @GET, @PUT, @POST, +or @DELETE. Resource methods are methods of a resource class annotated +with a request method designator. This section explains how to use +JAX-RS to annotate Java classes to create RESTful web services.

+
+
+

The following topics are addressed here:

+
+ +
+

29.2.1 Developing RESTful Web Services with JAX-RS

+
+

JAX-RS is a Java programming language API designed to make it easy to +develop applications that use the REST architecture.

+
+
+

The JAX-RS API uses Java programming language annotations to simplify +the development of RESTful web services. Developers decorate Java +programming language class files with JAX-RS annotations to define +resources and the actions that can be performed on those resources. +JAX-RS annotations are runtime annotations; therefore, runtime +reflection will generate the helper classes and artifacts for the +resource. A Java EE application archive containing JAX-RS resource +classes will have the resources configured, the helper classes and +artifacts generated, and the resource exposed to clients by deploying +the archive to a Java EE server.

+
+
+

Table 29-1 lists some of the Java programming annotations +that are defined by JAX-RS, with a brief description of how each is +used. Further information on the JAX-RS APIs can be viewed at +http://docs.oracle.com/javaee/7/api/.

+
+
+

+
+
+

Table 29-1 Summary of JAX-RS Annotations

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AnnotationDescription

@Path

The @Path annotation’s value is a relative URI path +indicating where the Java class will be hosted: for example, +/helloworld. You can also embed variables in the URIs to make a URI +path template. For example, you could ask for the name of a user and +pass it to the application as a variable in the URI: +/helloworld/{username}.

@GET

The @GET annotation is a request method designator and +corresponds to the similarly named HTTP method. The Java method +annotated with this request method designator will process HTTP GET +requests. The behavior of a resource is determined by the HTTP method to +which the resource is responding.

@POST

The @POST annotation is a request method designator and +corresponds to the similarly named HTTP method. The Java method +annotated with this request method designator will process HTTP POST +requests. The behavior of a resource is determined by the HTTP method to +which the resource is responding.

@PUT

The @PUT annotation is a request method designator and +corresponds to the similarly named HTTP method. The Java method +annotated with this request method designator will process HTTP PUT +requests. The behavior of a resource is determined by the HTTP method to +which the resource is responding.

@DELETE

The @DELETE annotation is a request method designator and +corresponds to the similarly named HTTP method. The Java method +annotated with this request method designator will process HTTP DELETE +requests. The behavior of a resource is determined by the HTTP method to +which the resource is responding.

@HEAD

The @HEAD annotation is a request method designator and +corresponds to the similarly named HTTP method. The Java method +annotated with this request method designator will process HTTP HEAD +requests. The behavior of a resource is determined by the HTTP method to +which the resource is responding.

@PathParam

The @PathParam annotation is a type of parameter that +you can extract for use in your resource class. URI path parameters are +extracted from the request URI, and the parameter names correspond to +the URI path template variable names specified in the @Path +class-level annotation.

@QueryParam

The @QueryParam annotation is a type of parameter that +you can extract for use in your resource class. Query parameters are +extracted from the request URI query parameters.

@Consumes

The @Consumes annotation is used to specify the MIME +media types of representations a resource can consume that were sent by +the client.

@Produces

The @Produces annotation is used to specify the MIME +media types of representations a resource can produce and send back to +the client: for example, "text/plain".

@Provider

The @Provider annotation is used for anything that is of +interest to the JAX-RS runtime, such as MessageBodyReader and +MessageBodyWriter. For HTTP requests, the MessageBodyReader is used +to map an HTTP request entity body to method parameters. On the response +side, a return value is mapped to an HTTP response entity body by using +a MessageBodyWriter. If the application needs to supply additional +metadata, such as HTTP headers or a different status code, a method can +return a Response that wraps the entity and that can be built using +Response.ResponseBuilder.

@ApplicationPath

The @ApplicationPath annotation is used to define +the URL mapping for the application. The path specified by +@ApplicationPath is the base URI for all resource URIs specified by +@Path annotations in the resource class. You may only apply +@ApplicationPath to a subclass of javax.ws.rs.core.Application.

+
+
+
+
+
+
+
+
+

29.2.2 Overview of a JAX-RS Application

+
+

The following code sample is a very simple example of a root resource +class that uses JAX-RS annotations:

+
+
+
+
package javaeetutorial.hello;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.GET;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.UriInfo;
+
+/**
+ * Root resource (exposed at "helloworld" path)
+ */
+@Path("helloworld")
+public class HelloWorld {
+    @Context
+    private UriInfo context;
+
+    /** Creates a new instance of HelloWorld */
+    public HelloWorld() {
+    }
+
+    /**
+     * Retrieves representation of an instance of helloWorld.HelloWorld
+     * @return an instance of java.lang.String
+     */
+    @GET
+    @Produces("text/html")
+    public String getHtml() {
+        return "<html lang=\"en\"><body><h1>Hello, World!!</h1></body></html>";
+    }
+}
+
+
+
+

The following sections describe the annotations used in this example.

+
+
+
    +
  • +

    The @Path annotation’s value is a relative URI path. In the +preceding example, the Java class will be hosted at the URI path +/helloworld. This is an extremely simple use of the @Path +annotation, with a static URI path. Variables can be embedded in the +URIs. URI path templates are URIs with variables embedded within the URI +syntax.

    +
  • +
  • +

    The @GET annotation is a request method designator, along with +@POST, @PUT, @DELETE, and @HEAD, defined by JAX-RS and +corresponding to the similarly named HTTP methods. In the example, the +annotated Java method will process HTTP GET requests. The behavior of a +resource is determined by the HTTP method to which the resource is +responding.

    +
  • +
  • +

    The @Produces annotation is used to specify the MIME media types a +resource can produce and send back to the client. In this example, the +Java method will produce representations identified by the MIME media +type "text/html".

    +
  • +
  • +

    The @Consumes annotation is used to specify the MIME media types a +resource can consume that were sent by the client. The example could be +modified to set the message returned by the getHtml method, as shown +in this code example:

    +
    +
    +
    @POST
    +@Consumes("text/plain")
    +public void postHtml(String message) {
    +    // Store the message
    +}
    +
    +
    +
  • +
+
+
+
+

29.2.3 The @Path Annotation and URI Path Templates

+
+

The @Path annotation identifies the URI path template to which the +resource responds and is specified at the class or method level of a +resource. The @Path annotation’s value is a partial URI path template +relative to the base URI of the server on which the resource is +deployed, the context root of the application, and the URL pattern to +which the JAX-RS runtime responds.

+
+
+

URI path templates are URIs with variables embedded within the URI +syntax. These variables are substituted at runtime in order for a +resource to respond to a request based on the substituted URI. Variables +are denoted by braces ({ and }). For example, look at the following +@Path annotation:

+
+
+
+
@Path("/users/{username}")
+
+
+
+

In this kind of example, a user is prompted to type his or her name, and +then a JAX-RS web service configured to respond to requests to this URI +path template responds. For example, if the user types the user name +"Galileo," the web service responds to the following URL:

+
+
+
+
http://example.com/users/Galileo
+
+
+
+

To obtain the value of the user name, the @PathParam annotation may be +used on the method parameter of a request method, as shown in the +following code example:

+
+
+
+
@Path("/users/{username}")
+public class UserResource {
+
+    @GET
+    @Produces("text/xml")
+    public String getUser(@PathParam("username") String userName) {
+        ...
+    }
+}
+
+
+
+

By default, the URI variable must match the regular expression +"[^/]+?". This variable may be customized by specifying a different +regular expression after the variable name. For example, if a user name +must consist only of lowercase and uppercase alphanumeric characters, +override the default regular expression in the variable definition:

+
+
+
+
@Path("users/{username: [a-zA-Z][a-zA-Z_0-9]*}")
+
+
+
+

In this example, the username variable will match only user names that +begin with one uppercase or lowercase letter and zero or more +alphanumeric characters and the underscore character. If a user name +does not match that template, a 404 (Not Found) response will be sent to +the client.

+
+
+

A @Path value isn’t required to have leading or trailing slashes (/). +The JAX-RS runtime parses URI path templates the same way, whether or +not they have leading or trailing slashes.

+
+
+

A URI path template has one or more variables, with each variable name +surrounded by braces: { to begin the variable name and } to end it. +In the preceding example, username is the variable name. At runtime, a +resource configured to respond to the preceding URI path template will +attempt to process the URI data that corresponds to the location of +{username} in the URI as the variable data for username.

+
+
+

For example, if you want to deploy a resource that responds to the URI +path template +http://example.com/myContextRoot/resources/{name1}/{name2}/, you must +first deploy the application to a Java EE server that responds to +requests to the http://example.com/myContextRoot URI and then decorate +your resource with the following @Path annotation:

+
+
+
+
@Path("/{name1}/{name2}/")
+public class SomeResource {
+    ...
+}
+
+
+
+

In this example, the URL pattern for the JAX-RS helper servlet, +specified in web.xml, is the default:

+
+
+
+
<servlet-mapping>
+      <servlet-name>javax.ws.rs.core.Application</servlet-name>
+      <url-pattern>/resources/*</url-pattern>
+</servlet-mapping>
+
+
+
+

A variable name can be used more than once in the URI path template.

+
+
+

If a character in the value of a variable would conflict with the +reserved characters of a URI, the conflicting character should be +substituted with percent encoding. For example, spaces in the value of a +variable should be substituted with %20.

+
+
+

When defining URI path templates, be careful that the resulting URI +after substitution is valid.

+
+
+

Table 29-2 lists some examples of URI path template +variables and how the URIs are resolved after substitution. The +following variable names and values are used in the examples:

+
+
+
    +
  • +

    name1: james

    +
  • +
  • +

    name2: gatz

    +
  • +
  • +

    name3:

    +
  • +
  • +

    location: Main%20Street

    +
  • +
  • +

    question: why

    +
    +
    +
    +
    +
    +
    +
  • +
+
+ +++ + + + + + +
+

Note:

+
+
+

The value of the name3 variable is an empty string.

+
+
+
+
+
+
+
+
+

+
+
+

Table 29-2 Examples of URI Path Templates

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + +
URI Path TemplateURI After Substitution

http://example.com/{name1}/{name2}/

http://example.com/james/gatz/

http://example.com/{question}/`{question}/{question}/`

http://example.com/why/why/why/

http://example.com/maps/{location}

http://example.com/maps/Main%20Street

http://example.com/{name3}/home/

http://example.com//home/

+
+
+
+
+
+
+
+
+

29.2.4 Responding to HTTP Methods and Requests

+
+

The behavior of a resource is determined by the HTTP methods (typically, +GET, POST, PUT, or DELETE) to which the resource is responding.

+
+
+

The following topics are addressed here:

+
+ +
+

29.2.4.1 The Request Method Designator Annotations

+
+

Request method designator annotations are runtime annotations, defined +by JAX-RS, that correspond to the similarly named HTTP methods. Within a +resource class file, HTTP methods are mapped to Java programming +language methods by using the request method designator annotations. The +behavior of a resource is determined by which HTTP method the resource +is responding to. JAX-RS defines a set of request method designators for +the common HTTP methods GET, POST, PUT, DELETE, and HEAD; you can also +create your own custom request method designators. Creating custom +request method designators is outside the scope of this document.

+
+
+

The following example shows the use of the PUT method to create or +update a storage container:

+
+
+
+
@PUT
+public Response putContainer() {
+    System.out.println("PUT CONTAINER " + container);
+
+    URI uri =  uriInfo.getAbsolutePath();
+    Container c = new Container(container, uri.toString());
+
+    Response r;
+    if (!MemoryStore.MS.hasContainer(c)) {
+        r = Response.created(uri).build();
+    } else {
+        r = Response.noContent().build();
+    }
+
+    MemoryStore.MS.createContainer(c);
+    return r;
+}
+
+
+
+

By default, the JAX-RS runtime will automatically support the methods +HEAD and OPTIONS if not explicitly implemented. For HEAD, the runtime +will invoke the implemented GET method, if present, and ignore the +response entity, if set. For OPTIONS, the Allow response header will +be set to the set of HTTP methods supported by the resource. In +addition, the JAX-RS runtime will return a Web Application Definition +Language (WADL) document describing the resource; see +http://www.w3.org/Submission/wadl/ for more information.

+
+
+

Methods decorated with request method designators must return void, a +Java programming language type, or a javax.ws.rs.core.Response object. +Multiple parameters may be extracted from the URI by using the +@PathParam or @QueryParam annotations, as described in +Extracting Request Parameters. Conversion between Java +types and an entity body is the responsibility of an entity provider, +such as MessageBodyReader or MessageBodyWriter. Methods that need to +provide additional metadata with a response should return an instance of +the Response class. The ResponseBuilder class provides a convenient +way to create a Response instance using a builder pattern. The HTTP +PUT and POST methods expect an HTTP request body, so you should use a +MessageBodyReader for methods that respond to PUT and POST requests.

+
+
+

Both @PUT and @POST can be used to create or update a resource. POST +can mean anything, so when using POST, it is up to the application to +define the semantics. PUT has well-defined semantics. When using PUT for +creation, the client declares the URI for the newly created resource.

+
+
+

PUT has very clear semantics for creating and updating a resource. The +representation the client sends must be the same representation that is +received using a GET, given the same media type. PUT does not allow a +resource to be partially updated, a common mistake when attempting to +use the PUT method. A common application pattern is to use POST to +create a resource and return a 201 response with a location header +whose value is the URI to the newly created resource. In this pattern, +the web service declares the URI for the newly created resource.

+
+
+

29.2.4.2 Using Entity Providers to Map HTTP Response and Request Entity +Bodies +^^^^^^^^^^^^^^^^^^^^^^^^^^

+
+
+

Entity providers supply mapping services between representations and +their associated Java types. The two types of entity providers are +MessageBodyReader and MessageBodyWriter. For HTTP requests, the +MessageBodyReader is used to map an HTTP request entity body to method +parameters. On the response side, a return value is mapped to an HTTP +response entity body by using a MessageBodyWriter. If the application +needs to supply additional metadata, such as HTTP headers or a different +status code, a method can return a Response that wraps the entity and +that can be built by using Response.ResponseBuilder.

+
+
+

Table 29-3 shows the standard types that are supported +automatically for HTTP request and response entity bodies. You need to +write an entity provider only if you are not choosing one of these +standard types.

+
+
+

+
+
+

Table 29-3 Types Supported for HTTP Request and Response Entity Bodies

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Java TypeSupported Media Types

byte[]

All media types (*/*)

java.lang.String

All text media types (text/*)

java.io.InputStream

All media types (*/*)

java.io.Reader

All media types (*/*)

java.io.File

All media types (*/*)

javax.activation.DataSource

All media types (*/*)

javax.xml.transform.Source

XML media types (text/xml, +application/xml, and application/*+xml)

javax.xml.bind.JAXBElement and application-supplied JAXB classes

XML +media types (text/xml, application/xml, and application/*+xml)

MultivaluedMap<String, String>

Form content +(application/x-www-form-urlencoded)

StreamingOutput

All media types (*/*), MessageBodyWriter only

+
+
+
+
+
+
+
+

The following example shows how to use MessageBodyReader with the +@Consumes and @Provider annotations:

+
+
+
+
@Consumes("application/x-www-form-urlencoded")
+@Provider
+public class FormReader implements MessageBodyReader<NameValuePair> {
+
+
+
+

The following example shows how to use MessageBodyWriter with the +@Produces and @Provider annotations:

+
+
+
+
@Produces("text/html")
+@Provider
+public class FormWriter implements
+        MessageBodyWriter<Hashtable<String, String>> {
+
+
+
+

The following example shows how to use ResponseBuilder:

+
+
+
+
@GET
+public Response getItem() {
+    System.out.println("GET ITEM " + container + " " + item);
+
+    Item i = MemoryStore.MS.getItem(container, item);
+    if (i == null)
+        throw new NotFoundException("Item not found");
+    Date lastModified = i.getLastModified().getTime();
+    EntityTag et = new EntityTag(i.getDigest());
+    ResponseBuilder rb = request.evaluatePreconditions(lastModified, et);
+    if (rb != null)
+        return rb.build();
+
+    byte[] b = MemoryStore.MS.getItemData(container, item);
+    return Response.ok(b, i.getMimeType()).
+            lastModified(lastModified).tag(et).build();
+}
+
+
+
+
+
+

29.2.5 Using @Consumes and @Produces to Customize Requests and Responses

+
+

The information sent to a resource and then passed back to the client is +specified as a MIME media type in the headers of an HTTP request or +response. You can specify which MIME media types of representations a +resource can respond to or produce by using the following annotations:

+
+
+
    +
  • +

    javax.ws.rs.Consumes

    +
  • +
  • +

    javax.ws.rs.Produces

    +
  • +
+
+
+

By default, a resource class can respond to and produce all MIME media +types of representations specified in the HTTP request and response +headers.

+
+
+

The following topics are addressed here:

+
+ +
+

29.2.5.1 The @Produces Annotation

+
+

The @Produces annotation is used to specify the MIME media types or +representations a resource can produce and send back to the client. If +@Produces is applied at the class level, all the methods in a resource +can produce the specified MIME types by default. If applied at the +method level, the annotation overrides any @Produces annotations +applied at the class level.

+
+
+

If no methods in a resource are able to produce the MIME type in a +client request, the JAX-RS runtime sends back an HTTP "406 Not +Acceptable" error.

+
+
+

The value of @Produces is an array of String of MIME types or a +comma-separated list of MediaType constants. For example:

+
+
+
+
@Produces({"image/jpeg,image/png"})
+
+
+
+

The following example shows how to apply @Produces at both the class +and method levels:

+
+
+
+
@Path("/myResource")
+@Produces("text/plain")
+public class SomeResource {
+    @GET
+    public String doGetAsPlainText() {
+        ...
+    }
+
+    @GET
+    @Produces("text/html")
+    public String doGetAsHtml() {
+        ...
+    }
+}
+
+
+
+

The doGetAsPlainText method defaults to the MIME media type of the +@Produces annotation at the class level. The doGetAsHtml method’s +@Produces annotation overrides the class-level @Produces setting and +specifies that the method can produce HTML rather than plain text.

+
+
+

@Produces can also use the constants defined in the +javax.ws.rs.core.MediaType class to specify the media type. For +example, specifying MediaType.APPLICATION_XML is equivalent to +specifying "application/xml".

+
+
+
+
@Produces(MediaType.APPLICATION_XML)
+@GET
+public Customer getCustomer() { ... }
+
+
+
+

If a resource class is capable of producing more than one MIME media +type, the resource method chosen will correspond to the most acceptable +media type as declared by the client. More specifically, the Accept +header of the HTTP request declares what is most acceptable. For +example, if the Accept header is Accept: text/plain, the +doGetAsPlainText method will be invoked. Alternatively, if the +Accept header is Accept: text/plain;q=0.9, text/html, which declares +that the client can accept media types of text/plain and text/html +but prefers the latter, the doGetAsHtml method will be invoked.

+
+
+

More than one media type may be declared in the same @Produces +declaration. The following code example shows how this is done:

+
+
+
+
@Produces({"application/xml", "application/json"})
+public String doGetAsXmlOrJson() {
+    ...
+}
+
+
+
+

The doGetAsXmlOrJson method will get invoked if either of the media +types application/xml or application/json is acceptable. If both are +equally acceptable, the former will be chosen because it occurs first. +The preceding examples refer explicitly to MIME media types for clarity. +It is possible to refer to constant values, which may reduce +typographical errors. For more information, see the API documentation +for the constant field values of javax.ws.rs.core.MediaType.

+
+
+
+

29.2.5.2 The @Consumes Annotation

+
+

The @Consumes annotation is used to specify which MIME media types of +representations a resource can accept, or consume, from the client. If +@Consumes is applied at the class level, all the response methods +accept the specified MIME types by default. If applied at the method +level, @Consumes overrides any @Consumes annotations applied at the +class level.

+
+
+

If a resource is unable to consume the MIME type of a client request, +the JAX-RS runtime sends back an HTTP 415 ("Unsupported Media Type") +error.

+
+
+

The value of @Consumes is an array of String of acceptable MIME +types, or a comma-separated list of MediaType constants. For example:

+
+
+
+
@Consumes({"text/plain,text/html"})
+
+
+
+

This is the equivalent of:

+
+
+
+
@Consumes({MediaType.TEXT_PLAIN,MediaType.TEXT_HTML})
+
+
+
+

The following example shows how to apply @Consumes at both the class +and method levels:

+
+
+
+
@Path("/myResource")
+@Consumes("multipart/related")
+public class SomeResource {
+    @POST
+    public String doPost(MimeMultipart mimeMultipartData) {
+        ...
+    }
+
+    @POST
+    @Consumes("application/x-www-form-urlencoded")
+    public String doPost2(FormURLEncodedProperties formData) {
+        ...
+    }
+}
+
+
+
+

The doPost method defaults to the MIME media type of the @Consumes +annotation at the class level. The doPost2 method overrides the class +level @Consumes annotation to specify that it can accept URL-encoded +form data.

+
+
+

If no resource methods can respond to the requested MIME type, an HTTP +415 ("Unsupported Media Type") error is returned to the client.

+
+
+

The HelloWorld example discussed previously in this section can be +modified to set the message by using @Consumes, as shown in the +following code example:

+
+
+
+
@POST
+@Consumes("text/html")
+public void postHtml(String message) {
+    // Store the message
+}
+
+
+
+

In this example, the Java method will consume representations identified +by the MIME media type text/plain. Note that the resource method +returns void. This means that no representation is returned and that a +response with a status code of HTTP 204 ("No Content") will be returned.

+
+
+
+
+

29.2.6 Extracting Request Parameters

+
+

Parameters of a resource method may be annotated with parameter-based +annotations to extract information from a request. A previous example +presented the use of the @PathParam parameter to extract a path +parameter from the path component of the request URL that matched the +path declared in @Path.

+
+
+

You can extract the following types of parameters for use in your +resource class:

+
+
+
    +
  • +

    Query

    +
  • +
  • +

    URI path

    +
  • +
  • +

    Form

    +
  • +
  • +

    Cookie

    +
  • +
  • +

    Header

    +
  • +
  • +

    Matrix

    +
  • +
+
+
+

Query parameters are extracted from the request URI query parameters and +are specified by using the javax.ws.rs.QueryParam annotation in the +method parameter arguments. The following example demonstrates using +@QueryParam to extract query parameters from the Query component of +the request URL:

+
+
+
+
@Path("smooth")
+@GET
+public Response smooth(
+        @DefaultValue("2") @QueryParam("step") int step,
+        @DefaultValue("true") @QueryParam("min-m") boolean hasMin,
+        @DefaultValue("true") @QueryParam("max-m") boolean hasMax,
+        @DefaultValue("true") @QueryParam("last-m") boolean hasLast,
+        @DefaultValue("blue") @QueryParam("min-color") ColorParam minColor,
+        @DefaultValue("green") @QueryParam("max-color") ColorParam maxColor,
+        @DefaultValue("red") @QueryParam("last-color") ColorParam lastColor
+        ) { ... }
+
+
+
+

If the query parameter step exists in the query component of the +request URI, the value of step will be extracted and parsed as a +32-bit signed integer and assigned to the step method parameter. If +step does not exist, a default value of 2, as declared in the +@DefaultValue annotation, will be assigned to the step method +parameter. If the step value cannot be parsed as a 32-bit signed +integer, an HTTP 400 ("Client Error") response is returned.

+
+
+

User-defined Java programming language types may be used as query +parameters. The following code example shows the ColorParam class used +in the preceding query parameter example:

+
+
+
+
public class ColorParam extends Color {
+    public ColorParam(String s) {
+        super(getRGB(s));
+    }
+
+    private static int getRGB(String s) {
+        if (s.charAt(0) == '#') {
+            try {
+                Color c = Color.decode("0x" + s.substring(1));
+                return c.getRGB();
+            } catch (NumberFormatException e) {
+                throw new WebApplicationException(400);
+            }
+        } else {
+            try {
+                Field f = Color.class.getField(s);
+                return ((Color)f.get(null)).getRGB();
+            } catch (Exception e) {
+                throw new WebApplicationException(400);
+            }
+        }
+    }
+}
+
+
+
+

The constructor for ColorParam takes a single String parameter.

+
+
+

Both @QueryParam and @PathParam can be used only on the following +Java types.

+
+
+
    +
  • +

    All primitive types except char.

    +
  • +
  • +

    All wrapper classes of primitive types except Character.

    +
  • +
  • +

    Any class with a constructor that accepts a single String argument.

    +
  • +
  • +

    Any class with the static method named valueOf(String) that accepts +a single String argument.

    +
  • +
  • +

    List<T>, Set<T>, or SortedSet<T>, where T matches the already +listed criteria. Sometimes, parameters may contain more than one value +for the same name. If this is the case, these types may be used to +obtain all values.

    +
  • +
+
+
+

If @DefaultValue is not used in conjunction with @QueryParam, and +the query parameter is not present in the request, the value will be an +empty collection for List, Set, or SortedSet; null for other +object types; and the default for primitive types.

+
+
+

URI path parameters are extracted from the request URI, and the +parameter names correspond to the URI path template variable names +specified in the @Path class-level annotation. URI parameters are +specified using the javax.ws.rs.PathParam annotation in the method +parameter arguments. The following example shows how to use @Path +variables and the @PathParam annotation in a method:

+
+
+
+
@Path("/{username}")
+public class MyResourceBean {
+    ...
+    @GET
+    public String printUsername(@PathParam("username") String userId) {
+        ...
+    }
+}
+
+
+
+

In the preceding snippet, the URI path template variable name username +is specified as a parameter to the printUsername method. The +@PathParam annotation is set to the variable name username. At +runtime, before printUsername is called, the value of username is +extracted from the URI and cast to a String. The resulting String is +then available to the method as the userId variable.

+
+
+

If the URI path template variable cannot be cast to the specified type, +the JAX-RS runtime returns an HTTP 400 ("Bad Request") error to the +client. If the @PathParam annotation cannot be cast to the specified +type, the JAX-RS runtime returns an HTTP 404 ("Not Found") error to the +client.

+
+
+

The @PathParam parameter and the other parameter-based annotations +(@MatrixParam, @HeaderParam, @CookieParam, and @FormParam) obey +the same rules as @QueryParam.

+
+
+

Cookie parameters, indicated by decorating the parameter with +javax.ws.rs.CookieParam, extract information from the cookies declared +in cookie-related HTTP headers. Header parameters, indicated by +decorating the parameter with javax.ws.rs.HeaderParam, extract +information from the HTTP headers. Matrix parameters, indicated by +decorating the parameter with javax.ws.rs.MatrixParam, extract +information from URL path segments.

+
+
+

Form parameters, indicated by decorating the parameter with +javax.ws.rs.FormParam, extract information from a request +representation that is of the MIME media type +application/x-www-form-urlencoded and conforms to the encoding +specified by HTML forms, as described in +http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.1. This +parameter is very useful for extracting information sent by POST in HTML +forms.

+
+
+

The following example extracts the name form parameter from the POST +form data:

+
+
+
+
@POST
+@Consumes("application/x-www-form-urlencoded")
+public void post(@FormParam("name") String name) {
+    // Store the message
+}
+
+
+
+

To obtain a general map of parameter names and values for query and path +parameters, use the following code:

+
+
+
+
@GET
+public String get(@Context UriInfo ui) {
+    MultivaluedMap<String, String> queryParams = ui.getQueryParameters();
+    MultivaluedMap<String, String> pathParams = ui.getPathParameters();
+}
+
+
+
+

The following method extracts header and cookie parameter names and +values into a map:

+
+
+
+
@GET
+public String get(@Context HttpHeaders hh) {
+    MultivaluedMap<String, String> headerParams = hh.getRequestHeaders();
+    Map<String, Cookie> pathParams = hh.getCookies();
+}
+
+
+
+

In general, @Context can be used to obtain contextual Java types +related to the request or response.

+
+
+

For form parameters, it is possible to do the following:

+
+
+
+
@POST
+@Consumes("application/x-www-form-urlencoded")
+public void post(MultivaluedMap<String, String> formParams) {
+    // Store the message
+}
+
+
+
+
+

29.2.7 Configuring JAX-RS Applications

+
+

A JAX-RS application consists of at least one resource class packaged +within a WAR file. The base URI from which an application’s resources +respond to requests can be set one of two ways:

+
+
+
    +
  • +

    Using the @ApplicationPath annotation in a subclass of +javax.ws.rs.core.Application packaged within the WAR

    +
  • +
  • +

    Using the servlet-mapping tag within the WAR’s web.xml deployment +descriptor

    +
  • +
+
+
+

The following topics are addressed here:

+
+ +
+

29.2.7.1 Configuring a JAX-RS Application Using a Subclass of +Application +^^^^^^^^^^^^^^^^^^^^^^^^^

+
+
+

Create a subclass of javax.ws.rs.core.Application to manually +configure the environment in which the REST resources defined in your +resource classes are run, including the base URI. Add a class-level +@ApplicationPath annotation to set the base URI.

+
+
+
+
@ApplicationPath("/webapi")
+public class MyApplication extends Application { ... }
+
+
+
+

In the preceding example, the base URI is set to /webapi, which means +that all resources defined within the application are relative to +/webapi.

+
+
+

By default, all the resources in an archive will be processed for +resources. Override the getClasses method to manually register the +resource classes in the application with the JAX-RS runtime.

+
+
+
+
@Override
+public Set<Class<?>> getClasses() {
+    final Set<Class<?>> classes = new HashSet<>();
+    // register root resource
+    classes.add(MyResource.class);
+    return classes;
+}
+
+
+
+

29.2.7.2 Configuring the Base URI in web.xml

+
+

The base URI for a JAX-RS application can be set using a +servlet-mapping tag in the web.xml deployment descriptor, using the +Application class name as the servlet.

+
+
+
+
<servlet-mapping>
+    <servlet-name>javax.ws.rs.core.Application</servlet-name>
+    <url-pattern>/webapi/*</url-pattern>
+</servlet-mapping>
+
+
+
+

This setting will also override the path set by @ApplicationPath when +using an Application subclass.

+
+
+
+
<servlet-mapping>
+   <servlet-name>com.example.rest.MyApplication</servlet-name>
+   <url-pattern>/services/*</url-pattern>
+</servlet-mapping>
+
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+
+ + + \ No newline at end of file diff --git a/jaxrs003.html b/jaxrs003.html new file mode 100644 index 0000000..3f3116e --- /dev/null +++ b/jaxrs003.html @@ -0,0 +1,513 @@ + + + + + + Example Applications for JAX-RS + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

29.3 Example Applications for JAX-RS

+
+
+

This section provides an introduction to creating, deploying, and +running your own JAX-RS applications. This section demonstrates the +steps that are needed to create, build, deploy, and test a very simple +web application that uses JAX-RS annotations.

+
+
+

The following topics are addressed here:

+
+ +
+

29.3.1 Creating a Simple RESTful Web Service

+
+

This section explains how to use NetBeans IDE to create a RESTful web +service using a Maven archetype. The archetype generates a skeleton for +the application, and you simply need to implement the appropriate +method.

+
+
+

You can find a version of this application at +tut-install`/examples/jaxrs/hello/`.

+
+
+

The following topics are addressed here:

+
+ +
+

29.3.1.1 To Create a RESTful Web Service Using NetBeans IDE

+
+
    +
  1. +

    Ensure you have installed the tutorial archetypes as described in +Installing the Tutorial Archetypes.

    +
  2. +
  3. +

    In NetBeans IDE, create a simple web application using the +jaxrs-service-archetype Maven archetype. This archetype creates a very +simple "Hello, World" web application.

    +
  4. +
  5. +

    From the File menu, choose New Project.

    +
  6. +
  7. +

    From Categories, select Maven. From Projects, select Project From +Archetype. Click Next.

    +
  8. +
  9. +

    Under Search enter jaxrs-service, select the +jaxrs-service-archetype, and click Next.

    +
  10. +
  11. +

    Under Project Name enter HelloWorldApplication, set the Project +Location, and set the Package name to javaeetutorial.hello, and click +Finish.

    +
    +

    The project is created.

    +
    +
  12. +
  13. +

    In HelloWorld.java, find the getHtml() method. Replace the +//TODO comment with the following text, so that the finished product +resembles the following method:

    +
    +
    +
    @GET
    +@Produces("text/html")
    +public String getHtml() {
    +    return "<html lang=\"en\"><body><h1>Hello, World!!</body></h1></html>";
    +}
    +
    +
    + +++ + + + + + +
    +

    Note:

    +
    +
    +

    Because the MIME type produced is HTML, you can use HTML tags in your +return statement.

    +
    +
    +
    +
     +
    +4.  Right-click the `HelloWorldApplication` project in the Projects pane
    +and select Run.
    +
    +
    +
    +

    This will build and deploy the application to GlassFish Server.

    +
    +
  14. +
  15. +

    In a browser, open the following URL:

    +
    +
    +
    http://localhost:8080/HelloWorldApplication/HelloWorldApplication
    +
    +
    +
    +

    A browser window opens and displays the return value of Hello, World!!

    +
    +
  16. +
+
+
+

For other sample applications that demonstrate deploying and running +JAX-RS applications using NetBeans IDE, see The rsvp Example +Application and Your First Cup: An Introduction to the Java EE Platform +at http://docs.oracle.com/javaee/7/firstcup/doc/. You may also look at +the tutorials on the NetBeans IDE tutorial site, such as the one titled +"Getting Started with RESTful Web Services" at +https://netbeans.org/kb/docs/websvc/rest.html. This tutorial includes +a section on creating a CRUD application from a database. Create, read, +update, and delete (CRUD) are the four basic functions of persistent +storage and relational databases.

+
+
+
+
+

29.3.2 The rsvp Example Application

+
+

The rsvp example application, located in the +tut-install`/examples/jaxrs/rsvp/` directory, allows invitees to an +event to indicate whether they will attend. The events, people invited +to the event, and the responses to the invite are stored in a Java DB +database using the Java Persistence API. The JAX-RS resources in rsvp +are exposed in a stateless session enterprise bean.

+
+
+

The following topics are addressed here:

+
+ +
+

29.3.2.1 Components of the rsvp Example Application

+
+

The three enterprise beans in the rsvp example application are +rsvp.ejb.ConfigBean, rsvp.ejb.StatusBean, and +rsvp.ejb.ResponseBean.

+
+
+

ConfigBean is a singleton session bean that initializes the data in +the database.

+
+
+

StatusBean exposes a JAX-RS resource for displaying the current status +of all invitees to an event. The URI path template is declared first on +the class and then on the getEvent method:

+
+
+
+
@Stateless
+@Named
+@Path("/status")
+public class StatusBean {
+    ...
+    @GET
+    @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
+    @Path("{eventId}/")
+    public Event getEvent(@PathParam("eventId") Long eventId) {
+         ...
+
+
+
+

The combination of the two @Path annotations results in the following +URI path template:

+
+
+
+
@Path("/status/{eventId}/")
+
+
+
+

The URI path variable eventId is a @PathParam variable in the +getEvent method, which responds to HTTP GET requests and has been +annotated with @GET. The eventId variable is used to look up all the +current responses in the database for that particular event.

+
+
+

ResponseBean exposes a JAX-RS resource for setting an invitee’s +response to a particular event. The URI path template for ResponseBean +is declared as follows:

+
+
+
+
@Path("/{eventId}/{inviteId}")
+
+
+
+

Two URI path variables are declared in the path template: eventId and +inviteId. As in StatusBean, eventId is the unique ID for a +particular event. Each invitee to that event has a unique ID for the +invitation, and that is the inviteId. Both of these path variables are +used in two JAX-RS methods in ResponseBean: getResponse and +putResponse. The getResponse method responds to HTTP GET requests +and displays the invitee’s current response and a form to change the +response.

+
+
+

The javaeetutorial.rsvp.rest.RsvpApplication class defines the root +application path for the resources by applying the +javax.ws.rs.ApplicationPath annotation at the class level.

+
+
+
+
@ApplicationPath("/webapi")
+public class RsvpApplication extends Application {
+}
+
+
+
+

An invitee who wants to change his or her response selects the new +response and submits the form data, which is processed as an HTTP POST +request by the putResponse method. The new response is extracted from +the HTTP POST request and stored as the userResponse string. The +putResponse method uses userResponse, eventId, and inviteId to +update the invitee’s response in the database.

+
+
+

The events, people, and responses in rsvp are encapsulated in Java +Persistence API entities. The rsvp.entity.Event, rsvp.entity.Person, +and rsvp.entity.Response entities respectively represent events, +invitees, and responses to an event.

+
+
+

The rsvp.util.ResponseEnum class declares an enumerated type that +represents all the possible response statuses an invitee may have.

+
+
+

The web application also includes two CDI managed beans, StatusManager +and EventManager, which use the JAX-RS Client API to call the +resources exposed in StatusBean and ResponseBean. For information on +how the Client API is used in rsvp, see +"The Client API in the rsvp Example +Application".

+
+
+
+

29.3.2.2 Running the rsvp Example Application

+
+

Both NetBeans IDE and Maven can be used to deploy and run the rsvp +example application.

+
+
+

The following topics are addressed here:

+
+ +
+
29.3.2.2.1 To Run the rsvp Example Application Using NetBeans IDE
+
+
    +
  1. +

    If the database server is not already running, start it by following +the instructions in Starting and +Stopping the Java DB Server.

    +
  2. +
  3. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  4. +
  5. +

    From the File menu, choose Open Project.

    +
  6. +
  7. +

    In the Open Project dialog box, navigate to:

    +
    +
    +
    tut-install/examples/jaxrs
    +
    +
    +
  8. +
  9. +

    Select the rsvp folder.

    +
  10. +
  11. +

    Click Open Project.

    +
  12. +
  13. +

    In the Projects tab, right-click the rsvp project and select Run.

    +
    +

    The project will be compiled, assembled, and deployed to GlassFish +Server. A web browser window will open to the following URL:

    +
    +
    +
    +
    http://localhost:8080/rsvp/index.xhtml
    +
    +
    +
  14. +
  15. +

    In the web browser window, click the Event status link for the +Duke’s Birthday event.

    +
    +

    You’ll see the current invitees and their responses.

    +
    +
  16. +
  17. +

    Click the current response of one of the invitees in the Status +column of the table, select a new response, and click Update your +status.

    +
    +

    The invitee’s new status should now be displayed in the table of +invitees and their response statuses.

    +
    +
  18. +
+
+
+
+
29.3.2.2.2 To Run the rsvp Example Application Using Maven
+
+
    +
  1. +

    If the database server is not already running, start it by following +the instructions in Starting and +Stopping the Java DB Server.

    +
  2. +
  3. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  4. +
  5. +

    In a terminal window, go to:

    +
    +
    +
    tut-install/examples/jaxrs/rsvp/
    +
    +
    +
  6. +
  7. +

    Enter the following command:

    +
    +
    +
    mvn install
    +
    +
    +
    +

    This command builds, assembles, and deploys rsvp to GlassFish Server.

    +
    +
  8. +
  9. +

    Open a web browser window to the following URL:

    +
    +
    +
    http://localhost:8080/rsvp/
    +
    +
    +
  10. +
  11. +

    In the web browser window, click the Event status link for the +Duke’s Birthday event.

    +
    +

    You’ll see the current invitees and their responses.

    +
    +
  12. +
  13. +

    Click the current response of one of the invitees in the Status +column of the table, select a new response, and click Update your +status.

    +
    +

    The invitee’s new status should now be displayed in the table of +invitees and their response statuses.

    +
    +
  14. +
+
+
+
+
+
+

29.3.3 Real-World Examples

+
+

Most blog sites use RESTful web services. These sites involve +downloading XML files, in RSS or Atom format, that contain lists of +links to other resources. Other websites and web applications that use +REST-like developer interfaces to data include Twitter and Amazon S3 +(Simple Storage Service). With Amazon S3, buckets and objects can be +created, listed, and retrieved using either a REST-style HTTP interface +or a SOAP interface. The examples that ship with Jersey include a +storage service example with a RESTful interface.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/jaxrs004.html b/jaxrs004.html new file mode 100644 index 0000000..9ff3010 --- /dev/null +++ b/jaxrs004.html @@ -0,0 +1,114 @@ + + + + + + Further Information about JAX-RS + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

29.4 Further Information about JAX-RS

+
+
+

For more information about RESTful web services and JAX-RS, see

+
+
+
    +
  • +

    "Fielding Dissertation: Chapter 5: Representational State Transfer +(REST)":

    +
    +

    http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.html

    +
    +
  • +
  • +

    RESTful Web Services, by Leonard Richardson and Sam Ruby, available +from O’Reilly Media at +http://shop.oreilly.com/product/9780596529260.do

    +
  • +
  • +

    JSR 339: JAX-RS 2.0: The Java API for RESTful Web Services:

    +
    +

    http://jcp.org/en/jsr/detail?id=339

    +
    +
  • +
  • +

    Jersey project:

    +
    +

    https://jersey.java.net/

    +
    +
  • +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/jaxws.html b/jaxws.html new file mode 100644 index 0000000..c98e74b --- /dev/null +++ b/jaxws.html @@ -0,0 +1,112 @@ + + + + + + Building Web Services with JAX-WS + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

28 Building Web Services with JAX-WS

+
+
+

This chapter describes Java API for XML Web Services (JAX-WS), a +technology for building web services and clients that communicate using +XML. JAX-WS allows developers to write message-oriented as well as +Remote Procedure Call–oriented (RPC-oriented) web services.

+
+
+

The following topics are addressed here:

+
+ +
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/jaxws001.html b/jaxws001.html new file mode 100644 index 0000000..bac7b57 --- /dev/null +++ b/jaxws001.html @@ -0,0 +1,139 @@ + + + + + + Overview of Java API for XML Web Services + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

28.1 Overview of Java API for XML Web Services

+
+
+

In JAX-WS, a web service operation invocation is represented by an +XML-based protocol, such as SOAP. The SOAP specification defines the +envelope structure, encoding rules, and conventions for representing web +service invocations and responses. These calls and responses are +transmitted as SOAP messages (XML files) over HTTP.

+
+
+

Although SOAP messages are complex, the JAX-WS API hides this complexity +from the application developer. On the server side, the developer +specifies the web service operations by defining methods in an interface +written in the Java programming language. The developer also codes one +or more classes that implement those methods. Client programs are also +easy to code. A client creates a proxy (a local object representing the +service) and then simply invokes methods on the proxy. With JAX-WS, the +developer does not generate or parse SOAP messages. It is the JAX-WS +runtime system that converts the API calls and responses to and from +SOAP messages.

+
+
+

With JAX-WS, clients and web services have a big advantage: the platform +independence of the Java programming language. In addition, JAX-WS is +not restrictive: A JAX-WS client can access a web service that is not +running on the Java platform and vice versa. This flexibility is +possible because JAX-WS uses technologies defined by the W3C: HTTP, +SOAP, and WSDL. WSDL specifies an XML format for describing a service as +a set of endpoints operating on messages.

+
+
+
+
+
+
+
+ +++ + + + + + +
+

Note:

+
+
+

Several files in the JAX-WS examples depend on the port that you +specified when you installed GlassFish Server. These tutorial examples +assume that the server runs on the default port, 8080. They do not run +with a nondefault port setting.

+
+
+
+
+
+
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/jaxws002.html b/jaxws002.html new file mode 100644 index 0000000..14f92b9 --- /dev/null +++ b/jaxws002.html @@ -0,0 +1,861 @@ + + + + + + Creating a Simple Web Service and Clients with JAX-WS + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

28.2 Creating a Simple Web Service and Clients with JAX-WS

+
+
+

This section shows how to build and deploy a simple web service and two +clients: an application client and a web client. The source code for the +service is in the tut-install`/examples/jaxws/helloservice-war/` +directory, and the clients are in the +tut-install`/examples/jaxws/hello-appclient/` and +tut-install`/examples/jaxws/hello-webclient/` directories.

+
+
+

Figure 28-1 illustrates how JAX-WS technology manages +communication between a web service and a client.

+
+
+

Figure 28-1 Communication between a JAX-WS Web Service and a Client

+
+ +
+

The starting point for developing a JAX-WS web service is a Java class +annotated with the javax.jws.WebService annotation. The @WebService +annotation defines the class as a web service endpoint.

+
+
+

A service endpoint interface or service endpoint implementation (SEI) is +a Java interface or class, respectively, that declares the methods that +a client can invoke on the service. An interface is not required when +building a JAX-WS endpoint. The web service implementation class +implicitly defines an SEI.

+
+
+

You may specify an explicit interface by adding the endpointInterface +element to the @WebService annotation in the implementation class. You +must then provide an interface that defines the public methods made +available in the endpoint implementation class.

+
+
+

28.2.1 Basic Steps for Creating a Web Service and Client

+
+

The basic steps for creating a web service and client are as follows.

+
+
+
    +
  1. +

    Code the implementation class.

    +
  2. +
  3. +

    Compile the implementation class.

    +
  4. +
  5. +

    Package the files into a WAR file.

    +
  6. +
  7. +

    Deploy the WAR file. The web service artifacts, which are used to +communicate with clients, are generated by GlassFish Server during +deployment.

    +
  8. +
  9. +

    Code the client class.

    +
  10. +
  11. +

    Use the wsimport Maven goal to generate and compile the web +service artifacts needed to connect to the service.

    +
  12. +
  13. +

    Compile the client class.

    +
  14. +
  15. +

    Run the client.

    +
  16. +
+
+
+

If you use NetBeans IDE to create a service and client, the IDE performs +the wsimport task for you.

+
+
+

The sections that follow cover these steps in greater detail.

+
+
+
+

28.2.2 Requirements of a JAX-WS Endpoint

+
+

JAX-WS endpoints must follow these requirements.

+
+
+
    +
  • +

    The implementing class must be annotated with either the +javax.jws.WebService or the javax.jws.WebServiceProvider annotation.

    +
  • +
  • +

    The implementing class may explicitly reference an SEI through the +endpointInterface element of the @WebService annotation but is not +required to do so. If no endpointInterface is specified in +@WebService, an SEI is implicitly defined for the implementing class.

    +
  • +
  • +

    The business methods of the implementing class must be public and must +not be declared static or final.

    +
  • +
  • +

    Business methods that are exposed to web service clients must be +annotated with javax.jws.WebMethod.

    +
  • +
  • +

    Business methods that are exposed to web service clients must have +JAXB-compatible parameters and return types. See the list of JAXB +default data type bindings in Types Supported by +JAX-WS.

    +
  • +
  • +

    The implementing class must not be declared final and must not be +abstract.

    +
  • +
  • +

    The implementing class must have a default public constructor.

    +
  • +
  • +

    The implementing class must not define the finalize method.

    +
  • +
  • +

    The implementing class may use the javax.annotation.PostConstruct or +the javax.annotation.PreDestroy annotations on its methods for +lifecycle event callbacks.

    +
    +

    The @PostConstruct method is called by the container before the +implementing class begins responding to web service clients.

    +
    +
    +

    The @PreDestroy method is called by the container before the endpoint +is removed from operation.

    +
    +
  • +
+
+
+
+

28.2.3 Coding the Service Endpoint Implementation Class

+
+

In this example, the implementation class, Hello, is annotated as a +web service endpoint using the @WebService annotation. Hello +declares a single method named sayHello, annotated with the +@WebMethod annotation, which exposes the annotated method to web +service clients. The sayHello method returns a greeting to the client, +using the name passed to it to compose the greeting. The implementation +class also must define a default, public, no-argument constructor.

+
+
+
+
package javaeetutorial.helloservice;
+
+import javax.jws.WebService;
+import javax.jws.WebMethod;
+
+@WebService
+public class Hello {
+    private final String message = "Hello, ";
+
+    public Hello() {
+    }
+
+    @WebMethod
+    public String sayHello(String name) {
+        return message + name + ".";
+    }
+}
+
+
+
+
+

28.2.4 Building, Packaging, and Deploying the Service

+
+

You can use either NetBeans IDE or Maven to build, package, and deploy +the helloservice-war application.

+
+
+

The following topics are addressed here:

+
+ +
+

28.2.4.1 To Build, Package, and Deploy the Service Using NetBeans IDE

+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    From the File menu, choose Open Project.

    +
  4. +
  5. +

    In the Open Project dialog box, navigate to:

    +
    +
    +
    tut-install/examples/jaxws
    +
    +
    +
  6. +
  7. +

    Select the helloservice-war folder.

    +
  8. +
  9. +

    Click Open Project.

    +
  10. +
  11. +

    In the Projects tab, right-click the helloservice-war project and +select Run.

    +
    +

    This command builds and packages the application into a WAR file, +helloservice-war.war, located in +tut-install`/examples/jaxws/helloservice-war/target/`, and deploys this +WAR file to your GlassFish Server instance. It also opens the web +service test interface at the URL shown in To Test the +Service without a Client.

    +
    +
  12. +
+
+
+

Next Steps

+
+
+

You can view the WSDL file of the deployed service by requesting the URL +http://localhost:8080/helloservice-war/HelloService?wsdl in a web +browser. Now you are ready to create a client that accesses this +service.

+
+
+
+

28.2.4.2 To Build, Package, and Deploy the Service Using Maven

+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    In a terminal window, go to:

    +
    +
    +
    tut-install/examples/jaxws/helloservice-war/
    +
    +
    +
  4. +
  5. +

    Enter the following command:

    +
    +
    +
    mvn install
    +
    +
    +
    +

    This command builds and packages the application into a WAR file, +helloservice-war.war, located in the target directory, and then +deploys the WAR to GlassFish Server.

    +
    +
  6. +
+
+
+

Next Steps

+
+
+

You can view the WSDL file of the deployed service by requesting the URL +http://localhost:8080/helloservice-war/HelloService?wsdl in a web +browser. Now you are ready to create a client that accesses this +service.

+
+
+
+
+

28.2.5 Testing the Methods of a Web Service Endpoint

+
+

GlassFish Server allows you to test the methods of a web service +endpoint.

+
+
+

The following topics are addressed here:

+
+ +
+

28.2.5.1 To Test the Service without a Client

+
+

To test the sayHello method of HelloService, follow these steps.

+
+
+
    +
  1. +

    Open the web service test interface by entering the following URL in +a web browser:

    +
    +
    +
    http://localhost:8080/helloservice-war/HelloService?Tester
    +
    +
    +
  2. +
  3. +

    Under Methods, enter a name as the parameter to the sayHello +method.

    +
  4. +
  5. +

    Click sayHello.

    +
    +

    This takes you to the sayHello Method invocation page.

    +
    +
    +

    Under Method returned, you’ll see the response from the endpoint.

    +
    +
  6. +
+
+
+
+
+

28.2.6 A Simple JAX-WS Application Client

+
+

The HelloAppClient class is a stand-alone application client that +accesses the sayHello method of HelloService. This call is made +through a port, a local object that acts as a proxy for the remote +service. The port is created at development time by the wsimport Maven +goal, which generates JAX-WS portable artifacts based on a WSDL file.

+
+
+

The following topics are addressed here:

+
+ +
+

28.2.6.1 Coding the Application Client

+
+

When invoking the remote methods on the port, the client performs these +steps.

+
+
+
    +
  1. +

    It uses the generated helloservice.endpoint.HelloService class, +which represents the service at the URI of the deployed service’s WSDL +file:

    +
    +
    +
    import javaeetutorial.helloservice.endpoint.HelloService;
    +import javax.xml.ws.WebServiceRef;
    +
    +public class HelloAppClient {
    +    @WebServiceRef(wsdlLocation =
    +      "http://localhost:8080/helloservice-war/HelloService?WSDL")
    +    private static HelloService service;
    +
    +
    +
  2. +
  3. +

    It retrieves a proxy to the service, also known as a port, by +invoking getHelloPort on the service:

    +
    +
    +
    javaeetutorial.helloservice.endpoint.Hello port = service.getHelloPort();
    +
    +
    +
    +

    The port implements the SEI defined by the service.

    +
    +
  4. +
  5. +

    It invokes the port’s sayHello method, passing a string to the +service:

    +
    +
    +
    return port.sayHello(arg0);
    +
    +
    +
  6. +
+
+
+

Here is the full source of HelloAppClient.java, which is located in +the +tut-install`/examples/jaxws/hello-appclient/src/main/java/javaeetutorial/hello/appclient/` +directory:

+
+
+
+
package javaeetutorial.hello.appclient;
+
+import javaeetutorial.helloservice.endpoint.HelloService;
+import javax.xml.ws.WebServiceRef;
+
+public class HelloAppClient {
+    @WebServiceRef(wsdlLocation =
+      "http://localhost:8080/helloservice-war/HelloService?WSDL")
+    private static HelloService service;
+
+    /**
+     * @param args the command line arguments
+     */
+    public static void main(String[] args) {
+       System.out.println(sayHello("world"));
+    }
+
+    private static String sayHello(java.lang.String arg0) {
+        javaeetutorial.helloservice.endpoint.Hello port =
+                service.getHelloPort();
+        return port.sayHello(arg0);
+    }
+}
+
+
+
+
+

28.2.6.2 Running the Application Client

+
+

You can use either NetBeans IDE or Maven to build, package, deploy, and +run the hello-appclient application. To build the client, you must +first have deployed helloservice-war, as described in +Building, Packaging, and Deploying the Service.

+
+
+

The following topics are addressed here:

+
+ +
+
28.2.6.2.1 To Run the Application Client Using NetBeans IDE
+
+
    +
  1. +

    From the File menu, choose Open Project.

    +
  2. +
  3. +

    In the Open Project dialog box, navigate to:

    +
    +
    +
    tut-install/examples/jaxws
    +
    +
    +
  4. +
  5. +

    Select the hello-appclient folder.

    +
  6. +
  7. +

    Click Open Project.

    +
  8. +
  9. +

    In the Projects tab, right-click the hello-appclient project and +select Build.

    +
    +

    This command runs the wsimport goal, then builds, packages, and runs +the client. You will see the output of the application client in the +hello-appclient output tab:

    +
    +
    +
    +
    --- exec-maven-plugin:1.2.1:exec (run-appclient) @ hello-appclient ---
    +Hello, world.
    +
    +
    +
  10. +
+
+
+
+
28.2.6.2.2 To Run the Application Client Using Maven
+
+
    +
  1. +

    In a terminal window, go to:

    +
    +
    +
    tut-install/examples/jaxws/hello-appclient/
    +
    +
    +
  2. +
  3. +

    Enter the following command:

    +
    +
    +
    mvn install
    +
    +
    +
    +

    This command runs the wsimport goal, then builds, packages, and runs +the client. The application client output looks like this:

    +
    +
    +
    +
    --- exec-maven-plugin:1.2.1:exec (run-appclient) @ hello-appclient ---
    +Hello, world.
    +
    +
    +
  4. +
+
+
+
+
+
+

28.2.7 A Simple JAX-WS Web Client

+
+

HelloServlet is a servlet that, like the Java client, calls the +sayHello method of the web service. Like the application client, it +makes this call through a port.

+
+
+

The following topics are addressed here:

+
+ +
+

28.2.7.1 Coding the Servlet

+
+

To invoke the method on the port, the client performs these steps.

+
+
+
    +
  1. +

    It imports the HelloService endpoint and the WebServiceRef +annotation:

    +
    +
    +
    import javaeetutorial.helloservice.endpoint.HelloService;
    +...
    +import javax.xml.ws.WebServiceRef;
    +
    +
    +
  2. +
  3. +

    It defines a reference to the web service by specifying the WSDL +location:

    +
    +
    +
    @WebServiceRef(wsdlLocation =
    +  "http://localhost:8080/helloservice-war/HelloService?WSDL")
    +
    +
    +
  4. +
  5. +

    It declares the web service, then defines a private method that +calls the sayHello method on the port:

    +
    +
    +
    private HelloService service;
    +...
    +private String sayHello(java.lang.String arg0) {
    +    javaeetutorial.helloservice.endpoint.Hello port =
    +            service.getHelloPort();
    +    return port.sayHello(arg0);
    +}
    +
    +
    +
  6. +
  7. +

    In the servlet, it calls this private method:

    +
    +
    +
    out.println("<p>" + sayHello("world") + "</p>");
    +
    +
    +
  8. +
+
+
+

The significant parts of the HelloServlet code follow. The code is +located in the +tut-install`/examples/jaxws/hello-webclient/src/java/javaeetutorial/hello/ webclient/` +directory.

+
+
+
+
package javaeetutorial.hello.webclient;
+
+import javaeetutorial.helloservice.endpoint.HelloService;
+import java.io.IOException;
+import java.io.PrintWriter;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.xml.ws.WebServiceRef;
+
+@WebServlet(name="HelloServlet", urlPatterns={"/HelloServlet"})
+public class HelloServlet extends HttpServlet {
+    @WebServiceRef(wsdlLocation =
+      "http://localhost:8080/helloservice-war/HelloService?WSDL")
+    private HelloService service;
+
+    /**
+     * Processes requests for both HTTP <code>GET</code>
+     *   and <code>POST</code> methods.
+     * @param request servlet request
+     * @param response servlet response
+     * @throws ServletException if a servlet-specific error occurs
+     * @throws IOException if an I/O error occurs
+     */
+    protected void processRequest(HttpServletRequest request,
+            HttpServletResponse response)
+    throws ServletException, IOException {
+        response.setContentType("text/html;charset=UTF-8");
+        try (PrintWriter out = response.getWriter()) {
+
+            out.println("<html lang=\"en\">");
+            out.println("<head>");
+            out.println("<title>Servlet HelloServlet</title>");
+            out.println("</head>");
+            out.println("<body>");
+            out.println("<h1>Servlet HelloServlet at " +
+                request.getContextPath () + "</h1>");
+            out.println("<p>" + sayHello("world") + "</p>");
+            out.println("</body>");
+            out.println("</html>");
+        }
+    }
+
+    // doGet and doPost methods, which call processRequest, and
+    //   getServletInfo method
+
+    private String sayHello(java.lang.String arg0) {
+        javaeetutorial.helloservice.endpoint.Hello port =
+                service.getHelloPort();
+        return port.sayHello(arg0);
+    }
+}
+
+
+
+
+

28.2.7.2 Running the Web Client

+
+

You can use either NetBeans IDE or Maven to build, package, deploy, and +run the hello-webclient application. To build the client, you must +first have deployed helloservice-war, as described in +Building, Packaging, and Deploying the Service.

+
+
+

The following topics are addressed here:

+
+ +
+
28.2.7.2.1 To Run the Web Client Using NetBeans IDE
+
+
    +
  1. +

    From the File menu, choose Open Project.

    +
  2. +
  3. +

    In the Open Project dialog box, navigate to:

    +
    +
    +
    tut-install/examples/jaxws
    +
    +
    +
  4. +
  5. +

    Select the hello-webclient folder.

    +
  6. +
  7. +

    Click Open Project.

    +
  8. +
  9. +

    In the Projects tab, right-click the hello-webclient project and +select Build.

    +
    +

    This task runs the wsimport goal, builds and packages the application +into a WAR file, hello-webclient.war, located in the target +directory, and deploys it to GlassFish Server.

    +
    +
  10. +
  11. +

    In a web browser, enter the following URL:

    +
    +
    +
    http://localhost:8080/hello-webclient/HelloServlet
    +
    +
    +
    +

    The output of the sayHello method appears in the window.

    +
    +
  12. +
+
+
+
+
28.2.7.2.2 To Run the Web Client Using Maven
+
+
    +
  1. +

    In a terminal window, go to:

    +
    +
    +
    tut-install/examples/jaxws/hello-webclient/
    +
    +
    +
  2. +
  3. +

    Enter the following command:

    +
    +
    +
    mvn install
    +
    +
    +
    +

    This command runs the wsimport goal, then build and packages the +application into a WAR file, hello-webclient.war, located in the +target directory. The WAR file is then deployed to GlassFish Server.

    +
    +
  4. +
  5. +

    In a web browser, enter the following URL:

    +
    +
    +
    http://localhost:8080/hello-webclient/HelloServlet
    +
    +
    +
    +

    The output of the sayHello method appears in the window.

    +
    +
  6. +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+
+
+ + + \ No newline at end of file diff --git a/jaxws003.html b/jaxws003.html new file mode 100644 index 0000000..97b0610 --- /dev/null +++ b/jaxws003.html @@ -0,0 +1,321 @@ + + + + + + Types Supported by JAX-WS + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

28.3 Types Supported by JAX-WS

+
+
+

JAX-WS delegates the mapping of Java programming language types to and +from XML definitions to JAXB. Application developers don’t need to know +the details of these mappings but should be aware that not every class +in the Java language can be used as a method parameter or return type in +JAX-WS.

+
+
+

The following sections explain the default schema-to-Java and +Java-to-schema data type bindings:

+
+ +
+

28.3.1 Schema-to-Java Mapping

+
+

The Java language provides a richer set of data types than XML schema. +Table 28-1 lists the mapping of XML data types to Java data +types in JAXB.

+
+
+

+
+
+

Table 28-1 Mapping of XML Data Types to Java Data Types in JAXB

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
XML Schema TypeJava Data Type

xsd:string

java.lang.String

xsd:integer

java.math.BigInteger

xsd:int

int

xsd.long

long

xsd:short

short

xsd:decimal

java.math.BigDecimal

xsd:float

float

xsd:double

double

xsd:boolean

boolean

xsd:byte

byte

xsd:QName

javax.xml.namespace.QName

xsd:dateTime

javax.xml.datatype.XMLGregorianCalendar

xsd:base64Binary

byte[]

xsd:hexBinary

byte[]

xsd:unsignedInt

long

xsd:unsignedShort

int

xsd:unsignedByte

short

xsd:time

javax.xml.datatype.XMLGregorianCalendar

xsd:date

javax.xml.datatype.XMLGregorianCalendar

xsd:g

javax.xml.datatype.XMLGregorianCalendar

xsd:anySimpleType

java.lang.Object

xsd:anySimpleType

java.lang.String

xsd:duration

javax.xml.datatype.Duration

xsd:NOTATION

javax.xml.namespace.QName

+
+
+
+
+
+
+
+
+

28.3.2 Java-to-Schema Mapping

+
+

Table 28-2 shows the default mapping of Java classes to XML +data types.

+
+
+

+
+
+

Table 28-2 Mapping of Java Classes to XML Data Types in JAXB

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Java ClassXML Data Type

java.lang.String

xs:string

java.math.BigInteger

xs:integer

java.math.BigDecimal

xs:decimal

java.util.Calendar

xs:dateTime

java.util.Date

xs:dateTime

javax.xml.namespace.QName

xs:QName

java.net.URI

xs:string

javax.xml.datatype.XMLGregorianCalendar

xs:anySimpleType

javax.xml.datatype.Duration

xs:duration

java.lang.Object

xs:anyType

java.awt.Image

xs:base64Binary

javax.activation.DataHandler

xs:base64Binary

javax.xml.transform.Source

xs:base64Binary

java.util.UUID

xs:string

+
+
+
+
+
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/jaxws004.html b/jaxws004.html new file mode 100644 index 0000000..1a19b1e --- /dev/null +++ b/jaxws004.html @@ -0,0 +1,95 @@ + + + + + + Web Services Interoperability and JAX-WS + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

28.4 Web Services Interoperability and JAX-WS

+
+
+

JAX-WS supports the Web Services Interoperability (WS-I) Basic Profile +Version 1.1. The WS-I Basic Profile is a document that clarifies the +SOAP 1.1 and WSDL 1.1 specifications to promote SOAP interoperability. +For links related to WS-I, see Further +Information about JAX-WS.

+
+
+

To support WS-I Basic Profile Version 1.1, the JAX-WS runtime supports +doc/literal and rpc/literal encodings for services, static ports, +dynamic proxies, and the Dynamic Invocation Interface (DII).

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/jaxws005.html b/jaxws005.html new file mode 100644 index 0000000..59d6b98 --- /dev/null +++ b/jaxws005.html @@ -0,0 +1,120 @@ + + + + + + Further Information about JAX-WS + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous

Next
+Next

 

+
+
+
+

28.5 Further Information about JAX-WS

+
+
+

For more information about JAX-WS and related technologies, see

+
+
+
    +
  • +

    Java API for XML Web Services 2.2 specification:

    +
    +

    http://jcp.org/en/jsr/detail?id=224

    +
    +
  • +
  • +

    JAX-WS home:

    +
    +

    https://jax-ws.java.net/

    +
    +
  • +
  • +

    Simple Object Access Protocol (SOAP) 1.2 W3C Note:

    +
    +

    http://www.w3.org/TR/soap/

    +
    +
  • +
  • +

    Web Services Description Language (WSDL) 1.1 W3C Note:

    +
    +

    http://www.w3.org/TR/wsdl

    +
    +
  • +
  • +

    WS-I Basic Profile 1.2 and 2.0:

    +
    +

    http://www.ws-i.org

    +
    +
  • +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/jms-concepts.html b/jms-concepts.html new file mode 100644 index 0000000..0aaa81c --- /dev/null +++ b/jms-concepts.html @@ -0,0 +1,115 @@ + + + + + + Java Message Service Concepts + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

45 Java Message Service Concepts

+
+
+

This chapter provides an introduction to the Java Message Service (JMS) +API, a Java API that allows applications to create, send, receive, and +read messages using reliable, asynchronous, loosely coupled +communication.

+
+
+

The following topics are addressed here:

+
+ +
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/jms-concepts001.html b/jms-concepts001.html new file mode 100644 index 0000000..0a4268d --- /dev/null +++ b/jms-concepts001.html @@ -0,0 +1,311 @@ + + + + + + Overview of the JMS API + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

45.1 Overview of the JMS API

+
+
+

This overview defines the concept of messaging, describes the JMS API +and where it can be used, and explains how the JMS API works within the +Java EE platform.

+
+
+

The following topics are addressed here:

+
+ +
+

45.1.1 What Is Messaging?

+
+

Messaging is a method of communication between software components or +applications. A messaging system is a peer-to-peer facility: A messaging +client can send messages to, and receive messages from, any other +client. Each client connects to a messaging agent that provides +facilities for creating, sending, receiving, and reading messages.

+
+
+

Messaging enables distributed communication that is loosely coupled. A +component sends a message to a destination, and the recipient can +retrieve the message from the destination. What makes the communication +loosely coupled is that the destination is all that the sender and +receiver have in common. The sender and the receiver do not have to be +available at the same time in order to communicate. In fact, the sender +does not need to know anything about the receiver; nor does the receiver +need to know anything about the sender. The sender and the receiver need +to know only which message format and which destination to use. In this +respect, messaging differs from tightly coupled technologies, such as +Remote Method Invocation (RMI), which require an application to know a +remote application’s methods.

+
+
+

Messaging also differs from electronic mail (email), which is a method +of communication between people or between software applications and +people. Messaging is used for communication between software +applications or software components.

+
+
+
+

45.1.2 What Is the JMS API?

+
+

The Java Message Service is a Java API that allows applications to +create, send, receive, and read messages. The JMS API defines a common +set of interfaces and associated semantics that allow programs written +in the Java programming language to communicate with other messaging +implementations.

+
+
+

The JMS API minimizes the set of concepts a programmer must learn in +order to use messaging products but provides enough features to support +sophisticated messaging applications. It also strives to maximize the +portability of JMS applications across JMS providers.

+
+
+

JMS enables communication that is not only loosely coupled but also

+
+
+
    +
  • +

    Asynchronous: A receiving client does not have to receive messages at +the same time the sending client sends them. The sending client can send +them and go on to other tasks; the receiving client can receive them +much later.

    +
  • +
  • +

    Reliable: A messaging provider that implements the JMS API can ensure +that a message is delivered once and only once. Lower levels of +reliability are available for applications that can afford to miss +messages or to receive duplicate messages.

    +
  • +
+
+
+

The current version of the JMS specification is Version 2.0. You can +download a copy of the specification from the Java Community Process +website: http://www.jcp.org/en/jsr/detail?id=343.

+
+
+
+

45.1.3 When Can You Use the JMS API?

+
+

An enterprise application provider is likely to choose a messaging API +over a tightly coupled API, such as a remote procedure call (RPC), under +the following circumstances.

+
+
+
    +
  • +

    The provider wants the components not to depend on information about +other components' interfaces, so components can be easily replaced.

    +
  • +
  • +

    The provider wants the application to run whether or not all +components are up and running simultaneously.

    +
  • +
  • +

    The application business model allows a component to send information +to another and to continue to operate without receiving an immediate +response.

    +
  • +
+
+
+

For example, components of an enterprise application for an automobile +manufacturer can use the JMS API in situations like the following.

+
+
+
    +
  • +

    The inventory component can send a message to the factory component +when the inventory level for a product goes below a certain level so the +factory can make more cars.

    +
  • +
  • +

    The factory component can send a message to the parts components so +the factory can assemble the parts it needs.

    +
  • +
  • +

    The parts components in turn can send messages to their own inventory +and order components to update their inventories and to order new parts +from suppliers.

    +
  • +
  • +

    Both the factory and the parts components can send messages to the +accounting component to update budget numbers.

    +
  • +
  • +

    The business can publish updated catalog items to its sales force.

    +
  • +
+
+
+

Using messaging for these tasks allows the various components to +interact with one another efficiently, without tying up network or other +resources. Figure 45-1 illustrates how this simple example +might work.

+
+
+

Figure 45-1 Messaging in an Enterprise Application

+
+ +
+

Manufacturing is only one example of how an enterprise can use the JMS +API. Retail applications, financial services applications, health +services applications, and many others can make use of messaging.

+
+
+
+

45.1.4 How Does the JMS API Work with the Java EE Platform?

+
+

When the JMS API was first introduced, its most important purpose was to +allow Java applications to access existing messaging-oriented middleware +(MOM) systems. Since that time, many vendors have adopted and +implemented the JMS API, so a JMS product can now provide a complete +messaging capability for an enterprise.

+
+
+

The JMS API is an integral part of the Java EE platform, and application +developers can use messaging with Java EE components. JMS 2.0 is part of +the Java EE 7 release.

+
+
+

The JMS API in the Java EE platform has the following features.

+
+
+
    +
  • +

    Application clients, Enterprise JavaBeans (EJB) components, and web +components can send or synchronously receive a JMS message. Application +clients can in addition set a message listener that allows JMS messages +to be delivered to it asynchronously by being notified when a message is +available.

    +
  • +
  • +

    Message-driven beans, which are a kind of enterprise bean, enable the +asynchronous consumption of messages in the EJB container. An +application server typically pools message-driven beans to implement +concurrent processing of messages.

    +
  • +
  • +

    Message send and receive operations can participate in Java +Transaction API (JTA) transactions, which allow JMS operations and +database accesses to take place within a single transaction.

    +
  • +
+
+
+

The JMS API enhances the other parts of the Java EE platform by +simplifying enterprise development, allowing loosely coupled, reliable, +asynchronous interactions among Java EE components and legacy systems +capable of messaging. A developer can easily add new behavior to a Java +EE application that has existing business events by adding a new +message-driven bean to operate on specific business events. The Java EE +platform, moreover, enhances the JMS API by providing support for JTA +transactions and allowing for the concurrent consumption of messages. +For more information, see the Enterprise JavaBeans specification, v3.2.

+
+
+

The JMS provider can be integrated with the application server using the +Java EE Connector architecture. You access the JMS provider through a +resource adapter. This capability allows vendors to create JMS providers +that can be plugged in to multiple application servers, and it allows +application servers to support multiple JMS providers. For more +information, see the Java EE Connector architecture specification, v1.7.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/jms-concepts002.html b/jms-concepts002.html new file mode 100644 index 0000000..75df203 --- /dev/null +++ b/jms-concepts002.html @@ -0,0 +1,314 @@ + + + + + + Basic JMS API Concepts + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

45.2 Basic JMS API Concepts

+
+
+

This section introduces the most basic JMS API concepts, the ones you +must know to get started writing simple application clients that use the +JMS API.

+
+
+

The next section introduces the JMS API programming model. Later +sections cover more advanced concepts, including the ones you need in +order to write applications that use message-driven beans.

+
+
+

The following topics are addressed here:

+
+ +
+

45.2.1 JMS API Architecture

+
+

A JMS application is composed of the following parts.

+
+
+
    +
  • +

    A JMS provider is a messaging system that implements the JMS +interfaces and provides administrative and control features. An +implementation of the Java EE platform that supports the full profile +includes a JMS provider.

    +
  • +
  • +

    JMS clients are the programs or components, written in the Java +programming language, that produce and consume messages. Any Java EE +application component can act as a JMS client.

    +
    +

    Java SE applications can also act as JMS clients; the Message Queue +Developer’s Guide for Java Clients in the GlassFish Server documentation +(https://glassfish.java.net/docs/) explains how to make this work.

    +
    +
  • +
  • +

    Messages are the objects that communicate information between JMS +clients.

    +
  • +
  • +

    Administered objects are JMS objects configured for the use of +clients. The two kinds of JMS administered objects are destinations and +connection factories, described in JMS +Administered Objects. An administrator can create objects that are +available to all applications that use a particular installation of +GlassFish Server; alternatively, a developer can use annotations to +create objects that are specific to a particular application.

    +
  • +
+
+
+

Figure 45-2 illustrates the way these parts interact. +Administrative tools or annotations allow you to bind destinations and +connection factories into a JNDI namespace. A JMS client can then use +resource injection to access the administered objects in the namespace +and then establish a logical connection to the same objects through the +JMS provider.

+
+
+

Figure 45-2 JMS API Architecture

+
+ +
+
+

45.2.2 Messaging Styles

+
+

Before the JMS API existed, most messaging products supported either the +point-to-point or the publish/subscribe style of messaging. The JMS +specification defines compliance for each style. A JMS provider must +implement both styles, and the JMS API provides interfaces that are +specific to each. The following subsections describe these messaging +styles.

+
+
+

The JMS API, however, makes it unnecessary to use only one of the two +styles. It allows you to use the same code to send and receive messages +using either the PTP or the pub/sub style. The destinations you use +remain specific to one style, and the behavior of the application will +depend in part on whether you are using a queue or a topic. However, the +code itself can be common to both styles, making your applications +flexible and reusable. This tutorial describes and illustrates this +coding approach, using the greatly simplified API provided by JMS 2.0.

+
+
+

45.2.2.1 Point-to-Point Messaging Style

+
+

A point-to-point (PTP) product or application is built on the concept of +message queues, senders, and receivers. Each message is addressed to a +specific queue, and receiving clients extract messages from the queues +established to hold their messages. Queues retain all messages sent to +them until the messages are consumed or expire.

+
+
+

PTP messaging, illustrated in Figure 45-3, has the +following characteristics.

+
+
+
    +
  • +

    Each message has only one consumer.

    +
  • +
  • +

    The receiver can fetch the message whether or not it was running when +the client sent the message.

    +
  • +
+
+
+

Figure 45-3 Point-to-Point Messaging

+
+ +
+

Use PTP messaging when every message you send must be processed +successfully by one consumer.

+
+
+
+

45.2.2.2 Publish/Subscribe Messaging Style

+
+

In a publish/subscribe (pub/sub) product or application, clients address +messages to a topic, which functions somewhat like a bulletin board. +Publishers and subscribers can dynamically publish or subscribe to the +topic. The system takes care of distributing the messages arriving from +a topic’s multiple publishers to its multiple subscribers. Topics retain +messages only as long as it takes to distribute them to subscribers.

+
+
+

With pub/sub messaging, it is important to distinguish between the +consumer that subscribes to a topic (the subscriber) and the +subscription that is created. The consumer is a JMS object within an +application, while the subscription is an entity within the JMS +provider. Normally, a topic can have many consumers, but a subscription +has only one subscriber. It is possible, however, to create shared +subscriptions; see Creating Shared +Subscriptions for details. See +Consuming Messages from Topics for +details on the semantics of pub/sub messaging.

+
+
+

Pub/sub messaging has the following characteristics.

+
+
+
    +
  • +

    Each message can have multiple consumers.

    +
  • +
  • +

    A client that subscribes to a topic can consume only messages sent +after the client has created a subscription, and the consumer must +continue to be active in order for it to consume messages.

    +
    +

    The JMS API relaxes this requirement to some extent by allowing +applications to create durable subscriptions, which receive messages +sent while the consumers are not active. Durable subscriptions provide +the flexibility and reliability of queues but still allow clients to +send messages to many recipients. For more information about durable +subscriptions, see Creating Durable +Subscriptions.

    +
    +
  • +
+
+
+

Use pub/sub messaging when each message can be processed by any number +of consumers (or none). Figure 45-4 illustrates pub/sub +messaging.

+
+
+

Figure 45-4 Publish/Subscribe Messaging

+
+ +
+
+
+

45.2.3 Message Consumption

+
+

Messaging products are inherently asynchronous: There is no fundamental +timing dependency between the production and the consumption of a +message. However, the JMS specification uses this term in a more precise +sense. Messages can be consumed in either of two ways.

+
+
+
    +
  • +

    Synchronously: A consumer explicitly fetches the message from the +destination by calling the receive method. The receive method can +block until a message arrives or can time out if a message does not +arrive within a specified time limit.

    +
  • +
  • +

    Asynchronously: An application client or a Java SE client can register +a message listener with a consumer. A message listener is similar to an +event listener. Whenever a message arrives at the destination, the JMS +provider delivers the message by calling the listener’s onMessage +method, which acts on the contents of the message. In a Java EE +application, a message-driven bean serves as a message listener (it too +has an onMessage method), but a client does not need to register it +with a consumer.

    +
  • +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/jms-concepts003.html b/jms-concepts003.html new file mode 100644 index 0000000..2bd2ca6 --- /dev/null +++ b/jms-concepts003.html @@ -0,0 +1,1307 @@ + + + + + + The JMS API Programming Model + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

45.3 The JMS API Programming Model

+
+
+

The basic building blocks of a JMS application are

+
+
+
    +
  • +

    Administered objects: connection factories and destinations

    +
  • +
  • +

    Connections

    +
  • +
  • +

    Sessions

    +
  • +
  • +

    JMSContext objects, which combine a connection and a session in one +object

    +
  • +
  • +

    Message producers

    +
  • +
  • +

    Message consumers

    +
  • +
  • +

    Messages

    +
  • +
+
+
+

Figure 45-5 shows how all these objects fit together in a +JMS client application.

+
+
+

Figure 45-5 The JMS API Programming Model

+
+ +
+

JMS also provides queue browsers, objects that allow an application to +browse messages on a queue.

+
+
+

This section describes all these objects briefly and provides sample +commands and code snippets that show how to create and use the objects. +The last subsection briefly describes JMS API exception handling.

+
+
+

Examples that show how to combine all these objects in applications +appear in Chapter 46, "Java Message Service +Examples," beginning with Writing Simple +JMS Applications. For more detail, see the JMS API documentation, part +of the Java EE API documentation.

+
+
+

45.3.1 JMS Administered Objects

+
+

Two parts of a JMS application, destinations and connection factories, +are commonly maintained administratively rather than programmatically. +The technology underlying these objects is likely to be very different +from one implementation of the JMS API to another. Therefore, the +management of these objects belongs with other administrative tasks that +vary from provider to provider.

+
+
+

JMS clients access administered objects through interfaces that are +portable, so a client application can run with little or no change on +more than one implementation of the JMS API. Ordinarily, an +administrator configures administered objects in a JNDI namespace, and +JMS clients then access them by using resource injection.

+
+
+

With GlassFish Server, you can use the asadmin create-jms-resource +command or the Administration Console to create JMS administered objects +in the form of connector resources. You can also specify the resources +in a file named glassfish-resources.xml that you can bundle with an +application.

+
+
+

NetBeans IDE provides a wizard that allows you to create JMS resources +for GlassFish Server. See Creating JMS +Administered Objects for details.

+
+
+

The Java EE platform specification allows a developer to create +administered objects using annotations or deployment descriptor +elements. Objects created in this way are specific to the application +for which they are created. See +Creating Resources for Java EE +Applications for details. Definitions in a deployment descriptor +override those specified by annotations.

+
+
+

45.3.1.1 JMS Connection Factories

+
+

A connection factory is the object a client uses to create a connection +to a provider. A connection factory encapsulates a set of connection +configuration parameters that has been defined by an administrator. Each +connection factory is an instance of the ConnectionFactory, +QueueConnectionFactory, or TopicConnectionFactory interface. To +learn how to create connection factories, see +Creating JMS Administered Objects.

+
+
+

At the beginning of a JMS client program, you usually inject a +connection factory resource into a ConnectionFactory object. A Java EE +server must provide a JMS connection factory with the logical JNDI name +java:comp/DefaultJMSConnectionFactory. The actual JNDI name will be +implementation-specific.

+
+
+

For example, the following code fragment looks up the default JMS +connection factory and assigns it to a ConnectionFactory object:

+
+
+
+
@Resource(lookup = "java:comp/DefaultJMSConnectionFactory")
+private static ConnectionFactory connectionFactory;
+
+
+
+
+

45.3.1.2 JMS Destinations

+
+

A destination is the object a client uses to specify the target of +messages it produces and the source of messages it consumes. In the PTP +messaging style, destinations are called queues. In the pub/sub +messaging style, destinations are called topics. A JMS application can +use multiple queues or topics (or both). To learn how to create +destination resources, see Creating JMS +Administered Objects.

+
+
+

To create a destination using GlassFish Server, you create a JMS +destination resource that specifies a JNDI name for the destination.

+
+
+

In the GlassFish Server implementation of JMS, each destination resource +refers to a physical destination. You can create a physical destination +explicitly, but if you do not, the Application Server creates it when it +is needed and deletes it when you delete the destination resource.

+
+
+

In addition to injecting a connection factory resource into a client +program, you usually inject a destination resource. Unlike connection +factories, destinations are specific to either the PTP or pub/sub +messaging style. To create an application that allows you to use the +same code for both topics and queues, you assign the destination to a +Destination object.

+
+
+

The following code specifies two resources, a queue and a topic. The +resource names are mapped to destination resources created in the JNDI +namespace:

+
+
+
+
@Resource(lookup = "jms/MyQueue")
+private static Queue queue;
+
+@Resource(lookup = "jms/MyTopic")
+private static Topic topic;
+
+
+
+

In a Java EE application, JMS administered objects are normally placed +in the jms naming subcontext.

+
+
+

With the common interfaces, you can mix or match connection factories +and destinations. That is, in addition to using the ConnectionFactory +interface, you can inject a QueueConnectionFactory resource and use it +with a Topic, and you can inject a TopicConnectionFactory resource +and use it with a Queue. The behavior of the application will depend +on the kind of destination you use and not on the kind of connection +factory you use.

+
+
+
+
+

45.3.2 Connections

+
+

A connection encapsulates a virtual connection with a JMS provider. For +example, a connection could represent an open TCP/IP socket between a +client and a provider service daemon. You use a connection to create one +or more sessions.

+
+
+
+
+
+
+
+ +++ + + + + + +
+

Note:

+
+
+

In the Java EE platform, the ability to create multiple sessions from a +single connection is limited to application clients. In web and +enterprise bean components, a connection can create no more than one +session.

+
+
+
+
+
+
+
+
+

You normally create a connection by creating a JMSContext object. See +JMSContext Objects for details.

+
+
+
+

45.3.3 Sessions

+
+

A session is a single-threaded context for producing and consuming +messages.

+
+
+

You normally create a session (as well as a connection) by creating a +JMSContext object. See JMSContext Objects for details. +You use sessions to create message producers, message consumers, +messages, queue browsers, and temporary destinations.

+
+
+

Sessions serialize the execution of message listeners; for details, see +JMS Message Listeners.

+
+
+

A session provides a transactional context with which to group a set of +sends and receives into an atomic unit of work. For details, see +Using JMS Local Transactions.

+
+
+
+

45.3.4 JMSContext Objects

+
+

A JMSContext object combines a connection and a session in a single +object. That is, it provides both an active connection to a JMS provider +and a single-threaded context for sending and receiving messages.

+
+
+

You use the JMSContext to create the following objects:

+
+
+ +
+
+

You can create a JMSContext in a try-with-resources block.

+
+
+

To create a JMSContext, call the createContext method on the +connection factory:

+
+
+
+
JMSContext context = connectionFactory.createContext();
+
+
+
+

When called with no arguments from an application client or a Java SE +client, or from the Java EE web or EJB container when there is no active +JTA transaction in progress, the createContext method creates a +non-transacted session with an acknowledgment mode of +JMSContext.AUTO_ACKNOWLEDGE. When called with no arguments from the +web or EJB container when there is an active JTA transaction in +progress, the createContext method creates a transacted session. For +information about the way JMS transactions work in Java EE applications, +see Using the JMS API in Java EE +Applications.

+
+
+

From an application client or a Java SE client, you can also call the +createContext method with the argument JMSContext.SESSION_TRANSACTED +to create a transacted session:

+
+
+
+
JMSContext context =
+        connectionFactory.createContext(JMSContext.SESSION_TRANSACTED);
+
+
+
+

The session uses local transactions; see +Using JMS Local Transactions for +details.

+
+
+

Alternatively, you can specify a non-default acknowledgment mode; see +Controlling Message Acknowledgment for +more information.

+
+
+

When you use a JMSContext, message delivery normally begins as soon as +you create a consumer. See JMS Message Consumers for more +information.

+
+
+

If you create a JMSContext in a try-with-resources block, you do not +need to close it explicitly. It will be closed when the try block +comes to an end. Make sure that your application completes all its JMS +activity within the try-with-resources block. If you do not use a +try-with-resources block, you must call the close method on the +JMSContext to close the connection when the application has finished +its work.

+
+
+
+

45.3.5 JMS Message Producers

+
+

A message producer is an object that is created by a JMSContext or a +session and used for sending messages to a destination. A message +producer created by a JMSContext implements the JMSProducer +interface. You could create it this way:

+
+
+
+
try (JMSContext context = connectionFactory.createContext();) {
+    JMSProducer producer = context.createProducer();
+    ...
+
+
+
+

However, a JMSProducer is a lightweight object that does not consume +significant resources. For this reason, you do not need to save the +JMSProducer in a variable; you can create a new one each time you send +a message. You send messages to a specific destination by using the +send method. For example:

+
+
+
+
context.createProducer().send(dest, message);
+
+
+
+

You can create the message in a variable before sending it, as shown +here, or you can create it within the send call. See JMS +Messages for more information.

+
+
+
+

45.3.6 JMS Message Consumers

+
+

A message consumer is an object that is created by a JMSContext or a +session and used for receiving messages sent to a destination. A message +producer created by a JMSContext implements the JMSConsumer +interface. The simplest way to create a message consumer is to use the +JMSContext.createConsumer method:

+
+
+
+
try (JMSContext context = connectionFactory.createContext();) {
+    JMSConsumer consumer = context.createConsumer(dest);
+    ...
+
+
+
+

A message consumer allows a JMS client to register interest in a +destination with a JMS provider. The JMS provider manages the delivery +of messages from a destination to the registered consumers of the +destination.

+
+
+

When you use a JMSContext to create a message consumer, message +delivery begins as soon as you have created the consumer. You can +disable this behavior by calling setAutoStart(false) when you create +the JMSContext and then calling the start method explicitly to start +message delivery. If you want to stop message delivery temporarily +without closing the connection, you can call the stop method; to +restart message delivery, call start.

+
+
+

You use the receive method to consume a message synchronously. You can +use this method at any time after you create the consumer.

+
+
+

If you specify no arguments or an argument of 0, the method blocks +indefinitely until a message arrives:

+
+
+
+
Message m = consumer.receive();
+Message m = consumer.receive(0);
+
+
+
+

For a simple client, this may not matter. But if it is possible that a +message might not be available, use a synchronous receive with a +timeout: Call the receive method with a timeout argument greater than +0. One second is a recommended timeout value:

+
+
+
+
Message m = consumer.receive(1000); // time out after a second
+
+
+
+

To enable asynchronous message delivery from an application client or a +Java SE client, you use a message listener, as described in the next +section.

+
+
+

You can use the JMSContext.createDurableConsumer method to create a +durable topic subscription. This method is valid only if you are using a +topic. For details, see Creating Durable Subscriptions. For +topics, you can also create shared consumers; see +Creating Shared Subscriptions.

+
+
+

45.3.6.1 JMS Message Listeners

+
+

A message listener is an object that acts as an asynchronous event +handler for messages. This object implements the MessageListener +interface, which contains one method, onMessage. In the onMessage +method, you define the actions to be taken when a message arrives.

+
+
+

From an application client or a Java SE client, you register the message +listener with a specific message consumer by using the +setMessageListener method. For example, if you define a class named +Listener that implements the MessageListener interface, you can +register the message listener as follows:

+
+
+
+
Listener myListener = new Listener();
+consumer.setMessageListener(myListener);
+
+
+
+

When message delivery begins, the JMS provider automatically calls the +message listener’s onMessage method whenever a message is delivered. +The onMessage method takes one argument of type Message, which your +implementation of the method can cast to another message subtype as +needed (see Message Bodies).

+
+
+

In the Java EE web or EJB container, you use message-driven beans for +asynchronous message delivery. A message-driven bean also implements the +MessageListener interface and contains an onMessage method. For +details, see Using Message-Driven Beans +to Receive Messages Asynchronously.

+
+
+

Your onMessage method should handle all exceptions. Throwing a +RuntimeException is considered a programming error.

+
+
+

For a simple example of the use of a message listener, see +Using a Message Listener for Asynchronous +Message Delivery. Chapter 46, "Java Message +Service Examples," contains several more examples of message listeners +and message-driven beans.

+
+
+
+

45.3.6.2 JMS Message Selectors

+
+

If your messaging application needs to filter the messages it receives, +you can use a JMS message selector, which allows a message consumer for +a destination to specify the messages that interest it. Message +selectors assign the work of filtering messages to the JMS provider +rather than to the application. For an example of an application that +uses a message selector, see Sending +Messages from a Session Bean to an MDB.

+
+
+

A message selector is a String that contains an expression. The syntax +of the expression is based on a subset of the SQL92 conditional +expression syntax. The message selector in the example selects any +message that has a NewsType property that is set to the value +'Sports' or 'Opinion':

+
+
+
+
NewsType = 'Sports' OR NewsType = 'Opinion'
+
+
+
+

The createConsumer and createDurableConsumer methods, as well as the +methods for creating shared consumers, allow you to specify a message +selector as an argument when you create a message consumer.

+
+
+

The message consumer then receives only messages whose headers and +properties match the selector. (See Message Headers and +Message Properties.) A message selector cannot select +messages on the basis of the content of the message body.

+
+
+
+

45.3.6.3 Consuming Messages from Topics

+
+

The semantics of consuming messages from topics are more complex than +the semantics of consuming messages from queues.

+
+
+

An application consumes messages from a topic by creating a subscription +on that topic and creating a consumer on that subscription. +Subscriptions may be durable or nondurable, and they may be shared or +unshared.

+
+
+

A subscription may be thought of as an entity within the JMS provider +itself, whereas a consumer is a JMS object within the application.

+
+
+

A subscription will receive a copy of every message that is sent to the +topic after the subscription is created, unless a message selector is +specified. If a message selector is specified, only those messages whose +properties match the message selector will be added to the subscription.

+
+
+

Unshared subscriptions are restricted to a single consumer. In this +case, all the messages in the subscription are delivered to that +consumer. Shared subscriptions allow multiple consumers. In this case, +each message in the subscription is delivered to only one consumer. JMS +does not define how messages are distributed between multiple consumers +on the same subscription.

+
+
+

Subscriptions may be durable or nondurable.

+
+
+

A nondurable subscription exists only as long as there is an active +consumer on the subscription. This means that any messages sent to the +topic will be added to the subscription only while a consumer exists and +is not closed.

+
+
+

A nondurable subscription may be either unshared or shared.

+
+
+
    +
  • +

    An unshared nondurable subscription does not have a name and may have +only a single consumer object associated with it. It is created +automatically when the consumer object is created. It is not persisted +and is deleted automatically when the consumer object is closed.

    +
    +

    The JMSContext.createConsumer method creates a consumer on an unshared +nondurable subscription if a topic is specified as the destination.

    +
    +
  • +
  • +

    A shared nondurable subscription is identified by name and an optional +client identifier, and may have several consumer objects consuming +messages from it. It is created automatically when the first consumer +object is created. It is not persisted and is deleted automatically when +the last consumer object is closed. See Creating Shared +Subscriptions for more information.

    +
  • +
+
+
+

At the cost of higher overhead, a subscription may be durable. A durable +subscription is persisted and continues to accumulate messages until +explicitly deleted, even if there are no consumer objects consuming +messages from it. See Creating Durable Subscriptions for +details.

+
+
+
+

45.3.6.4 Creating Durable Subscriptions

+
+

To ensure that a pub/sub application receives all sent messages, use +durable subscriptions for the consumers on the topic.

+
+
+

Like a nondurable subscription, a durable subscription may be either +unshared or shared.

+
+
+
    +
  • +

    An unshared durable subscription is identified by name and client +identifier (which must be set) and may have only a single consumer +object associated with it.

    +
  • +
  • +

    A shared durable subscription is identified by name and an optional +client identifier, and may have several consumer objects consuming +messages from it.

    +
  • +
+
+
+

A durable subscription that exists but that does not currently have a +non-closed consumer object associated with it is described as being +inactive.

+
+
+

You can use the JMSContext.createDurableConsumer method to create a +consumer on an unshared durable subscription. An unshared durable +subscription can have only one active consumer at a time.

+
+
+

A consumer identifies the durable subscription from which it consumes +messages by specifying a unique identity that is retained by the JMS +provider. Subsequent consumer objects that have the same identity resume +the subscription in the state in which it was left by the preceding +consumer. If a durable subscription has no active consumer, the JMS +provider retains the subscription’s messages until they are received by +the subscription or until they expire.

+
+
+

You establish the unique identity of an unshared durable subscription by +setting the following:

+
+
+
    +
  • +

    A client ID for the connection

    +
  • +
  • +

    A topic and a subscription name for the subscription

    +
  • +
+
+
+

You can set the client ID administratively for a client-specific +connection factory using either the command line or the Administration +Console. (In an application client or a Java SE client, you can instead +call JMSContext.setClientID.)

+
+
+

After using this connection factory to create the JMSContext, you call +the createDurableConsumer method with two arguments: the topic and a +string that specifies the name of the subscription:

+
+
+
+
String subName = "MySub";
+JMSConsumer consumer = context.createDurableConsumer(myTopic, subName);
+
+
+
+

The subscription becomes active after you create the consumer. Later, +you might close the consumer:

+
+
+
+
consumer.close();
+
+
+
+

The JMS provider stores the messages sent to the topic, as it would +store messages sent to a queue. If the program or another application +calls createDurableConsumer using the same connection factory and its +client ID, the same topic, and the same subscription name, then the +subscription is reactivated and the JMS provider delivers the messages +that were sent while the subscription was inactive.

+
+
+

To delete a durable subscription, first close the consumer, then call +the unsubscribe method with the subscription name as the argument:

+
+
+
+
consumer.close();
+context.unsubscribe(subName);
+
+
+
+

The unsubscribe method deletes the state the provider maintains for +the subscription.

+
+
+

Figure 45-6 and Figure 45-7 show the +difference between a nondurable and a durable subscription. With an +ordinary, nondurable subscription, the consumer and the subscription +begin and end at the same point and are, in effect, identical. When the +consumer is closed, the subscription also ends. Here, create stands +for a call to JMSContext.createConsumer with a Topic argument, and +close stands for a call to JMSConsumer.close. Any messages sent to +the topic between the time of the first close and the time of the +second create are not added to either subscription. In +Figure 45-6, the consumers receive messages M1, M2, M5, and +M6, but they do not receive messages M3 and M4.

+
+
+

Figure 45-6 Nondurable Subscriptions and Consumers

+
+ +
+

With a durable subscription, the consumer can be closed and re-created, +but the subscription continues to exist and to hold messages until the +application calls the unsubscribe method. In Figure 45-7, +create stands for a call to JMSContext.createDurableConsumer, +close stands for a call to JMSConsumer.close, and unsubscribe +stands for a call to JMSContext.unsubscribe. Messages sent after the +first consumer is closed are received when the second consumer is +created (on the same durable subscription), so even though messages M2, +M4, and M5 arrive while there is no consumer, they are not lost.

+
+
+

Figure 45-7 Consumers on a Durable Subscription

+
+ +
+

A shared durable subscription allows you to use multiple consumers to +receive messages from a durable subscription. If you use a shared +durable subscription, the connection factory you use does not need to +have a client identifier. To create a shared durable subscription, call +the JMSContext.createSharedDurableConsumer method, specifying the +topic and subscription name:

+
+
+
+
JMSConsumer consumer =
+        context.createSharedDurableConsumer(topic, "MakeItLast");
+
+
+
+

See Acknowledging Messages, +Using Durable Subscriptions, +Using Shared Durable Subscriptions, +and Sending Messages from a Session Bean +to an MDB for examples of Java EE applications that use durable +subscriptions.

+
+
+
+

45.3.6.5 Creating Shared Subscriptions

+
+

A topic subscription created by the createConsumer or +createDurableConsumer method can have only one consumer (although a +topic can have many). Multiple clients consuming from the same topic +have, by definition, multiple subscriptions to the topic, and all the +clients receive all the messages sent to the topic (unless they filter +them with message selectors).

+
+
+

It is, however, possible to create a nondurable shared subscription to a +topic by using the createSharedConsumer method and specifying not only +a destination but a subscription name:

+
+
+
+
consumer = context.createSharedConsumer(topicName, "SubName");
+
+
+
+

With a shared subscription, messages will be distributed among multiple +clients that use the same topic and subscription name. Each message sent +to the topic will be added to every subscription (subject to any message +selectors), but each message added to a subscription will be delivered +to only one of the consumers on that subscription, so it will be +received by only one of the clients. A shared subscription can be useful +if you want to share the message load among several consumers on the +subscription rather than having just one consumer on the subscription +receive each message. This feature can improve the scalability of Java +EE application client applications and Java SE applications. +(Message-driven beans share the work of processing messages from a topic +among multiple threads.)

+
+
+

See Using Shared Nondurable +Subscriptions for a simple example of using shared nondurable +consumers.

+
+
+

You can also create shared durable subscriptions by using the +JMSContext.createSharedDurableConsumer method. For details, see +Creating Durable Subscriptions.

+
+
+
+
+

45.3.7 JMS Messages

+
+

The ultimate purpose of a JMS application is to produce and consume +messages that can then be used by other software applications. JMS +messages have a basic format that is simple but highly flexible, +allowing you to create messages that match formats used by non-JMS +applications on heterogeneous platforms.

+
+
+

A JMS message can have three parts: a header, properties, and a body. +Only the header is required. The following sections describe these +parts.

+
+
+

For complete documentation of message headers, properties, and bodies, +see the documentation of the Message interface in the API +documentation. For a list of possible message types, see +Message Bodies.

+
+
+

The following topics are addressed here:

+
+ +
+

45.3.7.1 Message Headers

+
+

A JMS message header contains a number of predefined fields that contain +values used by both clients and providers to identify and route +messages. Table 45-1 lists and describes the JMS message +header fields and indicates how their values are set. For example, every +message has a unique identifier, which is represented in the header +field JMSMessageID. The value of another header field, +JMSDestination, represents the queue or the topic to which the message +is sent. Other fields include a timestamp and a priority level.

+
+
+

Each header field has associated setter and getter methods, which are +documented in the description of the Message interface. Some header +fields are intended to be set by a client, but many are set +automatically by the send method, which overrides any client-set +values.

+
+
+

+
+
+

Table 45-1 How JMS Message Header Field Values Are Set

+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Header FieldDescriptionSet By

JMSDestination

Destination to which the message is being sent

JMS +provider send method

JMSDeliveryMode

Delivery mode specified when the message was sent +(see Specifying Message Persistence)

JMS provider send method

JMSDeliveryTime

The time the message was sent plus the delivery +delay specified when the message was sent (see +Specifying a Delivery Delay

JMS +provider send method

JMSExpiration

Expiration time of the message (see +Allowing Messages to Expire)

JMS +provider send method

JMSPriority

The priority of the message (see +Setting Message Priority Levels)

JMS +provider send method

JMSMessageID

Value that uniquely identifies each message sent by a +provider

JMS provider send method

JMSTimestamp

The time the message was handed off to a provider to be +sent

JMS provider send method

JMSCorrelationID

Value that links one message to another; commonly +the JMSMessageID value is used

Client application

JMSReplyTo

Destination where replies to the message should be sent

Client application

JMSType

Type identifier supplied by client application

Client +application

JMSRedelivered

Whether the message is being redelivered

JMS +provider prior to delivery

+
+
+
+
+
+
+
+
+

45.3.7.2 Message Properties

+
+

You can create and set properties for messages if you need values in +addition to those provided by the header fields. You can use properties +to provide compatibility with other messaging systems, or you can use +them to create message selectors (see JMS Message +Selectors). For an example of setting a property to be used as a +message selector, see Sending Messages +from a Session Bean to an MDB.

+
+
+

The JMS API provides some predefined property names that begin with +JMSX. A JMS provider is required to implement only one of these, +JMSXDeliveryCount (which specifies the number of times a message has +been delivered); the rest are optional. The use of these predefined +properties or of user-defined properties in applications is optional.

+
+
+
+

45.3.7.3 Message Bodies

+
+

The JMS API defines six different types of messages. Each message type +corresponds to a different message body. These message types allow you +to send and receive data in many different forms. Table +45-2 describes these message types.

+
+
+

+
+
+

Table 45-2 JMS Message Types

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Message TypeBody Contains

TextMessage

A java.lang.String object (for example, the contents +of an XML file).

MapMessage

A set of name-value pairs, with names as String objects +and values as primitive types in the Java programming language. The +entries can be accessed sequentially by enumerator or randomly by name. +The order of the entries is undefined.

BytesMessage

A stream of uninterpreted bytes. This message type is +for literally encoding a body to match an existing message format.

StreamMessage

A stream of primitive values in the Java programming +language, filled and read sequentially.

ObjectMessage

A Serializable object in the Java programming +language.

Message

Nothing. Composed of header fields and properties only. This +message type is useful when a message body is not required.

+
+
+
+
+
+
+
+

The JMS API provides methods for creating messages of each type and for +filling in their contents. For example, to create and send a +TextMessage, you might use the following statements:

+
+
+
+
TextMessage message = context.createTextMessage();
+message.setText(msg_text);     // msg_text is a String
+context.createProducer().send(message);
+
+
+
+

At the consuming end, a message arrives as a generic Message object. +You can then cast the object to the appropriate message type and use +more specific methods to access the body and extract the message +contents (and its headers and properties if needed). For example, you +might use the stream-oriented read methods of BytesMessage. You must +always cast to the appropriate message type to retrieve the body of a +StreamMessage.

+
+
+

Instead of casting the message to a message type, you can call the +getBody method on the Message, specifying the type of the message as +an argument. For example, you can retrieve a TextMessage as a +String. The following code fragment uses the getBody method:

+
+
+
+
Message m = consumer.receive();
+if (m instanceof TextMessage) {
+    String message = m.getBody(String.class);
+    System.out.println("Reading message: " + message);
+} else {
+    // Handle error or process another message type
+}
+
+
+
+

The JMS API provides shortcuts for creating and receiving a +TextMessage, BytesMessage, MapMessage, or ObjectMessage. For +example, you do not have to wrap a string in a TextMessage; instead, +you can send and receive the string directly. For example, you can send +a string as follows:

+
+
+
+
String message = "This is a message";
+context.createProducer().send(dest, message);
+
+
+
+

You can receive the message by using the receiveBody method:

+
+
+
+
String message = receiver.receiveBody(String.class);
+
+
+
+

You can use the receiveBody method to receive any type of message +except StreamMessage and Message, as long as the body of the message +can be assigned to a particular type.

+
+
+

An empty Message can be useful if you want to send a message that is +simply a signal to the application. Some of the examples in +Chapter 46, "Java Message Service +Examples," send an empty message after sending a series of text +messages. For example:

+
+
+
+
context.createProducer().send(dest, context.createMessage());
+
+
+
+

The consumer code can then interpret a non-text message as a signal that +all the messages sent have now been received.

+
+
+

The examples in Chapter 46, "Java Message +Service Examples," use messages of type TextMessage, MapMessage, +and Message.

+
+
+
+
+

45.3.8 JMS Queue Browsers

+
+

Messages sent to a queue remain in the queue until the message consumer +for that queue consumes them. The JMS API provides a QueueBrowser +object that allows you to browse the messages in the queue and display +the header values for each message. To create a QueueBrowser object, +use the JMSContext.createBrowser method. For example:

+
+
+
+
QueueBrowser browser = context.createBrowser(queue);
+
+
+
+

See Browsing Messages on a Queue for an +example of using a QueueBrowser object.

+
+
+

The createBrowser method allows you to specify a message selector as a +second argument when you create a QueueBrowser. For information on +message selectors, see JMS Message Selectors.

+
+
+

The JMS API provides no mechanism for browsing a topic. Messages usually +disappear from a topic as soon as they appear: If there are no message +consumers to consume them, the JMS provider removes them. Although +durable subscriptions allow messages to remain on a topic while the +message consumer is not active, JMS does not define any facility for +examining them.

+
+
+
+

45.3.9 JMS Exception Handling

+
+

The root class for all checked exceptions in the JMS API is +JMSException. The root cause for all unchecked exceptions in the JMS +API is JMSRuntimeException.

+
+
+

Catching JMSException and JMSRuntimeException provides a generic way +of handling all exceptions related to the JMS API.

+
+
+

The JMSException and JMSRuntimeException classes include the +following subclasses, described in the API documentation:

+
+
+
    +
  • +

    IllegalStateException, IllegalStateRuntimeException

    +
  • +
  • +

    InvalidClientIDException, InvalidClientIDRuntimeException

    +
  • +
  • +

    InvalidDestinationException, InvalidDestinationRuntimeException

    +
  • +
  • +

    InvalidSelectorException, InvalidSelectorRuntimeException

    +
  • +
  • +

    JMSSecurityException, JMSSecurityRuntimeException

    +
  • +
  • +

    MessageEOFException

    +
  • +
  • +

    MessageFormatException, MessageFormatRuntimeException

    +
  • +
  • +

    MessageNotReadableException

    +
  • +
  • +

    MessageNotWriteableException, MessageNotWriteableRuntimeException

    +
  • +
  • +

    ResourceAllocationException, ResourceAllocationRuntimeException

    +
  • +
  • +

    TransactionInProgressException, +TransactionInProgressRuntimeException

    +
  • +
  • +

    TransactionRolledBackException, +TransactionRolledBackRuntimeException

    +
  • +
+
+
+

All the examples in the tutorial catch and handle JMSException or +JMSRuntimeException when it is appropriate to do so.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/jms-concepts004.html b/jms-concepts004.html new file mode 100644 index 0000000..37f265f --- /dev/null +++ b/jms-concepts004.html @@ -0,0 +1,684 @@ + + + + + + Using Advanced JMS Features + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

45.4 Using Advanced JMS Features

+
+
+

This section explains how to use features of the JMS API to achieve the +level of reliability and performance your application requires. Many +people use JMS in their applications because they cannot tolerate +dropped or duplicate messages and because they require that every +message be received once and only once. The JMS API provides this +functionality.

+
+
+

The most reliable way to produce a message is to send a PERSISTENT +message, and to do so within a transaction.

+
+
+

JMS messages are PERSISTENT by default; PERSISTENT messages will not +be lost in the event of JMS provider failure. For details, see +Specifying Message Persistence.

+
+
+

Transactions allow multiple messages to be sent or received in an atomic +operation. In the Java EE platform they also allow message sends and +receives to be combined with database reads and writes in an atomic +transaction. A transaction is a unit of work into which you can group a +series of operations, such as message sends and receives, so that the +operations either all succeed or all fail. For details, see +Using JMS Local Transactions.

+
+
+

The most reliable way to consume a message is to do so within a +transaction, either from a queue or from a durable subscription to a +topic. For details, see Creating Durable +Subscriptions, Creating Temporary Destinations, and +Using JMS Local Transactions.

+
+
+

Some features primarily allow an application to improve performance. For +example, you can set messages to expire after a certain length of time +(see Allowing Messages to Expire), so that consumers do not +receive unnecessary outdated information. You can send messages +asynchronously; see Sending Messages Asynchronously.

+
+
+

You can also specify various levels of control over message +acknowledgment; see Controlling Message Acknowledgment.

+
+
+

Other features can provide useful capabilities unrelated to reliability. +For example, you can create temporary destinations that last only for +the duration of the connection in which they are created. See +Creating Temporary Destinations for details.

+
+
+

The following sections describe these features as they apply to +application clients or Java SE clients. Some of the features work +differently in the Java EE web or EJB container; in these cases, the +differences are noted here and are explained in detail in +Using the JMS API in Java EE +Applications.

+
+
+

45.4.1 Controlling Message Acknowledgment

+
+

Until a JMS message has been acknowledged, it is not considered to be +successfully consumed. The successful consumption of a message +ordinarily takes place in three stages.

+
+
+
    +
  1. +

    The client receives the message.

    +
  2. +
  3. +

    The client processes the message.

    +
  4. +
  5. +

    The message is acknowledged. Acknowledgment is initiated either by +the JMS provider or by the client, depending on the session +acknowledgment mode.

    +
  6. +
+
+
+

In locally transacted sessions (see Using JMS Local +Transactions), a message is acknowledged when the session is committed. +If a transaction is rolled back, all consumed messages are redelivered.

+
+
+

In a JTA transaction (in the Java EE web or EJB container) a message is +acknowledged when the transaction is committed.

+
+
+

In nontransacted sessions, when and how a message is acknowledged depend +on a value that may be specified as an argument of the createContext +method. The possible argument values are as follows.

+
+
+
    +
  • +

    JMSContext.AUTO_ACKNOWLEDGE: This setting is the default for +application clients and Java SE clients. The JMSContext automatically +acknowledges a client’s receipt of a message either when the client has +successfully returned from a call to receive or when the +MessageListener it has called to process the message returns +successfully.

    +
    +

    A synchronous receive in a JMSContext that is configured to use +auto-acknowledgment is the one exception to the rule that message +consumption is a three-stage process as described earlier. In this case, +the receipt and acknowledgment take place in one step, followed by the +processing of the message.

    +
    +
  • +
  • +

    JMSContext.CLIENT_ACKNOWLEDGE: A client acknowledges a message by +calling the message’s acknowledge method. In this mode, acknowledgment +takes place on the session level: Acknowledging a consumed message +automatically acknowledges the receipt of all messages that have been +consumed by its session. For example, if a message consumer consumes ten +messages and then acknowledges the fifth message delivered, all ten +messages are acknowledged.

    + +++ + + + + + +
    +

    Note:

    +
    +
    +

    In the Java EE platform, the JMSContext.CLIENT_ACKNOWLEDGE setting can +be used only in an application client, not in a web component or +enterprise bean.

    +
    +
    +
    +
     +
    +* `JMSContext.DUPS_OK_ACKNOWLEDGE`: This option instructs the
    +`JMSContext` to lazily acknowledge the delivery of messages. This is
    +likely to result in the delivery of some duplicate messages if the JMS
    +provider fails, so it should be used only by consumers that can tolerate
    +duplicate messages. (If the JMS provider redelivers a message, it must
    +set the value of the `JMSRedelivered` message header to `true`.) This
    +option can reduce session overhead by minimizing the work the session
    +does to prevent duplicates.
    +
    +
    +
  • +
+
+
+

If messages have been received from a queue but not acknowledged when a +JMSContext is closed, the JMS provider retains them and redelivers +them when a consumer next accesses the queue. The provider also retains +unacknowledged messages if an application closes a JMSContext that has +been consuming messages from a durable subscription. (See +Creating Durable Subscriptions.) +Unacknowledged messages that have been received from a nondurable +subscription will be dropped when the JMSContext is closed.

+
+
+

If you use a queue or a durable subscription, you can use the +JMSContext.recover method to stop a nontransacted JMSContext and +restart it with its first unacknowledged message. In effect, the +JMSContext's series of delivered messages is reset to the point after +its last acknowledged message. The messages it now delivers may be +different from those that were originally delivered, if messages have +expired or if higher-priority messages have arrived. For a consumer on a +nondurable subscription, the provider may drop unacknowledged messages +when the JMSContext.recover method is called.

+
+
+

The sample program in Acknowledging +Messages demonstrates two ways to ensure that a message will not be +acknowledged until processing of the message is complete.

+
+
+
+

45.4.2 Specifying Options for Sending Messages

+
+

You can set a number of options when you send a message. These options +enable you to perform the tasks described in the following topics:

+
+
+ +
+
+

45.4.2.1 Specifying Message Persistence

+
+

The JMS API supports two delivery modes specifying whether messages are +lost if the JMS provider fails. These delivery modes are fields of the +DeliveryMode interface.

+
+
+
    +
  • +

    The default delivery mode, PERSISTENT, instructs the JMS provider to +take extra care to ensure that a message is not lost in transit in case +of a JMS provider failure. A message sent with this delivery mode is +logged to stable storage when it is sent.

    +
  • +
  • +

    The NON_PERSISTENT delivery mode does not require the JMS provider +to store the message or otherwise guarantee that it is not lost if the +provider fails.

    +
  • +
+
+
+

To specify the delivery mode, use the setDeliveryMode method of the +JMSProducer interface to set the delivery mode for all messages sent +by that producer.

+
+
+

You can use method chaining to set the delivery mode when you create a +producer and send a message. The following call creates a producer with +a NON_PERSISTENT delivery mode and uses it to send a message:

+
+
+
+
context.createProducer()
+       .setDeliveryMode(DeliveryMode.NON_PERSISTENT).send(dest, msg);
+
+
+
+

If you do not specify a delivery mode, the default is PERSISTENT. +Using the NON_PERSISTENT delivery mode may improve performance and +reduce storage overhead, but you should use it only if your application +can afford to miss messages.

+
+
+
+

45.4.2.2 Setting Message Priority Levels

+
+

You can use message priority levels to instruct the JMS provider to +deliver urgent messages first. Use the setPriority method of the +JMSProducer interface to set the priority level for all messages sent +by that producer.

+
+
+

You can use method chaining to set the priority level when you create a +producer and send a message. For example, the following call sets a +priority level of 7 for a producer and then sends a message:

+
+
+
+
context.createProducer().setPriority(7).send(dest, msg);
+
+
+
+

The ten levels of priority range from 0 (lowest) to 9 (highest). If you +do not specify a priority level, the default level is 4. A JMS provider +tries to deliver higher-priority messages before lower-priority ones, +but does not have to deliver messages in exact order of priority.

+
+
+
+

45.4.2.3 Allowing Messages to Expire

+
+

By default, a message never expires. If a message will become obsolete +after a certain period, however, you may want to set an expiration time. +Use the setTimeToLive method of the JMSProducer interface to set a +default expiration time for all messages sent by that producer.

+
+
+

For example, a message that contains rapidly changing data such as a +stock price will become obsolete after a few minutes, so you might +configure messages to expire after that time.

+
+
+

You can use method chaining to set the time to live when you create a +producer and send a message. For example, the following call sets a time +to live of five minutes for a producer and then sends a message:

+
+
+
+
context.createProducer().setTimeToLive(300000).send(dest, msg);
+
+
+
+

If the specified timeToLive value is 0, the message never expires.

+
+
+

When the message is sent, the specified timeToLive is added to the +current time to give the expiration time. Any message not delivered +before the specified expiration time is destroyed. The destruction of +obsolete messages conserves storage and computing resources.

+
+
+
+

45.4.2.4 Specifying a Delivery Delay

+
+

You can specify a length of time that must elapse after a message is +sent before the JMS provider delivers the message. Use the +setDeliveryDelay method of the JMSProducer interface to set a +delivery delay for all messages sent by that producer.

+
+
+

You can use method chaining to set the delivery delay when you create a +producer and send a message. For example, the following call sets a +delivery delay of 3 seconds for a producer and then sends a message:

+
+
+
+
context.createProducer().setDeliveryDelay(3000).send(dest, msg);
+
+
+
+
+

45.4.2.5 Using JMSProducer Method Chaining

+
+

The setter methods on the JMSProducer interface return JMSProducer +objects, so you can use method chaining to create a producer, set +multiple properties, and send a message. For example, the following +chained method calls create a producer, set a user-defined property, set +the expiration, delivery mode, and priority for the message, and then +send a message to a queue:

+
+
+
+
context.createProducer()
+        .setProperty("MyProperty", "MyValue")
+        .setTimeToLive(10000)
+        .setDeliveryMode(NON_PERSISTENT)
+        .setPriority(2)
+        .send(queue, body);
+
+
+
+

You can also call the JMSProducer methods to set properties on a +message and then send the message in a separate send method call. You +can also set message properties directly on a message.

+
+
+
+
+

45.4.3 Creating Temporary Destinations

+
+

Normally, you create JMS destinations (queues and topics) +administratively rather than programmatically. Your JMS provider +includes a tool to create and remove destinations, and it is common for +destinations to be long-lasting.

+
+
+

The JMS API also enables you to create destinations (TemporaryQueue +and TemporaryTopic objects) that last only for the duration of the +connection in which they are created. You create these destinations +dynamically using the JMSContext.createTemporaryQueue and the +JMSContext.createTemporaryTopic methods, as in the following example:

+
+
+
+
TemporaryTopic replyTopic = context.createTemporaryTopic();
+
+
+
+

The only message consumers that can consume from a temporary destination +are those created by the same connection that created the destination. +Any message producer can send to the temporary destination. If you close +the connection to which a temporary destination belongs, the destination +is closed and its contents are lost.

+
+
+

You can use temporary destinations to implement a simple request/reply +mechanism. If you create a temporary destination and specify it as the +value of the JMSReplyTo message header field when you send a message, +then the consumer of the message can use the value of the JMSReplyTo +field as the destination to which it sends a reply. The consumer can +also reference the original request by setting the JMSCorrelationID +header field of the reply message to the value of the JMSMessageID +header field of the request. For example, an onMessage method can +create a JMSContext so that it can send a reply to the message it +receives. It can use code such as the following:

+
+
+
+
replyMsg = context.createTextMessage("Consumer processed message: "
+        + msg.getText());
+replyMsg.setJMSCorrelationID(msg.getJMSMessageID());
+context.createProducer().send((Topic) msg.getJMSReplyTo(), replyMsg);
+
+
+ +
+
+

45.4.4 Using JMS Local Transactions

+
+

A transaction groups a series of operations into an atomic unit of work. +If any one of the operations fails, the transaction can be rolled back, +and the operations can be attempted again from the beginning. If all the +operations succeed, the transaction can be committed.

+
+
+

In an application client or a Java SE client, you can use local +transactions to group message sends and receives. You use the +JMSContext.commit method to commit a transaction. You can send +multiple messages in a transaction, and the messages will not be added +to the queue or topic until the transaction is committed. If you receive +multiple messages in a transaction, they will not be acknowledged until +the transaction is committed.

+
+
+

You can use the JMSContext.rollback method to roll back a transaction. +A transaction rollback means that all produced messages are destroyed +and all consumed messages are recovered and redelivered unless they have +expired (see Allowing Messages to Expire).

+
+
+

A transacted session is always involved in a transaction. To create a +transacted session, call the createContext method as follows:

+
+
+
+
JMSContext context =
+        connectionFactory.createContext(JMSContext.SESSION_TRANSACTED);
+
+
+
+

As soon as the commit or the rollback method is called, one +transaction ends and another transaction begins. Closing a transacted +session rolls back its transaction in progress, including any pending +sends and receives.

+
+
+

In an application running in the Java EE web or EJB container, you +cannot use local transactions. Instead, you use JTA transactions, +described in Using the JMS API in Java EE +Applications.

+
+
+

You can combine several sends and receives in a single JMS local +transaction, so long as they are all performed using the same +JMSContext.

+
+
+

Do not use a single transaction if you use a request/reply mechanism, in +which you send a message and then receive a reply to that message. If +you try to use a single transaction, the program will hang, because the +send cannot take place until the transaction is committed. The following +code fragment illustrates the problem:

+
+
+
+
// Don't do this!
+outMsg.setJMSReplyTo(replyQueue);
+context.createProducer().send(outQueue, outMsg);
+consumer = context.createConsumer(replyQueue);
+inMsg = consumer.receive();
+context.commit();
+
+
+
+

Because a message sent during a transaction is not actually sent until +the transaction is committed, the transaction cannot contain any +receives that depend on that message’s having been sent.

+
+
+

The production and the consumption of a message cannot both be part of +the same transaction. The reason is that the transactions take place +between the clients and the JMS provider, which intervenes between the +production and the consumption of the message. Figure 45-8 +illustrates this interaction.

+
+
+

Figure 45-8 Using JMS Local Transactions

+
+ +
+

The sending of one or more messages to one or more destinations by +Client 1 can form a single transaction, because it forms a single set of +interactions with the JMS provider using a single JMSContext. +Similarly, the receiving of one or more messages from one or more +destinations by Client 2 also forms a single transaction using a single +JMSContext. But because the two clients have no direct interaction and +are using two different JMSContext objects, no transactions can take +place between them.

+
+
+

Another way of putting this is that a transaction is a contract between +a client and a JMS provider that defines whether a message is sent to a +destination or whether a message is received from the destination. It is +not a contract between the sending client and the receiving client.

+
+
+

This is the fundamental difference between messaging and synchronized +processing. Instead of tightly coupling the sender and the receiver of a +message, JMS couples the sender of a message with the destination, and +it separately couples the destination with the receiver of the message. +Therefore, while the sends and receives each have a tight coupling with +the JMS provider, they do not have any coupling with each other.

+
+
+

When you create a JMSContext, you can specify whether it is transacted +by using the JMSContext.SESSION_TRANSACTED argument to the +createContext method. For example:

+
+
+
+
try (JMSContext context = connectionFactory.createContext(
+        JMSContext.SESSION_TRANSACTED);) {
+    ...
+
+
+
+

The commit and the rollback methods for local transactions are +associated with the session that underlies the JMSContext. You can +combine operations on more than one queue or topic, or on a combination +of queues and topics, in a single transaction if you use the same +session to perform the operations. For example, you can use the same +JMSContext to receive a message from a queue and send a message to a +topic in the same transaction.

+
+
+

The example in Using Local Transactions +shows how to use JMS local transactions.

+
+
+
+

45.4.5 Sending Messages Asynchronously

+
+

Normally, when you send a persistent message, the send method blocks +until the JMS provider confirms that the message was sent successfully. +The asynchronous send mechanism allows your application to send a +message and continue work while waiting to learn whether the send +completed.

+
+
+

This feature is currently available only in application clients and Java +SE clients.

+
+
+

Sending a message asynchronously involves supplying a callback object. +You specify a CompletionListener with an onCompletion method. For +example, the following code instantiates a CompletionListener named +SendListener. It then calls the setAsync method to specify that +sends from this producer should be asynchronous and should use the +specified listener:

+
+
+
+
CompletionListener listener = new SendListener();
+context.createProducer().setAsync(listener).send(dest, message);
+
+
+
+

The CompletionListener class must implement two methods, +onCompletion and onException. The onCompletion method is called if +the send succeeds, and the onException method is called if it fails. A +simple implementation of these methods might look like this:

+
+
+
+
@Override
+public void onCompletion(Message message) {
+    System.out.println("onCompletion method: Send has completed.");
+}
+
+@Override
+public void onException(Message message, Exception e) {
+    System.out.println("onException method: send failed: " + e.toString());
+    System.out.println("Unsent message is: \n" + message);
+}
+
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/jms-concepts005.html b/jms-concepts005.html new file mode 100644 index 0000000..1c75659 --- /dev/null +++ b/jms-concepts005.html @@ -0,0 +1,832 @@ + + + + + + Using the JMS API in Java EE Applications + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

45.5 Using the JMS API in Java EE Applications

+
+
+

This section describes how using the JMS API in enterprise bean +applications or web applications differs from using it in application +clients.

+
+
+

The following topics are addressed here:

+
+ +
+

45.5.1 Overview of Using the JMS API

+
+

A general rule in the Java EE platform specification applies to all Java +EE components that use the JMS API within EJB or web containers: +Application components in the web and EJB containers must not attempt to +create more than one active (not closed) Session object per +connection. Multiple JMSContext objects are permitted, however, since +they combine a single connection and a single session.

+
+
+

This rule does not apply to application clients. The application client +container supports the creation of multiple sessions for each +connection.

+
+
+
+

45.5.2 Creating Resources for Java EE Applications

+
+

You can use annotations to create application-specific connection +factories and destinations for Java EE enterprise bean or web +components. The resources you create in this way are visible only to the +application for which you create them.

+
+
+

You can also use deployment descriptor elements to create these +resources. Elements specified in the deployment descriptor override +elements specified in annotations. See +Packaging Applications for basic +information about deployment descriptors. You must use a deployment +descriptor to create application-specific resources for application +clients.

+
+
+

To create a destination, use a @JMSDestinationDefinition annotation +like the following on a class:

+
+
+
+
@JMSDestinationDefinition(
+    name = "java:app/jms/myappTopic",
+    interfaceName = "javax.jms.Topic",
+    destinationName = "MyPhysicalAppTopic"
+  )
+
+
+
+

The name, interfaceName, and destinationName elements are +required. You can optionally specify a description element. To create +multiple destinations, enclose them in a @JMSDestinationDefinitions +annotation, separated by commas.

+
+
+

To create a connection factory, use a @JMSConnectionFactoryDefinition +annotation like the following on a class:

+
+
+
+
@JMSConnectionFactoryDefinition(
+    name="java:app/jms/MyConnectionFactory"
+)
+
+
+
+

The name element is required. You can optionally specify a number of +other elements, such as clientId if you want to use the connection +factory for durable subscriptions, or description. If you do not +specify the interfaceName element, the default interface is +javax.jms.ConnectionFactory. To create multiple connection factories, +enclose them in a @JMSConnectionFactoryDefinitions annotation, +separated by commas.

+
+
+

You need to specify the annotation only once for a given application, in +any of the components.

+
+
+
+
+
+
+
+ +++ + + + + + +
+

Note:

+
+
+

If your application contains one or more message-driven beans, you may +want to place the annotation on one of the message-driven beans. If you +place the annotation on a sending component such as an application +client, you need to specify the mappedName element to look up the +topic, instead of using the destinationLookup property of the +activation configuration specification.

+
+
+
+
+
+
+
+
+

When you inject the resource into a component, use the value of the +name element in the definition annotation as the value of the lookup +element in the @Resource annotation:

+
+
+
+
@Resource(lookup = "java:app/jms/myappTopic")
+private Topic topic;
+
+
+
+

The following portable JNDI namespaces are available. Which ones you can +use depends on how your application is packaged.

+
+
+
    +
  • +

    java:global: Makes the resource available to all deployed +applications

    +
  • +
  • +

    java:app: Makes the resource available to all components in all +modules in a single application

    +
  • +
  • +

    java:module: Makes the resource available to all components within a +given module (for example, all enterprise beans within an EJB module)

    +
  • +
  • +

    java:comp: Makes the resource available to a single component only +(except in a web application, where it is equivalent to java:module)

    +
  • +
+
+
+

See the API documentation for details on these annotations. The examples +in Sending and Receiving Messages +Using a Simple Web Application, Sending +Messages from a Session Bean to an MDB, and +Using an Entity to Join Messages from Two +MDBs all use the @JMSDestinationDefinition annotation. The other JMS +examples do not use these annotations. The examples that consist only of +application clients are not deployed in the application server and must +therefore communicate with each other using administratively created +resources that exist outside of individual applications.

+
+
+
+

45.5.3 Using Resource Injection in Enterprise Bean or Web Components

+
+

You may use resource injection to inject both administered objects and +JMSContext objects in Java EE applications.

+
+
+

The following topics are addressed here:

+
+ +
+

45.5.3.1 Injecting a ConnectionFactory, Queue, or Topic

+
+

Normally, you use the @Resource annotation to inject a +ConnectionFactory, Queue, or Topic into your Java EE application. +These objects must be created administratively before you deploy your +application. You may want to use the default connection factory, whose +JNDI name is java:comp/DefaultJMSConnectionFactory.

+
+
+

When you use resource injection in an application client component, you +normally declare the JMS resource static:

+
+
+
+
@Resource(lookup = "java:comp/DefaultJMSConnectionFactory")
+private static ConnectionFactory connectionFactory;
+
+@Resource(lookup = "jms/MyQueue")
+private static Queue queue;
+
+
+
+

However, when you use this annotation in a session bean, a +message-driven bean, or a web component, do not declare the resource +static:

+
+
+
+
@Resource(lookup = "java:comp/DefaultJMSConnectionFactory")
+private ConnectionFactory connectionFactory;
+
+@Resource(lookup = "jms/MyTopic")
+private Topic topic;
+
+
+
+

If you declare the resource static in these components, runtime errors +will result.

+
+
+
+

45.5.3.2 Injecting a JMSContext Object

+
+

To access a JMSContext object in an enterprise bean or web component, +instead of injecting the ConnectionFactory resource and then creating +a JMSContext, you can use the @Inject and @JMSConnectionFactory +annotations to inject a JMSContext. To use the default connection +factory, use code like the following:

+
+
+
+
@Inject
+private JMSContext context1;
+
+
+
+

To use your own connection factory, use code like the following:

+
+
+
+
@Inject
+@JMSConnectionFactory("jms/MyConnectionFactory")
+private JMSContext context2;
+
+
+
+
+
+

45.5.4 Using Java EE Components to Produce and to Synchronously ReceiveMessages

+
+

An application that produces messages or synchronously receives them can +use a Java EE web or EJB component, such as a managed bean, a servlet, +or a session bean, to perform these operations. The example in +Sending Messages from a Session Bean to +an MDB uses a stateless session bean to send messages to a topic. The +example in Sending and Receiving +Messages Using a Simple Web Application uses managed beans to produce +and to consume messages.

+
+
+

Because a synchronous receive with no specified timeout ties up server +resources, this mechanism usually is not the best application design for +a web or EJB component. Instead, use a synchronous receive that +specifies a timeout value, or use a message-driven bean to receive +messages asynchronously. For details about synchronous receives, see +JMS Message Consumers.

+
+
+

Using the JMS API in a Java EE component is in many ways similar to +using it in an application client. The main differences are the areas of +resource management and transactions.

+
+
+

45.5.4.1 Managing JMS Resources in Web and EJB Components

+
+

The JMS resources are a connection and a session, usually combined in a +JMSContext object. In general, it is important to release JMS +resources when they are no longer being used. Here are some useful +practices to follow.

+
+
+
    +
  • +

    If you wish to maintain a JMS resource only for the life span of a +business method, use a try-with-resources statement to create the +JMSContext so that it will be closed automatically at the end of the +try block.

    +
  • +
  • +

    To maintain a JMS resource for the duration of a transaction or +request, inject the JMSContext as described in +Injecting a JMSContext Object. This will also cause the +resource to be released when it is no longer needed.

    +
  • +
  • +

    If you would like to maintain a JMS resource for the life span of an +enterprise bean instance, you can use a @PostConstruct callback method +to create the resource and a @PreDestroy callback method to close the +resource. However, there is normally no need to do this, since +application servers usually maintain a pool of connections. If you use a +stateful session bean and you wish to maintain the JMS resource in a +cached state, you must close the resource in a @PrePassivate callback +method and set its value to null, and you must create it again in a +@PostActivate callback method.

    +
  • +
+
+
+
+

45.5.4.2 Managing Transactions in Session Beans

+
+

Instead of using local transactions, you use JTA transactions. You can +use either container-managed transactions or bean-managed transactions. +Normally, you use container-managed transactions for bean methods that +perform sends or receives, allowing the EJB container to handle +transaction demarcation. Because container-managed transactions are the +default, you do not have to specify them.

+
+
+

You can use bean-managed transactions and the +javax.transaction.UserTransaction interface’s transaction demarcation +methods, but you should do so only if your application has special +requirements and you are an expert in using transactions. Usually, +container-managed transactions produce the most efficient and correct +behavior. This tutorial does not provide any examples of bean-managed +transactions.

+
+
+
+
+

45.5.5 Using Message-Driven Beans to Receive Messages Asynchronously

+
+

The sections What Is a Message-Driven Bean? +and How Does the JMS API Work with the +Java EE Platform? describe how the Java EE platform supports a special +kind of enterprise bean, the message-driven bean, which allows Java EE +applications to process JMS messages asynchronously. Other Java EE web +and EJB components allow you to send messages and to receive them +synchronously but not asynchronously.

+
+
+

A message-driven bean is a message listener to which messages can be +delivered from either a queue or a topic. The messages can be sent by +any Java EE component (from an application client, another enterprise +bean, or a web component) or from an application or a system that does +not use Java EE technology.

+
+
+

A message-driven bean class has the following requirements.

+
+
+
    +
  • +

    It must be annotated with the @MessageDriven annotation if it does +not use a deployment descriptor.

    +
  • +
  • +

    The class must be defined as public, but not as abstract or +final.

    +
  • +
  • +

    It must contain a public constructor with no arguments.

    +
  • +
+
+
+

It is recommended, but not required, that a message-driven bean class +implement the message listener interface for the message type it +supports. A bean that supports the JMS API implements the +javax.jms.MessageListener interface, which means that it must provide +an onMessage method with the following signature:

+
+
+
+
void onMessage(Message inMessage)
+
+
+
+

The onMessage method is called by the bean’s container when a message +has arrived for the bean to service. This method contains the business +logic that handles the processing of the message. It is the +message-driven bean’s responsibility to parse the message and perform +the necessary business logic.

+
+
+

A message-driven bean differs from an application client’s message +listener in the following ways.

+
+
+
    +
  • +

    In an application client, you must create a JMSContext, then create +a JMSConsumer, then call setMessageListener to activate the +listener. For a message-driven bean, you need only define the class and +annotate it, and the EJB container creates it for you.

    +
  • +
  • +

    The bean class uses the @MessageDriven annotation, which typically +contains an activationConfig element containing +@ActivationConfigProperty annotations that specify properties used by +the bean or the connection factory. These properties can include the +connection factory, a destination type, a durable subscription, a +message selector, or an acknowledgment mode. Some of the examples in +Chapter 46, "Java Message Service Examples" +set these properties. You can also set the properties in the deployment +descriptor.

    +
  • +
  • +

    The application client container has only one instance of a +MessageListener, which is called on a single thread at a time. A +message-driven bean, however, may have multiple instances, configured by +the container, which may be called concurrently by multiple threads +(although each instance is called by only one thread at a time). +Message-driven beans may therefore allow much faster processing of +messages than message listeners.

    +
  • +
  • +

    You do not need to specify a message acknowledgment mode unless you +use bean-managed transactions. The message is consumed in the +transaction in which the onMessage method is invoked.

    +
  • +
+
+
+

Table 45-3 lists the activation configuration properties +defined by the JMS specification.

+
+
+

+
+
+

Table 45-3 @ActivationConfigProperty Settings for Message-Driven Beans

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Property NameDescription

acknowledgeMode

Acknowledgment mode, used only for bean-managed +transactions; the default is Auto-acknowledge (Dups-ok-acknowledge +is also permitted)

destinationLookup

The lookup name of the queue or topic from which +the bean will receive messages

destinationType

Either javax.jms.Queue or javax.jms.Topic

subscriptionDurability

For durable subscriptions, set the value to +Durable; see Creating Durable +Subscriptions for more information

clientId

For durable subscriptions, the client ID for the connection +(optional)

subscriptionName

For durable subscriptions, the name of the +subscription

messageSelector

A string that filters messages; see +JMS Message Selectors for information

connectionFactoryLookup

The lookup name of the connection factory to +be used to connect to the JMS provider from which the bean will receive +messages

+
+
+
+
+
+
+
+

For example, here is the message-driven bean used in +Receiving Messages Asynchronously Using a +Message-Driven Bean:

+
+
+
+
@MessageDriven(activationConfig = {
+    @ActivationConfigProperty(propertyName = "destinationLookup",
+            propertyValue = "jms/MyQueue"),
+    @ActivationConfigProperty(propertyName = "destinationType",
+            propertyValue = "javax.jms.Queue")
+})
+public class SimpleMessageBean implements MessageListener {
+
+    @Resource
+    private MessageDrivenContext mdc;
+    static final Logger logger = Logger.getLogger("SimpleMessageBean");
+
+    public SimpleMessageBean() {
+    }
+
+    @Override
+    public void onMessage(Message inMessage) {
+
+        try {
+            if (inMessage instanceof TextMessage) {
+                logger.log(Level.INFO,
+                        "MESSAGE BEAN: Message received: {0}",
+                        inMessage.getBody(String.class));
+            } else {
+                logger.log(Level.WARNING,
+                        "Message of wrong type: {0}",
+                        inMessage.getClass().getName());
+            }
+        } catch (JMSException e) {
+            logger.log(Level.SEVERE,
+                    "SimpleMessageBean.onMessage: JMSException: {0}",
+                    e.toString());
+            mdc.setRollbackOnly();
+        }
+    }
+}
+
+
+
+

If JMS is integrated with the application server using a resource +adapter, the JMS resource adapter handles these tasks for the EJB +container.

+
+
+

The bean class commonly injects a MessageDrivenContext resource, which +provides some additional methods you can use for transaction management +(setRollbackOnly, for example):

+
+
+
+
    @Resource
+    private MessageDrivenContext mdc;
+
+
+
+

A message-driven bean never has a local or remote interface. Instead, it +has only a bean class.

+
+
+

A message-driven bean is similar in some ways to a stateless session +bean: Its instances are relatively short-lived and retain no state for a +specific client. The instance variables of the message-driven bean +instance can contain some state across the handling of client messages: +for example, an open database connection, or an object reference to an +enterprise bean object.

+
+
+

Like a stateless session bean, a message-driven bean can have many +interchangeable instances running at the same time. The container can +pool these instances to allow streams of messages to be processed +concurrently. The container attempts to deliver messages in +chronological order when that would not impair the concurrency of +message processing, but no guarantees are made as to the exact order in +which messages are delivered to the instances of the message-driven bean +class. If message order is essential to your application, you may want +to configure your application server to use just one instance of the +message-driven bean.

+
+
+

For details on the lifecycle of a message-driven bean, see +The Lifecycle of a Message-Driven Bean.

+
+
+
+

45.5.6 Managing JTA Transactions

+
+

Java EE application clients and Java SE clients use JMS local +transactions (described in Using JMS +Local Transactions), which allow the grouping of sends and receives +within a specific JMS session. Java EE applications that run in the web +or EJB container commonly use JTA transactions to ensure the integrity +of accesses to external resources. The key difference between a JTA +transaction and a JMS local transaction is that a JTA transaction is +controlled by the application server’s transaction managers. JTA +transactions may be distributed, which means that they can encompass +multiple resources in the same transaction, such as a JMS provider and a +database.

+
+
+

For example, distributed transactions allow multiple applications to +perform atomic updates on the same database, and they allow a single +application to perform atomic updates on multiple databases.

+
+
+

In a Java EE application that uses the JMS API, you can use transactions +to combine message sends or receives with database updates and other +resource manager operations. You can access resources from multiple +application components within a single transaction. For example, a +servlet can start a transaction, access multiple databases, invoke an +enterprise bean that sends a JMS message, invoke another enterprise bean +that modifies an EIS system using the Connector Architecture, and +finally commit the transaction. Your application cannot, however, both +send a JMS message and receive a reply to it within the same +transaction.

+
+
+

JTA transactions within the EJB and web containers can be either of two +kinds.

+
+
+
    +
  • +

    Container-managed transactions: The container controls the integrity +of your transactions without your having to call commit or rollback. +Container-managed transactions are easier to use than bean-managed +transactions. You can specify appropriate transaction attributes for +your enterprise bean methods.

    +
    +

    Use the Required transaction attribute (the default) to ensure that a +method is always part of a transaction. If a transaction is in progress +when the method is called, the method will be part of that transaction; +if not, a new transaction will be started before the method is called +and will be committed when the method returns. See +Transaction Attributes for more +information.

    +
    +
  • +
  • +

    Bean-managed transactions: You can use these in conjunction with the +javax.transaction.UserTransaction interface, which provides its own +commit and rollback methods you can use to delimit transaction +boundaries. Bean-managed transactions are recommended only for those who +are experienced in programming transactions.

    +
  • +
+
+
+

You can use either container-managed transactions or bean-managed +transactions with message-driven beans. To ensure that all messages are +received and handled within the context of a transaction, use +container-managed transactions and use the Required transaction +attribute (the default) for the onMessage method.

+
+
+

When you use container-managed transactions, you can call the following +MessageDrivenContext methods.

+
+
+
    +
  • +

    setRollbackOnly: Use this method for error handling. If an exception +occurs, setRollbackOnly marks the current transaction so that the only +possible outcome of the transaction is a rollback.

    +
  • +
  • +

    getRollbackOnly: Use this method to test whether the current +transaction has been marked for rollback.

    +
  • +
+
+
+

If you use bean-managed transactions, the delivery of a message to the +onMessage method takes place outside the JTA transaction context. The +transaction begins when you call the UserTransaction.begin method +within the onMessage method, and it ends when you call +UserTransaction.commit or UserTransaction.rollback. Any call to the +Connection.createSession method must take place within the +transaction.

+
+
+

Using bean-managed transactions allows you to process the message by +using more than one transaction or to have some parts of the message +processing take place outside a transaction context. However, if you use +container-managed transactions, the message is received by the MDB and +processed by the onMessage method within the same transaction. It is +not possible to achieve this behavior with bean-managed transactions.

+
+
+

When you create a JMSContext in a JTA transaction (in the web or EJB +container), the container ignores any arguments you specify, because it +manages all transactional properties. When you create a JMSContext in +the web or EJB container and there is no JTA transaction, the value (if +any) passed to the createContext method should be +JMSContext.AUTO_ACKNOWLEDGE or JMSContext.DUPS_OK_ACKNOWLEDGE.

+
+
+

When you use container-managed transactions, you normally use the +Required transaction attribute (the default) for your enterprise +bean’s business methods.

+
+
+

You do not specify the activation configuration property +acknowledgeMode when you create a message-driven bean that uses +container-managed transactions. The container acknowledges the message +automatically when it commits the transaction.

+
+
+

If a message-driven bean uses bean-managed transactions, the message +receipt cannot be part of the bean-managed transaction. You can set the +activation configuration property acknowledgeMode to +Auto-acknowledge or Dups-ok-acknowledge to specify how you want the +message received by the message-driven bean to be acknowledged.

+
+
+

If the onMessage method throws a RuntimeException, the container +does not acknowledge processing the message. In that case, the JMS +provider will redeliver the unacknowledged message in the future.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/jms-concepts006.html b/jms-concepts006.html new file mode 100644 index 0000000..5b34fee --- /dev/null +++ b/jms-concepts006.html @@ -0,0 +1,102 @@ + + + + + + Further Information about JMS + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

45.6 Further Information about JMS

+
+
+

For more information about JMS, see

+
+
+
    +
  • +

    Java Message Service website:

    +
    +

    http://www.oracle.com/technetwork/java/index-jsp-142945.html

    +
    +
  • +
  • +

    Java Message Service specification, version 2.0, available from:

    +
    +

    http://jcp.org/en/jsr/detail?id=343

    +
    +
  • +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/jms-examples.html b/jms-examples.html new file mode 100644 index 0000000..fda4a6f --- /dev/null +++ b/jms-examples.html @@ -0,0 +1,131 @@ + + + + + + Java Message Service Examples + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+ + + + \ No newline at end of file diff --git a/jms-examples001.html b/jms-examples001.html new file mode 100644 index 0000000..26a8221 --- /dev/null +++ b/jms-examples001.html @@ -0,0 +1,113 @@ + + + + + + Building and Running Java Message Service Examples + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

46.1 Building and Running Java Message Service Examples

+
+
+

The examples are in the tut-install`/examples/jms/` directory.

+
+
+

To build and run each example:

+
+
+
    +
  1. +

    Use NetBeans IDE or Maven to compile, package, and in some cases +deploy the example.

    +
  2. +
  3. +

    Use NetBeans IDE, Maven, or the appclient command to run the +application client, or use the browser to run the web application +examples.

    +
  4. +
+
+
+

Before you deploy or run the examples, you need to create resources for +them. Some examples have a glassfish-resources.xml file that is used +to create resources for that example and others. You can use the +asadmin command to create the resources.

+
+
+

To use the asadmin and appclient commands, you need to put the +GlassFish Server bin directories in your command path, as described in +SDK Installation Tips.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/jms-examples002.html b/jms-examples002.html new file mode 100644 index 0000000..d58828c --- /dev/null +++ b/jms-examples002.html @@ -0,0 +1,220 @@ + + + + + + Overview of the JMS Examples + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

46.2 Overview of the JMS Examples

+
+
+

The following tables list the examples used in this chapter, describe +what they do, and link to the section that describes them fully. The +example directory for each example is relative to the +tut-install`/examples/jms/` directory.

+
+
+

+
+
+

Table 46-1 JMS Examples That Show the Use of Java EE Application Clients

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Example DirectoryDescription

simple/producer

Using an application client to send messages; see +Sending Messages

simple/synchconsumer

Using an application client to receive messages +synchronously; see Receiving Messages +Synchronously

simple/asynchconsumer

Using an application client to receive +messages asynchronously; see Using a +Message Listener for Asynchronous Message Delivery

simple/messagebrowser

Using an application client to use a +QueueBrowser to browse a queue; see +Browsing Messages on a Queue

simple/clientackconsumer

Using an application client to acknowledge +messages received synchronously; see +Acknowledging Messages

durablesubscriptionexample

Using an application client to create a +durable subscription on a topic; see +Using Durable Subscriptions

transactedexample

Using an application client to send and receive +messages in local transactions (also uses request-reply messaging); see +Using Local Transactions

shared/sharedconsumer

Using an application client to create shared +nondurable topic subscriptions; see +Using Shared Nondurable Subscriptions

shared/shareddurableconsumer

Using an application client to create +shared durable topic subscriptions; see +Using Shared Durable Subscriptions

+
+
+
+
+
+
+
+

+
+
+

Table 46-2 JMS Examples That Show the Use of Java EE Web and EJB +Components

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + +
Example DirectoryDescription

websimplemessage

Using managed beans to send messages and to receive +messages synchronously; see Sending +and Receiving Messages Using a Simple Web Application

simplemessage

Using an application client to send messages, and +using a message-driven bean to receive messages asynchronously; see +Receiving Messages Asynchronously Using a +Message-Driven Bean

clientsessionmdb

Using a session bean to send messages, and using a +message-driven bean to receive messages; see +Sending Messages from a Session Bean to +an MDB

clientmdbentity

Using an application client, two message-driven +beans, and JPA persistence to create a simple HR application; see +Using an Entity to Join Messages from Two +MDBs

+
+
+
+
+
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/jms-examples003.html b/jms-examples003.html new file mode 100644 index 0000000..40db0ca --- /dev/null +++ b/jms-examples003.html @@ -0,0 +1,1643 @@ + + + + + + Writing Simple JMS Applications + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

46.3 Writing Simple JMS Applications

+
+
+

This section shows how to create, package, and run simple JMS clients +that are packaged as application clients.

+
+
+

The following topics are addressed here:

+
+ +
+

46.3.1 Overview of Writing Simple JMS Application

+
+

The clients demonstrate the basic tasks a JMS application must perform:

+
+
+
    +
  • +

    Creating a JMSContext

    +
  • +
  • +

    Creating message producers and consumers

    +
  • +
  • +

    Sending and receiving messages

    +
  • +
+
+
+

Each example uses two clients: one that sends messages and one that +receives them. You can run the clients in two terminal windows.

+
+
+

When you write a JMS client to run in an enterprise bean application, +you use many of the same methods in much the same sequence as for an +application client. However, there are some significant differences. +Using the JMS API in Java EE +Applications describes these differences, and this chapter provides +examples that illustrate them.

+
+
+

The examples for this section are in the +tut-install`/examples/jms/simple/` directory, under the following +subdirectories:

+
+
+
+
 +
+`producer/` +
+`synchconsumer/` +
+`asynchconsumer/` +
+`messagebrowser/` +
+`clientackconsumer/` +
+
+
+
+

Before running the examples, you need to start GlassFish Server and +create administered objects.

+
+
+
+

46.3.2 Starting the JMS Provider

+
+

When you use GlassFish Server, your JMS provider is GlassFish Server. +Start the server as described in +Starting and Stopping GlassFish Server.

+
+
+
+

46.3.3 Creating JMS Administered Objects

+
+

This example uses the following JMS administered objects:

+
+
+
    +
  • +

    A connection factory

    +
  • +
  • +

    Two destination resources: a topic and a queue

    +
  • +
+
+
+

Before you run the applications, you can use the asadmin add-resources +command to create needed JMS resources, specifying as the argument a +file named glassfish-resources.xml. This file can be created in any +project using NetBeans IDE, although you can also create it by hand. A +file for the needed resources is present in the +jms/simple/producer/src/main/setup/ directory.

+
+
+

The JMS examples use a connection factory with the logical JNDI lookup +name java:comp/DefaultJMSConnectionFactory, which is preconfigured in +GlassFish Server.

+
+
+

You can also use the asadmin create-jms-resource command to create +resources, the asadmin list-jms-resources command to display their +names, and the asadmin delete-jms-resource command to remove them.

+
+
+

46.3.3.1 To Create Resources for the Simple Examples

+
+

A glassfish-resources.xml file in one of the Maven projects can create +all the resources needed for the simple examples.

+
+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    In a command window, go to the Producer example.

    +
    +
    +
    cd tut-install/jms/simple/producer
    +
    +
    +
  4. +
  5. +

    Create the resources using the asadmin add-resources command:

    +
    +
    +
    asadmin add-resources src/main/setup/glassfish-resources.xml
    +
    +
    +
  6. +
  7. +

    Verify the creation of the resources:

    +
    +
    +
    asadmin list-jms-resources
    +
    +
    +
    +

    The command lists the two destinations and connection factory specified +in the glassfish-resources.xml file in addition to the platform +default connection factory:

    +
    +
    +
    +
    jms/MyQueue
    +jms/MyTopic
    +jms/__defaultConnectionFactory
    +Command list-jms-resources executed successfully.
    +
    +
    +
    +

    In GlassFish Server, the Java EE java:comp/DefaultJMSConnectionFactory +resource is mapped to a connection factory named +jms/__defaultConnectionFactory.

    +
    +
  8. +
+
+
+
+
+

46.3.4 Building All the Simple Examples

+
+

To run the simple examples using GlassFish Server, package each example +in an application client JAR file. The application client JAR file +requires a manifest file, located in the src/main/java/META-INF/ +directory for each example, along with the .class file.

+
+
+

The pom.xml file for each example specifies a plugin that creates an +application client JAR file. You can build the examples using either +NetBeans IDE or Maven.

+
+
+

The following topics are addressed here:

+
+ +
+

46.3.4.1 To Build All the Simple Examples Using NetBeans IDE

+
+
    +
  1. +

    From the File menu, choose Open Project.

    +
  2. +
  3. +

    In the Open Project dialog box, navigate to:

    +
    +
    +
    tut-install/examples/jms
    +
    +
    +
  4. +
  5. +

    Expand the jms node and select the simple folder.

    +
  6. +
  7. +

    Click Open Project to open all the simple examples.

    +
  8. +
  9. +

    In the Projects tab, right-click the simple project and select +Build to build all the examples.

    +
    +

    This command places the application client JAR files in the target +directories for the examples.

    +
    +
  10. +
+
+
+
+

46.3.4.2 To Build All the Simple Examples Using Maven

+
+
    +
  1. +

    In a terminal window, go to the simple directory:

    +
    +
    +
    cd tut-install/jms/simple/
    +
    +
    +
  2. +
  3. +

    Enter the following command to build all the projects:

    +
    +
    +
    mvn install
    +
    +
    +
    +

    This command places the application client JAR files in the target +directories for the examples.

    +
    +
  4. +
+
+
+
+
+

46.3.5 Sending Messages

+
+

This section describes how to use a client to send messages. The +Producer.java client will send messages in all of these examples.

+
+
+

The following topics are addressed here:

+
+ +
+

46.3.5.1 General Steps Performed in the Example

+
+

General steps this example performs are as follows.

+
+
+
    +
  1. +

    Inject resources for the administered objects used by the example.

    +
  2. +
  3. +

    Accept and verify command-line arguments. You can use this example +to send any number of messages to either a queue or a topic, so you +specify the destination type and the number of messages on the command +line when you run the program.

    +
  4. +
  5. +

    Create a JMSContext, then send the specified number of text +messages in the form of strings, as described in +Message Bodies.

    +
  6. +
  7. +

    Send a final message of type Message to indicate that the consumer +should expect no more messages.

    +
  8. +
  9. +

    Catch any exceptions.

    +
  10. +
+
+
+
+

46.3.5.2 The Producer.java Client

+
+

The sending client, Producer.java, performs the following steps.

+
+
+
    +
  1. +

    Injects resources for a connection factory, queue, and topic:

    +
    +
    +
    @Resource(lookup = "java:comp/DefaultJMSConnectionFactory")
    +private static ConnectionFactory connectionFactory;
    +@Resource(lookup = "jms/MyQueue")
    +private static Queue queue;
    +@Resource(lookup = "jms/MyTopic")
    +private static Topic topic;
    +
    +
    +
  2. +
  3. +

    Retrieves and verifies command-line arguments that specify the +destination type and the number of arguments:

    +
    +
    +
    final int NUM_MSGS;
    +String destType = args[0];
    +System.out.println("Destination type is " + destType);
    +if ( ! ( destType.equals("queue") || destType.equals("topic") ) ) {
    +    System.err.println("Argument must be \"queue\" or " + "\"topic\"");
    +    System.exit(1);
    +}
    +if (args.length == 2){
    +    NUM_MSGS = (new Integer(args[1])).intValue();
    +} else {
    +    NUM_MSGS = 1;
    +}
    +
    +
    +
  4. +
  5. +

    Assigns either the queue or the topic to a destination object, based +on the specified destination type:

    +
    +
    +
    Destination dest = null;
    +try {
    +    if (destType.equals("queue")) {
    +        dest = (Destination) queue;
    +    } else {
    +        dest = (Destination) topic;
    +    }
    +} catch (Exception e) {
    +    System.err.println("Error setting destination: " + e.toString());
    +    System.exit(1);
    +}
    +
    +
    +
  6. +
  7. +

    Within a try-with-resources block, creates a JMSContext:

    +
    +
    +
    try (JMSContext context = connectionFactory.createContext();) {
    +
    +
    +
  8. +
  9. +

    Sets the message count to zero, then creates a JMSProducer and +sends one or more messages to the destination and increments the count. +Messages in the form of strings are of the TextMessage message type:

    +
    +
    +
        int count = 0;
    +    for (int i = 0; i < NUM_MSGS; i++) {
    +        String message = "This is message " + (i + 1)
    +                + " from producer";
    +        // Comment out the following line to send many messages
    +        System.out.println("Sending message: " + message);
    +        context.createProducer().send(dest, message);
    +        count += 1;
    +    }
    +    System.out.println("Text messages sent: " + count);
    +
    +
    +
  10. +
  11. +

    Sends an empty control message to indicate the end of the message +stream:

    +
    +
    +
        context.createProducer().send(dest, context.createMessage());
    +
    +
    +
    +

    Sending an empty message of no specified type is a convenient way for an +application to indicate to the consumer that the final message has +arrived.

    +
    +
  12. +
  13. +

    Catches and handles any exceptions. The end of the +try-with-resources block automatically causes the JMSContext to be +closed:

    +
    +
    +
    } catch (Exception e) {
    +    System.err.println("Exception occurred: " + e.toString());
    +    System.exit(1);
    +}
    +System.exit(0);
    +
    +
    +
  14. +
+
+
+
+

46.3.5.3 To Run the Producer Client

+
+

You can run the client using the appclient command. The Producer +client takes one or two command-line arguments: a destination type and, +optionally, a number of messages. If you do not specify a number of +messages, the client sends one message.

+
+
+

You will use the client to send three messages to a queue.

+
+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish Server) +and that you have created resources and built the simple JMS examples +(see Creating JMS Administered Objects and +Building All the Simple Examples).

    +
  2. +
  3. +

    In a terminal window, go to the producer directory:

    +
    +
    +
    cd producer
    +
    +
    +
  4. +
  5. +

    Run the Producer program, sending three messages to the queue:

    +
    +
    +
    appclient -client target/producer.jar queue 3
    +
    +
    +
    +

    The output of the program looks like this (along with some additional +output):

    +
    +
    +
    +
    Destination type is queue
    +Sending message: This is message 1 from producer
    +Sending message: This is message 2 from producer
    +Sending message: This is message 3 from producer
    +Text messages sent: 3
    +
    +
    +
    +

    The messages are now in the queue, waiting to be received.

    +
    + +++ + + + + + +
    +

    Note:

    +
    +
    +

    When you run an application client, the command may take a long time to +complete.

    +
    +
    +
    +
    +
    +
    +
    +
  6. +
+
+
+
+
+

46.3.6 Receiving Messages Synchronously

+
+

This section describes the receiving client, which uses the receive +method to consume messages synchronously. This section then explains how +to run the clients using GlassFish Server.

+
+
+

The following topics are addressed here:

+
+ +
+

46.3.6.1 The SynchConsumer.java Client

+
+

The receiving client, SynchConsumer.java, performs the following +steps.

+
+
+
    +
  1. +

    Injects resources for a connection factory, queue, and topic.

    +
  2. +
  3. +

    Assigns either the queue or the topic to a destination object, based +on the specified destination type.

    +
  4. +
  5. +

    Within a try-with-resources block, creates a JMSContext.

    +
  6. +
  7. +

    Creates a JMSConsumer, starting message delivery:

    +
    +
    +
    consumer = context.createConsumer(dest);
    +
    +
    +
  8. +
  9. +

    Receives the messages sent to the destination until the +end-of-message-stream control message is received:

    +
    +
    +
    int count = 0;
    +while (true) {
    +    Message m = consumer.receive(1000);
    +    if (m != null) {
    +        if (m instanceof TextMessage) {
    +            System.out.println(
    +                    "Reading message: " + m.getBody(String.class));
    +            count += 1;
    +        } else {
    +            break;
    +        }
    +    }
    +}
    +System.out.println("Messages received: " + count);
    +
    +
    +
    +

    Because the control message is not a TextMessage, the receiving client +terminates the while loop and stops receiving messages after the +control message arrives.

    +
    +
  10. +
  11. +

    Catches and handles any exceptions. The end of the +try-with-resources block automatically causes the JMSContext to be +closed.

    +
  12. +
+
+
+

The SynchConsumer client uses an indefinite while loop to receive +messages, calling receive with a timeout argument.

+
+
+
+

46.3.6.2 To Run the SynchConsumer and Producer Clients

+
+

You can run the client using the appclient command. The +SynchConsumer client takes one command-line argument, the destination +type.

+
+
+

These steps show how to receive and send messages synchronously using +both a queue and a topic. The steps assume you already ran the +Producer client and have three messages waiting in the queue.

+
+
+
    +
  1. +

    In the same terminal window where you ran Producer, go to the +synchconsumer directory:

    +
    +
    +
    cd ../synchconsumer
    +
    +
    +
  2. +
  3. +

    Run the SynchConsumer client, specifying the queue:

    +
    +
    +
    appclient -client target/synchconsumer.jar queue
    +
    +
    +
    +

    The output of the client looks like this (along with some additional +output):

    +
    +
    +
    +
    Destination type is queue
    +Reading message: This is message 1 from producer
    +Reading message: This is message 2 from producer
    +Reading message: This is message 3 from producer
    +Messages received: 3
    +
    +
    +
  4. +
  5. +

    Now try running the clients in the opposite order. Run the +SynchConsumer client:

    +
    +
    +
    appclient -client target/synchconsumer.jar queue
    +
    +
    +
    +

    The client displays the destination type and then waits for messages.

    +
    +
  6. +
  7. +

    Open a new terminal window and run the Producer client:

    +
    +
    +
    cd tut-install/jms/simple/producer
    +appclient -client target/producer.jar queue 3
    +
    +
    +
    +

    When the messages have been sent, the SynchConsumer client receives +them and exits.

    +
    +
  8. +
  9. +

    Now run the Producer client using a topic instead of a queue:

    +
    +
    +
    appclient -client target/producer.jar topic 3
    +
    +
    +
    +

    The output of the client looks like this (along with some additional +output):

    +
    +
    +
    +
    Destination type is topic
    +Sending message: This is message 1 from producer
    +Sending message: This is message 2 from producer
    +Sending message: This is message 3 from producer
    +Text messages sent: 3
    +
    +
    +
  10. +
  11. +

    Now, in the other terminal window, run the SynchConsumer client +using the topic:

    +
    +
    +
    appclient -client target/synchconsumer.jar topic
    +
    +
    +
    +

    The result, however, is different. Because you are using a subscription +on a topic, messages that were sent before you created the subscription +on the topic will not be added to the subscription and delivered to the +consumer. (See Publish/Subscribe +Messaging Style and Consuming +Messages from Topics for details.) Instead of receiving the messages, +the client waits for messages to arrive.

    +
    +
  12. +
  13. +

    Leave the SynchConsumer client running and run the Producer +client again:

    +
    +
    +
    appclient -client target/producer.jar topic 3
    +
    +
    +
    +

    Now the SynchConsumer client receives the messages:

    +
    +
    +
    +
    Destination type is topic
    +Reading message: This is message 1 from producer
    +Reading message: This is message 2 from producer
    +Reading message: This is message 3 from producer
    +Messages received: 3
    +
    +
    +
    +

    Because these messages were sent after the consumer was started, the +client receives them.

    +
    +
  14. +
+
+
+
+
+

46.3.7 Using a Message Listener for Asynchronous Message Delivery

+
+

This section describes the receiving clients in an example that uses a +message listener for asynchronous message delivery. This section then +explains how to compile and run the clients using GlassFish Server.

+
+
+
+
+
+
+
+ +++ + + + + + +
+

Note:

+
+
+

In the Java EE platform, message listeners can be used only in +application clients, as in this example. To allow asynchronous message +delivery in a web or enterprise bean application, you use a +message-driven bean, shown in later examples in this chapter.

+
+
+
+
+
+
+
+
+

The following topics are addressed here:

+
+ +
+

46.3.7.1 Writing the AsynchConsumer.java and TextListener.java Clients

+
+

The sending client is Producer.java, the same client used in +Sending Messages and Receiving Messages +Synchronously.

+
+
+

An asynchronous consumer normally runs indefinitely. This one runs until +the user types the character q or Q to stop the client.

+
+
+
    +
  1. +

    The client, AsynchConsumer.java, performs the following steps.

    +
  2. +
  3. +

    Injects resources for a connection factory, queue, and topic.

    +
  4. +
  5. +

    Assigns either the queue or the topic to a destination object, based +on the specified destination type.

    +
  6. +
  7. +

    In a try-with-resources block, creates a JMSContext.

    +
  8. +
  9. +

    Creates a JMSConsumer.

    +
  10. +
  11. +

    Creates an instance of the TextListener class and registers it as +the message listener for the JMSConsumer:

    +
    +
    +
    listener = new TextListener();
    +consumer.setMessageListener(listener);
    +
    +
    +
  12. +
  13. +

    Listens for the messages sent to the destination, stopping when the +user types the character q or Q (it uses a +java.io.InputStreamReader to do this).

    +
  14. +
  15. +

    Catches and handles any exceptions. The end of the +try-with-resources block automatically causes the JMSContext to be +closed, thus stopping delivery of messages to the message listener.

    +
  16. +
  17. +

    The message listener, TextListener.java, follows these steps:

    +
  18. +
  19. +

    When a message arrives, the onMessage method is called +automatically.

    +
  20. +
  21. +

    If the message is a TextMessage, the onMessage method displays +its content as a string value. If the message is not a text message, it +reports this fact:

    +
    +
    +
    public void onMessage(Message m) {
    +    try {
    +        if (m instanceof TextMessage) {
    +            System.out.println(
    +                    "Reading message: " + m.getBody(String.class));
    +        } else {
    +             System.out.println("Message is not a TextMessage");
    +        }
    +    } catch (JMSException | JMSRuntimeException e) {
    +        System.err.println("JMSException in onMessage(): " + e.toString());
    +    }
    +}
    +
    +
    +
  22. +
+
+
+

For this example, you will use the same connection factory and +destinations you created in To Create Resources for the +Simple Examples.

+
+
+

The steps assume that you have already built and packaged all the +examples using NetBeans IDE or Maven.

+
+
+
+

46.3.7.2 To Run the AsynchConsumer and Producer Clients

+
+

You will need two terminal windows, as you did in Receiving +Messages Synchronously.

+
+
+
    +
  1. +

    In the terminal window where you ran the SynchConsumer client, go +to the asynchconsumer example directory:

    +
    +
    +
    cd tut-install/jms/simple/asynchconsumer
    +
    +
    +
  2. +
  3. +

    Run the AsynchConsumer client, specifying the topic destination +type:

    +
    +
    +
    appclient -client target/asynchconsumer.jar topic
    +
    +
    +
    +

    The client displays the following lines (along with some additional +output) and then waits for messages:

    +
    +
    +
    +
    Destination type is topic
    +To end program, enter Q or q, then <return>
    +
    +
    +
  4. +
  5. +

    In the terminal window where you ran the Producer client +previously, run the client again, sending three messages:

    +
    +
    +
    appclient -client target/producer.jar topic 3
    +
    +
    +
    +

    The output of the client looks like this (along with some additional +output):

    +
    +
    +
    +
    Destination type is topic
    +Sending message: This is message 1 from producer
    +Sending message: This is message 2 from producer
    +Sending message: This is message 3 from producer
    +Text messages sent: 3
    +
    +
    +
    +

    In the other window, the AsynchConsumer client displays the following +(along with some additional output):

    +
    +
    +
    +
    Destination type is topic
    +To end program, enter Q or q, then <return>
    +Reading message: This is message 1 from producer
    +Reading message: This is message 2 from producer
    +Reading message: This is message 3 from producer
    +Message is not a TextMessage
    +
    +
    +
    +

    The last line appears because the client has received the non-text +control message sent by the Producer client.

    +
    +
  6. +
  7. +

    Enter Q or q and press Return to stop the AsynchConsumer +client.

    +
  8. +
  9. +

    Now run the clients using a queue.

    +
    +

    In this case, as with the synchronous example, you can run the +Producer client first, because there is no timing dependency between +the sender and receiver:

    +
    +
    +
    +
    appclient -client target/producer.jar queue 3
    +
    +
    +
    +

    The output of the client looks like this:

    +
    +
    +
    +
    Destination type is queue
    +Sending message: This is message 1 from producer
    +Sending message: This is message 2 from producer
    +Sending message: This is message 3 from producer
    +Text messages sent: 3
    +
    +
    +
  10. +
  11. +

    In the other window, run the AsynchConsumer client:

    +
    +
    +
    appclient -client target/asynchconsumer.jar queue
    +
    +
    +
    +

    The output of the client looks like this (along with some additional +output):

    +
    +
    +
    +
    Destination type is queue
    +To end program, enter Q or q, then <return>
    +Reading message: This is message 1 from producer
    +Reading message: This is message 2 from producer
    +Reading message: This is message 3 from producer
    +Message is not a TextMessage
    +
    +
    +
  12. +
  13. +

    Enter Q or q and press Return to stop the client.

    +
  14. +
+
+
+
+
+

46.3.8 Browsing Messages on a Queue

+
+

This section describes an example that creates a QueueBrowser object +to examine messages on a queue, as described in +JMS Queue Browsers. This section then +explains how to compile, package, and run the example using GlassFish +Server.

+
+
+

The following topics are addressed here:

+
+ +
+

46.3.8.1 The MessageBrowser.java Client

+
+

To create a QueueBrowser for a queue, you call the +JMSContext.createBrowser method with the queue as the argument. You +obtain the messages in the queue as an Enumeration object. You can +then iterate through the Enumeration object and display the contents +of each message.

+
+
+

The MessageBrowser.java client performs the following steps.

+
+
+
    +
  1. +

    Injects resources for a connection factory and a queue.

    +
  2. +
  3. +

    In a try-with-resources block, creates a JMSContext.

    +
  4. +
  5. +

    Creates a QueueBrowser:

    +
    +
    +
    QueueBrowser browser = context.createBrowser(queue);
    +
    +
    +
  6. +
  7. +

    Retrieves the Enumeration that contains the messages:

    +
    +
    +
    Enumeration msgs = browser.getEnumeration();
    +
    +
    +
  8. +
  9. +

    Verifies that the Enumeration contains messages, then displays the +contents of the messages:

    +
    +
    +
    if ( !msgs.hasMoreElements() ) {
    +    System.out.println("No messages in queue");
    +} else {
    +    while (msgs.hasMoreElements()) {
    +        Message tempMsg = (Message)msgs.nextElement();
    +        System.out.println("Message: " + tempMsg);
    +    }
    +}
    +
    +
    +
  10. +
  11. +

    Catches and handles any exceptions. The end of the +try-with-resources block automatically causes the JMSContext to be +closed.

    +
  12. +
+
+
+

Dumping the message contents to standard output retrieves the message +body and properties in a format that depends on the implementation of +the toString method. In GlassFish Server, the message format looks +something like this:

+
+
+
+
Text:   This is message 3 from producer
+Class:                  com.sun.messaging.jmq.jmsclient.TextMessageImpl
+getJMSMessageID():      ID:8-10.152.23.26(bf:27:4:e:e7:ec)-55645-1363100335526
+getJMSTimestamp():      1129061034355
+getJMSCorrelationID():  null
+JMSReplyTo:             null
+JMSDestination:         PhysicalQueue
+getJMSDeliveryMode():   PERSISTENT
+getJMSRedelivered():    false
+getJMSType():           null
+getJMSExpiration():     0
+getJMSPriority():       4
+Properties:             {JMSXDeliveryCount=0}
+
+
+
+

Instead of displaying the message contents this way, you can call some +of the Message interface’s getter methods to retrieve the parts of the +message you want to see.

+
+
+

For this example, you will use the connection factory and queue you +created for Receiving Messages Synchronously. It is assumed +that you have already built and packaged all the examples.

+
+
+
+

46.3.8.2 To Run the QueueBrowser Client

+
+

To run the MessageBrowser example using the appclient command, +follow these steps.

+
+
+

You also need the Producer example to send the message to the queue, +and one of the consumer clients to consume the messages after you +inspect them.

+
+
+

To run the clients, you need two terminal windows.

+
+
+
    +
  1. +

    In a terminal window, go to the producer directory:

    +
    +
    +
    cd tut-install/examples/jms/simple/producer/
    +
    +
    +
  2. +
  3. +

    Run the Producer client, sending one message to the queue, along +with the non-text control message:

    +
    +
    +
    appclient -client target/producer.jar queue
    +
    +
    +
    +

    The output of the client looks like this (along with some additional +output):

    +
    +
    +
    +
    Destination type is queue
    +Sending message: This is message 1 from producer
    +Text messages sent: 1
    +
    +
    +
  4. +
  5. +

    In another terminal window, go to the messagebrowser directory:

    +
    +
    +
    cd tut-install/jms/simple/messagebrowser
    +
    +
    +
  6. +
  7. +

    Run the MessageBrowser client using the following command:

    +
    +
    +
    appclient -client target/messagebrowser.jar
    +
    +
    +
    +

    The output of the client looks something like this (along with some +additional output):

    +
    +
    +
    +
    Message:
    +Text:   This is message 1 from producer
    +Class:                  com.sun.messaging.jmq.jmsclient.TextMessageImpl
    +getJMSMessageID():      ID:9-10.152.23.26(bf:27:4:e:e7:ec)-55645-1363100335526
    +getJMSTimestamp():      1363100335526
    +getJMSCorrelationID():  null
    +JMSReplyTo:             null
    +JMSDestination:         PhysicalQueue
    +getJMSDeliveryMode():   PERSISTENT
    +getJMSRedelivered():    false
    +getJMSType():           null
    +getJMSExpiration():     0
    +getJMSPriority():       4
    +Properties:             {JMSXDeliveryCount=0}
    +
    +Message:
    +Class:                  com.sun.messaging.jmq.jmsclient.MessageImpl
    +getJMSMessageID():      ID:10-10.152.23.26(bf:27:4:e:e7:ec)-55645-1363100335526
    +getJMSTimestamp():      1363100335526
    +getJMSCorrelationID():  null
    +JMSReplyTo:             null
    +JMSDestination:         PhysicalQueue
    +getJMSDeliveryMode():   PERSISTENT
    +getJMSRedelivered():    false
    +getJMSType():           null
    +getJMSExpiration():     0
    +getJMSPriority():       4
    +Properties:             {JMSXDeliveryCount=0}
    +
    +
    +
    +

    The first message is the TextMessage, and the second is the non-text +control message.

    +
    +
  8. +
  9. +

    Go to the synchconsumer directory.

    +
  10. +
  11. +

    Run the SynchConsumer client to consume the messages:

    +
    +
    +
    appclient -client target/synchconsumer.jar queue
    +
    +
    +
    +

    The output of the client looks like this (along with some additional +output):

    +
    +
    +
    +
    Destination type is queue
    +Reading message: This is message 1 from producer
    +Messages received: 1
    +
    +
    +
  12. +
+
+
+
+
+

46.3.9 Running Multiple Consumers on the Same Destination

+
+

To illustrate further the way point-to-point and publish/subscribe +messaging works, you can use the Producer and SynchConsumer examples +to send messages that are then consumed by two clients running +simultaneously.

+
+
+
    +
  1. +

    Open three command windows. In one, go to the producer directory. +In the other two, go to the synchconsumer directory.

    +
  2. +
  3. +

    In each of the synchconsumer windows, start running the client, +receiving messages from a queue:

    +
    +
    +
    appclient -client target/synchconsumer.jar queue
    +
    +
    +
    +

    Wait until you see the "Destination type is queue" message in both +windows.

    +
    +
  4. +
  5. +

    In the producer window, run the client, sending 20 or so messages +to the queue:

    +
    +
    +
    appclient -client target/producer.jar queue 20
    +
    +
    +
  6. +
  7. +

    Look at the output in the synchconsumer windows. In point-to-point +messaging, each message can have only one consumer. Therefore, each of +the clients receives some of the messages. One of the clients receives +the non-text control message, reports the number of messages received, +and exits.

    +
  8. +
  9. +

    In the window of the client that did not receive the non-text +control message, enter Control-C to exit the program.

    +
  10. +
  11. +

    Next, run the synchconsumer clients using a topic. In each window, +run the following command:

    +
    +
    +
    appclient -client target/synchconsumer.jar topic
    +
    +
    +
    +

    Wait until you see the "Destination type is topic" message in both +windows.

    +
    +
  12. +
  13. +

    In the producer window, run the client, sending 20 or so messages +to the topic:

    +
    +
    +
    appclient -client target/producer.jar topic 20
    +
    +
    +
  14. +
  15. +

    Again, look at the output in the synchconsumer windows. In +publish/subscribe messaging, a copy of every message is sent to each +subscription on the topic. Therefore, each of the clients receives all +20 text messages as well as the non-text control message.

    +
  16. +
+
+
+
+

46.3.10 Acknowledging Messages

+
+

JMS provides two alternative ways for a consuming client to ensure that +a message is not acknowledged until the application has finished +processing the message:

+
+
+
    +
  • +

    Using a synchronous consumer in a JMSContext that has been +configured to use the CLIENT_ACKNOWLEDGE setting

    +
  • +
  • +

    Using a message listener for asynchronous message delivery in a +JMSContext that has been configured to use the default +AUTO_ACKNOWLEDGE setting

    +
    +
    +
    +
    +
    +
    +
  • +
+
+ +++ + + + + + +
+

Note:

+
+
+

In the Java EE platform, CLIENT_ACKNOWLEDGE sessions can be used only +in application clients, as in this example.

+
+
+
+
+
+
+
+
+

The clientackconsumer example demonstrates the first alternative, in +which a synchronous consumer uses client acknowledgment. The +asynchconsumer example described in Using a Message +Listener for Asynchronous Message Delivery demonstrates the second +alternative.

+
+
+

For information about message acknowledgment, see +Controlling Message Acknowledgment.

+
+
+

The following table describes four possible interactions between types +of consumers and types of acknowledgment.

+
+
+

+
+
+

Table 46-3 Message Acknowledgment with Synchronous and Asynchronous +Consumers

+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Consumer TypeAcknowledgment TypeBehavior

Synchronous

Client

Client acknowledges message after processing is +complete

Asynchronous

Client

Client acknowledges message after processing is +complete

Synchronous

Auto

Acknowledgment happens immediately after receive +call; message cannot be redelivered if any subsequent processing steps +fail

Asynchronous

Auto

Message is automatically acknowledged when +onMessage method returns

+
+
+
+
+
+
+
+

The example is under the +tut-install`/examples/jms/simple/clientackconsumer/` directory.

+
+
+

The example client, ClientAckConsumer.java, creates a JMSContext +that specifies client acknowledgment:

+
+
+
+
try (JMSContext context =
+      connectionFactory.createContext(JMSContext.CLIENT_ACKNOWLEDGE);) {
+    ...
+
+
+
+

The client uses a while loop almost identical to that used by +SynchConsumer.java, with the exception that after processing each +message, it calls the acknowledge method on the JMSContext:

+
+
+
+
context.acknowledge();
+
+
+
+

The example uses the following objects:

+
+
+
    +
  • +

    The jms/MyQueue resource that you created for Receiving +Messages Synchronously.

    +
  • +
  • +

    java:comp/DefaultJMSConnectionFactory, the platform default +connection factory preconfigured with GlassFish Server

    +
  • +
+
+
+

46.3.10.1 To Run the ClientAckConsumer Client

+
+
    +
  1. +

    In a terminal window, go to the following directory:

    +
    +
    +
    tut-install/examples/jms/simple/producer/
    +
    +
    +
  2. +
  3. +

    Run the Producer client, sending some messages to the queue:

    +
    +
    +
    appclient -client target/producer.jar queue 3
    +
    +
    +
  4. +
  5. +

    In another terminal window, go to the following directory:

    +
    +
    +
    tut-install/examples/jms/simple/clientackconsumer/
    +
    +
    +
  6. +
  7. +

    To run the client, use the following command:

    +
    +
    +
    appclient -client target/clientackconsumer.jar
    +
    +
    +
    +

    The client output looks like this (along with some additional output):

    +
    +
    +
    +
    Created client-acknowledge JMSContext
    +Reading message: This is message 1 from producer
    +Acknowledging TextMessage
    +Reading message: This is message 2 from producer
    +Acknowledging TextMessage
    +Reading message: This is message 3 from producer
    +Acknowledging TextMessage
    +Acknowledging non-text control message
    +
    +
    +
    +

    The client acknowledges each message explicitly after processing it, +just as a JMSContext configured to use AUTO_ACKNOWLEDGE does +automatically after a MessageListener returns successfully from +processing a message received asynchronously.

    +
    +
  8. +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+
+ + + \ No newline at end of file diff --git a/jms-examples004.html b/jms-examples004.html new file mode 100644 index 0000000..87e36e4 --- /dev/null +++ b/jms-examples004.html @@ -0,0 +1,785 @@ + + + + + + Writing More Advanced JMS Applications + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

46.4 Writing More Advanced JMS Applications

+
+
+

The following examples show how to use some of the more advanced +features of the JMS API: durable subscriptions and transactions.

+
+
+

The following topics are addressed here:

+
+ +
+

46.4.1 Using Durable Subscriptions

+
+

The durablesubscriptionexample example shows how unshared durable +subscriptions work. It demonstrates that a durable subscription +continues to exist and accumulate messages even when there is no active +consumer on it.

+
+
+

The example consists of two modules, a durableconsumer application +that creates a durable subscription and consumes messages, and an +unsubscriber application that enables you to unsubscribe from the +durable subscription after you have finished running the +durableconsumer application.

+
+
+

For information on durable subscriptions, see +Creating Durable Subscriptions.

+
+
+

The main client, DurableConsumer.java, is under the +tut-install`/examples/jms/durablesubscriptionexample/durableconsumer`/ +directory.

+
+
+

The example uses a connection factory, j`ms/DurableConnectionFactory`, +that has a client ID.

+
+
+

The DurableConsumer client creates a JMSContext using the connection +factory. It then stops the JMSContext, calls createDurableConsumer +to create a durable subscription and a consumer on the topic by +specifying a subscription name, registers a message listener, and starts +the JMSContext again. The subscription is created only if it does not +already exist, so the example can be run repeatedly:

+
+
+
+
try (JMSContext context = durableConnectionFactory.createContext();) {
+    context.stop();
+    consumer = context.createDurableConsumer(topic, "MakeItLast");
+    listener = new TextListener();
+    consumer.setMessageListener(listener);
+    context.start();
+    ...
+
+
+
+

To send messages to the topic, you run the producer client.

+
+
+

The unsubscriber example contains a very simple Unsubscriber client, +which creates a JMSContext on the same connection factory and then +calls the unsubscribe method, specifying the subscription name:

+
+
+
+
try (JMSContext context = durableConnectionFactory.createContext();) {
+    System.out.println("Unsubscribing from durable subscription");
+    context.unsubscribe("MakeItLast");
+} ...
+
+
+
+

46.4.1.1 To Create Resources for the Durable Subscription Example

+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    In a command window, go to the durableconsumer example.

    +
    +
    +
    cd tut-install/jms/durablesubscriptionexample/durableconsumer
    +
    +
    +
  4. +
  5. +

    Create the resources using the asadmin add-resources command:

    +
    +
    +
    asadmin add-resources src/main/setup/glassfish-resources.xml
    +
    +
    +
    +

    The command output reports the creation of a connector connection pool +and a connector resource.

    +
    +
  6. +
  7. +

    Verify the creation of the resources:

    +
    +
    +
    asadmin list-jms-resources
    +
    +
    +
    +

    In addition to the resources you created for the simple examples, the +command lists the new connection factory:

    +
    +
    +
    +
    jms/MyQueue
    +jms/MyTopic
    +jms/__defaultConnectionFactory
    +jms/DurableConnectionFactory
    +Command list-jms-resources executed successfully.
    +
    +
    +
  8. +
+
+
+
+

46.4.1.2 To Run the Durable Subscription Example

+
+
    +
  1. +

    In a terminal window, go to the following directory:

    +
    +
    +
    tut-install/examples/jms/durablesubscriptionexample/
    +
    +
    +
  2. +
  3. +

    Build the durableconsumer and unsubscriber examples:

    +
    +
    +
    mvn install
    +
    +
    +
  4. +
  5. +

    Go to the durableconsumer directory:

    +
    +
    +
    cd durableconsumer
    +
    +
    +
  6. +
  7. +

    To run the client, enter the following command:

    +
    +
    +
    appclient -client target/durableconsumer.jar
    +
    +
    +
    +

    The client creates the durable consumer and then waits for messages:

    +
    +
    +
    +
    Creating consumer for topic
    +Starting consumer
    +To end program, enter Q or q, then <return>
    +
    +
    +
  8. +
  9. +

    In another terminal window, run the Producer client, sending some +messages to the topic:

    +
    +
    +
    cd tut-install/examples/jms/simple/producer
    +appclient -client target/producer.jar topic 3
    +
    +
    +
  10. +
  11. +

    After the DurableConsumer client receives the messages, enter q +or Q to exit the program. At this point, the client has behaved like +any other asynchronous consumer.

    +
  12. +
  13. +

    Now, while the DurableConsumer client is not running, use the +Producer client to send more messages:

    +
    +
    +
    appclient -client target/producer.jar topic 2
    +
    +
    +
    +

    If a durable subscription did not exist, these messages would be lost, +because no consumer on the topic is currently running. However, the +durable subscription is still active, and it retains the messages.

    +
    +
  14. +
  15. +

    Run the DurableConsumer client again. It immediately receives the +messages that were sent while it was inactive:

    +
    +
    +
    Creating consumer for topic
    +Starting consumer
    +To end program, enter Q or q, then <return>
    +Reading message: This is message 1 from producer
    +Reading message: This is message 2 from producer
    +Message is not a TextMessage
    +
    +
    +
  16. +
  17. +

    Enter q or Q to exit the program.

    +
  18. +
+
+
+
+

46.4.1.3 To Run the unsubscriber Example

+
+

After you have finished running the DurableConsumer client, run the +unsubscriber example to unsubscribe from the durable subscription.

+
+
+
    +
  1. +

    In a terminal window, go to the following directory:

    +
    +
    +
    tut-install/examples/jms/durablesubscriptionexample/unsubscriber
    +
    +
    +
  2. +
  3. +

    To run the Unsubscriber client, enter the following command:

    +
    +
    +
    appclient -client target/unsubscriber.jar
    +
    +
    +
    +

    The client reports that it is unsubscribing from the durable +subscription.

    +
    +
  4. +
+
+
+
+
+

46.4.2 Using Local Transactions

+
+

The transactedexample example demonstrates the use of local +transactions in a JMS client application. It also demonstrates the use +of the request/reply messaging pattern described in +Creating Temporary Destinations, +although it uses permanent rather than temporary destinations. The +example consists of three modules, genericsupplier, retailer, and +vendor, which can be found under the +tut-install`/examples/jms/transactedexample/` directory. The source code +can be found in the src/main/java/javaeetutorial trees for each +module. The genericsupplier and retailer modules each contain a +single class, genericsupplier/GenericSupplier.java and +retailer/Retailer.java, respectively. The vendor module is more +complex, containing four classes: vendor/Vendor.java, +vendor/VendorMessageListener.java, vendor/Order.java, and +vendor/SampleUtilities.java.

+
+
+

The example shows how to use a queue and a topic in a single transaction +as well as how to pass a JMSContext to a message listener’s +constructor function. The example represents a highly simplified +e-commerce application in which the following actions occur.

+
+
+
    +
  1. +

    A retailer +(retailer/src/main/java/javaeetutorial/retailer/Retailer.java) sends a +MapMessage to a vendor order queue, ordering a quantity of computers, +and waits for the vendor’s reply:

    +
    +
    +
    outMessage = context.createMapMessage();
    +outMessage.setString("Item", "Computer(s)");
    +outMessage.setInt("Quantity", quantity);
    +outMessage.setJMSReplyTo(retailerConfirmQueue);
    +context.createProducer().send(vendorOrderQueue, outMessage);
    +System.out.println("Retailer: ordered " + quantity + " computer(s)");
    +orderConfirmReceiver = context.createConsumer(retailerConfirmQueue);
    +
    +
    +
  2. +
  3. +

    The vendor +(vendor/src/main/java/javaeetutorial/retailer/Vendor.java) receives +the retailer’s order message and sends an order message to the supplier +order topic in one transaction. This JMS transaction uses a single +session, so you can combine a receive from a queue with a send to a +topic. Here is the code that uses the same session to create a consumer +for a queue:

    +
    +
    +
    vendorOrderReceiver = session.createConsumer(vendorOrderQueue);
    +
    +
    +
    +

    The following code receives the incoming message, sends an outgoing +message, and commits the JMSContext. The message processing has been +removed to keep the sequence simple:

    +
    +
    +
    +
    inMessage = vendorOrderReceiver.receive();
    +// Process the incoming message and format the outgoing
    +// message
    +...
    +context.createProducer().send(supplierOrderTopic, orderMessage);
    +...
    +context.commit();
    +
    +
    +
    +

    For simplicity, there are only two suppliers, one for CPUs and one for +hard drives.

    +
    +
  4. +
  5. +

    Each supplier +(genericsupplier/src/main/java/javaeetutorial/retailer/GenericSupplier.java) +receives the order from the order topic, checks its inventory, and then +sends the items ordered to the queue named in the order message’s +JMSReplyTo field. If it does not have enough of the item in stock, the +supplier sends what it has. The synchronous receive from the topic and +the send to the queue take place in one JMS transaction:

    +
    +
    +
    receiver = context.createConsumer(SupplierOrderTopic);
    +...
    +inMessage = receiver.receive();
    +if (inMessage instanceof MapMessage) {
    +    orderMessage = (MapMessage) inMessage;
    +} ...
    +// Process message
    +outMessage = context.createMapMessage();
    +// Add content to message
    +context.createProducer().send(
    +         (Queue) orderMessage.getJMSReplyTo(),
    +         outMessage);
    +// Display message contents
    +context.commit();
    +
    +
    +
  6. +
  7. +

    The vendor receives the suppliers' replies from its confirmation +queue and updates the state of the order. Messages are processed by an +asynchronous message listener, VendorMessageListener; this step shows +the use of JMS transactions with a message listener:

    +
    +
    +
    MapMessage component = (MapMessage) message;
    +...
    +int orderNumber = component.getInt("VendorOrderNumber");
    +Order order = Order.getOrder(orderNumber).processSubOrder(component);
    +context.commit();
    +
    +
    +
  8. +
  9. +

    When all outstanding replies are processed for a given order, the +vendor message listener sends a message notifying the retailer whether +it can fulfill the order:

    +
    +
    +
    Queue replyQueue = (Queue) order.order.getJMSReplyTo();
    +MapMessage retailerConfirmMessage = context.createMapMessage();
    +// Format the message
    +context.createProducer().send(replyQueue, retailerConfirmMessage);
    +context.commit();
    +
    +
    +
  10. +
  11. +

    The retailer receives the message from the vendor:

    +
    +
    +
    inMessage = (MapMessage) orderConfirmReceiver.receive();
    +
    +
    +
    +

    The retailer then places a second order for twice as many computers as +in the first order, so these steps are executed twice.

    +
    +
  12. +
+
+
+

Figure 46-1 illustrates these steps.

+
+
+

Figure 46-1 Transactions: JMS Client Example

+
+ +
+

All the messages use the MapMessage message type. Synchronous receives +are used for all message reception except when the vendor processes the +replies of the suppliers. These replies are processed asynchronously and +demonstrate how to use transactions within a message listener.

+
+
+

At random intervals, the Vendor client throws an exception to simulate +a database problem and cause a rollback.

+
+
+

All clients except Retailer use transacted contexts.

+
+
+

The example uses three queues named jms/AQueue, jms/BQueue, and +jms/CQueue, and one topic named jms/OTopic.

+
+
+

46.4.2.1 To Create Resources for the transactedexample Example

+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    In a command window, go to the genericsupplier example:

    +
    +
    +
    cd tut-install/jms/transactedexample/genericsupplier
    +
    +
    +
  4. +
  5. +

    Create the resources using the asadmin add-resources command:

    +
    +
    +
    asadmin add-resources src/main/setup/glassfish-resources.xml
    +
    +
    +
  6. +
  7. +

    Verify the creation of the resources:

    +
    +
    +
    asadmin list-jms-resources
    +
    +
    +
    +

    In addition to the resources you created for the simple examples and the +durable subscription example, the command lists the four new +destinations:

    +
    +
    +
    +
    jms/MyQueue
    +jms/MyTopic
    +jms/AQueue
    +jms/BQueue
    +jms/CQueue
    +jms/OTopic
    +jms/__defaultConnectionFactory
    +jms/DurableConnectionFactory
    +Command list-jms-resources executed successfully.
    +
    +
    +
  8. +
+
+
+
+

46.4.2.2 To Run the transactedexample Clients

+
+

You will need four terminal windows to run the clients. Make sure that +you start the clients in the correct order.

+
+
+
    +
  1. +

    In a terminal window, go to the following directory:

    +
    +
    +
    tut-install/examples/jms/transactedexample/
    +
    +
    +
  2. +
  3. +

    To build and package all the modules, enter the following command:

    +
    +
    +
    mvn install
    +
    +
    +
  4. +
  5. +

    Go to the genericsupplier directory:

    +
    +
    +
    cd genericsupplier
    +
    +
    +
  6. +
  7. +

    +
    +

    Use the following command to start the CPU supplier client:

    +
    +
    +
    +
    appclient -client target\genericsupplier.jar CPU
    +
    +
    +
    +

    After some initial output, the client reports the following:

    +
    +
    +
    +
    Starting CPU supplier
    +
    +
    +
  8. +
  9. +

    In a second terminal window, go to the genericsupplier directory:

    +
    +
    +
    cd tut-install/examples/jms/transactedexample/genericsupplier
    +
    +
    +
  10. +
  11. +

    Use the following command to start the hard drive supplier client:

    +
    +
    +
    appclient -client target\genericsupplier.jar HD
    +
    +
    +
    +

    After some initial output, the client reports the following:

    +
    +
    +
    +
    Starting Hard Drive supplier
    +
    +
    +
  12. +
  13. +

    In a third terminal window, go to the vendor directory:

    +
    +
    +
    cd tut-install/examples/jms/transactedexample/vendor
    +
    +
    +
  14. +
  15. +

    Use the following command to start the Vendor client:

    +
    +
    +
    appclient -client target\vendor.jar
    +
    +
    +
    +

    After some initial output, the client reports the following:

    +
    +
    +
    +
    Starting vendor
    +
    +
    +
  16. +
  17. +

    In another terminal window, go to the retailer directory:

    +
    +
    +
    cd tut-install/examples/jms/transactedexample/retailer
    +
    +
    +
  18. +
  19. +

    +
    +

    Use a command like the following to run the Retailer client. The +argument specifies the number of computers to order:

    +
    +
    +
    +
    appclient -client target/retailer.jar 4
    +
    +
    +
    +

    After some initial output, the Retailer client reports something like +the following. In this case, the first order is filled, but the second +is not:

    +
    +
    +
    +
    Retailer: Quantity to be ordered is 4
    +Retailer: Ordered 4 computer(s)
    +Retailer: Order filled
    +Retailer: Placing another order
    +Retailer: Ordered 8 computer(s)
    +Retailer: Order not filled
    +
    +
    +
    +

    The Vendor client reports something like the following, stating in +this case that it is able to send all the computers in the first order, +but not in the second:

    +
    +
    +
    +
    Vendor: Retailer ordered 4 Computer(s)
    +Vendor: Ordered 4 CPU(s) and hard drive(s)
    +  Vendor: Committed transaction 1
    +Vendor: Completed processing for order 1
    +Vendor: Sent 4 computer(s)
    +  Vendor: committed transaction 2
    +Vendor: Retailer ordered 8 Computer(s)
    +Vendor: Ordered 8 CPU(s) and hard drive(s)
    +  Vendor: Committed transaction 1
    +Vendor: Completed processing for order 2
    +Vendor: Unable to send 8 computer(s)
    +  Vendor: Committed transaction 2
    +
    +
    +
    +

    The CPU supplier reports something like the following. In this case, it +is able to send all the CPUs for both orders:

    +
    +
    +
    +
    CPU Supplier: Vendor ordered 4 CPU(s)
    +CPU Supplier: Sent 4 CPU(s)
    +  CPU Supplier: Committed transaction
    +CPU Supplier: Vendor ordered 8 CPU(s)
    +CPU Supplier: Sent 8 CPU(s)
    +  CPU Supplier: Committed transaction
    +
    +
    +
    +

    The hard drive supplier reports something like the following. In this +case, it has a shortage of hard drives for the second order:

    +
    +
    +
    +
    Hard Drive Supplier: Vendor ordered 4 Hard Drive(s)
    +Hard Drive Supplier: Sent 4 Hard Drive(s)
    +  Hard Drive Supplier: Committed transaction
    +Hard Drive Supplier: Vendor ordered 8 Hard Drive(s)
    +Hard Drive Supplier: Sent 1 Hard Drive(s)
    +  Hard Drive Supplier: Committed transaction
    +
    +
    +
  20. +
  21. +

    Repeat steps 4 through 10 as many +times as you wish. Occasionally, the vendor will report an exception +that causes a rollback:

    +
    +
    +
    Vendor: JMSException occurred: javax.jms.JMSException: Simulated
    +database concurrent access exception
    +  Vendor: Rolled back transaction 1
    +
    +
    +
  22. +
  23. +

    After you finish running the clients, you can delete the destination +resources by using the following commands:

    +
    +
    +
    asadmin delete-jms-resource jms/AQueue
    +asadmin delete-jms-resource jms/BQueue
    +asadmin delete-jms-resource jms/CQueue
    +asadmin delete-jms-resource jms/OTopic
    +
    +
    +
  24. +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+
+ + + \ No newline at end of file diff --git a/jms-examples005.html b/jms-examples005.html new file mode 100644 index 0000000..120ee2b --- /dev/null +++ b/jms-examples005.html @@ -0,0 +1,382 @@ + + + + + + Writing High Performance and Scalable JMS Applications + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

46.5 Writing High Performance and Scalable JMS Applications

+
+
+

This section describes how to use the JMS API to write applications that +can handle high volumes of messages robustly. These examples use both +nondurable and durable shared consumers.

+
+
+

The following topics are addressed here:

+
+ +
+

46.5.1 Using Shared Nondurable Subscriptions

+
+

This section describes the receiving clients in an example that shows +how to use a shared consumer to distribute messages sent to a topic +among different consumers. This section then explains how to compile and +run the clients using GlassFish Server.

+
+
+

You may wish to compare this example to the results of +Running Multiple Consumers on the Same +Destination using an unshared consumer. In that example, messages are +distributed among the consumers on a queue, but each consumer on the +topic receives all the messages because each consumer on the topic is +using a separate topic subscription.

+
+
+

In this example, however, messages are distributed among multiple +consumers on a topic, because all the consumers are sharing the same +subscription. Each message added to the topic subscription is received +by only one consumer, similarly to the way in which each message added +to a queue is received by only one consumer.

+
+
+

A topic may have multiple subscriptions. Each message sent to the topic +will be added to each topic subscription. However, if there are multiple +consumers on a particular subscription, each message added to that +subscription will be delivered to only one of those consumers.

+
+
+

46.5.1.1 Writing the Clients for the Shared Consumer Example

+
+

The sending client is Producer.java, the same client used in previous +examples.

+
+
+

The receiving client is SharedConsumer.java. It is very similar to +AsynchConsumer.java, except that it always uses a topic. It performs +the following steps.

+
+
+
    +
  1. +

    Injects resources for a connection factory and topic.

    +
  2. +
  3. +

    In a try-with-resources block, creates a JMSContext.

    +
  4. +
  5. +

    Creates a consumer on a shared nondurable subscription, specifying a +subscription name:

    +
    +
    +
    consumer = context.createSharedConsumer(topic, "SubName");
    +
    +
    +
  6. +
  7. +

    Creates an instance of the TextListener class and registers it as +the message listener for the shared consumer.

    +
  8. +
  9. +

    Listens for the messages published to the destination, stopping when +the user types the character q or Q.

    +
  10. +
  11. +

    Catches and handles any exceptions. The end of the +try-with-resources block automatically causes the JMSContext to be +closed.

    +
  12. +
+
+
+

The TextListener.java class is identical to the one for the +asynchconsumer example.

+
+
+

For this example, you will use the default connection factory and the +topic you created in To Create +Resources for the Simple Examples.

+
+
+
+

46.5.1.2 To Run the SharedConsumer and Producer Clients

+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    Open three command windows. In the first, go to the +simple/producer/ directory:

    +
    +
    +
    cd tut-install/examples/jms/simple/producer/
    +
    +
    +
  4. +
  5. +

    In the second and third command windows, go to the +shared/sharedconsumer/ directory:

    +
    +
    +
    cd tut-install/examples/jms/shared/sharedconsumer/
    +
    +
    +
  6. +
  7. +

    In one of the sharedconsumer windows, build the example:

    +
    +
    +
    mvn install
    +
    +
    +
  8. +
  9. +

    In each of the two sharedconsumer windows, start running the +client. You do not need to specify a topic argument:

    +
    +
    +
    appclient -client target/sharedconsumer.jar
    +
    +
    +
    +

    Wait until you see the following output in both windows:

    +
    +
    +
    +
    Waiting for messages on topic
    +To end program, enter Q or q, then <return>
    +
    +
    +
  10. +
  11. +

    In the producer window, run the client, specifying the topic and a +number of messages:

    +
    +
    +
    appclient -client target/producer.jar topic 20
    +
    +
    +
    +

    Each consumer client receives some of the messages. Only one of the +clients receives the non-text message that signals the end of the +message stream.

    +
    +
  12. +
  13. +

    Enter Q or q and press Return to stop each client and see a +report of the number of text messages received.

    +
  14. +
+
+
+
+
+

46.5.2 Using Shared Durable Subscriptions

+
+

The shareddurableconsumer client shows how to use shared durable +subscriptions. It shows how shared durable subscriptions combine the +advantages of durable subscriptions (the subscription remains active +when the client is not) with those of shared consumers (the message load +can be divided among multiple clients).

+
+
+

The example is much more similar to the sharedconsumer example than to +the DurableConsumer.java client. It uses two classes, +SharedDurableConsumer.java and TextListener.java, which can be found +under the tut-install`/examples/jms/shared/shareddurableconsumer/` +directory.

+
+
+

The client uses java:comp/DefaultJMSConnectionFactory, the connection +factory that does not have a client identifier, as is recommended for +shared durable subscriptions. It uses the createSharedDurableConsumer +method with a subscription name to establish the subscription:

+
+
+
+
consumer = context.createSharedDurableConsumer(topic, "MakeItLast");
+
+
+
+

You run the example in combination with the Producer.java client.

+
+
+

46.5.2.1 To Run the SharedDurableConsumer and Producer Clients

+
+
    +
  1. +

    In a terminal window, go to the following directory:

    +
    +
    +
    tut-install/examples/jms/shared/shareddurableconsumer
    +
    +
    +
  2. +
  3. +

    To compile and package the client, enter the following command:

    +
    +
    +
    mvn install
    +
    +
    +
  4. +
  5. +

    Run the client first to establish the durable subscription:

    +
    +
    +
    appclient -client target/shareddurableconsumer.jar
    +
    +
    +
  6. +
  7. +

    The client displays the following and pauses:

    +
    +
    +
    Waiting for messages on topic
    +To end program, enter Q or q, then <return>
    +
    +
    +
  8. +
  9. +

    In the shareddurableconsumer window, enter q or Q to exit the +program. The subscription remains active, although the client is not +running.

    +
  10. +
  11. +

    Open another terminal window and go to the producer example +directory:

    +
    +
    +
    cd tut-install/examples/jms/simple/producer
    +
    +
    +
  12. +
  13. +

    Run the producer example, sending a number of messages to the +topic:

    +
    +
    +
    appclient -client target/producer.jar topic 6
    +
    +
    +
  14. +
  15. +

    After the producer has sent the messages, open a third terminal +window and go to the shareddurableconsumer directory.

    +
  16. +
  17. +

    Run the client in both the first and third terminal windows. +Whichever client starts first will receive all the messages that were +sent when there was no active subscriber:

    +
    +
    +
    appclient -client target/shareddurableconsumer.jar
    +
    +
    +
  18. +
  19. +

    With both shareddurableconsumer clients still running, go to the +producer window and send a larger number of messages to the topic:

    +
    +
    +
    appclient -client target/producer.jar topic 25
    +
    +
    +
    +

    Now the messages will be shared by the two consumer clients. If you +continue sending groups of messages to the topic, each client receives +some of the messages. If you exit one of the clients and send more +messages, the other client will receive all the messages.

    +
    +
  20. +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+
+ + + \ No newline at end of file diff --git a/jms-examples006.html b/jms-examples006.html new file mode 100644 index 0000000..9b61c9e --- /dev/null +++ b/jms-examples006.html @@ -0,0 +1,382 @@ + + + + + + Sending and Receiving Messages Using a Simple Web Application + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

46.6 Sending and Receiving Messages Using a Simple Web Application

+
+
+

Web applications can use the JMS API to send and receive messages, as +noted in Using Java EE Components to +Produce and to Synchronously Receive Messages. This section describes +the components of a very simple web application that uses the JMS API.

+
+
+

This section assumes that you are familiar with the basics of JavaServer +Faces technology, described in Part IX, "The +Web Tier."

+
+
+

The example, websimplemessage, is under the +tut-install`/jms/examples/` directory. It uses sending and receiving +Facelets pages as well as corresponding backing beans. When a user +enters a message in the text field of the sending page and clicks a +button, the backing bean for the page sends the message to a queue and +displays it on the page. When the user goes to the receiving page and +clicks another button, the backing bean for that page receives the +message synchronously and displays it.

+
+
+

Figure 46-2 The websimplemessage Application

+
+ +
+

46.6.1 The websimplemessage Facelets Pages

+
+

The Facelets pages for the example are as follows.

+
+
+
    +
  • +

    sender.xhtml, which provides a labeled h:InputText tag where the +user enters the message, along with two command buttons. When the user +clicks the Send Message button, the senderBean.sendMessage method is +called to send the message to the queue and display its contents. When +the user clicks the Go to Receive Page button, the receiver.xhtml page +appears.

    +
  • +
  • +

    receiver.xhtml, which also provides two command buttons. When the +user clicks the Receive Message button, the receiverBean.getMessage +method is called to fetch the message from the queue and display its +contents. When the user clicks the Send Another Message button, the +sender.xhtml page appears again.

    +
  • +
+
+
+
+

46.6.2 The websimplemessage Managed Beans

+
+

The two managed beans for the example are as follows.

+
+
+
    +
  • +

    SenderBean.java, a CDI managed bean with one property, +messageText, and one business method, sendMessage. The class is +annotated with @JMSDestinationDefinition to create a component-private +queue:

    +
    +
    +
    @JMSDestinationDefinition(
    +        name = "java:comp/jms/webappQueue",
    +        interfaceName = "javax.jms.Queue",
    +        destinationName = "PhysicalWebappQueue")
    +@Named
    +@RequestScoped
    +public class SenderBean {
    +
    +
    +
    +

    The sendMessage method injects a JMSContext (using the default +connection factory) and the queue, creates a producer, sends the message +the user typed on the Facelets page, and creates a FacesMessage to +display on the Facelets page:

    +
    +
    +
    +
    @Inject
    +private JMSContext context;
    +@Resource(lookup = "java:comp/jms/webappQueue")
    +private Queue queue;
    +private String messageText;
    +...
    +public void sendMessage() {
    +    try {
    +        String text = "Message from producer: " + messageText;
    +        context.createProducer().send(queue, text);
    +
    +        FacesMessage facesMessage =
    +                new FacesMessage("Sent message: " + text);
    +        FacesContext.getCurrentInstance().addMessage(null, facesMessage);
    +    } catch (Throwable t) {
    +        logger.log(Level.SEVERE,
    +                "SenderBean.sendMessage: Exception: {0}",
    +                t.toString());
    +    }
    +}
    +
    +
    +
  • +
  • +

    ReceiverBean.java, a CDI managed bean with one business method, +getMessage. The method injects a JMSContext (using the default +connection factory) and the queue that was defined in SenderBean, +creates a consumer, receives the message, and creates a FacesMessage +to display on the Facelets page:

    +
    +
    +
    @Inject
    +private JMSContext context;
    +@Resource(lookup = "java:comp/jms/webappQueue")
    +private Queue queue;
    +...
    +public void getMessage() {
    +    try {
    +        JMSConsumer receiver = context.createConsumer(queue);
    +        String text = receiver.receiveBody(String.class);
    +
    +        if (text != null) {
    +            FacesMessage facesMessage =
    +                    new FacesMessage("Reading message: " + text);
    +            FacesContext.getCurrentInstance().addMessage(null, facesMessage);
    +        } else {
    +            FacesMessage facesMessage =
    +                    new FacesMessage("No message received after 1 second");
    +            FacesContext.getCurrentInstance().addMessage(null, facesMessage);
    +        }
    +    } catch (Throwable t) {
    +        logger.log(Level.SEVERE,
    +                "ReceiverBean.getMessage: Exception: {0}",
    +                t.toString());
    +    }
    +}
    +
    +
    +
  • +
+
+
+
+

46.6.3 Running the websimplemessage Example

+
+

You can use either NetBeans IDE or Maven to build, package, deploy, and +run the websimplemessage application.

+
+
+

The following topics are addressed here:

+
+ +
+

46.6.3.1 Creating Resources for the websimplemessage Example

+
+

This example uses an annotation-defined queue and the preconfigured +default connection factory java:comp/DefaultJMSConnectionFactory.

+
+
+
+

46.6.3.2 To Package and Deploy websimplemessage Using NetBeans IDE

+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    From the File menu, choose Open Project.

    +
  4. +
  5. +

    In the Open Project dialog box, navigate to:

    +
    +
    +
    tut-install/examples/jms
    +
    +
    +
  6. +
  7. +

    Select the websimplemessage folder.

    +
  8. +
  9. +

    Click Open Project.

    +
  10. +
  11. +

    In the Projects tab, right-click the websimplemessage project and +select Build.

    +
    +

    This command builds and deploys the project.

    +
    +
  12. +
+
+
+
+

46.6.3.3 To Package and Deploy websimplemessage Using Maven

+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    In a terminal window, go to:

    +
    +
    +
    tut-install/examples/jms/websimplemessage/
    +
    +
    +
  4. +
  5. +

    To compile the source files and package and deploy the application, +use the following command:

    +
    +
    +
    mvn install
    +
    +
    +
  6. +
+
+
+
+

46.6.3.4 To Run the websimplemessage Example

+
+
    +
  1. +

    In a web browser, enter the following URL:

    +
    +
    +
    http://localhost:8080/websimplemessage
    +
    +
    +
  2. +
  3. +

    Enter a message in the text field and click Send Message.

    +
    +

    If, for example, you enter "Hello, Duke", the following appears below +the buttons:

    +
    +
    +
    +
    Sent message: Message from producer: Hello, Duke
    +
    +
    +
  4. +
  5. +

    Click Go to Receive Page.

    +
  6. +
  7. +

    Click Receive Message.

    +
    +

    The following appears below the buttons:

    +
    +
    +
    +
    Reading message: Message from producer: Hello, Duke
    +
    +
    +
  8. +
  9. +

    Click Send Another Message to return to the sending page.

    +
  10. +
  11. +

    After you have finished running the application, undeploy it using +either the Services tab of NetBeans IDE or the mvn cargo:undeploy +command.

    +
  12. +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+
+ + + \ No newline at end of file diff --git a/jms-examples007.html b/jms-examples007.html new file mode 100644 index 0000000..ef78815 --- /dev/null +++ b/jms-examples007.html @@ -0,0 +1,441 @@ + + + + + + Receiving Messages Asynchronously Using a Message-Driven Bean + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

46.7 Receiving Messages Asynchronously Using a Message-Driven Bean

+
+
+

If you are writing an application to run in the Java EE application +client container or on the Java SE platform, and you want to receive +messages asynchronously, you need to define a class that implements the +MessageListener interface, create a JMSConsumer, and call the method +setMessageListener.

+
+
+

If you’re writing an application to run in the Java EE web or EJB +container and want it to receive messages asynchronously, you also need +to need to define a class that implements the MessageListener +interface. However, instead of creating a JMSConsumer and calling the +method setMessageListener, you must configure your message listener +class to be a message-driven bean. The application server will then take +care of the rest.

+
+
+

Message-driven beans can implement any messaging type. Most commonly, +however, they implement the Java Message Service (JMS) technology.

+
+
+

This section describes a simple message-driven bean example. Before +proceeding, you should read the basic conceptual information in the +section What Is a Message-Driven Bean? as +well as Using Message-Driven Beans to +Receive Messages Asynchronously.

+
+
+

46.7.1 Overview of the simplemessage Example

+
+

The simplemessage application has the following components:

+
+
+
    +
  • +

    SimpleMessageClient: An application client that sends several +messages to a queue

    +
  • +
  • +

    SimpleMessageBean: A message-driven bean that asynchronously +processes the messages that are sent to the queue

    +
  • +
+
+
+

Figure 46-3 illustrates the structure of this application. +The application client sends messages to the queue, which was created +administratively using the Administration Console. The JMS provider (in +this case, GlassFish Server) delivers the messages to the instances of +the message-driven bean, which then processes the messages.

+
+
+

Figure 46-3 The simplemessage Application

+
+ +
+

The source code for this application is in the +tut-install`/examples/jms/simplemessage/` directory.

+
+
+
+

46.7.2 The simplemessage Application Client

+
+

The SimpleMessageClient sends messages to the queue that the +SimpleMessageBean listens to. The client starts by injecting the +connection factory and queue resources:

+
+
+
+
@Resource(lookup = "java:comp/DefaultJMSConnectionFactory")
+private static ConnectionFactory connectionFactory;
+
+@Resource(lookup = "jms/MyQueue")
+private static Queue queue;
+
+
+
+

Next, the client creates the JMSContext in a try-with-resources +block:

+
+
+
+
String text;
+final int NUM_MSGS = 3;
+
+try (JMSContext context = connectionFactory.createContext();) {
+
+
+
+

Finally, the client sends several text messages to the queue:

+
+
+
+
for (int i = 0; i < NUM_MSGS; i++) {
+    text = "This is message " + (i + 1);
+    System.out.println("Sending message: " + text);
+    context.createProducer().send(queue, text);
+}
+
+
+
+
+

46.7.3 The simplemessage Message-Driven Bean Class

+
+

The code for the SimpleMessageBean class illustrates the requirements +of a message-driven bean class described in +Using Message-Driven Beans to Receive +Messages Asynchronously.

+
+
+

The first few lines of the SimpleMessageBean class use the +@MessageDriven annotation’s activationConfig attribute to specify +configuration properties:

+
+
+
+
@MessageDriven(activationConfig = {
+    @ActivationConfigProperty(propertyName = "destinationLookup",
+            propertyValue = "jms/MyQueue"),
+    @ActivationConfigProperty(propertyName = "destinationType",
+            propertyValue = "javax.jms.Queue")
+})
+
+
+
+

See Table 45-3 for a list of the +available properties.

+
+
+

See Sending Messages from a Session Bean +to an MDB for examples of the subscriptionDurability, clientId, +subscriptionName, and messageSelector properties.

+
+
+

46.7.3.1 The onMessage Method

+
+

When the queue receives a message, the EJB container invokes the message +listener method or methods. For a bean that uses JMS, this is the +onMessage method of the MessageListener interface.

+
+
+

In the SimpleMessageBean class, the onMessage method casts the +incoming message to a TextMessage and displays the text:

+
+
+
+
public void onMessage(Message inMessage) {
+
+    try {
+        if (inMessage instanceof TextMessage) {
+            logger.log(Level.INFO,
+                    "MESSAGE BEAN: Message received: {0}",
+                    inMessage.getBody(String.class));
+        } else {
+            logger.log(Level.WARNING,
+                    "Message of wrong type: {0}",
+                    inMessage.getClass().getName());
+        }
+    } catch (JMSException e) {
+        logger.log(Level.SEVERE,
+                "SimpleMessageBean.onMessage: JMSException: {0}",
+                e.toString());
+        mdc.setRollbackOnly();
+    }
+}
+
+
+
+
+
+

46.7.4 Running the simplemessage Example

+
+

You can use either NetBeans IDE or Maven to build, deploy, and run the +simplemessage example.

+
+
+

The following topics are addressed here:

+
+ +
+

46.7.4.1 Creating Resources for the simplemessage Example

+
+

This example uses the queue named jms/MyQueue and the preconfigured +default connection factory java:comp/DefaultJMSConnectionFactory.

+
+
+

If you have run the simple JMS examples in +Writing Simple JMS Applications and have +not deleted the resources, you already have the queue. Otherwise, follow +the instructions in To Create +Resources for the Simple Examples to create it.

+
+
+

For more information on creating JMS resources, see +Creating JMS Administered Objects.

+
+
+
+

46.7.4.2 To Run the simplemessage Example Using NetBeans IDE

+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    From the File menu, choose Open Project.

    +
  4. +
  5. +

    In the Open Project dialog box, navigate to:

    +
    +
    +
    tut-install/examples/jms/simplemessage
    +
    +
    +
  6. +
  7. +

    Select the simplemessage folder.

    +
  8. +
  9. +

    Make sure that the Open Required Projects check box is selected, +then click Open Project.

    +
  10. +
  11. +

    In the Projects tab, right-click the simplemessage project and +select Build. (If NetBeans IDE suggests that you run a priming build, +click the box to do so.)

    +
    +

    This command packages the application client and the message-driven +bean, then creates a file named simplemessage.ear in the +simplemessage-ear/target/ directory. It then deploys the +simplemessage-ear module, retrieves the client stubs, and runs the +application client.

    +
    +
    +

    The output in the output window looks like this (preceded by application +client container output):

    +
    +
    +
    +
    Sending message: This is message 1
    +Sending message: This is message 2
    +Sending message: This is message 3
    +To see if the bean received the messages,
    + check <install_dir>/domains/domain1/logs/server.log.
    +
    +
    +
    +

    In the server log file, lines similar to the following appear:

    +
    +
    +
    +
    MESSAGE BEAN: Message received: This is message 1
    +MESSAGE BEAN: Message received: This is message 2
    +MESSAGE BEAN: Message received: This is message 3
    +
    +
    +
    +

    The received messages may appear in a different order from the order in +which they were sent.

    +
    +
  12. +
  13. +

    After you have finished running the application, undeploy it using +the Services tab.

    +
  14. +
+
+
+
+

46.7.4.3 To Run the simplemessage Example Using Maven

+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    In a terminal window, go to:

    +
    +
    +
    tut-install/examples/jms/simplemessage/
    +
    +
    +
  4. +
  5. +

    To compile the source files and package the application, use the +following command:

    +
    +
    +
    mvn install
    +
    +
    +
    +

    This target packages the application client and the message-driven bean, +then creates a file named simplemessage.ear in the +simplemessage-ear/target/ directory. It then deploys the +simplemessage-ear module, retrieves the client stubs, and runs the +application client.

    +
    +
    +

    The output in the terminal window looks like this (preceded by +application client container output):

    +
    +
    +
    +
    Sending message: This is message 1
    +Sending message: This is message 2
    +Sending message: This is message 3
    +To see if the bean received the messages,
    + check <install_dir>/domains/domain1/logs/server.log.
    +
    +
    +
    +

    In the server log file, lines similar to the following appear:

    +
    +
    +
    +
    MESSAGE BEAN: Message received: This is message 1
    +MESSAGE BEAN: Message received: This is message 2
    +MESSAGE BEAN: Message received: This is message 3
    +
    +
    +
    +

    The received messages may appear in a different order from the order in +which they were sent.

    +
    +
  6. +
  7. +

    After you have finished running the application, undeploy it using +the mvn cargo:undeploy command.

    +
  8. +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+
+ + + \ No newline at end of file diff --git a/jms-examples008.html b/jms-examples008.html new file mode 100644 index 0000000..2292b0c --- /dev/null +++ b/jms-examples008.html @@ -0,0 +1,462 @@ + + + + + + Sending Messages from a Session Bean to an MDB + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

46.8 Sending Messages from a Session Bean to an MDB

+
+
+

This section explains how to write, compile, package, deploy, and run an +application that uses the JMS API in conjunction with a session bean. +The application contains the following components:

+
+
+
    +
  • +

    An application client that invokes a session bean

    +
  • +
  • +

    A session bean that publishes several messages to a topic

    +
  • +
  • +

    A message-driven bean that receives and processes the messages using a +durable topic subscription and a message selector

    +
  • +
+
+
+

You will find the source files for this section in the +tut-install`/examples/jms/clientsessionmdb/` directory. Path names in +this section are relative to this directory.

+
+
+

The following topics are addressed here:

+
+ +
+

46.8.1 Writing the Application Components for the clientsessionmdbExample

+
+

This application demonstrates how to send messages from an enterprise +bean (in this case, a session bean) rather than from an application +client, as in the example in Receiving +Messages Asynchronously Using a Message-Driven Bean. Figure +46-4 illustrates the structure of this application. Sending messages +from an enterprise bean is very similar to sending messages from a +managed bean, which was shown in +Sending and Receiving Messages Using a +Simple Web Application.

+
+
+

Figure 46-4 An Enterprise Bean Application: Client to Session Bean to +Message-Driven Bean

+
+ +
+

The Publisher enterprise bean in this example is the +enterprise-application equivalent of a wire-service news feed that +categorizes news events into six news categories. The message-driven +bean could represent a newsroom, where the sports desk, for example, +would set up a subscription for all news events pertaining to sports.

+
+
+

The application client in the example injects the Publisher enterprise +bean’s remote home interface and then calls the bean’s business method. +The enterprise bean creates 18 text messages. For each message, it sets +a String property randomly to one of six values representing the news +categories and then publishes the message to a topic. The message-driven +bean uses a message selector for the property to limit which of the +published messages will be delivered to it.

+
+
+

46.8.1.1 Coding the Application Client: MyAppClient.java

+
+

The application client, MyAppClient.java, found under +clientsessionmdb-app-client, performs no JMS API operations and so is +simpler than the client in Receiving +Messages Asynchronously Using a Message-Driven Bean. The client uses +dependency injection to obtain the Publisher enterprise bean’s business +interface:

+
+
+
+
@EJB(name="PublisherRemote")
+private static PublisherRemote publisher;
+
+
+
+

The client then calls the bean’s business method twice.

+
+
+
+

46.8.1.2 Coding the Publisher Session Bean

+
+

The Publisher bean is a stateless session bean that has one business +method. The Publisher bean uses a remote interface rather than a local +interface because it is accessed from the application client.

+
+
+

The remote interface, PublisherRemote.java, found under +clientsessionmdb-ejb, declares a single business method, +publishNews.

+
+
+

The bean class, PublisherBean.java, also found under +clientsessionmdb-ejb, implements the publishNews method and its +helper method chooseType. The bean class injects SessionContext and +Topic resources (the topic is defined in the message-driven bean). It +then injects a JMSContext, which uses the preconfigured default +connection factory unless you specify otherwise. The bean class begins +as follows:

+
+
+
+
@Stateless
+@Remote({
+    PublisherRemote.class
+})
+public class PublisherBean implements PublisherRemote {
+
+    @Resource
+    private SessionContext sc;
+    @Resource(lookup = "java:module/jms/newsTopic")
+    private Topic topic;
+    @Inject
+    private JMSContext context;
+    ...
+
+
+
+

The business method publishNews creates a JMSProducer and publishes +the messages.

+
+
+
+

46.8.1.3 Coding the Message-Driven Bean: MessageBean.java

+
+

The message-driven bean class, MessageBean.java, found under +clientsessionmdb-ejb, is almost identical to the one in +Receiving Messages Asynchronously Using a +Message-Driven Bean. However, the @MessageDriven annotation is +different, because instead of a queue, the bean is using a topic, a +durable subscription, and a message selector. The bean defines a topic +for the use of the application; the definition uses the java:module +scope because both the session bean and the message-driven bean are in +the same module. Because the destination is defined in the +message-driven bean, the @MessageDriven annotation uses the +destinationLookup activation config property. (See +Creating Resources for Java EE +Applications for more information.) The annotation also sets the +activation config properties messageSelector, +subscriptionDurability, clientId, and subscriptionName, as +follows:

+
+
+
+
@JMSDestinationDefinition(
+        name = "java:module/jms/newsTopic",
+        interfaceName = "javax.jms.Topic",
+        destinationName = "PhysicalNewsTopic")
+@MessageDriven(activationConfig = {
+    @ActivationConfigProperty(propertyName = "destinationLookup",
+            propertyValue = "java:module/jms/newsTopic"),
+    @ActivationConfigProperty(propertyName = "destinationType",
+            propertyValue = "javax.jms.Topic"),
+    @ActivationConfigProperty(propertyName = "messageSelector",
+            propertyValue = "NewsType = 'Sports' OR NewsType = 'Opinion'"),
+    @ActivationConfigProperty(propertyName = "subscriptionDurability",
+            propertyValue = "Durable"),
+    @ActivationConfigProperty(propertyName = "clientId",
+            propertyValue = "MyID"),
+    @ActivationConfigProperty(propertyName = "subscriptionName",
+            propertyValue = "MySub")
+})
+
+
+
+

The topic is the one defined in the PublisherBean. The message +selector in this case represents both the sports and opinion desks, just +to demonstrate the syntax of message selectors.

+
+
+

The JMS resource adapter uses these properties to create a connection +factory for the message-driven bean that allows the bean to use a +durable subscription.

+
+
+
+
+

46.8.2 Running the clientsessionmdb Example

+
+

You can use either NetBeans IDE or Maven to build, deploy, and run the +simplemessage example.

+
+
+

This example uses an annotation-defined topic and the preconfigured +default connection factory java:comp/DefaultJMSConnectionFactory, so +you do not have to create resources for it.

+
+
+

The following topics are addressed here:

+
+ +
+

46.8.2.1 To Run clientsessionmdb Using NetBeans IDE

+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    From the File menu, choose Open Project.

    +
  4. +
  5. +

    In the Open Project dialog box, navigate to:

    +
    +
    +
    tut-install/examples/jms/clientsessionmdb
    +
    +
    +
  6. +
  7. +

    Select the clientsessionmdb folder.

    +
  8. +
  9. +

    Make sure that the Open Required Projects check box is selected, +then click Open Project.

    +
  10. +
  11. +

    In the Projects tab, right-click the clientsessionmdb project and +select Build. (If NetBeans IDE suggests that you run a priming build, +click the box to do so.)

    +
    +

    This command creates the following: +* An application client JAR file that contains the client class file and +the session bean’s remote interface, along with a manifest file that +specifies the main class and places the EJB JAR file in its classpath +* An EJB JAR file that contains both the session bean and the +message-driven bean +* An application EAR file that contains the two JAR files

    +
    +
    +

    + +The clientsessionmdb.ear file is created in the +clientsessionmdb-ear/target/ directory.

    +
    +
    +

    + +The command then deploys the EAR file, retrieves the client stubs, and +runs the client.

    +
    +
    +

    + +The client displays these lines:

    +
    +
    +

    +

    +
    +
    +
    +
    To view the bean output,
    + check <install_dir>/domains/domain1/logs/server.log.
    +
    +
    +
    +

    + +The output from the enterprise beans appears in the server log file. The +Publisher session bean sends two sets of 18 messages numbered 0 through

    +
    +
  12. +
  13. +

    Because of the message selector, the message-driven bean receives +only the messages whose NewsType property is Sports or Opinion.

    +
  14. +
  15. +

    Use the Services tab to undeploy the application after you have +finished running it.

    +
  16. +
+
+
+
+

46.8.2.2 To Run clientsessionmdb Using Maven

+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    Go to the following directory:

    +
    +
    +
    tut-install/examples/jms/clientsessionmdb/
    +
    +
    +
  4. +
  5. +

    To compile the source files and package, deploy, and run the +application, enter the following command:

    +
    +
    +
    mvn install
    +
    +
    +
    +

    This command creates the following: +* An application client JAR file that contains the client class file and +the session bean’s remote interface, along with a manifest file that +specifies the main class and places the EJB JAR file in its classpath +* An EJB JAR file that contains both the session bean and the +message-driven bean +* An application EAR file that contains the two JAR files

    +
    +
    +

    + +The clientsessionmdb.ear file is created in the +clientsessionmdb-ear/target/ directory.

    +
    +
    +

    + +The command then deploys the EAR file, retrieves the client stubs, and +runs the client.

    +
    +
    +

    + +The client displays these lines:

    +
    +
    +

    +

    +
    +
    +
    +
    To view the bean output,
    + check <install_dir>/domains/domain1/logs/server.log.
    +
    +
    +
    +

    + +The output from the enterprise beans appears in the server log file. The +Publisher session bean sends two sets of 18 messages numbered 0 through

    +
    +
  6. +
  7. +

    Because of the message selector, the message-driven bean receives +only the messages whose NewsType property is Sports or Opinion.

    +
  8. +
  9. +

    Undeploy the application after you have finished running it:

    +
    +
    +
    mvn cargo:undeploy
    +
    +
    +
  10. +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+
+ + + \ No newline at end of file diff --git a/jms-examples009.html b/jms-examples009.html new file mode 100644 index 0000000..d921dc4 --- /dev/null +++ b/jms-examples009.html @@ -0,0 +1,598 @@ + + + + + + Using an Entity to Join Messages from Two MDBs + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

46.9 Using an Entity to Join Messages from Two MDBs

+
+
+

This section explains how to write, compile, package, deploy, and run an +application that uses the JMS API with an entity. The application uses +the following components:

+
+
+
    +
  • +

    An application client that both sends and receives messages

    +
  • +
  • +

    Two message-driven beans

    +
  • +
  • +

    An entity class

    +
  • +
+
+
+

You will find the source files for this section in the +tut-install`/examples/jms/clientmdbentity/` directory. Path names in +this section are relative to this directory.

+
+
+

The following topics are addressed here:

+
+ +
+

46.9.1 Overview of the clientmdbentity Example Application

+
+

This application simulates, in a simplified way, the work flow of a +company’s human resources (HR) department when it processes a new hire. +This application also demonstrates how to use the Java EE platform to +accomplish a task that many JMS applications need to perform.

+
+
+

A messaging client must often wait for several messages from various +sources. It then uses the information in all these messages to assemble +a message that it then sends to another destination. The common term for +this design pattern (which is not specific to JMS) is joining messages. +Such a task must be transactional, with all the receives and the send as +a single transaction. If not all the messages are received successfully, +the transaction can be rolled back. For an application client example +that illustrates this task, see Using +Local Transactions.

+
+
+

A message-driven bean can process only one message at a time in a +transaction. To provide the ability to join messages, an application can +have the message-driven bean store the interim information in a Java +Persistence API entity. The entity can then determine whether all the +information has been received; when it has, the entity can report this +back to one of the message-driven beans, which then creates and sends +the message to the other destination. After it has completed its task, +the entity can be removed.

+
+
+

The basic steps of the application are as follows.

+
+
+
    +
  1. +

    The HR department’s application client generates an employee ID for +each new hire and then publishes a message (M1) containing the new +hire’s name, employee ID, and position. It publishes the message to a +topic because the message needs to be consumed by two message-driven +beans. The client then creates a temporary queue, ReplyQueue, with a +message listener that waits for a reply to the message. (See +Creating Temporary Destinations for more +information.)

    +
  2. +
  3. +

    Two message-driven beans process each message: One bean, +OfficeMDB, assigns the new hire’s office number, and the other bean, +EquipmentMDB, assigns the new hire’s equipment. The first bean to +process the message creates and persists an entity named SetupOffice, +then calls a business method of the entity to store the information it +has generated. The second bean locates the existing entity and calls +another business method to add its information.

    +
  4. +
  5. +

    When both the office and the equipment have been assigned, the +entity business method returns a value of true to the message-driven +bean that called the method. The message-driven bean then sends to the +reply queue a message (M2) describing the assignments. Then it removes +the entity. The application client’s message listener retrieves the +information.

    +
  6. +
+
+
+

Figure 46-5 illustrates the structure of this application. +Of course, an actual HR application would have more components; other +beans could set up payroll and benefits records, schedule orientation, +and so on.

+
+
+

Figure 46-5 assumes that OfficeMDB is the first +message-driven bean to consume the message from the client. OfficeMDB +then creates and persists the SetupOffice entity and stores the office +information. EquipmentMDB then finds the entity, stores the equipment +information, and learns that the entity has completed its work. +EquipmentMDB then sends the message to the reply queue and removes the +entity.

+
+
+

Figure 46-5 An Enterprise Bean Application: Client to Message-Driven +Beans to Entity

+
+ +
+
+

46.9.2 Writing the Application Components for the clientmdbentityExample

+
+

Writing the components of the application involves coding the +application client, the message-driven beans, and the entity class.

+
+
+

The following topics are addressed here:

+
+ +
+

46.9.2.1 Coding the Application Client: HumanResourceClient.java

+
+

The application client, HumanResourceClient.java, found under +clientmdbentity-app-client, performs the following steps:

+
+
+
    +
  1. +

    Defines a topic for the application, using the java:app namespace +because the topic is used in both the application client and the EJB +module

    +
  2. +
  3. +

    Injects ConnectionFactory and Topic resources

    +
  4. +
  5. +

    Creates a TemporaryQueue to receive notification of processing +that occurs, based on new-hire events it has published

    +
  6. +
  7. +

    Creates a JMSConsumer for the TemporaryQueue, sets the +JMSConsumer's message listener, and starts the connection

    +
  8. +
  9. +

    Creates a MapMessage

    +
  10. +
  11. +

    Creates five new employees with randomly generated names, positions, +and ID numbers (in sequence) and publishes five messages containing this +information

    +
  12. +
+
+
+

The message listener, HRListener, waits for messages that contain the +assigned office and equipment for each employee. When a message arrives, +the message listener displays the information received and determines +whether all five messages have arrived. When they have, the message +listener notifies the main method, which then exits.

+
+
+
+

46.9.2.2 Coding the Message-Driven Beans for the clientmdbentity Example

+
+

This example uses two message-driven beans, both under +clientmdbentity-ejb:

+
+
+
    +
  • +

    EquipmentMDB.java

    +
  • +
  • +

    OfficeMDB.java

    +
  • +
+
+
+

The beans take the following steps.

+
+
+
    +
  1. +

    They inject a MessageDrivenContext resource, an EntityManager, +and a JMSContext.

    +
  2. +
  3. +

    The onMessage method retrieves the information in the message. The +EquipmentMDB's onMessage method chooses equipment, based on the new +hire’s position; the OfficeMDB's onMessage method randomly generates +an office number.

    +
  4. +
  5. +

    After a slight delay to simulate real world processing hitches, the +onMessage method calls a helper method, compose.

    +
  6. +
  7. +

    The compose method takes the following steps.

    +
  8. +
  9. +

    It either creates and persists the SetupOffice entity or finds it +by primary key.

    +
  10. +
  11. +

    It uses the entity to store the equipment or the office information +in the database, calling either the doEquipmentList or the +doOfficeNumber business method.

    +
  12. +
  13. +

    If the business method returns true, meaning that all of the +information has been stored, it retrieves the reply destination +information from the message, creates a JMSProducer, and sends a reply +message that contains the information stored in the entity.

    +
  14. +
  15. +

    It removes the entity.

    +
  16. +
+
+
+
+

46.9.2.3 Coding the Entity Class for the clientmdbentity Example

+
+

The SetupOffice.java class, also under clientmdbentity-ejb, is an +entity class. The entity and the message-driven beans are packaged +together in an EJB JAR file. The entity class is declared as follows:

+
+
+
+
@Entity
+public class SetupOffice implements Serializable {
+
+
+
+

The class contains a no-argument constructor and a constructor that +takes two arguments, the employee ID and name. It also contains getter +and setter methods for the employee ID, name, office number, and +equipment list. The getter method for the employee ID has the @Id +annotation to indicate that this field is the primary key:

+
+
+
+
@Id
+public String getEmployeeId() {
+    return id;
+}
+
+
+
+

The class also implements the two business methods, doEquipmentList +and doOfficeNumber, and their helper method, checkIfSetupComplete.

+
+
+

The message-driven beans call the business methods and the getter +methods.

+
+
+

The persistence.xml file for the entity specifies the most basic +settings:

+
+
+
+
<?xml version="1.0" encoding="UTF-8"?>
+<persistence version="2.1"
+             xmlns="http://xmlns.jcp.org/xml/ns/persistence"
+             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
+               http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
+  <persistence-unit name="clientmdbentity-ejbPU" transaction-type="JTA">
+    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
+    <jta-data-source>java:comp/DefaultDataSource</jta-data-source>
+    <properties>
+      <property name="eclipselink.ddl-generation"
+                value="drop-and-create-tables"/>
+    </properties>
+  </persistence-unit>
+</persistence>
+
+
+
+
+
+

46.9.3 Running the clientmdbentity Example

+
+

You can use either NetBeans IDE or Maven to build, deploy, and run the +clientmdbentity example.

+
+
+

Because the example defines its own application-private topic and uses +the preconfigured default connection factory +java:comp/DefaultJMSConnectionFactory and the preconfigured default +JDBC resource java:comp/DefaultDataSource, you do not need to create +resources for it.

+
+
+

The following topics are addressed here:

+
+ +
+

46.9.3.1 To Run clientmdbentity Using NetBeans IDE

+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server), as well as the database server (see +Starting and Stopping the Java DB +Server).

    +
  2. +
  3. +

    From the File menu, choose Open Project.

    +
  4. +
  5. +

    In the Open Project dialog box, navigate to:

    +
    +
    +
    tut-install/examples/jms/clientmdbentity
    +
    +
    +
  6. +
  7. +

    Select the clientmdbentity folder.

    +
  8. +
  9. +

    Click Open Project.

    +
  10. +
  11. +

    In the Projects tab, right-click the clientmdbentity project and +select Build.

    +
    +

    This command creates the following: +* An application client JAR file that contains the client class and +listener class files, along with a manifest file that specifies the main +class +* An EJB JAR file that contains the message-driven beans and the entity +class, along with the persistence.xml file +* An application EAR file that contains the two JAR files along with an +application.xml file

    +
    +
    +

    + +The clientmdbentity.ear file is created in the +clientmdbentity-ear/target/ directory.

    +
    +
    +

    + +The command then deploys the EAR file, retrieves the client stubs, and +runs the application client.

    +
    +
  12. +
+
+
+
+

46.9.3.2 To Run clientmdbentity Using Maven

+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server), as well as the database server (see +Starting and Stopping the Java DB +Server).

    +
  2. +
  3. +

    Go to the following directory:

    +
    +
    +
    tut-install/examples/jms/clientmdbentity/
    +
    +
    +
  4. +
  5. +

    To compile the source files and package, deploy, and run the +application, enter the following command:

    +
    +
    +
    mvn install
    +
    +
    +
    +

    This command creates the following: +* An application client JAR file that contains the client class and +listener class files, along with a manifest file that specifies the main +class +* An EJB JAR file that contains the message-driven beans and the entity +class, along with the persistence.xml file +* An application EAR file that contains the two JAR files along with an +application.xml file

    +
    +
    +

    + +The command then deploys the application, retrieves the client stubs, +and runs the application client.

    +
    +
  6. +
+
+
+
+

46.9.3.3 Viewing the Application Output

+
+

The output in the NetBeans IDE output window or in the terminal window +looks something like this (preceded by application client container +output and Maven output):

+
+
+
+
SENDER: Setting hire ID to 50, name Bill Tudor, position Programmer
+SENDER: Setting hire ID to 51, name Carol Jones, position Senior Programmer
+SENDER: Setting hire ID to 52, name Mark Wilson, position Manager
+SENDER: Setting hire ID to 53, name Polly Wren, position Senior Programmer
+SENDER: Setting hire ID to 54, name Joe Lawrence, position Director
+Waiting for 5 message(s)
+New hire event processed:
+  Employee ID: 52
+  Name: Mark Wilson
+  Equipment: Tablet
+  Office number: 294
+Waiting for 4 message(s)
+New hire event processed:
+  Employee ID: 53
+  Name: Polly Wren
+  Equipment: Laptop
+  Office number: 186
+Waiting for 3 message(s)
+New hire event processed:
+  Employee ID: 54
+  Name: Joe Lawrence
+  Equipment: Mobile Phone
+  Office number: 135
+Waiting for 2 message(s)
+New hire event processed:
+  Employee ID: 50
+  Name: Bill Tudor
+  Equipment: Desktop System
+  Office number: 200
+Waiting for 1 message(s)
+New hire event processed:
+  Employee ID: 51
+  Name: Carol Jones
+  Equipment: Laptop
+  Office number: 262
+
+
+
+

The output from the message-driven beans and the entity class appears in +the server log.

+
+
+

For each employee, the application first creates the entity and then +finds it. You may see runtime errors in the server log, and transaction +rollbacks may occur. The errors occur if both of the message-driven +beans discover at the same time that the entity does not yet exist, so +they both try to create it. The first attempt succeeds, but the second +fails because the bean already exists. After the rollback, the second +message-driven bean tries again and succeeds in finding the entity. +Container-managed transactions allow the application to run correctly, +in spite of these errors, with no special programming.

+
+
+

To undeploy the application after you have finished running it, use the +Services tab or issue the mvn cargo:undeploy command.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+
+ + + \ No newline at end of file diff --git a/jms-examples010.html b/jms-examples010.html new file mode 100644 index 0000000..0e85aa0 --- /dev/null +++ b/jms-examples010.html @@ -0,0 +1,203 @@ + + + + + + Using NetBeans IDE to Create JMS Resources + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

46.10 Using NetBeans IDE to Create JMS Resources

+
+
+

When you write your own JMS applications, you will need to create +resources for them. This section explains how to use NetBeans IDE to +create src/main/setup/glassfish-resources.xml files similar to those +used in the examples in this chapter. It also explains how to use +NetBeans IDE to delete the resources.

+
+
+

You can also create, list, and delete JMS resources using the +Administration Console or the asadmin create-jms-resource, +asadmin list-jms-resources, and asadmin delete-jms-resources +commands. For information, consult the GlassFish Server documentation or +enter asadmin help command-name.

+
+
+

The following topics are addressed here:

+
+ +
+

46.10.1 To Create JMS Resources Using NetBeans IDE

+
+

Follow these steps to create a JMS resource in GlassFish Server using +NetBeans IDE. Repeat these steps for each resource you need.

+
+
+
    +
  1. +

    Right-click the project for which you want to create resources and +select New, then select Other.

    +
  2. +
  3. +

    In the New File wizard, under Categories, select GlassFish.

    +
  4. +
  5. +

    Under File Types, select JMS Resource.

    +
  6. +
  7. +

    On the General Attributes - JMS Resource page, in the JNDI Name +field, enter the name of the resource.

    +
    +

    By convention, JMS resource names begin with jms/.

    +
    +
  8. +
  9. +

    Select the option for the resource type.

    +
    +

    Normally, this is either javax.jms.Queue, javax.jms.Topic, or +javax.jms.ConnectionFactory.

    +
    +
  10. +
  11. +

    Click Next.

    +
  12. +
  13. +

    On the JMS Properties page, for a queue or topic, enter a name for a +physical queue in the Value field for the Name property.

    +
    +

    You can enter any value for this required field.

    +
    +
    +

    Connection factories have no required properties. In a few situations, +you may need to specify a property.

    +
    +
  14. +
  15. +

    Click Finish.

    +
    +

    A file named glassfish-resources.xml is created in your Maven project, +in a directory named src/main/setup/. In the Projects tab, you can +find it under the Other Sources node. You will need to run the +asadmin add-resources command to create the resources in GlassFish +Server.

    +
    +
  16. +
+
+
+
+

46.10.2 To Delete JMS Resources Using NetBeans IDE

+
+
    +
  1. +

    In the Services tab, expand the Servers node, then expand the +GlassFish Server node.

    +
  2. +
  3. +

    Expand the Resources node, then expand the Connector Resources node.

    +
  4. +
  5. +

    Expand the Admin Object Resources node.

    +
  6. +
  7. +

    Right-click any destination you want to remove and select +Unregister.

    +
  8. +
  9. +

    Expand the Connector Connection Pools node.

    +
  10. +
  11. +

    Right-click the connection pool that corresponds to the connection +factory you removed and select Unregister.

    +
    +

    When you remove a connector connection pool, the associated connector +resource is also deleted. This action removes the connection factory.

    +
    +
  12. +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/jsf-advanced-cc.html b/jsf-advanced-cc.html new file mode 100644 index 0000000..2fa7a61 --- /dev/null +++ b/jsf-advanced-cc.html @@ -0,0 +1,108 @@ + + + + + + Composite Components: Advanced Topics and an Example + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

14 Composite Components: Advanced Topics and an Example

+
+
+

This chapter describes the advanced features of composite components in +JavaServer Faces technology.

+
+
+

The following topics are addressed here:

+
+ +
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/jsf-advanced-cc001.html b/jsf-advanced-cc001.html new file mode 100644 index 0000000..5a8d5a0 --- /dev/null +++ b/jsf-advanced-cc001.html @@ -0,0 +1,187 @@ + + + + + + Attributes of a Composite Component + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

14.1 Attributes of a Composite Component

+
+
+

A composite component is a special type of JavaServer Faces template +that acts as a component. If you are new to composite components, see +Composite Components before you proceed +with this chapter.

+
+
+

You define an attribute of a composite component by using the +composite:attribute tag. Table 14-1 lists the commonly +used attributes of this tag.

+
+
+

+
+
+

Table 14-1 Commonly Used Attributes of the composite:attribute Tag

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescription

name

Specifies the name of the composite component attribute to be +used in the using page. Alternatively, the name attribute can specify +standard event handlers such as action, actionListener, and managed +bean.

default

Specifies the default value of the composite component +attribute.

required

Specifies whether it is mandatory to provide a value for +the attribute.

method-signature

+

Specifies a subclass of java.lang.Object as the type of the composite +component’s attribute. The method-signature element declares that the +composite component attribute is a method expression. The type +attribute and the method-signature attribute are mutually exclusive. +If you specify both, method-signature is ignored. The default type of +an attribute is java.lang.Object.

+
+
+

Note: Method expressions are similar to value expressions, but rather +than supporting the dynamic retrieval and setting of properties, method +expressions support the invocation of a method of an arbitrary object, +passing a specified set of parameters and returning the result from the +called method (if any).

+

type

Specifies a fully qualified class name as the type of the +attribute. The type attribute and the method-signature attribute are +mutually exclusive. If you specify both, method-signature is ignored. +The default type of an attribute is java.lang.Object.

+
+
+
+
+
+
+
+

The following code snippet defines a composite component attribute and +assigns it a default value:

+
+
+
+
<composite:attribute name="username" default="admin"/>
+
+
+
+

The following code snippet uses the method-signature element:

+
+
+
+
<composite:attribute name="myaction"
+                     method-signature="java.lang.String action()"/>
+
+
+
+

The following code snippet uses the type element:

+
+
+
+
<composite:attribute name="dateofjoining" type="java.util.Date"/>
+
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/jsf-advanced-cc002.html b/jsf-advanced-cc002.html new file mode 100644 index 0000000..6cf2e8a --- /dev/null +++ b/jsf-advanced-cc002.html @@ -0,0 +1,109 @@ + + + + + + Invoking a Managed Bean + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

14.2 Invoking a Managed Bean

+
+
+

To enable a composite component to handle server-side data

+
+
+
    +
  1. +

    Invoke a managed bean in one of the following ways:

    +
    +
      +
    • +

      Pass the reference of the managed bean to the composite component.

      +
    • +
    • +

      Directly use the properties of the managed bean.

      +
      +

      The example application described in +The compositecomponentexample Example +Application shows how to use a managed bean with a composite component +by passing the reference of the managed bean to the component.

      +
      +
    • +
    +
    +
  2. +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/jsf-advanced-cc003.html b/jsf-advanced-cc003.html new file mode 100644 index 0000000..8cf0b37 --- /dev/null +++ b/jsf-advanced-cc003.html @@ -0,0 +1,135 @@ + + + + + + Validating Composite Component Values + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

14.3 Validating Composite Component Values

+
+
+

JavaServer Faces provides the following tags for validating values of +input components. These tags can be used with the +composite:valueHolder or the composite:editableValueHolder tag.

+
+
+

Table 14-2 lists commonly used validator tags. See +Using the Standard Validators for +details and a complete list.

+
+
+

+
+
+

Table 14-2 Validator Tags

+
+ ++++ + + + + + + + + + + + + + + + + + + + + +
Tag NameDescription

f:validateBean

Delegates the validation of the local value to the +Bean Validation API.

f:validateRegex

Uses the pattern attribute to validate the +wrapping component. The entire pattern is matched against the String +value of the component. If it matches, it is valid.

f:validateRequired

Enforces the presence of a value. Has the same +effect as setting the required element of a composite component’s +attribute to true.

+
+
+
+
+
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/jsf-advanced-cc004.html b/jsf-advanced-cc004.html new file mode 100644 index 0000000..50efcb4 --- /dev/null +++ b/jsf-advanced-cc004.html @@ -0,0 +1,366 @@ + + + + + + The compositecomponentexample Example Application + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

14.4 The compositecomponentexample Example Application

+
+
+

The compositecomponentexample application creates a composite +component that accepts a name (or any other string). The component +interacts with a managed bean that calculates whether the letters in the +name, if converted to numeric values, add up to a prime number. The +component displays the sum of the letter values and reports whether it +is or is not prime.

+
+
+

The compositecomponentexample application has a composite component +file, a using page, and a managed bean.

+
+
+

The source code for this application is in the +tut-install`/examples/web/jsf/compositecomponentexample/` directory.

+
+
+

The following topics are addressed here:

+
+ +
+

14.4.1 The Composite Component File

+
+

The composite component file is an XHTML file, +/web/resources/ezcomp/PrimePanel.xhtml. It has a composite:interface +section that declares the labels for the name and a command button. It +also declares a managed bean, which defines properties for the name.

+
+
+
+
<composite:interface>
+    <composite:attribute name="namePrompt"
+                         default="Name, word, or phrase: "/>
+    <composite:attribute name="calcButtonText" default="Calculate"/>
+    <composite:attribute name="calcAction"
+                         method-signature="java.lang.String action()"/>
+    <composite:attribute name="primeBean"/>
+    <composite:editableValueHolder name="nameVal" targets="form:name"/>
+</composite:interface>
+
+
+
+

The composite component implementation accepts the input value for the +name property of the managed bean. The h:outputStylesheet tag +specifies the stylesheet as a relocatable resource. The implementation +then specifies the format of the output, using properties of the managed +bean, as well as the format of error messages. The sum value is rendered +only after it has been calculated, and the report of whether the sum is +prime or not is rendered only if the input value is validated.

+
+
+
+
<composite:implementation>
+    <h:form id="form">
+        <h:outputStylesheet library="css" name="default.css"
+                            target="head"/>
+        <h:panelGrid columns="2" role="presentation">
+            <h:outputLabel for="name"
+                           value="#{cc.attrs.namePrompt}"/>
+            <h:inputText id="name"
+                         size="45"
+                         value="#{cc.attrs.primeBean.name}"
+                         required="true"/>
+        </h:panelGrid>
+        <p>
+            <h:commandButton id="calcButton"
+                             value="#{cc.attrs.calcButtonText}"
+                             action="#{cc.attrs.calcAction}">
+                <f:ajax execute="name" render="outputGroup"/>
+            </h:commandButton>
+        </p>
+
+       <h:panelGroup id="outputGroup" layout="block">
+            <p>
+                <h:outputText id="result" style="color:blue"
+                              rendered="#{cc.attrs.primeBean.totalSum gt 0}"
+                              value="Sum is #{cc.attrs.primeBean.totalSum}" />
+            </p>
+            <p>
+                <h:outputText id="response" style="color:blue"
+                              value="#{cc.attrs.primeBean.response}"
+                              rendered="#{!facesContext.validationFailed}"/>
+                <h:message id="errors1"
+                           showSummary="true"
+                           showDetail="false"
+                           style="color: #d20005;
+                           font-family: 'New Century Schoolbook', serif;
+                           font-style: oblique;
+                           text-decoration: overline"
+                           for="name"/>
+            </p>
+        </h:panelGroup>
+    </h:form>
+</composite:implementation>
+
+
+
+
+

14.4.2 The Using Page

+
+

The using page in this example application, web/index.xhtml, is an +XHTML file that invokes the PrimePanel.xhtml composite component file +along with the managed bean. It validates the user’s input.

+
+
+
+
<div id="compositecomponent">
+    <ez:PrimePanel primeBean="#{primeBean}"
+                   calcAction="#{primeBean.calculate}">
+    </ez:PrimePanel>
+</div>
+
+
+
+
+

14.4.3 The Managed Bean

+
+

The managed bean, PrimeBean.java, defines a method called calculate, +which performs the calculations on the input string and sets properties +accordingly. The bean first creates an array of prime numbers. It +calculates the sum of the letters in the string, with 'a' equal to 1 +and 'z' equal to 26, and determines whether the value can be found in +the array of primes. An uppercase letter in the input string has the +same value as its lowercase equivalent.

+
+
+

The bean specifies the minimum and maximum size of the name string, +which is enforced by the Bean Validation @Size constraint. The bean +uses the @Model annotation, a shortcut for @Named and +@RequestScoped, as described in Step 7 of +To View the hello1 Web Module Using NetBeans +IDE.

+
+
+
+
@Model
+public class PrimeBean implements Serializable {
+    ...
+    @Size(min=1, max=45)
+    private String name;
+    ...
+
+    public String calculate() {
+        ...
+    }
+}
+
+
+
+
+

14.4.4 Running the compositecomponentexample Example

+
+

You can use either NetBeans IDE or Maven to build, package, deploy, and +run the compositecomponentexample example.

+
+
+

The following topics are addressed here:

+
+ +
+

14.4.4.1 To Build, Package, and Deploy the compositecomponentexample +Example Using NetBeans IDE +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

+
+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    From the File menu, choose Open Project.

    +
  4. +
  5. +

    In the Open Project dialog box, navigate to:

    +
    +
    +
    tut-install/examples/web/jsf
    +
    +
    +
  6. +
  7. +

    Select the compositecomponentexample folder.

    +
  8. +
  9. +

    Click Open Project.

    +
  10. +
  11. +

    In the Projects tab, right-click the compositecomponentexample +project and select Build.

    +
    +

    This command builds and deploys the application.

    +
    +
  12. +
+
+
+

14.4.4.2 To Build, Package, and Deploy the compositecomponentexample +Example Using Maven +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

+
+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    In a terminal window, go to:

    +
    +
    +
    tut-install/examples/web/jsf/compositecomponentexample/
    +
    +
    +
  4. +
  5. +

    Enter the following command to build and deploy the application:

    +
    +
    +
    mvn install
    +
    +
    +
  6. +
+
+
+

14.4.4.3 To Run the compositecomponentexample Example

+
+
    +
  1. +

    In a web browser, enter the following URL:

    +
    +
    +
    http://localhost:8080/compositecomponentexample
    +
    +
    +
  2. +
  3. +

    On the page that appears, enter a string in the Name, word, or +phrase field, then click Calculate.

    +
    +

    The page reports the sum of the letters and whether the sum is prime. A +validation error is reported if no value is entered or if the string +contains more than 45 characters.

    +
    +
  4. +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+
+ + + \ No newline at end of file diff --git a/jsf-ajax.html b/jsf-ajax.html new file mode 100644 index 0000000..386d940 --- /dev/null +++ b/jsf-ajax.html @@ -0,0 +1,137 @@ + + + + + + Using Ajax with JavaServer Faces Technology + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

13 Using Ajax with JavaServer Faces Technology

+
+
+

This chapter describes using Ajax functionality in JavaServer Faces web +applications. Ajax is an acronym for Asynchronous JavaScript and XML, a +group of web technologies that enable creation of dynamic and highly +responsive web applications. Using Ajax, web applications can retrieve +content from the server without interfering with the display on the +client. In the Java EE 7 platform, JavaServer Faces technology provides +built-in support for Ajax.

+
+
+

The following topics are addressed here:

+
+ +
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/jsf-ajax001.html b/jsf-ajax001.html new file mode 100644 index 0000000..1570ffb --- /dev/null +++ b/jsf-ajax001.html @@ -0,0 +1,145 @@ + + + + + + Overview of Ajax + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

13.1 Overview of Ajax

+
+
+

Early web applications were created mostly as static web pages. When a +static web page is updated by a client, the entire page has to reload to +reflect the update. In effect, every update needs a page reload to +reflect the change. Repetitive page reloads can result in excessive +network access and can impact application performance. Technologies such +as Ajax were created to overcome these deficiencies.

+
+
+

Ajax refers to JavaScript and XML, technologies that are widely used for +creating dynamic and asynchronous web content. While Ajax is not limited +to JavaScript and XML technologies, more often than not they are used +together by web applications. The focus of this tutorial is on using +JavaScript based Ajax functionality in JavaServer Faces web +applications.

+
+
+

JavaScript is a dynamic scripting language for web applications. It +allows users to add enhanced functionality to user interfaces and allows +web pages to interact with clients asynchronously. JavaScript runs +mainly on the client side (as in a browser) and thereby reduces server +access by clients.

+
+
+

When a JavaScript function sends an asynchronous request from the client +to the server, the server sends back a response that is used to update +the page’s Document Object Model (DOM). This response is often in the +format of an XML document. The term Ajax refers to this interaction +between the client and server.

+
+
+

The server response need not be in XML only; it can also be in other +formats, such as JSON (see Introduction to +JSON and http://www.json.org/). This tutorial does not focus on the +response formats.

+
+
+

Ajax enables asynchronous and partial updating of web applications. Such +functionality allows for highly responsive web pages that are rendered +in near real time. Ajax-based web applications can access server and +process information and can also retrieve data without interfering with +the display and rendering of the current web page on a client (such as a +browser).

+
+
+

Some of the advantages of using Ajax are as follows:

+
+
+
    +
  • +

    Form data validation in real time, eliminating the need to submit the +form for verification

    +
  • +
  • +

    Enhanced functionality for web pages, such as user name and password +prompts

    +
  • +
  • +

    Partial update of the web content, avoiding complete page reloads

    +
  • +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/jsf-ajax002.html b/jsf-ajax002.html new file mode 100644 index 0000000..042219f --- /dev/null +++ b/jsf-ajax002.html @@ -0,0 +1,124 @@ + + + + + + Using Ajax Functionality with JavaServer Faces Technology + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

13.2 Using Ajax Functionality with JavaServer Faces Technology

+
+
+

Ajax functionality can be added to a JavaServer Faces application in one +of the following ways:

+
+
+
    +
  • +

    Adding the required JavaScript code to an application

    +
  • +
  • +

    Using the built-in Ajax resource library

    +
  • +
+
+
+

In earlier releases of the Java EE platform, JavaServer Faces +applications provided Ajax functionality by adding the necessary +JavaScript to the web page. In the Java EE 7 platform, standard Ajax +support is provided by a built-in JavaScript resource library.

+
+
+

With the support of this JavaScript resource library, JavaServer Faces +standard UI components, such as buttons, labels, or text fields, can be +enabled for Ajax functionality. You can also load this resource library +and use its methods directly from within the managed bean code. The next +sections of the tutorial describe the use of the built-in Ajax resource +library.

+
+
+

In addition, because the JavaServer Faces technology component model can +be extended, custom components can be created with Ajax functionality.

+
+
+

The tutorial examples include an Ajax version of the guessnumber +application, ajaxguessnumber. See The +ajaxguessnumber Example Application for more information.

+
+
+

The Ajax specific f:ajax tag and its attributes are explained in the +next sections.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/jsf-ajax003.html b/jsf-ajax003.html new file mode 100644 index 0000000..7bc54e9 --- /dev/null +++ b/jsf-ajax003.html @@ -0,0 +1,276 @@ + + + + + + Using Ajax with Facelets + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

13.3 Using Ajax with Facelets

+
+
+

As mentioned in the previous section, JavaServer Faces technology +supports Ajax by using a built-in JavaScript resource library that is +provided as part of the JavaServer Faces core libraries. This built-in +Ajax resource can be used in JavaServer Faces web applications in one of +the following ways.

+
+
+
    +
  • +

    By using the f:ajax tag along with another standard component in a +Facelets application. This method adds Ajax functionality to any UI +component without additional coding and configuration.

    +
  • +
  • +

    By using the JavaScript API method jsf.ajax.request() directly +within the Facelets application. This method provides direct access to +Ajax methods and allows customized control of component behavior.

    +
  • +
+
+
+

13.3.1 Using the f:ajax Tag

+
+

The f:ajax tag is a JavaServer Faces core tag that provides Ajax +functionality to any regular UI component when used in conjunction with +that component. In the following example, Ajax behavior is added to an +input component by including the f:ajax core tag:

+
+
+
+
<h:inputText value="#{bean.message}">
+    <f:ajax />
+</h:inputText>
+
+
+
+

In this example, although Ajax is enabled, the other attributes of the +f:ajax tag are not defined. If an event is not defined, the default +action for the component is performed. For the inputText component, +when no event attribute is specified, the default event is +valueChange. Table 13-1 lists the attributes of the +f:ajax tag and their default actions.

+
+
+

+
+
+

Table 13-1 Attributes of the f:ajax Tag

+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription

disabled

javax.el.ValueExpression that evaluates to a Boolean

A +Boolean value that identifies the tag status. A value of true +indicates that the Ajax behavior should not be rendered. A value of +false indicates that the Ajax behavior should be rendered. The default +value is false.

event

javax.el.ValueExpression that evaluates to a String

A +String that identifies the type of event to which the Ajax action will +apply. If specified, it must be one of the events supported by the +component. If not specified, the default event (the event that triggers +the Ajax request) is determined for the component. The default event is +action for javax.faces.component.ActionSource components and +valueChange for javax.faces.component.EditableValueHolder +components.

execute

javax.el.ValueExpression that evaluates to an Object

A +Collection that identifies a list of components to be executed on the +server. If a literal is specified, it must be a space-delimited String +of component identifiers and/or one of the keywords. If a +ValueExpression is specified, it must refer to a property that returns +a Collection of String objects. If not specified, the default value +is @this.

immediate

javax.el.ValueExpression that evaluates to a Boolean

A Boolean value that indicates whether inputs are to be processed +early in the lifecycle. If true, behavior events generated from this +behavior are broadcast during the Apply Request Values phase. Otherwise, +the events will be broadcast during the Invoke Application phase.

listener

javax.el.MethodExpression

The name of the listener +method that is called when a javax.faces.event.AjaxBehaviorEvent has +been broadcast for the listener.

onevent

javax.el.ValueExpression that evaluates to a String

The +name of the JavaScript function that handles UI events.

onerror

javax.el.ValueExpression that evaluates to a String

The +name of the JavaScript function that handles errors.

render

javax.el.ValueExpression that evaluates to an Object

A +Collection that identifies a list of components to be rendered on the +client. If a literal is specified, it must be a space-delimited String +of component identifiers and/or one of the keywords. If a +ValueExpression is specified, it must refer to a property that returns +a Collection of String objects. If not specified, the default value +is @none.

+
+
+
+
+
+
+
+

The keywords listed in Table 13-2 can be used with the +execute and render attributes of the f:ajax tag.

+
+
+

+
+
+

Table 13-2 Execute and Render Keywords

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + +
KeywordDescription

@all

All component identifiers

@form

The form that encloses the component

@none

No component identifiers

@this

The element that triggered the request

+
+
+
+
+
+
+
+

Note that when you use the f:ajax tag in a Facelets page, the +JavaScript resource library is loaded implicitly. This resource library +can also be loaded explicitly as described in +Loading JavaScript as a Resource.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/jsf-ajax004.html b/jsf-ajax004.html new file mode 100644 index 0000000..e848a96 --- /dev/null +++ b/jsf-ajax004.html @@ -0,0 +1,269 @@ + + + + + + Sending an Ajax Request + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

13.4 Sending an Ajax Request

+
+
+

To activate Ajax functionality, the web application must create an Ajax +request and send it to the server. The server then processes the +request.

+
+
+

The application uses the attributes of the f:ajax tag listed in +Table 13-1 to create the Ajax request. The +following sections explain the process of creating and sending an Ajax +request using some of these attributes.

+
+
+
+
+
+
+
+ +++ + + + + + +
+

Note:

+
+
+

Behind the scenes, the jsf.ajax.request() method of the JavaScript +resource library collects the data provided by the f:ajax tag and +posts the request to the JavaServer Faces lifecycle.

+
+
+
+
+
+
+
+
+

The following topics are addressed here:

+
+ +
+

13.4.1 Using the event Attribute

+
+

The event attribute defines the event that triggers the Ajax action. +Some of the possible values for this attribute are click, keyup, +mouseover, focus, and blur.

+
+
+

If not specified, a default event based on the parent component will be +applied. The default event is action for +javax.faces.component.ActionSource components, such as a +commandButton, and valueChange for +javax.faces.component.EditableValueHolder components, such as +inputText. In the following example, an Ajax tag is associated with +the button component, and the event that triggers the Ajax action is a +mouse click:

+
+
+
+
<h:commandButton id="submit" value="Submit">
+    <f:ajax event="click" />
+</h:commandButton>
+<h:outputText id="result" value="#{userNumberBean.response}" />
+
+
+
+
+
+
+
+
+ +++ + + + + + +
+

Note:

+
+
+

You may have noticed that the listed events are very similar to +JavaScript events. In fact, they are based on JavaScript events, but do +not have the on prefix.

+
+
+
+
+
+
+
+
+

For a command button, the default event is click, so you do not +actually need to specify event="click" to obtain the desired behavior.

+
+
+
+

13.4.2 Using the execute Attribute

+
+

The execute attribute defines the component or components to be +executed on the server. The component is identified by its id +attribute. You can specify more than one executable component. If more +than one component is to be executed, specify a space-delimited list of +components.

+
+
+

When a component is executed, it participates in all phases of the +request-processing lifecycle except the Render Response phase.

+
+
+

The execute attribute value can also be a keyword, such as @all, +@none, @this, or @form. The default value is @this, which refers +to the component within which the f:ajax tag is nested.

+
+
+

The following code specifies that the h:inputText component with the +id value of userNo should be executed when the button is clicked:

+
+
+
+
<h:inputText id="userNo"
+             title="Type a number from 0 to 10:"
+             value="#{userNumberBean.userNumber}">
+    ...
+</h:inputText>
+<h:commandButton id="submit" value="Submit">
+    <f:ajax event="click" execute="userNo" />
+</h:commandButton>
+
+
+
+
+

13.4.3 Using the immediate Attribute

+
+

The immediate attribute indicates whether user inputs are to be +processed early in the application lifecycle or later. If the attribute +is set to true, events generated from this component are broadcast +during the Apply Request Values phase. Otherwise, the events will be +broadcast during the Invoke Application phase.

+
+
+

If not defined, the default value of this attribute is false.

+
+
+
+

13.4.4 Using the listener Attribute

+
+

The listener attribute refers to a method expression that is executed +on the server side in response to an Ajax action on the client. The +listener’s javax.faces.event.AjaxBehaviorListener.processAjaxBehavior +method is called once during the Invoke Application phase of the +lifecycle. In the following code from the reservation example +application (see The reservation +Example Application), a listener attribute is defined by an f:ajax +tag, which refers to a method from the bean:

+
+
+
+
<f:ajax event="change" render="total"
+        listener="#{reservationBean.calculateTotal}"/>
+
+
+
+

Whenever either the price or the number of tickets ordered changes, the +calculateTotal method of ReservationBean recalculates the total cost +of the tickets and displays it in the output component named total.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/jsf-ajax005.html b/jsf-ajax005.html new file mode 100644 index 0000000..c620762 --- /dev/null +++ b/jsf-ajax005.html @@ -0,0 +1,155 @@ + + + + + + Monitoring Events on the Client + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

13.5 Monitoring Events on the Client

+
+
+

To monitor ongoing Ajax requests, use the onevent attribute of the +f:ajax tag. The value of this attribute is the name of a JavaScript +function. JavaServer Faces calls the onevent function at each stage of +the processing of an Ajax request: begin, complete, and success.

+
+
+

When calling the JavaScript function assigned to the onevent property, +JavaServer Faces passes a data object to it. The data object contains +the properties listed in Table 13-3.

+
+
+

+
+
+

Table 13-3 Properties of the onevent Data Object

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyDescription

responseXML

The response to the Ajax call in XML format

responseText

The response to the Ajax call in text format

responseCode

The response to the Ajax call in numeric code

source

The source of the current Ajax event: the DOM element

status

The status of the current Ajax call: begin, complete, or +success

type

The type of the Ajax call: event

+
+
+
+
+
+
+
+

By using the status property of the data object, you can identify the +current status of the Ajax request and monitor its progress. In the +following example, monitormyajaxevent is a JavaScript function that +monitors the Ajax request sent by the event:

+
+
+
+
<f:ajax event="click" render="statusmessage" onevent="monitormyajaxevent"/>
+
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/jsf-ajax006.html b/jsf-ajax006.html new file mode 100644 index 0000000..d93c59d --- /dev/null +++ b/jsf-ajax006.html @@ -0,0 +1,163 @@ + + + + + + Handling Errors + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

13.6 Handling Errors

+
+
+

JavaServer Faces handles Ajax errors through use of the onerror +attribute of the f:ajax tag. The value of this attribute is the name +of a JavaScript function.

+
+
+

When there is an error in processing a Ajax request, JavaServer Faces +calls the defined onerror JavaScript function and passes a data object +to it. The data object contains all the properties available for the +onevent attribute and, in addition, the following properties:

+
+
+
    +
  • +

    description

    +
  • +
  • +

    errorName

    +
  • +
  • +

    errorMessage

    +
  • +
+
+
+

The type is error. The status property of the data object contains +one of the valid error values listed in Table 13-4.

+
+
+

+
+
+

Table 13-4 Valid Error Values for the Data Object status Property

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + +
ValuesDescription

emptyResponse

No Ajax response from server.

httpError

One of the valid HTTP errors: request.status==null or +request.status==undefined or request.status<200 or +request.status>=300.

malformedXML

The Ajax response is not well formed.

serverError

The Ajax response contains an error element.

+
+
+
+
+
+
+
+

In the following example, any errors that occurred in processing the +Ajax request are handled by the handlemyajaxerror JavaScript function:

+
+
+
+
<f:ajax event="click" render="errormessage" onerror="handlemyajaxerror"/>
+
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/jsf-ajax007.html b/jsf-ajax007.html new file mode 100644 index 0000000..4a92b60 --- /dev/null +++ b/jsf-ajax007.html @@ -0,0 +1,137 @@ + + + + + + Receiving an Ajax Response + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

13.7 Receiving an Ajax Response

+
+
+

After the application sends an Ajax request, it is processed on the +server side, and a response is sent back to the client. As described +earlier, Ajax allows for partial updating of web pages. To enable such +partial updating, JavaServer Faces technology allows for partial +processing of the view. The handling of the response is defined by the +render attribute of the f:ajax tag.

+
+
+

Similar to the execute attribute, the render attribute defines which +sections of the page will be updated. The value of a render attribute +can be one or more component id values, one of the keywords @this, +@all, @none, or @form, or an EL expression. In the following +example, the render attribute identifies an output component to be +displayed when the button component is clicked (the default event for a +command button):

+
+
+
+
<h:commandButton id="submit" value="Submit">
+    <f:ajax execute="userNo" render="result" />
+</h:commandButton>
+<h:outputText id="result" value="#{userNumberBean.response}" />
+
+
+
+
+
+
+
+
+ +++ + + + + + +
+

Note:

+
+
+

Behind the scenes, once again the jsf.ajax.request() method handles +the response. It registers a response-handling callback when the +original request is created. When the response is sent back to the +client, the callback is invoked. This callback automatically updates the +client-side DOM to reflect the rendered response.

+
+
+
+
+
+
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/jsf-ajax008.html b/jsf-ajax008.html new file mode 100644 index 0000000..989ef32 --- /dev/null +++ b/jsf-ajax008.html @@ -0,0 +1,118 @@ + + + + + + Ajax Request Lifecycle + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

13.8 Ajax Request Lifecycle

+
+
+

An Ajax request varies from other typical JavaServer Faces requests, and +its processing is also handled differently by the JavaServer Faces +lifecycle.

+
+
+

As described in Partial Processing and +Partial Rendering, when an Ajax request is received, the state +associated with that request is captured by the +javax.faces.context.PartialViewContext. This object provides access to +information such as which components are targeted for +processing/rendering. The processPartial method of +PartialViewContext uses this information to perform partial component +tree processing and rendering.

+
+
+

The execute attribute of the f:ajax tag identifies which segments of +the server-side component tree should be processed. Because components +can be uniquely identified in the JavaServer Faces component tree, it is +easy to identify and process a single component, a few components, or a +whole tree. This is made possible by the visitTree method of the +UIComponent class. The identified components then run through the +JavaServer Faces request lifecycle phases.

+
+
+

Similar to the execute attribute, the render attribute identifies +which segments of the JavaServer Faces component tree need to be +rendered during the render response phase.

+
+
+

During the render response phase, the render attribute is examined. +The identified components are found and asked to render themselves and +their children. The components are then packaged up and sent back to the +client as a response.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/jsf-ajax009.html b/jsf-ajax009.html new file mode 100644 index 0000000..98f9fe6 --- /dev/null +++ b/jsf-ajax009.html @@ -0,0 +1,138 @@ + + + + + + Grouping of Components + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

13.9 Grouping of Components

+
+
+

The previous sections describe how to associate a single UI component +with Ajax functionality. You can also associate Ajax with more than one +component at a time by grouping them together on a page. The following +example shows how a number of components can be grouped by using the +f:ajax tag:

+
+
+
+
<f:ajax>
+    <h:form>
+        <h:inputText id="input1" value="#{user.name}"/>
+        <h:commandButton id="Submit"/>
+    </h:form>
+</f:ajax>
+
+
+
+

In the example, neither component is associated with any Ajax event or +render attributes yet. Therefore, no action will take place in case of +user input. You can associate the above components with an event and a +render attribute as follows:

+
+
+
+
<f:ajax event="click" render="@all">
+    <h:form>
+        <h:inputText id="input1" value="#{user.name}"/>
+        <h:commandButton id="Submit"/>
+    </h:form>
+</f:ajax>
+
+
+
+

In the updated example, when the user clicks either component, the +updated results will be displayed for all components. You can further +fine-tune the Ajax action by adding specific events to each of the +components, in which case Ajax functionality becomes cumulative. +Consider the following example:

+
+
+
+
<f:ajax event="click" render="@all">
+    ...
+    <h:commandButton id="Submit">
+        <f:ajax event="mouseover"/>
+    </h:commandButton>
+    ...
+</f:ajax>
+
+
+
+

Now the button component will fire an Ajax action in case of a +mouseover event as well as a mouse-click event.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/jsf-ajax010.html b/jsf-ajax010.html new file mode 100644 index 0000000..384df40 --- /dev/null +++ b/jsf-ajax010.html @@ -0,0 +1,284 @@ + + + + + + Loading JavaScript as a Resource + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

13.10 Loading JavaScript as a Resource

+
+
+

The JavaScript resource file bundled with JavaServer Faces technology is +named jsf.js and is available in the javax.faces library. This +resource library supports Ajax functionality in JavaServer Faces +applications.

+
+
+

If you use the f:ajax tag on a page, the jsf.js resource is +automatically delivered to the client. It is not necessary to use the +h:outputScript tag to specify this resource. You may want to use the +h:outputScript tag to specify other JavaScript libraries.

+
+
+

To use a JavaScript resource directly with a UIComponent, you must +explicitly load the resource as described in either of the following +topics:

+
+
+ +
+
+

13.10.1 Using JavaScript API in a Facelets Application

+
+

To use the JavaScript resource API directly in a web application, such +as a Facelets page:

+
+
+
    +
  1. +

    Identify the default JavaScript resource for the page with the help +of the h:outputScript tag.

    +
    +

    For example, consider the following section of a Facelets page:

    +
    +
    +
    +
    <h:form>
    +    <h:outputScript name="jsf.js" library="javax.faces" target="head"/>
    +</h:form>
    +
    +
    +
    +

    Specifying the target as head causes the script resource to be +rendered within the head element on the HTML page.

    +
    +
  2. +
  3. +

    Identify the component to which you would like to attach the Ajax +functionality.

    +
  4. +
  5. +

    Add the Ajax functionality to the component by using the JavaScript +API. For example, consider the following:

    +
    +
    +
    <h:form>
    +    <h:outputScript name="jsf.js" library="javax.faces" target="head">
    +    <h:inputText id="inputname" value="#{userBean.name}"/>
    +    <h:outputText id="outputname" value="#{userBean.name}"/>
    +    <h:commandButton id="submit" value="Submit"
    +                     onclick="jsf.ajax.request(this, event,
    +                              {execute:'inputname',render:'outputname'});
    +                              return false;" />
    +</h:form>
    +
    +
    +
    +

    The jsf.ajax.request method takes up to three parameters that specify +source, event, and options. The source parameter identifies the DOM +element that triggered the Ajax request, typically this. The optional +event parameter identifies the DOM event that triggered this request. +The optional options parameter contains a set of name/value pairs from +Table 13-5.

    +
    +
    +

    +
    +
  6. +
+
+
+

Table 13-5 Possible Values for the Options Parameter

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameValue

execute

A space-delimited list of client identifiers or one of the +keywords listed in Table 13-2. The +identifiers reference the components that will be processed during the +Execute phase of the lifecycle.

render

A space-delimited list of client identifiers or one of the +keywords listed in Table 13-2. The +identifiers reference the components that will be processed during the +render phase of the lifecycle.

onevent

A String that is the name of the JavaScript function to +call when an event occurs.

onerror

A String that is the name of the JavaScript function to +call when an error occurs.

params

An object that may include additional parameters to include +in the request.

+
+
+
+
+
+
+
+

+ +If no identifier is specified, the default assumed keyword for the +execute attribute is @this, and for the render attribute it is +@none.

+
+
+

+ +You can also place the JavaScript method in a file and include it as a +resource.

+
+
+
+

13.10.2 Using the @ResourceDependency Annotation in a Bean Class

+
+

Use the javax.faces.application.ResourceDependency annotation to cause +the bean class to load the default jsf.js library.

+
+
+

To load the Ajax resource from the server side:

+
+
+
    +
  1. +

    Use the jsf.ajax.request method within the bean class.

    + +++ + + + + + +
    +

    Note:

    +
    +
    +

    This method is usually used when creating a custom component or a custom +renderer for a component.

    +
    +
    +
    +
    +
    +
    +
    +
    +

    The following example shows how the resource is loaded in a bean class:

    +
    +
    +
    +
    @ResourceDependency(name="jsf.js" library="javax.faces" target="head")
    +
    +
    +
  2. +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/jsf-ajax011.html b/jsf-ajax011.html new file mode 100644 index 0000000..eb39400 --- /dev/null +++ b/jsf-ajax011.html @@ -0,0 +1,361 @@ + + + + + + The ajaxguessnumber Example Application + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

13.11 The ajaxguessnumber Example Application

+
+
+

To demonstrate the advantages of using Ajax, revisit the guessnumber +example from Chapter 8, "Introduction to +Facelets". If you modify this example to use Ajax, the response need +not be displayed on the response.xhtml page. Instead, an asynchronous +call is made to the bean on the server side, and the response is +displayed on the originating page by executing just the input component +rather than by form submission.

+
+
+

The source code for this application is in the +tut-install`/examples/web/jsf/ajaxguessnumber/` directory.

+
+
+

The following topics are addressed here:

+
+ +
+

13.11.1 The ajaxguessnumber Source Files

+
+

The changes to the guessnumber application occur in two source files.

+
+
+

The following topics are addressed here:

+
+ +
+

13.11.1.1 The ajaxgreeting.xhtml Facelets Page

+
+

The Facelets page for ajaxguessnumber, ajaxgreeting.xhtml, is almost +the same as the greeting.xhtml page for the guessnumber application:

+
+
+
+
<h:head>
+    <h:outputStylesheet library="css" name="default.css"/>
+    <title>Ajax Guess Number Facelets Application</title>
+</h:head>
+<h:body>
+    <h:form id="AjaxGuess">
+        <h:graphicImage value="#{resource['images:wave.med.gif']}"
+                        alt="Duke waving his hand"/>
+        <h2>
+            Hi, my name is Duke. I am thinking of a number from
+            #{dukesNumberBean.minimum} to #{dukesNumberBean.maximum}.
+            Can you guess it?
+        </h2>
+        <p>
+            <h:inputText id="userNo"
+                         title="Enter a number from 0 to 10:"
+                         value="#{userNumberBean.userNumber}">
+                <f:validateLongRange minimum="#{dukesNumberBean.minimum}"
+                                     maximum="#{dukesNumberBean.maximum}"/>
+            </h:inputText>
+
+            <h:commandButton id="submit" value="Submit">
+                <f:ajax execute="userNo" render="outputGroup" />
+            </h:commandButton>
+        </p>
+        <p>
+            <h:panelGroup layout="block" id="outputGroup">
+                <h:outputText id="result" style="color:blue"
+                              value="#{userNumberBean.response}"
+                              rendered="#{!facesContext.validationFailed}"/>
+                <h:message id="errors1"
+                           showSummary="true"
+                           showDetail="false"
+                           style="color: #d20005;
+                           font-family: 'New Century Schoolbook', serif;
+                           font-style: oblique;
+                           text-decoration: overline"
+                           for="userNo"/>
+            </h:panelGroup>
+        </p>
+    </h:form>
+</h:body>
+
+
+
+

The most important change is in the h:commandButton tag. The action +attribute is removed from the tag, and an f:ajax tag is added.

+
+
+

The f:ajax tag specifies that when the button is clicked the +h:inputText component with the id value userNo is executed. The +components within the outputGroup panel group are then rendered. If a +validation error occurs, the managed bean is not executed, and the +validation error message is displayed in the message pane. Otherwise, +the result of the guess is rendered in the result component.

+
+
+
+

13.11.1.2 The UserNumberBean Backing Bean

+
+

A small change is also made in the UserNumberBean code so that the +output component does not display any message for the default (null) +value of the property response. Here is the modified bean code:

+
+
+
+
public String getResponse() {
+    if ((userNumber != null)
+            && (userNumber.compareTo(dukesNumberBean.getRandomInt()) == 0)) {
+        return "Yay! You got it!";
+    }
+    if (userNumber == null) {
+        return null;
+    } else {
+        return "Sorry, " + userNumber + " is incorrect.";
+    }
+}
+
+
+
+
+

13.11.1.3 The DukesNumberBean CDI Managed Bean

+
+

The DukesNumberBean session-scoped CDI managed bean stores the range +of guessable numbers and the randomly chosen number from that range. It +is injected into UserNumberBean with the CDI @Inject annotation so +that the value of the random number can be compared to the number the +user submitted:

+
+
+
+
@Inject
+DukesNumberBean dukesNumberBean;
+
+
+ +
+
+
+

13.11.2 Running the ajaxguessnumber Example

+
+

You can use either NetBeans IDE or Maven to build, package, deploy, and +run the ajaxguessnumber application.

+
+
+

The following topics are addressed here:

+
+ +
+

13.11.2.1 To Build, Package, and Deploy the ajaxguessnumber Example +Using NetBeans IDE +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

+
+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    From the File menu, choose Open Project.

    +
  4. +
  5. +

    In the Open Project dialog box, navigate to:

    +
    +
    +
    tut-install/examples/web/jsf
    +
    +
    +
  6. +
  7. +

    Select the ajaxguessnumber folder.

    +
  8. +
  9. +

    Click Open Project.

    +
  10. +
  11. +

    In the Projects tab, right-click the ajaxguessnumber project and +select Build.

    +
    +

    This command builds and deploys the project.

    +
    +
  12. +
+
+
+

13.11.2.2 To Build, Package, and Deploy the ajaxguessnumber Example +Using Maven +^^^^^^^^^^^^^^^^^^^^^^^^^^^

+
+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    In a terminal window, go to:

    +
    +
    +
    tut-install/examples/web/jsf/ajaxguessnumber/
    +
    +
    +
  4. +
  5. +

    Enter the following command:

    +
    +
    +
    mvn install
    +
    +
    +
    +

    This command builds and packages the application into a WAR file, +ajaxguessnumber.war, located in the target directory. It then +deploys the application.

    +
    +
  6. +
+
+
+

13.11.2.3 To Run the ajaxguessnumber Example

+
+
    +
  1. +

    In a web browser, enter the following URL:

    +
    +
    +
    http://localhost:8080/ajaxguessnumber
    +
    +
    +
  2. +
  3. +

    Enter a value in the field and click Submit.

    +
    +

    If the value is in the range of 0 to 10, a message states whether the +guess is correct or incorrect. If the value is outside that range or if +the value is not a number, an error message appears in red.

    +
    +
  4. +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+
+ + + \ No newline at end of file diff --git a/jsf-ajax012.html b/jsf-ajax012.html new file mode 100644 index 0000000..ef8e632 --- /dev/null +++ b/jsf-ajax012.html @@ -0,0 +1,100 @@ + + + + + + Further Information about Ajax in JavaServer Faces Technology + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

13.12 Further Information about Ajax in JavaServer Faces Technology

+
+
+

For more information on Ajax in JavaServer Faces Technology, see

+
+
+ +
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/jsf-configure.html b/jsf-configure.html new file mode 100644 index 0000000..317b372 --- /dev/null +++ b/jsf-configure.html @@ -0,0 +1,138 @@ + + + + + + Configuring JavaServer Faces Applications + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+ + + + \ No newline at end of file diff --git a/jsf-configure001.html b/jsf-configure001.html new file mode 100644 index 0000000..3d0dfef --- /dev/null +++ b/jsf-configure001.html @@ -0,0 +1,117 @@ + + + + + + Introduction to Configuring JavaServer Faces Applications + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

16.1 Introduction to Configuring JavaServer Faces Applications

+
+
+

The process of building and deploying simple JavaServer Faces +applications is described in earlier chapters of this tutorial, +including Chapter 6, "Getting Started with Web +Applications," Chapter 8, "Introduction to +Facelets," Chapter 13, "Using Ajax with +JavaServer Faces Technology," and +Chapter 14, "Composite Components: +Advanced Topics and an Example." When you create large and complex +applications, however, various additional configuration tasks are +required. These tasks include the following:

+
+
+
    +
  • +

    Registering managed beans with the application so that all parts of +the application have access to them

    +
  • +
  • +

    Configuring managed beans and model beans so that they are +instantiated with the proper values when a page makes reference to them

    +
  • +
  • +

    Defining navigation rules for each of the pages in the application so +that the application has a smooth page flow, if nondefault navigation is +needed

    +
  • +
  • +

    Packaging the application to include all the pages, resources, and +other files so that the application can be deployed on any compliant +container

    +
  • +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/jsf-configure002.html b/jsf-configure002.html new file mode 100644 index 0000000..fde5cdf --- /dev/null +++ b/jsf-configure002.html @@ -0,0 +1,180 @@ + + + + + + Using Annotations to Configure Managed Beans + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

16.2 Using Annotations to Configure Managed Beans

+
+
+

JavaServer Faces support for bean annotations is introduced in +Chapter 7, "JavaServer Faces Technology". Bean +annotations can be used for configuring JavaServer Faces applications.

+
+
+

The @Named (javax.inject.Named) annotation in a class, along with a +scope annotation, automatically registers that class as a resource with +the JavaServer Faces implementation. A bean that uses these annotations +is a CDI managed bean.

+
+
+

The following shows the use of the @Named and @SessionScoped +annotations in a class:

+
+
+
+
@Named("cart")
+@SessionScoped
+public class ShoppingCart ... { ... }
+
+
+
+

The above code snippet shows a bean that is managed by the JavaServer +Faces implementation and is available for the length of the session.

+
+
+

You can annotate beans with any of the scopes listed in the next +section, Using Managed Bean Scopes.

+
+
+

All classes will be scanned for annotations at startup unless the +faces-config element in the faces-config.xml file has the +metadata-complete attribute set to true.

+
+
+

Annotations are also available for other artifacts, such as components, +converters, validators, and renderers, to be used in place of +application configuration resource file entries. These are discussed, +along with registration of custom listeners, custom validators, and +custom converters, in Chapter 15, "Creating +Custom UI Components and Other Custom Objects".

+
+
+

16.2.1 Using Managed Bean Scopes

+
+

You can use annotations to define the scope in which the bean will be +stored. You can specify one of the following scopes for a bean class.

+
+
+
    +
  • +

    Application (javax.enterprise.context.ApplicationScoped): +Application scope persists across all users' interactions with a web +application.

    +
  • +
  • +

    Session (javax.enterprise.context.SessionScoped): Session scope +persists across multiple HTTP requests in a web application.

    +
  • +
  • +

    Flow (javax.faces.flows.FlowScoped): Flow scope persists during a +user’s interaction with a specific flow of a web application. See +Using Faces Flows for more +information.

    +
  • +
  • +

    Request (javax.enterprise.context.RequestScoped): Request scope +persists during a single HTTP request in a web application.

    +
  • +
  • +

    Dependent (javax.enterprise.context.Dependent): Indicates that the +bean depends on some other bean.

    +
  • +
+
+
+

You may want to use @Dependent when a managed bean references another +managed bean. The second bean should not be in a scope (@Dependent) if +it is supposed to be created only when it is referenced. If you define a +bean as @Dependent, the bean is instantiated anew each time it is +referenced, so it does not get saved in any scope.

+
+
+

If your managed bean is referenced by the binding attribute of a +component tag, you should define the bean with a request scope. If you +placed the bean in session or application scope instead, the bean would +need to take precautions to ensure thread safety, because +javax.faces.component.UIComponent instances each depend on running +inside of a single thread.

+
+
+

If you are configuring a bean that allows attributes to be associated +with the view, you can use the view scope. The attributes persist until +the user has navigated to the next view.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/jsf-configure003.html b/jsf-configure003.html new file mode 100644 index 0000000..ad8f715 --- /dev/null +++ b/jsf-configure003.html @@ -0,0 +1,322 @@ + + + + + + Application Configuration Resource File + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

16.3 Application Configuration Resource File

+
+
+

JavaServer Faces technology provides a portable configuration format (as +an XML document) for configuring application resources. One or more XML +documents, called application configuration resource files, may use this +format to register and configure objects and resources and to define +navigation rules for applications. An application configuration resource +file is usually named faces-config.xml.

+
+
+

You need an application configuration resource file in the following +cases:

+
+
+
    +
  • +

    To specify configuration elements for your application that are not +available through managed bean annotations, such as localized messages +and navigation rules

    +
  • +
  • +

    To override managed bean annotations when the application is deployed

    +
  • +
+
+
+

The application configuration resource file must be valid against the +XML schema located at +http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd.

+
+
+

In addition, each file must include the following information, in the +following order:

+
+
+
    +
  • +

    The XML version number, usually with an encoding attribute:

    +
    +
    +
    <?xml version="1.0" encoding='UTF-8'?>
    +
    +
    +
  • +
  • +

    A faces-config tag enclosing all the other declarations:

    +
    +
    +
    <faces-config version="2.2" xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    +              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    +              xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
    +              http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd">
    +    ...
    +</faces-config>
    +
    +
    +
  • +
+
+
+

You can have more than one application configuration resource file for +an application. The JavaServer Faces implementation finds the +configuration file or files by looking for the following.

+
+
+
    +
  • +

    A resource named /META-INF/faces-config.xml in any of the JAR files +in the web application’s /WEB-INF/lib/ directory and in parent class +loaders. If a resource with this name exists, it is loaded as a +configuration resource. This method is practical for a packaged library +containing some components and renderers. In addition, any file with a +name that ends in faces-config.xml is also considered a configuration +resource and is loaded as such.

    +
  • +
  • +

    A context initialization parameter, +javax.faces.application.CONFIG_FILES, in your web deployment +descriptor file that specifies one or more (comma-delimited) paths to +multiple configuration files for your web application. This method is +most often used for enterprise-scale applications that delegate to +separate groups the responsibility for maintaining the file for each +portion of a big application.

    +
  • +
  • +

    A resource named faces-config.xml in the /WEB-INF/ directory of +your application. Simple web applications make their configuration files +available in this way.

    +
  • +
+
+
+

To access the resources registered with the application, an application +developer can use an instance of the +javax.faces.application.Application class, which is automatically +created for each application. The Application instance acts as a +centralized factory for resources that are defined in the XML file.

+
+
+

When an application starts up, the JavaServer Faces implementation +creates a single instance of the Application class and configures it +with the information you provided in the application configuration +resource file.

+
+
+

16.3.1 Configuring Eager Application-Scoped Managed Beans

+
+

JavaServer Faces managed beans (either specified in the +f`aces-config.xml` file or annotated with +javax.faces.bean.ManagedBean) are lazily instantiated. That is, that +they are instantiated when a request is made from the application.

+
+
+

To force an application-scoped bean to be instantiated and placed in the +application scope as soon as the application is started and before any +request is made, the eager attribute of the managed bean should be set +to true, as shown in the following examples.

+
+
+

The faces-config.xml file declaration is as follows:

+
+
+
+
<managed-bean eager="true">
+
+
+
+

The annotation is as follows:

+
+
+
+
@ManagedBean(eager=true)
+@ApplicationScoped
+
+
+
+
+

16.3.2 Ordering of Application Configuration Resource Files

+
+

Because JavaServer Faces technology allows the use of multiple +application configuration resource files stored in different locations, +the order in which they are loaded by the implementation becomes +important in certain situations (for example, when using +application-level objects). This order can be defined through an +ordering element and its subelements in the application configuration +resource file itself. The ordering of application configuration resource +files can be absolute or relative.

+
+
+

Absolute ordering is defined by an absolute-ordering element in the +file. With absolute ordering, the user specifies the order in which +application configuration resource files will be loaded. The following +example shows an entry for absolute ordering.

+
+
+

File my-faces-config.xml contains the following elements:

+
+
+
+
<faces-config>
+    <name>myJSF</name>
+    <absolute-ordering>
+        <name>A</name>
+        <name>B</name>
+        <name>C</name>
+    </absolute-ordering>
+</faces-config>
+
+
+
+

In this example, A, B, and C are different application configuration +resource files and are to be loaded in the listed order.

+
+
+

If there is an absolute-ordering element in the file, only the files +listed by the subelement name are processed. To process any other +application configuration resource files, an others subelement is +required. In the absence of the others subelement, all other unlisted +files will be ignored at load time.

+
+
+

Relative ordering is defined by an ordering element and its +subelements before and after. With relative ordering, the order in +which application configuration resource files will be loaded is +calculated by considering ordering entries from the different files. The +following example shows some of these considerations. In the following +example, config-A, config-B, and config-C are different +application configuration resource files.

+
+
+

File config-A contains the following elements:

+
+
+
+
<faces-config>
+    <name>config-A</name>
+    <ordering>
+        <before>
+            <name>config-B</name>
+        </before>
+    </ordering>
+</faces-config>
+
+
+
+

File config-B (not shown here) does not contain any ordering +elements.

+
+
+

File config-C contains the following elements:

+
+
+
+
<faces-config>
+    <name>config-C</name>
+    <ordering>
+        <after>
+            <name>config-B</name>
+        </after>
+    </ordering>
+</faces-config>
+
+
+
+

Based on the before subelement entry, file config-A will be loaded +before the config-B file. Based on the after subelement entry, file +config-C will be loaded after the config-B file.

+
+
+

In addition, a subelement others can also be nested within the +before and after subelements. If the others element is present, +the specified file may receive highest or lowest preference among both +listed and unlisted configuration files.

+
+
+

If an ordering element is not present in an application configuration +file, then that file will be loaded after all the files that contain +ordering elements.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/jsf-configure004.html b/jsf-configure004.html new file mode 100644 index 0000000..4af88c5 --- /dev/null +++ b/jsf-configure004.html @@ -0,0 +1,882 @@ + + + + + + Using Faces Flows + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

16.4 Using Faces Flows

+
+
+

The Faces Flows feature of JavaServer Faces technology allows you to +create a set of pages with a scope, FlowScoped, that is greater than +request scope but less than session scope. For example, you might want +to create a series of pages for the checkout process in an online store. +You could create a set of self-contained pages that could be transferred +from one store to another as needed.

+
+
+

Faces Flows are somewhat analogous to subroutines in procedural +programming, in the following ways.

+
+
+
    +
  • +

    Like a subroutine, a flow has a well defined entry point, list of +parameters, and return value. However, unlike a subroutine, a flow can +return multiple values.

    +
  • +
  • +

    Like a subroutine, a flow has a scope, allowing information to be +available only during the invocation of the flow. Such information is +not available outside the scope of the flow and does not consume any +resources once the flow returns.

    +
  • +
  • +

    Like a subroutine, a flow may call other flows before returning. The +invocation of flows is maintained in a call stack: a new flow causes a +push onto the stack, and a return causes a pop.

    +
  • +
+
+
+

An application can have any number of flows. Each flow includes a set of +pages and, usually, one or more managed beans scoped to that flow. Each +flow has a starting point, called a start node, and an exit point, +called a return node.

+
+
+

The data in a flow is scoped to that flow alone, but you can pass data +from one flow to another by specifying parameters and calling the other +flow.

+
+
+

Flows can be nested, so that if you call one flow from another and then +exit the second flow, you return to the calling flow rather than to the +second flow’s return node.

+
+
+

You can configure a flow programmatically, by creating a class annotated +@FlowDefinition, or you can configure a flow by using a configuration +file. The configuration file can be limited to one flow, or you can use +the faces-config.xml file to put all the flows in one place, if you +have many flows in an application. The programmatic configuration places +the code closer to the rest of the flow code and enables you to +modularize the flows.

+
+
+

Figure 16-1 shows two flows and illustrates how they +interact.

+
+
+

Figure 16-1 Two Faces Flows and Their Interactions

+
+ +
+

In this figure, Flow A has a start node named flow-a and two +additional pages, next_a1 and next_a2. From next_a2, a user can +either exit the flow using the defined return node, taskFlowReturn1, +or call Flow B, passing two parameters. Flow A also defines two inbound +parameters that it can accept from Flow B. Flow B is identical to Flow A +except for the names of the flow and files. Each flow also has an +associated managed bean; the beans are Flow_a_Bean and Flow_b_Bean.

+
+
+

16.4.1 Packaging Flows in an Application

+
+

Typically, you package flows in a web application using a directory +structure that modularizes the flows. In the src/main/webapp directory +of a Maven project, for example, you would place the Facelets files that +are outside the flow at the top level as usual. Then the webapp files +for each flow would be in a separate directory, and the Java files would +be under src/main/java. For example, the files for the application +shown in Figure 16-1 might look like this:

+
+
+
+
src/main/webapp/
+    index.xhtml
+    return.xhtml
+    WEB_INF/
+        beans.xml
+        web.xml
+    flow-a/
+        flow-a.xhtml
+        next_a1.xhtml
+        next_a2.xhtml
+    flow-b/
+        flow-b-flow.xml
+        next_b1.xhtml
+        next_b2.xhtml
+src/main/java/javaeetutorial/flowexample
+            FlowA.java
+            Flow_a_Bean.java
+            Flow_b_Bean.java
+
+
+
+

In this example, flow-a is defined programmatically in FlowA.java, +while flow-b is defined by the configuration file flow-b-flow.xml.

+
+
+
+

16.4.2 The Simplest Possible Flow: The simple-flow Example Application

+
+

The simple-flow example application demonstrates the most basic +building blocks of a Faces Flows application and illustrates some of the +conventions that make it easy to get started with iterative development +using flows. You may want to start with a simple example like this one +and build upon it.

+
+
+

This example provides an implicit flow definition by including an empty +configuration file. A configuration file that has content, or a class +annotated @FlowDefinition, provides an explicit flow definition.

+
+
+

The source code for this application is in the +tut-install`/examples/web/jsf/simple-flow/` directory.

+
+
+

The file layout of the simple-flow example looks like this:

+
+
+
+
src/main/webapp
+    index.xhtml
+    simple-flow-return.xhtml
+    WEB_INF/
+        web.xml
+    simple-flow
+        simple-flow-flow.xml
+        simple-flow.xhtml
+        simple-flow-page2.xhtml
+
+
+
+

The simple-flow example has an empty configuration file, which is by +convention named flow-name-flow.xml. The flow does not require any +configuration for the following reasons.

+
+
+
    +
  • +

    The flow does not call another flow, nor does it pass parameters to +another flow.

    +
  • +
  • +

    The flow uses default names for the first page of the flow, +flow-name`.xhtml`, and the return page, flow-name`-return.xhtml`.

    +
  • +
+
+
+

This example has only four Facelets pages.

+
+
+
    +
  • +

    index.xhtml, the start page, which contains almost nothing but a +button that navigates to the first page of the flow:

    +
    +
    +
    <p><h:commandButton value="Enter Flow" action="simple-flow"/></p>
    +
    +
    +
  • +
  • +

    simple-flow.xhtml and simple-flow-page2.xhtml, the two pages of +the flow itself. In the absence of an explicit flow definition, the page +whose name is the same as the name of the flow is assumed to be the +start node of the flow. In this case, the flow is named simple-flow, +so the page named simple-flow.xhtml is assumed to be the start node of +the flow. The start node is the node navigated to upon entry into the +flow. It can be thought of as the home page of the flow.

    +
    +

    The simple-flow.xhtml page asks you to enter a flow-scoped value and +provides a button that navigates to the next page of the flow:

    +
    +
    +
    +
    <p>Value: <h:inputText id="input" value="#{flowScope.value}" /></p>
    +
    +<p><h:commandButton value="Next" action="simple-flow-page2" /></p>
    +
    +
    +
    +

    The second page, which can have any name, displays the flow-scoped value +and provides a button that navigates to the return page:

    +
    +
    +
    +
    <p>Value: #{flowScope.value}</p>
    +
    +<p><h:commandButton value="Return" action="simple-flow-return" /></p>
    +
    +
    +
  • +
  • +

    simple-flow-return.xhtml, the return page. The return page, which by +convention is named flow-name`-return.xhtml`, must be located outside of +the flow. This page displays the flow-scoped value, to show that it has +no value outside of the flow, and provides a link that navigates to the +index.xhtml page:

    +
    +
    +
    <p>Value (should be empty):
    +    "<h:outputText id="output" value="#{flowScope.value}" />"</p>
    +
    +<p><h:link outcome="index" value="Back to Start" /></p>
    +
    +
    +
  • +
+
+
+

The Facelets pages use only flow-scoped data, so the example does not +need a managed bean.

+
+
+

16.4.2.1 To Build, Package, and Deploy the simple-flow Example Using +NetBeans IDE +^^^^^^^^^^^^^^^^^^^^^^^^^^^

+
+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    From the File menu, choose Open Project.

    +
  4. +
  5. +

    In the Open Project dialog box, navigate to:

    +
    +
    +
    tut-install/examples/web/jsf
    +
    +
    +
  6. +
  7. +

    Select the simple-flow folder.

    +
  8. +
  9. +

    Click Open Project.

    +
  10. +
  11. +

    In the Projects tab, right-click the simple-flow project and +select Build.

    +
    +

    This command builds and packages the application into a WAR file, +simple-flow.war, that is located in the target directory. It then +deploys the application to the server.

    +
    +
  12. +
+
+
+

16.4.2.2 To Build, Package, and Deploy the simple-flow Example Using +Maven +^^^^^^^^^^^^^^^^^^^^^^^^^^

+
+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    In a terminal window, go to:

    +
    +
    +
    tut-install/examples/web/jsf/simple-flow/
    +
    +
    +
  4. +
  5. +

    Enter the following command:

    +
    +
    +
    mvn install
    +
    +
    +
    +

    This command builds and packages the application into a WAR file, +simple-flow.war, that is located in the target directory. It then +deploys the application to the server.

    +
    +
  6. +
+
+
+

16.4.2.3 To Run the simple-flow Example

+
+
    +
  1. +

    Enter the following URL in your web browser:

    +
    +
    +
    http://localhost:8080/simple-flow
    +
    +
    +
  2. +
  3. +

    On the index.xhtml page, click Enter Flow.

    +
  4. +
  5. +

    On the first page of the flow, enter any string in the Value field, +then click Next.

    +
  6. +
  7. +

    On the second page of the flow, you can see the value you entered. +Click Return.

    +
  8. +
  9. +

    On the return page, an empty pair of quotation marks encloses the +inaccessible value. Click Back to Start to return to the index.xhtml +page.

    +
  10. +
+
+
+
+
+

16.4.3 The checkout-module Example Application

+
+

The checkout-module example application is considerably more complex +than simple-flow. It shows how you might use the Faces Flows feature +to implement a checkout module for an online store.

+
+
+

Like the hypothetical example in Figure 16-1, the +example application contains two flows, each of which can call the +other. Both flows have explicit flow definitions. One flow, +checkoutFlow, is specified programmatically. The other flow, +joinFlow, is specified in a configuration file.

+
+
+

The source code for this application is in the +tut-install`/examples/web/jsf/checkout-module/` directory.

+
+
+

For the checkout-module application, the directory structure is as +follows (there is also a src/main/webapp/resources directory with a +stylesheet and an image):

+
+
+
+
src/main/webapp/
+    index.xhtml
+    exithome.xhtml
+    WEB_INF/
+        beans.xml
+        web.xml
+    checkoutFlow/
+        checkoutFlow.xhtml
+        checkoutFlow2.xhtml
+        checkoutFlow3.xhtml
+        checkoutFlow4.xhtml
+    joinFlow/
+        joinFlow-flow.xml
+        joinFlow.xhtml
+        joinFlow2.xhtml
+src/main/java/javaeetutorial/checkoutmodule
+            CheckoutBean.java
+            CheckoutFlow.java
+            CheckoutFlowBean.java
+            JoinFlowBean.java
+
+
+
+

For the example, index.xhtml is the beginning page for the application +as well as the return node for the checkout flow. The exithome.xhtml +page is the return node for the join flow.

+
+
+

The configuration file joinFlow-flow.xml defines the join flow, and +the source file CheckoutFlow.java defines the checkout flow.

+
+
+

The checkout flow contains four Facelets pages, whereas the join flow +contains two.

+
+
+

The managed beans scoped to each flow are CheckoutFlowBean.java and +JoinFlowBean.java, whereas CheckoutBean.java is the backing bean for +the index.html page.

+
+
+

16.4.3.1 The Facelets Pages for the checkout-module Example

+
+

The starting page for the example, index.xhtml, summarizes the +contents of a hypothetical shopping cart. It allows the user to click +either of two buttons to enter one of the two flows:

+
+
+
+
<p><h:commandButton value="Check Out" action="checkoutFlow"/></p>
+...
+<p><h:commandButton value="Join" action="joinFlow"/></p>
+
+
+
+

This page is also the return node for the checkout flow.

+
+
+

The Facelets page exithome.xhtml is the return node for the join flow. +This page has a button that allows you to return to the index.xhtml +page.

+
+
+

The four Facelets pages within the checkout flow, starting with +checkoutFlow.xhtml and ending with checkoutFlow4.xhtml, allow you to +proceed to the next page or, in some cases, to return from the flow. The +checkoutFlow.xhtml page allows you to access parameters passed from +the join flow through the flow scope. These appear as empty quotation +marks if you have not called the checkout flow from the join flow.

+
+
+
+
<p>If you called this flow from the Join flow, you can see these parameters:
+    "<h:outputText value="#{flowScope.param1Value}"/>" and
+    "<h:outputText value="#{flowScope.param2Value}"/>"
+</p>
+
+
+
+

Only checkoutFlow2.xhtml has a button to return to the previous page, +but moving between pages is generally permitted within flows. Here are +the buttons for c`heckoutFlow2.xhtml`:

+
+
+
+
<p><h:commandButton value="Continue" action="checkoutFlow3"/></p>
+<p><h:commandButton value="Go Back" action="checkoutFlow"/></p>
+<p><h:commandButton value="Exit Flow" action="returnFromCheckoutFlow"/></p>
+
+
+
+

The action returnFromCheckoutFlow is defined in the configuration +source code file, CheckoutFlow.java.

+
+
+

The final page of the checkout flow, checkoutFlow4.xhtml, contains a +button that calls the join flow:

+
+
+
+
<p><h:commandButton value="Join" action="calljoin"/></p>
+<p><h:commandButton value="Exit Flow" action="returnFromCheckoutFlow"/></p>
+
+
+
+

The calljoin action is also defined in the configuration source code +file, CheckoutFlow.java. This action enters the join flow, passing two +parameters from the checkout flow.

+
+
+

The two pages in the join flow, joinFlow.xhtml and joinFlow2.xhtml, +are similar to those in the checkout flow. The second page has a button +to call the checkout flow as well as one to return from the join flow:

+
+
+
+
<p><h:commandButton value="Check Out" action="callcheckoutFlow"/></p>
+<p><h:commandButton value="Exit Flow" action="returnFromJoinFlow"/></p>
+
+
+
+

For this flow, the actions callcheckoutFlow and returnFromJoinFlow +are defined in the configuration file joinFlow-flow.xml.

+
+
+
+

16.4.3.2 Using a Configuration File to Configure a Flow

+
+

If you use an application configuration resource file to configure a +flow, it must be named flowName`-flow.xml`. In this example, the join +flow uses a configuration file named joinFlow-flow.xml. The file is a +faces-config file that specifies a flow-definition element. This +element must define the flow name using the id attribute. Under the +flow-definition element, there must be a flow-return element that +specifies the return point for the flow. Any inbound parameters are +specified with inbound-parameter elements. If the flow calls another +flow, the call-flow element must use the flow-reference element to +name the called flow and may use the outbound-parameter element to +specify any outbound parameters.

+
+
+

The configuration file for the join flow looks like this:

+
+
+
+
<faces-config version="2.2" xmlns="http://xmlns.jcp.org/xml/ns/javaee"
+              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+              xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee \
+              http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd">
+
+    <flow-definition id="joinFlow">
+        <flow-return id="returnFromJoinFlow">
+            <from-outcome>#{joinFlowBean.returnValue}</from-outcome>
+        </flow-return>
+
+        <inbound-parameter>
+            <name>param1FromCheckoutFlow</name>
+            <value>#{flowScope.param1Value}</value>
+        </inbound-parameter>
+        <inbound-parameter>
+            <name>param2FromCheckoutFlow</name>
+            <value>#{flowScope.param2Value}</value>
+        </inbound-parameter>
+
+        <flow-call id="callcheckoutFlow">
+            <flow-reference>
+                <flow-id>checkoutFlow</flow-id>
+            </flow-reference>
+            <outbound-parameter>
+                <name>param1FromJoinFlow</name>
+                <value>param1 joinFlow value</value>
+            </outbound-parameter>
+            <outbound-parameter>
+                <name>param2FromJoinFlow</name>
+                <value>param2 joinFlow value</value>
+            </outbound-parameter>
+        </flow-call>
+    </flow-definition>
+</faces-config>
+
+
+
+

The id attribute of the flow-definition element defines the name of +the flow as joinFlow. The value of the id attribute of the +flow-return element identifies the name of the return node, and its +value is defined in the from-outcome element as the returnValue +property of the flow-scoped managed bean for the join flow, +JoinFlowBean.

+
+
+

The names and values of the inbound parameters are retrieved from the +flow scope in order (flowScope.param1Value, flowScope.param2Value), +based on the way they were defined in the checkout flow configuration.

+
+
+

The flow-call element defines how the join flow calls the checkout +flow. The id attribute of the element, callcheckoutFlow, defines the +action of calling the flow. Within the flow-call element, the +flow-reference element defines the actual name of the flow to call, +checkoutFlow. The outbound-parameter elements define the parameters +to be passed when checkoutFlow is called. Here they are just arbitrary +strings.

+
+
+
+

16.4.3.3 Using a Java Class to Configure a Flow

+
+

If you use a Java class to configure a flow, it must have the name of +the flow. The class for the checkout flow is called CheckoutFlow.java.

+
+
+
+
import java.io.Serializable;
+import javax.enterprise.inject.Produces;
+import javax.faces.flow.Flow;
+import javax.faces.flow.builder.FlowBuilder;
+import javax.faces.flow.builder.FlowBuilderParameter;
+import javax.faces.flow.builder.FlowDefinition;
+
+class CheckoutFlow implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @Produces
+    @FlowDefinition
+    public Flow defineFlow(@FlowBuilderParameter FlowBuilder flowBuilder) {
+
+        String flowId = "checkoutFlow";
+        flowBuilder.id("", flowId);
+        flowBuilder.viewNode(flowId,
+                "/" + flowId + "/" + flowId + ".xhtml").
+                markAsStartNode();
+
+        flowBuilder.returnNode("returnFromCheckoutFlow").
+                fromOutcome("#{checkoutFlowBean.returnValue}");
+
+        flowBuilder.inboundParameter("param1FromJoinFlow",
+                "#{flowScope.param1Value}");
+        flowBuilder.inboundParameter("param2FromJoinFlow",
+                "#{flowScope.param2Value}");
+
+        flowBuilder.flowCallNode("calljoin").flowReference("", "joinFlow").
+                outboundParameter("param1FromCheckoutFlow",
+                    "#{checkoutFlowBean.name}").
+                outboundParameter("param2FromCheckoutFlow",
+                    "#{checkoutFlowBean.city}");
+        return flowBuilder.getFlow();
+    }
+}
+
+
+
+

The class performs actions that are almost identical to those performed +by the configuration file joinFlow-flow.xml. It contains a single +method, defineFlow, as a producer method with the @FlowDefinition +qualifier that returns a javax.faces.flow.Flow class. The defineFlow +method takes one parameter, a FlowBuilder with the qualifier +@FlowBuilderParameter, which is passed in from the JavaServer Faces +implementation. The method then calls methods from the +javax.faces.flow.Builder.FlowBuilder class to configure the flow.

+
+
+

First, the method defines the flow id as checkoutFlow. Then, it +explicitly defines the start node for the flow. By default, this is the +name of the flow with an .xhtml suffix.

+
+
+

The method then defines the return node similarly to the way the +configuration file does. The returnNode method sets the name of the +return node as returnFromCheckoutFlow, and the chained fromOutcome +method specifies its value as the returnValue property of the +flow-scoped managed bean for the checkout flow, CheckoutFlowBean.

+
+
+

The inboundParameter method sets the names and values of the inbound +parameters from the join flow, which are retrieved from the flow scope +in order (flowScope.param1Value, flowScope.param2Value), based on +the way they were defined in the join flow configuration.

+
+
+

The flowCallNode method defines how the checkout flow calls the join +flow. The argument, calljoin, specifies the action of calling the +flow. The chained flowReference method defines the actual name of the +flow to call, joinFlow, then calls outboundParameter methods to +define the parameters to be passed when joinFlow is called. Here they +are values from the CheckoutFlowBean managed bean.

+
+
+

Finally, the defineFlow method calls the getFlow method and returns +the result.

+
+
+
+

16.4.3.4 The Flow-Scoped Managed Beans

+
+

Each of the two flows has a managed bean that defines properties for the +pages within the flow. For example, the CheckoutFlowBean defines +properties whose values are entered by the user on both the +checkoutFlow.xhtml page and the checkoutFlow3.xhtml page.

+
+
+

Each managed bean has a getReturnValue method that sets the value of +the return node. For the CheckoutFlowBean, the return node is the +index.xhtml page, specified using implicit navigation:

+
+
+
+
public String getReturnValue() {
+    return "index";
+}
+
+
+
+

For the JoinFlowBean, the return node is the exithome.xhtml page.

+
+
+

16.4.3.5 To Build, Package, and Deploy the checkout-module Example Using +NetBeans IDE +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

+
+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    From the File menu, choose Open Project.

    +
  4. +
  5. +

    In the Open Project dialog box, navigate to:

    +
    +
    +
    tut-install/examples/web/jsf
    +
    +
    +
  6. +
  7. +

    Select the checkout-module folder.

    +
  8. +
  9. +

    Click Open Project.

    +
  10. +
  11. +

    In the Projects tab, right-click the checkout-module project and +select Build.

    +
    +

    This command builds and packages the application into a WAR file, +checkout-module.war, that is located in the target directory. It +then deploys the application to the server.

    +
    +
  12. +
+
+
+

16.4.3.6 To Build, Package, and Deploy the checkout-module Example Using +Maven +^^^^^^^^^^^^^^^^^^^^^^^^^^

+
+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    In a terminal window, go to:

    +
    +
    +
    tut-install/examples/web/jsf/checkout-module/
    +
    +
    +
  4. +
  5. +

    Enter the following command:

    +
    +
    +
    mvn install
    +
    +
    +
    +

    This command builds and packages the application into a WAR file, +checkout-module.war, that is located in the target directory. It +then deploys the application to the server.

    +
    +
  6. +
+
+
+
+

16.4.3.7 To Run the checkout-module Example

+
+
    +
  1. +

    Enter the following URL in your web browser:

    +
    +
    +
    http://localhost:8080/checkout-module
    +
    +
    +
  2. +
  3. +

    The index.xhtml page presents hypothetical results of the shopping +expedition. Click either Check Out or Join to enter one of the two +flows.

    +
  4. +
  5. +

    Follow the flow, providing input as needed and choosing whether to +continue, go back, or exit the flow.

    +
    +

    In the checkout flow, only one of the input fields is validated (the +credit card field expects 16 digits), so you can enter any values you +like. The join flow does not require you to check any boxes in its +checkbox menus.

    +
    +
  6. +
  7. +

    On the last page of a flow, select the option to enter the other +flow. This allows you to view the inbound parameters from the previous +flow.

    +
  8. +
  9. +

    Because flows are nested, if you click Exit Flow from a called flow, +you will return to the first page of the calling flow. (You may see a +warning, which you can ignore.) Click Exit Flow on that page to go to +the specified return node.

    +
  10. +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+
+ + + \ No newline at end of file diff --git a/jsf-configure005.html b/jsf-configure005.html new file mode 100644 index 0000000..94dda43 --- /dev/null +++ b/jsf-configure005.html @@ -0,0 +1,659 @@ + + + + + + Configuring Managed Beans + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

16.5 Configuring Managed Beans

+
+
+

When a page references a managed bean for the first time, the JavaServer +Faces implementation initializes it either based on a @Named +annotation and scope annotation in the bean class or according to its +configuration in the application configuration resource file. For +information on using annotations to initialize beans, see +Using Annotations to Configure Managed +Beans.

+
+
+

You can use either annotations or the application configuration resource +file to instantiate managed beans that are used in a JavaServer Faces +application and to store them in scope. The managed bean creation +facility is configured in the application configuration resource file +using managed-bean XML elements to define each bean. This file is +processed at application startup time. For information on using this +facility, see Using the managed-bean Element.

+
+
+

Managed beans created in the application configuration resource file are +JavaServer Faces managed beans, not CDI managed beans.

+
+
+

With the managed bean creation facility, you can

+
+
+
    +
  • +

    Create beans in one centralized file that is available to the entire +application, rather than conditionally instantiate beans throughout the +application

    +
  • +
  • +

    Customize a bean’s properties without any additional code

    +
  • +
  • +

    Customize a bean’s property values directly from within the +configuration file so that it is initialized with these values when it +is created

    +
  • +
  • +

    Using value elements, set a property of one managed bean to be the +result of evaluating another value expression

    +
  • +
+
+
+

This section shows you how to initialize beans using the managed bean +creation facility. See Writing Bean +Properties and Writing Managed Bean +Methods for information on programming managed beans.

+
+
+

16.5.1 Using the managed-bean Element

+
+

A managed bean is initiated in the application configuration resource +file using a managed-bean element, which represents an instance of a +bean class that must exist in the application. At runtime, the +JavaServer Faces implementation processes the managed-bean element. If +a page references the bean and no bean instance exists, the JavaServer +Faces implementation instantiates the bean as specified by the element +configuration.

+
+
+

Here is an example managed bean configuration from the Duke’s Bookstore +case study:

+
+
+
+
<managed-bean eager="true">
+    <managed-bean-name>Book201</managed-bean-name>
+    <managed-bean-class>dukesbookstore.model.ImageArea</managed-bean-class>
+    <managed-bean-scope>application</managed-bean-scope>
+    <managed-property>
+        <property-name>shape</property-name>
+        <value>rect</value>
+    </managed-property>
+    <managed-property>
+        <property-name>alt</property-name>
+        <value>Duke</value>
+    </managed-property>
+    <managed-property>
+        <property-name>coords</property-name>
+        <value>67,23,212,268</value>
+    </managed-property>
+</managed-bean>
+
+
+
+

The managed-bean-name element defines the key under which the bean +will be stored in a scope. For a component’s value to map to this bean, +the component tag’s value attribute must match the managed-bean-name +up to the first period.

+
+
+

The managed-bean-class element defines the fully qualified name of the +JavaBeans component class used to instantiate the bean.

+
+
+

The managed-bean element can contain zero or more managed-property +elements, each corresponding to a property defined in the bean class. +These elements are used to initialize the values of the bean properties. +If you don’t want a particular property initialized with a value when +the bean is instantiated, do not include a managed-property definition +for it in your application configuration resource file.

+
+
+

If a managed-bean element does not contain other managed-bean +elements, it can contain one map-entries element or list-entries +element. The map-entries element configures a set of beans that are +instances of Map. The list-entries element configures a set of beans +that are instances of List.

+
+
+

In the following example, the newsletters managed bean, representing a +UISelectItems component, is configured as an ArrayList that +represents a set of SelectItem objects. Each SelectItem object is in +turn configured as a managed bean with properties:

+
+
+
+
<managed-bean>
+    <managed-bean-name>newsletters</managed-bean-name>
+    <managed-bean-class>java.util.ArrayList</managed-bean-class>
+    <managed-bean-scope>application</managed-bean-scope>
+    <list-entries>
+        <value-class>javax.faces.model.SelectItem</value-class>
+        <value>#{newsletter0}</value>
+        <value>#{newsletter1}</value>
+        <value>#{newsletter2}</value>
+        <value>#{newsletter3}</value>
+    </list-entries>
+</managed-bean>
+<managed-bean>
+    <managed-bean-name>newsletter0</managed-bean-name>
+    <managed-bean-class>javax.faces.model.SelectItem</managed-bean-class>
+    <managed-bean-scope>none</managed-bean-scope>
+    <managed-property>
+        <property-name>label</property-name>
+        <value>Duke's Quarterly</value>
+    </managed-property>
+    <managed-property>
+        <property-name>value</property-name>
+        <value>200</value>
+    </managed-property>
+</managed-bean>
+...
+
+
+
+

This approach may be useful for quick-and-dirty creation of selection +item lists before a development team has had time to create such lists +from the database. Note that each of the individual newsletter beans has +a managed-bean-scope setting of none so that they will not +themselves be placed into any scope.

+
+
+

See Initializing Array and List Properties for more +information on configuring collections as beans.

+
+
+

To map to a property defined by a managed-property element, you must +ensure that the part of a component tag’s value expression after the +period matches the managed-property element’s property-name element. +The next section, Initializing Properties Using the +managed-property Element, explains in more detail how to use the +managed-property element. See Initializing Managed Bean +Properties for an example of initializing a managed bean property.

+
+
+
+

16.5.2 Initializing Properties Using the managed-property Element

+
+

A managed-property element must contain a property-name element, +which must match the name of the corresponding property in the bean. A +managed-property element must also contain one of a set of elements +that defines the value of the property. This value must be of the same +type as that defined for the property in the corresponding bean. Which +element you use to define the value depends on the type of the property +defined in the bean. Table 16-1 lists all the elements that +are used to initialize a value.

+
+
+

+
+
+

Table 16-1 Subelements of managed-property Elements That Define Property +Values

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + +
ElementValue It Defines

list-entries

Defines the values in a list

map-entries

Defines the values of a map

null-value

Explicitly sets the property to null

value

Defines a single value, such as a String, int, or +JavaServer Faces EL expression

+
+
+
+
+
+
+
+

Using the managed-bean Element includes an example of +initializing an int property (a primitive type) using the value +subelement. You also use the value subelement to initialize String +and other reference types. The rest of this section describes how to use +the value subelement and other subelements to initialize properties of +Java Enum types, Map, array, and Collection, as well as +initialization parameters.

+
+
+

16.5.2.1 Referencing a Java Enum Type

+
+

A managed bean property can also be a Java Enum type (see +http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html). In this +case, the value element of the managed-property element must be a +String that matches one of the String constants of the Enum. In +other words, the String must be one of the valid values that can be +returned if you were to call valueOf(Class, String) on enum, where +Class is the Enum class and String is the contents of the value +subelement. For example, suppose the managed bean property is the +following:

+
+
+
+
public enum Suit { Hearts, Spades, Diamonds, Clubs }
+ ...
+public Suit getSuit() { ... return Suit.Hearts; }
+
+
+
+

Assuming you want to configure this property in the application +configuration resource file, the corresponding managed-property +element looks like this:

+
+
+
+
<managed-property>
+    <property-name>Suit</property-name>
+    <value>Hearts</value>
+</managed-property>
+
+
+
+

When the system encounters this property, it iterates over each of the +members of the enum and calls toString() on each member until it +finds one that is exactly equal to the value from the value element.

+
+
+
+

16.5.2.2 Referencing a Context Initialization Parameter

+
+

Another powerful feature of the managed bean creation facility is the +ability to reference implicit objects from a managed bean property.

+
+
+

Suppose you have a page that accepts data from a customer, including the +customer’s address. Suppose also that most of your customers live in a +particular area code. You can make the area code component render this +area code by saving it in an implicit object and referencing it when the +page is rendered.

+
+
+

You can save the area code as an initial default value in the context +initParam implicit object by adding a context parameter to your web +application and setting its value in the deployment descriptor. For +example, to set a context parameter called defaultAreaCode to 650, +add a context-param element to the deployment descriptor and give the +parameter the name defaultAreaCode and the value 650.

+
+
+

Next, write a managed-bean declaration that configures a property that +references the parameter:

+
+
+
+
<managed-bean>
+    <managed-bean-name>customer</managed-bean-name>
+        <managed-bean-class>CustomerBean</managed-bean-class>
+        <managed-bean-scope>request</managed-bean-scope>
+        <managed-property>
+            <property-name>areaCode</property-name>
+                <value>#{initParam.defaultAreaCode}</value>
+            </managed-property>
+            ...
+</managed-bean>
+
+
+
+

To access the area code at the time the page is rendered, refer to the +property from the area component tag’s value attribute:

+
+
+
+
<h:inputText id=area value="#{customer.areaCode}"
+
+
+
+

Values are retrieved from other implicit objects in a similar way.

+
+
+
+

16.5.2.3 Initializing Map Properties

+
+

The map-entries element is used to initialize the values of a bean +property with a type of Map if the map-entries element is used +within a managed-property element. A map-entries element contains an +optional key-class element, an optional value-class element, and +zero or more map-entry elements.

+
+
+

Each of the map-entry elements must contain a key element and either +a null-value or value element. Here is an example that uses the +map-entries element:

+
+
+
+
<managed-bean>
+    ...
+    <managed-property>
+        <property-name>prices</property-name>
+        <map-entries>
+            <map-entry>
+                <key>My Early Years: Growing Up on *7</key>
+                <value>30.75</value>
+            </map-entry>
+            <map-entry>
+                <key>Web Servers for Fun and Profit</key>
+                <value>40.75</value>
+            </map-entry>
+        </map-entries>
+    </managed-property>
+</managed-bean>
+
+
+
+

The map created from this map-entries tag contains two entries. By +default, all the keys and values are converted to String. If you want +to specify a different type for the keys in the map, embed the +key-class element just inside the map-entries element:

+
+
+
+
<map-entries>
+    <key-class>java.math.BigDecimal</key-class>
+    ...
+</map-entries>
+
+
+
+

This declaration will convert all the keys into java.math.BigDecimal. +Of course, you must make sure that the keys can be converted to the type +you specify. The key from the example in this section cannot be +converted to a BigDecimal, because it is a String.

+
+
+

If you want to specify a different type for all the values in the map, +include the value-class element after the key-class element:

+
+
+
+
<map-entries>
+    <key-class>int</key-class>
+    <value-class>java.math.BigDecimal</value-class>
+    ...
+</map-entries>
+
+
+
+

Note that this tag sets only the type of all the value subelements.

+
+
+

Each map-entry in the preceding example includes a value subelement. +The value subelement defines a single value, which will be converted +to the type specified in the bean.

+
+
+

Instead of using a map-entries element, it is also possible to assign +the entire map using a value element that specifies a map-typed +expression.

+
+
+
+

16.5.2.4 Initializing Array and List Properties

+
+

The list-entries element is used to initialize the values of an array +or List property. Each individual value of the array or List is +initialized using a value or null-value element. Here is an example:

+
+
+
+
<managed-bean>
+    ...
+    <managed-property>
+        <property-name>books</property-name>
+        <list-entries>
+            <value-class>java.lang.String</value-class>
+            <value>Web Servers for Fun and Profit</value>
+            <value>#{myBooks.bookId[3]}</value>
+            <null-value/>
+        </list-entries>
+    </managed-property>
+</managed-bean>
+
+
+
+

This example initializes an array or a List. The type of the +corresponding property in the bean determines which data structure is +created. The list-entries element defines the list of values in the +array or List. The value element specifies a single value in the +array or List and can reference a property in another bean. The +null-value element will cause the setBooks method to be called with +an argument of null. A null property cannot be specified for a +property whose data type is a Java primitive, such as int or +boolean.

+
+
+
+

16.5.2.5 Initializing Managed Bean Properties

+
+

Sometimes you might want to create a bean that also references other +managed beans so that you can construct a graph or a tree of beans. For +example, suppose you want to create a bean representing a customer’s +information, including the mailing address and street address, each of +which is also a bean. The following managed-bean declarations create a +CustomerBean instance that has two AddressBean properties: one +representing the mailing address and the other representing the street +address. This declaration results in a tree of beans with CustomerBean +as its root and the two AddressBean objects as children.

+
+
+
+
<managed-bean>
+    <managed-bean-name>customer</managed-bean-name>
+    <managed-bean-class>
+        com.example.mybeans.CustomerBean
+    </managed-bean-class>
+    <managed-bean-scope> request </managed-bean-scope>
+    <managed-property>
+        <property-name>mailingAddress</property-name>
+        <value>#{addressBean}</value>
+    </managed-property>
+    <managed-property>
+        <property-name>streetAddress</property-name>
+        <value>#{addressBean}</value>
+    </managed-property>
+    <managed-property>
+        <property-name>customerType</property-name>
+        <value>New</value>
+    </managed-property>
+</managed-bean>
+<managed-bean>
+    <managed-bean-name>addressBean</managed-bean-name>
+    <managed-bean-class>
+        com.example.mybeans.AddressBean
+    </managed-bean-class>
+    <managed-bean-scope> none </managed-bean-scope>
+    <managed-property>
+        <property-name>street</property-name>
+        <null-value/>
+    <managed-property>
+    ...
+</managed-bean>
+
+
+
+

The first CustomerBean declaration (with the managed-bean-name of +customer) creates a CustomerBean in request scope. This bean has two +properties, mailingAddress and streetAddress. These properties use +the value element to reference a bean named addressBean.

+
+
+

The second managed bean declaration defines an AddressBean but does +not create it, because its managed-bean-scope element defines a scope +of none. Recall that a scope of none means that the bean is created +only when something else references it. Because both the +mailingAddress and the streetAddress properties reference +addressBean using the value element, two instances of AddressBean +are created when CustomerBean is created.

+
+
+

When you create an object that points to other objects, do not try to +point to an object with a shorter life span, because it might be +impossible to recover that scope’s resources when it goes away. A +session-scoped object, for example, cannot point to a request-scoped +object. And objects with none scope have no effective life span +managed by the framework, so they can point only to other none-scoped +objects. Table 16-2 outlines all of the allowed +connections.

+
+
+

+
+
+

Table 16-2 Allowable Connections between Scoped Objects

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
An Object of This ScopeMay Point to an Object of This Scope

none

none

application

none, application

session

none, application, session

request

none, application, session, request, view

view

none, application, session, view

+
+
+
+
+
+
+
+

Be sure not to allow cyclical references between objects. For example, +neither of the AddressBean objects in the preceding example should +point back to the CustomerBean object, because CustomerBean already +points to the AddressBean objects.

+
+
+
+
+

16.5.3 Initializing Maps and Lists

+
+

In addition to configuring Map and List properties, you can also +configure a Map and a List directly so that you can reference them +from a tag rather than referencing a property that wraps a Map or a +List.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/jsf-configure006.html b/jsf-configure006.html new file mode 100644 index 0000000..2fd328e --- /dev/null +++ b/jsf-configure006.html @@ -0,0 +1,308 @@ + + + + + + Registering Application Messages + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

16.6 Registering Application Messages

+
+
+

Application messages can include any strings displayed to the user as +well as custom error messages (which are displayed by the message and +messages tags) for your custom converters or validators. To make +messages available at application startup time, do one of the following:

+
+
+
    +
  • +

    Queue an individual message onto the +javax.faces.context.FacesContext instance programmatically, as +described in Using FacesMessage to Create a Message

    +
  • +
  • +

    Register all the messages with your application using the application +configuration resource file

    +
  • +
+
+
+

Here is the section of the faces-config.xml file that registers the +messages for the Duke’s Bookstore case study application:

+
+
+
+
<application>
+    <resource-bundle>
+        <base-name>
+            javaeetutorial.dukesbookstore.web.messages.Messages
+        </base-name>
+        <var>bundle</var>
+    </resource-bundle>
+    <locale-config>
+        <default-locale>en</default-locale>
+        <supported-locale>es</supported-locale>
+        <supported-locale>de</supported-locale>
+        <supported-locale>fr</supported-locale>
+    </locale-config>
+</application>
+
+
+
+

This set of elements causes the application to be populated with the +messages that are contained in the specified resource bundle.

+
+
+

The resource-bundle element represents a set of localized messages. It +must contain the fully qualified path to the resource bundle containing +the localized messages (in this case, +dukesbookstore.web.messages.Messages). The var element defines the +EL name by which page authors refer to the resource bundle.

+
+
+

The locale-config element lists the default locale and the other +supported locales. The locale-config element enables the system to +find the correct locale based on the browser’s language settings.

+
+
+

The supported-locale and default-locale tags accept the lowercase, +two-character codes defined by ISO 639-1 (see +http://www.loc.gov/standards/iso639-2/php/English_list.php). Make sure +that your resource bundle actually contains the messages for the locales +you specify with these tags.

+
+
+

To access the localized message, the application developer merely +references the key of the message from the resource bundle.

+
+
+

You can pull localized text into an alt tag for a graphic image, as in +the following example:

+
+
+
+
<h:graphicImage id="mapImage"
+                name="book_all.jpg"
+                library="images"
+                alt="#{bundle.ChooseBook}"
+                usemap="#bookMap" />
+
+
+
+

The alt attribute can accept value expressions. In this case, the +alt attribute refers to localized text that will be included in the +alternative text of the image rendered by this tag.

+
+
+

16.6.1 Using FacesMessage to Create a Message

+
+

Instead of registering messages in the application configuration +resource file, you can access the java.util.ResourceBundle directly +from managed bean code. The code snippet below locates an email error +message:

+
+
+
+
String message = "";
+...
+message = ExampleBean.loadErrorMessage(context,
+    ExampleBean.EX_RESOURCE_BUNDLE_NAME,
+         "EMailError");
+context.addMessage(toValidate.getClientId(context),
+    new FacesMessage(message));
+
+
+
+

These lines call the bean’s loadErrorMessage method to get the message +from the ResourceBundle. Here is the loadErrorMessage method:

+
+
+
+
public static String loadErrorMessage(FacesContext context,
+     String basename, String key) {
+    if ( bundle == null ) {
+         try {
+            bundle = ResourceBundle.getBundle(basename,
+                 context.getViewRoot().getLocale());
+        } catch (Exception e) {
+            return null;
+        }
+    }
+    return bundle.getString(key);
+}
+
+
+
+
+

16.6.2 Referencing Error Messages

+
+

A JavaServer Faces page uses the message or messages tags to access +error messages, as explained in Displaying +Error Messages with the h:message and h:messages Tags.

+
+
+

The error messages these tags access include

+
+
+
    +
  • +

    The standard error messages that accompany the standard converters and +validators that ship with the API. (see Section 2.5.2.4 of the +JavaServer Faces specification for a complete list of standard error +messages)

    +
  • +
  • +

    Custom error messages contained in resource bundles registered with +the application by the application architect using the resource-bundle +element in the configuration file

    +
  • +
+
+
+

When a converter or validator is registered on an input component, the +appropriate error message is automatically queued on the component.

+
+
+

A page author can override the error messages queued on a component by +using the following attributes of the component’s tag:

+
+
+
    +
  • +

    converterMessage: References the error message to display when the +data on the enclosing component cannot be converted by the converter +registered on this component.

    +
  • +
  • +

    requiredMessage: References the error message to display when no +value has been entered into the enclosing component.

    +
  • +
  • +

    validatorMessage: References the error message to display when the +data on the enclosing component cannot be validated by the validator +registered on this component.

    +
  • +
+
+
+

All three attributes are enabled to take literal values and value +expressions. If an attribute uses a value expression, this expression +references the error message in a resource bundle. This resource bundle +must be made available to the application in one of the following ways:

+
+
+
    +
  • +

    By the application architect using the resource-bundle element in +the configuration file

    +
  • +
  • +

    By the page author using the f:loadBundle tag

    +
  • +
+
+
+

Conversely, the resource-bundle element must be used to make available +to the application those resource bundles containing custom error +messages that are queued on the component as a result of a custom +converter or validator being registered on the component.

+
+
+

The following tags show how to specify the requiredMessage attribute +using a value expression to reference an error message:

+
+
+
+
<h:inputText id="ccno" size="19"
+    required="true"
+    requiredMessage="#{customMessages.ReqMessage}">
+    ...
+</h:inputText>
+<h:message styleClass="error-message" for="ccno"/>
+
+
+
+

The value expression used by requiredMessage in this example +references the error message with the ReqMessage key in the resource +bundle customMessages.

+
+
+

This message replaces the corresponding message queued on the component +and will display wherever the message or messages tag is placed on +the page.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/jsf-configure007.html b/jsf-configure007.html new file mode 100644 index 0000000..ec876bf --- /dev/null +++ b/jsf-configure007.html @@ -0,0 +1,103 @@ + + + + + + Using Default Validators + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

16.7 Using Default Validators

+
+
+

In addition to the validators you declare on the components, you can +also specify zero or more default validators in the application +configuration resource file. The default validator applies to all +javax.faces.component.UIInput instances in a view or component tree +and is appended after the local defined validators. Here is an example +of a default validator registered in the application configuration +resource file:

+
+
+
+
<faces-config>
+    <application>
+        <default-validators>
+            <validator-id>javax.faces.Bean</validator-id>
+        </default-validators>
+    <application/>
+</faces-config>
+
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/jsf-configure008.html b/jsf-configure008.html new file mode 100644 index 0000000..369198d --- /dev/null +++ b/jsf-configure008.html @@ -0,0 +1,138 @@ + + + + + + Registering a Custom Validator + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

16.8 Registering a Custom Validator

+
+
+

If the application developer provides an implementation of the +javax.faces.validator.Validator interface to perform validation, you +must register this custom validator either by using the +@FacesValidator annotation, as described in +Implementing the Validator Interface, or +by using the validator XML element in the application configuration +resource file:

+
+
+
+
<validator>
+    ...
+    <validator-id>FormatValidator</validator-id>
+    <validator-class>
+        myapplication.validators.FormatValidator
+    </validator-class>
+    <attribute>
+        ...
+        <attribute-name>formatPatterns</attribute-name>
+        <attribute-class>java.lang.String</attribute-class>
+    </attribute>
+</validator>
+
+
+
+

Attributes specified in a validator tag override any settings in the +@FacesValidator annotation.

+
+
+

The validator-id and validator-class elements are required +subelements. The validator-id element represents the identifier under +which the Validator class should be registered. This ID is used by the +tag class corresponding to the custom validator tag.

+
+
+

The validator-class element represents the fully qualified class name +of the Validator class.

+
+
+

The attribute element identifies an attribute associated with the +Validator implementation. It has required attribute-name and +attribute-class subelements. The attribute-name element refers to +the name of the attribute as it appears in the validator tag. The +attribute-class element identifies the Java type of the value +associated with the attribute.

+
+
+

Creating and Using a Custom Validator +explains how to implement the Validator interface.

+
+
+

Using a Custom Validator explains how to +reference the validator from the page.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/jsf-configure009.html b/jsf-configure009.html new file mode 100644 index 0000000..936de81 --- /dev/null +++ b/jsf-configure009.html @@ -0,0 +1,129 @@ + + + + + + Registering a Custom Converter + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

16.9 Registering a Custom Converter

+
+
+

As is the case with a custom validator, if the application developer +creates a custom converter, you must register it with the application +either by using the @FacesConverter annotation, as described in +Creating a Custom Converter, or by using +the converter XML element in the application configuration resource +file. Here is a hypothetical converter configuration for +CreditCardConverter from the Duke’s Bookstore case study:

+
+
+
+
<converter>
+    <description>
+        Converter for credit card numbers that normalizes
+        the input to a standard format
+    </description>
+    <converter-id>CreditCardConverter</converter-id>
+    <converter-class>
+        dukesbookstore.converters.CreditCardConverter
+    </converter-class>
+</converter>
+
+
+
+

Attributes specified in a converter tag override any settings in the +@FacesConverter annotation.

+
+
+

The converter element represents a javax.faces.convert.Converter +implementation and contains required converter-id and +converter-class elements.

+
+
+

The converter-id element identifies an ID that is used by the +converter attribute of a UI component tag to apply the converter to +the component’s data. Using a Custom +Converter includes an example of referencing the custom converter from +a component tag.

+
+
+

The converter-class element identifies the Converter implementation.

+
+
+

Creating and Using a Custom Converter +explains how to create a custom converter.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/jsf-configure010.html b/jsf-configure010.html new file mode 100644 index 0000000..35f4870 --- /dev/null +++ b/jsf-configure010.html @@ -0,0 +1,260 @@ + + + + + + Configuring Navigation Rules + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

16.10 Configuring Navigation Rules

+
+
+

Navigation between different pages of a JavaServer Faces application, +such as choosing the next page to be displayed after a button or link +component is clicked, is defined by a set of rules. Navigation rules can +be implicit, or they can be explicitly defined in the application +configuration resource file. For more information on implicit navigation +rules, see Navigation Model.

+
+
+

Each navigation rule specifies how to navigate from one page to another +page or set of pages. The JavaServer Faces implementation chooses the +proper navigation rule according to which page is currently displayed.

+
+
+

After the proper navigation rule is selected, the choice of which page +to access next from the current page depends on two factors:

+
+
+
    +
  • +

    The action method invoked when the component was clicked

    +
  • +
  • +

    The logical outcome referenced by the component’s tag or returned from +the action method

    +
  • +
+
+
+

The outcome can be anything the developer chooses, but Table +16-3 lists some outcomes commonly used in web applications.

+
+
+

+
+
+

Table 16-3 Common Outcome Strings

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + +
OutcomeWhat It Means

success

Everything worked. Go on to the next page.

failure

Something is wrong. Go on to an error page.

login

The user needs to log in first. Go on to the login page.

no results

The search did not find anything. Go to the search page +again.

+
+
+
+
+
+
+
+

Usually, the action method performs some processing on the form data of +the current page. For example, the method might check whether the user +name and password entered in the form match the user name and password +on file. If they match, the method returns the outcome success. +Otherwise, it returns the outcome failure. As this example +demonstrates, both the method used to process the action and the outcome +returned are necessary to determine the correct page to access.

+
+
+

Here is a navigation rule that could be used with the example just +described:

+
+
+
+
<navigation-rule>
+    <from-view-id>/login.xhtml</from-view-id>
+    <navigation-case>
+        <from-action>#{LoginForm.login}</from-action>
+        <from-outcome>success</from-outcome>
+        <to-view-id>/storefront.xhtml</to-view-id>
+    </navigation-case>
+    <navigation-case>
+        <from-action>#{LoginForm.logon}</from-action>
+        <from-outcome>failure</from-outcome>
+        <to-view-id>/logon.xhtml</to-view-id>
+    </navigation-case>
+</navigation-rule>
+
+
+
+

This navigation rule defines the possible ways to navigate from +login.xhtml. Each navigation-case element defines one possible +navigation path from login.xhtml. The first navigation-case says +that if LoginForm.login returns an outcome of success, then +storefront.xhtml will be accessed. The second navigation-case says +that login.xhtml will be re-rendered if LoginForm.login returns +failure.

+
+
+

The configuration of an application’s page flow consists of a set of +navigation rules. Each rule is defined by the navigation-rule element +in the faces-config.xml file.

+
+
+

Each navigation-rule element corresponds to one component tree +identifier defined by the optional from-view-id element. This means +that each rule defines all the possible ways to navigate from one +particular page in the application. If there is no from-view-id +element, the navigation rules defined in the navigation-rule element +apply to all the pages in the application. The from-view-id element +also allows wildcard matching patterns. For example, this from-view-id +element says that the navigation rule applies to all the pages in the +books directory:

+
+
+
+
<from-view-id>/books/*</from-view-id>
+
+
+
+

A navigation-rule element can contain zero or more navigation-case +elements. The navigation-case element defines a set of matching +criteria. When these criteria are satisfied, the application will +navigate to the page defined by the to-view-id element contained in +the same navigation-case element.

+
+
+

The navigation criteria are defined by optional from-outcome and +from-action elements. The from-outcome element defines a logical +outcome, such as success. The from-action element uses a method +expression to refer to an action method that returns a String, which +is the logical outcome. The method performs some logic to determine the +outcome and returns the outcome.

+
+
+

The navigation-case elements are checked against the outcome and the +method expression in the following order.

+
+
+
    +
  1. +

    Cases specifying both a from-outcome value and a from-action +value. Both of these elements can be used if the action method returns +different outcomes depending on the result of the processing it +performs.

    +
  2. +
  3. +

    Cases specifying only a from-outcome value. The from-outcome +element must match either the outcome defined by the action attribute +of the javax.faces.component.UICommand component or the outcome +returned by the method referred to by the UICommand component.

    +
  4. +
  5. +

    Cases specifying only a from-action value. This value must match +the action expression specified by the component tag.

    +
  6. +
+
+
+

When any of these cases is matched, the component tree defined by the +to-view-id element will be selected for rendering.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/jsf-configure011.html b/jsf-configure011.html new file mode 100644 index 0000000..d4e6f4e --- /dev/null +++ b/jsf-configure011.html @@ -0,0 +1,218 @@ + + + + + + Registering a Custom Renderer with a Render Kit + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

16.11 Registering a Custom Renderer with a Render Kit

+
+
+

When the application developer creates a custom renderer, as described +in Delegating Rendering to a Renderer, you +must register it using the appropriate render kit. Because the image map +application implements an HTML image map, the AreaRenderer and +MapRenderer classes in the Duke’s Bookstore case study should be +registered using the HTML render kit.

+
+
+

You register the renderer either by using the @FacesRenderer +annotation, as described in Creating the +Renderer Class, or by using the render-kit element of the application +configuration resource file. Here is a hypothetical configuration of +AreaRenderer:

+
+
+
+
<render-kit>
+    <renderer>
+        <component-family>Area</component-family>
+        <renderer-type>DemoArea</renderer-type>
+        <renderer-class>
+            dukesbookstore.renderers.AreaRenderer
+        </renderer-class>
+        <attribute>
+            <attribute-name>onmouseout</attribute-name>
+            <attribute-class>java.lang.String</attribute-class>
+        </attribute>
+        <attribute>
+            <attribute-name>onmouseover</attribute-name>
+            <attribute-class>java.lang.String</attribute-class>
+        </attribute>
+        <attribute>
+            <attribute-name>styleClass</attribute-name>
+            <attribute-class>java.lang.String</attribute-class>
+        </attribute>
+    </renderer>
+    ...
+
+
+
+

Attributes specified in a renderer tag override any settings in the +@FacesRenderer annotation.

+
+
+

The render-kit element represents a javax.faces.render.RenderKit +implementation. If no render-kit-id is specified, the default HTML +render kit is assumed. The renderer element represents a +javax.faces.render.Renderer implementation. By nesting the renderer +element inside the render-kit element, you are registering the +renderer with the RenderKit implementation associated with the +render-kit element.

+
+
+

The renderer-class is the fully qualified class name of the +Renderer.

+
+
+

The component-family and renderer-type elements are used by a +component to find renderers that can render it. The component-family +identifier must match that returned by the component class’s getFamily +method. The component family represents a component or set of components +that a particular renderer can render. The renderer-type must match +that returned by the getRendererType method of the tag handler class.

+
+
+

By using the component family and renderer type to look up renderers for +components, the JavaServer Faces implementation allows a component to be +rendered by multiple renderers and allows a renderer to render multiple +components.

+
+
+

Each of the attribute tags specifies a render-dependent attribute and +its type. The attribute element doesn’t affect the runtime execution +of your application. Rather, it provides information to tools about the +attributes the Renderer supports.

+
+
+

The object responsible for rendering a component (be it the component +itself or a renderer to which the component delegates the rendering) can +use facets to aid in the rendering process. These facets allow the +custom component developer to control some aspects of rendering the +component. Consider this custom component tag example:

+
+
+
+
<d:dataScroller>
+    <f:facet name="header">
+        <h:panelGroup>
+            <h:outputText value="Account Id"/>
+            <h:outputText value="Customer Name"/>
+            <h:outputText value="Total Sales"/>
+        </h:panelGroup>
+    </f:facet>
+    <f:facet name="next">
+        <h:panelGroup>
+            <h:outputText value="Next"/>
+            <h:graphicImage url="/images/arrow-right.gif" />
+        </h:panelGroup>
+    </f:facet>
+    ...
+</d:dataScroller>
+
+
+
+

The dataScroller component tag includes a component that will render +the header and a component that will render the Next button. If the +renderer associated with this component renders the facets, you can +include the following facet elements in the renderer element:

+
+
+
+
<facet>
+    <description>This facet renders as the header of the table. It should be
+         a panelGroup with the same number of columns as the data.
+    </description>
+    <display-name>header</display-name>
+    <facet-name>header</facet-name>
+</facet>
+<facet>
+    <description>This facet renders as the content of the "next" button in
+         the scroller. It should be a panelGroup that includes an outputText
+         tag that has the text "Next" and a right arrow icon.
+    </description>
+    <display-name>Next</display-name>
+    <facet-name>next</facet-name>
+</facet>
+
+
+
+

If a component that supports facets provides its own rendering and you +want to include facet elements in the application configuration +resource file, you need to put them in the component’s configuration +rather than the renderer’s configuration.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/jsf-configure012.html b/jsf-configure012.html new file mode 100644 index 0000000..0258f35 --- /dev/null +++ b/jsf-configure012.html @@ -0,0 +1,141 @@ + + + + + + Registering a Custom Component + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

16.12 Registering a Custom Component

+
+
+

In addition to registering custom renderers (as explained in the +preceding section), you also must register the custom components that +are usually associated with the custom renderers. You use either a +@FacesComponent annotation, as described in +Creating Custom Component Classes, or the +component element of the application configuration resource file.

+
+
+

Here is a hypothetical component element from the application +configuration resource file that registers AreaComponent:

+
+
+
+
<component>
+    <component-type>DemoArea</component-type>
+    <component-class>
+        dukesbookstore.components.AreaComponent
+    </component-class>
+    <property>
+        <property-name>alt</property-name>
+        <property-class>java.lang.String</property-class>
+    </property>
+    <property>
+        <property-name>coords</property-name>
+        <property-class>java.lang.String</property-class>
+    </property>
+    <property>
+        <property-name>shape</property-name>
+        <property-class>java.lang.String</property-class>
+    </property>
+</component>
+
+
+
+

Attributes specified in a component tag override any settings in the +@FacesComponent annotation.

+
+
+

The component-type element indicates the name under which the +component should be registered. Other objects referring to this +component use this name. For example, the component-type element in +the configuration for AreaComponent defines a value of DemoArea, +which matches the value returned by the AreaTag class’s +getComponentType method.

+
+
+

The component-class element indicates the fully qualified class name +of the component. The property elements specify the component +properties and their types.

+
+
+

If the custom component can include facets, you can configure the facets +in the component configuration using facet elements, which are allowed +after the component-class elements. See +Registering a Custom Renderer with a +Render Kit for further details on configuring facets.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/jsf-configure013.html b/jsf-configure013.html new file mode 100644 index 0000000..7c02a94 --- /dev/null +++ b/jsf-configure013.html @@ -0,0 +1,492 @@ + + + + + + Basic Requirements of a JavaServer Faces Application + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

16.13 Basic Requirements of a JavaServer Faces Application

+
+
+

In addition to configuring your application, you must satisfy other +requirements of JavaServer Faces applications, including properly +packaging all the necessary files and providing a deployment descriptor. +This section describes how to perform these administrative tasks.

+
+
+

JavaServer Faces applications can be packaged in a WAR file, which must +conform to specific requirements to execute across different containers. +At a minimum, a WAR file for a JavaServer Faces application may contain +the following:

+
+
+
    +
  • +

    A web application deployment descriptor, called web.xml, to +configure resources required by a web application (required)

    +
  • +
  • +

    A specific set of JAR files containing essential classes (optional)

    +
  • +
  • +

    A set of application classes, JavaServer Faces pages, and other +required resources, such as image files

    +
  • +
+
+
+

A WAR file may also contain:

+
+
+
    +
  • +

    An application configuration resource file, which configures +application resources

    +
  • +
  • +

    A set of tag library descriptor files

    +
  • +
+
+
+

For example, a Java Server Faces web application WAR file using Facelets +typically has the following directory structure:

+
+
+
+
$PROJECT_DIR
+[Web Pages]
++- /[xhtml or html documents]
++- /resources
++- /WEB-INF
+   +- /web.xml
+   +- /beans.xml (optional)
+   +- /classes (optional)
+   +- /lib (optional)
+   +- /faces-config.xml (optional)
+   +- /*.taglib.xml (optional)
+   +- /glassfish-web.xml (optional)
+
+
+
+

The web.xml file (or web deployment descriptor), the set of JAR files, +and the set of application files must be contained in the WEB-INF +directory of the WAR file.

+
+
+

16.13.1 Configuring an Application with a Web Deployment Descriptor

+
+

Web applications are commonly configured using elements contained in the +web application deployment descriptor, web.xml. The deployment +descriptor for a JavaServer Faces application must specify certain +configurations, including the following:

+
+
+
    +
  • +

    The servlet used to process JavaServer Faces requests

    +
  • +
  • +

    The servlet mapping for the processing servlet

    +
  • +
  • +

    The path to the configuration resource file, if it exists and is not +located in a default location

    +
  • +
+
+
+

The deployment descriptor can also include other, optional +configurations, such as those that

+
+
+
    +
  • +

    Specify where component state is saved

    +
  • +
  • +

    Encrypt state saved on the client

    +
  • +
  • +

    Compress state saved on the client

    +
  • +
  • +

    Restrict access to pages containing JavaServer Faces tags

    +
  • +
  • +

    Turn on XML validation

    +
  • +
  • +

    Specify the Project Stage

    +
  • +
  • +

    Verify custom objects

    +
  • +
+
+
+

This section gives more details on these configurations. Where +appropriate, it also describes how you can make these configurations +using NetBeans IDE.

+
+
+

16.13.1.1 Identifying the Servlet for Lifecycle Processing

+
+

A requirement of a JavaServer Faces application is that all requests to +the application that reference previously saved JavaServer Faces +components must go through javax.faces.webapp.FacesServlet. A +FacesServlet instance manages the request-processing lifecycle for web +applications and initializes the resources required by JavaServer Faces +technology.

+
+
+

Before a JavaServer Faces application can launch its first web page, the +web container must invoke the FacesServlet instance in order for the +application lifecycle process to start. See +The Lifecycle of a JavaServer Faces +Application for more information.

+
+
+

The following example shows the default configuration of the +FacesServlet:

+
+
+
+
<servlet>
+    <servlet-name>Faces Servlet</servlet-name>
+    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
+</servlet>
+
+
+
+

You will provide a mapping configuration entry to make sure that the +FacesServlet instance is invoked. The mapping to FacesServlet can be +a prefix mapping, such as /faces/*, or an extension mapping, such as +*.xhtml. The mapping is used to identify a page as having JavaServer +Faces content. Because of this, the URL to the first page of the +application must include the URL pattern mapping.

+
+
+

The following elements specify a prefix mapping:

+
+
+
+
<servlet-mapping>
+    <servlet-name>Faces Servlet</servlet-name>
+    <url-pattern>/faces/*</url-pattern>
+</servlet-mapping>
+...
+<welcome-file-list>
+    <welcome-file>faces/greeting.xhtml</welcome-file>
+</welcome-file-list>
+
+
+
+

The following elements, used in the tutorial examples, specify an +extension mapping:

+
+
+
+
<servlet-mapping>
+    <servlet-name>Faces Servlet</servlet-name>
+    <url-pattern>*.xhtml</url-pattern>
+</servlet-mapping>
+...
+<welcome-file-list>
+    <welcome-file>index.xhtml</welcome-file>
+</welcome-file-list>
+
+
+
+

When you use this mechanism, users access the application as shown in +the following example:

+
+
+
+
http://localhost:8080/guessNumber
+
+
+
+

In the case of extension mapping, if a request comes to the server for a +page with an .xhtml extension, the container will send the request to +the FacesServlet instance, which will expect a corresponding page of +the same name containing the content to exist.

+
+
+

If you are using NetBeans IDE to create your application, a web +deployment descriptor is automatically created for you with default +configurations. If you created your application without an IDE, you can +create a web deployment descriptor.

+
+
+

16.13.1.2 To Specify a Path to an Application Configuration Resource +File +^^^^^^^^^^^^^^^^^^^^^^^^^

+
+
+

As explained in Application +Configuration Resource File, an application can have multiple +application configuration resource files. If these files are not located +in the directories that the implementation searches by default or the +files are not named faces-config.xml, you need to specify paths to +these files.

+
+
+

To specify these paths using NetBeans IDE, do the following.

+
+
+
    +
  1. +

    Expand the node of your project in the Projects tab.

    +
  2. +
  3. +

    Expand the Web Pages and WEB-INF nodes that are under the project +node.

    +
  4. +
  5. +

    Double-click web.xml.

    +
  6. +
  7. +

    After the web.xml file appears in the editor, click General at the +top of the editor window.

    +
  8. +
  9. +

    Expand the Context Parameters node.

    +
  10. +
  11. +

    Click Add.

    +
  12. +
  13. +

    In the Add Context Parameter dialog box:

    +
  14. +
  15. +

    Enter javax.faces.CONFIG_FILES in the Parameter Name field.

    +
  16. +
  17. +

    Enter the path to your configuration file in the Parameter Value +field.

    +
  18. +
  19. +

    Click OK.

    +
  20. +
  21. +

    Repeat steps 1 through 7 for each configuration file.

    +
  22. +
+
+
+
+

16.13.1.3 To Specify Where State Is Saved

+
+

For all the components in a web application, you can specify in your +deployment descriptor where you want the state to be saved, on either +client or server. You do this by setting a context parameter in your +deployment descriptor. By default, state is saved on the server, so you +need to specify this context parameter only if you want to save state on +the client. See Saving and Restoring State +for information on the advantages and disadvantages of each location.

+
+
+

To specify where state is saved using NetBeans IDE, do the following.

+
+
+
    +
  1. +

    Expand the node of your project in the Projects tab.

    +
  2. +
  3. +

    Expand the Web Pages and WEB-INF nodes under the project node.

    +
  4. +
  5. +

    Double-click web.xml.

    +
  6. +
  7. +

    After the web.xml file appears in the editor window, click General +at the top of the editor window.

    +
  8. +
  9. +

    Expand the Context Parameters node.

    +
  10. +
  11. +

    Click Add.

    +
  12. +
  13. +

    In the Add Context Parameter dialog box:

    +
  14. +
  15. +

    Enter javax.faces.STATE_SAVING_METHOD in the Parameter Name field.

    +
  16. +
  17. +

    Enter client or server in the Parameter Value field.

    +
  18. +
  19. +

    Click OK.

    +
  20. +
+
+
+

If state is saved on the client, the state of the entire view is +rendered to a hidden field on the page. The JavaServer Faces +implementation saves the state on the server by default. Duke’s Forest +saves its state on the client.

+
+
+
+
+

16.13.2 Configuring Project Stage

+
+

Project Stage is a context parameter identifying the status of a +JavaServer Faces application in the software lifecycle. The stage of an +application can affect the behavior of the application. For example, +error messages can be displayed during the Development stage but +suppressed during the Production stage.

+
+
+

The possible Project Stage values are as follows:

+
+
+
    +
  • +

    Development

    +
  • +
  • +

    UnitTest

    +
  • +
  • +

    SystemTest

    +
  • +
  • +

    Production

    +
  • +
+
+
+

Project Stage is configured through a context parameter in the web +deployment descriptor file. Here is an example:

+
+
+
+
<context-param>
+    <param-name>javax.faces.PROJECT_STAGE</param-name>
+    <param-value>Development</param-value>
+</context-param>
+
+
+
+

If no Project Stage is defined, the default stage is Production. You +can also add custom stages according to your requirements.

+
+
+
+

16.13.3 Including the Classes, Pages, and Other Resources

+
+

When packaging web applications using the included build scripts, you’ll +notice that the scripts package resources in the following ways.

+
+
+
    +
  • +

    All web pages are placed at the top level of the WAR file.

    +
  • +
  • +

    The faces-config.xml file and the web.xml file are packaged in the +WEB-INF directory.

    +
  • +
  • +

    All packages are stored in the WEB-INF/classes/ directory.

    +
  • +
  • +

    All application JAR files are packaged in the WEB-INF/lib/ +directory.

    +
  • +
  • +

    All resource files are either under the root of the web application +/resources directory or in the web application’s classpath, the +`META-INF/resources/`resourceIdentifier directory. For more information +on resources, see Web Resources.

    +
  • +
+
+
+

When packaging your own applications, you can use NetBeans IDE or you +can use XML files such as those created for Maven. You can modify the +XML files to fit your situation. However, you can continue to package +your WAR files by using the directory structure described in this +section, because this technique complies with the commonly accepted +practice for packaging web applications.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/jsf-custom.html b/jsf-custom.html new file mode 100644 index 0000000..3a72a0f --- /dev/null +++ b/jsf-custom.html @@ -0,0 +1,142 @@ + + + + + + Creating Custom UI Components and Other Custom Objects + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+ + + + \ No newline at end of file diff --git a/jsf-custom001.html b/jsf-custom001.html new file mode 100644 index 0000000..7a94108 --- /dev/null +++ b/jsf-custom001.html @@ -0,0 +1,166 @@ + + + + + + Introduction to Creating Custom Components + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

15.1 Introduction to Creating Custom Components

+
+
+

JavaServer Faces technology offers a basic set of standard, reusable UI +components that enable quick and easy construction of user interfaces +for web applications. These components mostly map one-to-one to the +elements in HTML 4. But often an application requires a component that +has additional functionality or requires a completely new component. +JavaServer Faces technology allows extension of standard components to +enhance their functionality or to create custom components. A rich +ecosystem of third-party component libraries is built on this extension +capability, but it is beyond the scope of this tutorial to examine them. +A web search for "JSF Component Libraries" is a good starting point to +learn more about this important aspect of using JavaServer Faces +technology.

+
+
+

In addition to extending the functionality of standard components, a +component writer might want to give a page author the ability to change +the appearance of the component on the page or to alter listener +behavior. Alternatively, the component writer might want to render a +component to a different kind of client device type, such as a +smartphone or a tablet instead of a desktop computer. Enabled by the +flexible JavaServer Faces architecture, a component writer can separate +the definition of the component behavior from its appearance by +delegating the rendering of the component to a separate renderer. In +this way, a component writer can define the behavior of a custom +component once but create multiple renderers, each of which defines a +different way to render the component to a particular kind of client +device.

+
+
+

A javax.faces.component.UIComponent is a Java class that is +responsible for representing a self-contained piece of the user +interface during the request-processing lifecycle. It is intended to +represent the meaning of the component; the visual representation of the +component is the responsibility of the javax.faces.render.Renderer. +There can be multiple instances of the same UIComponent class in any +given JavaServer Faces view, just as there can be multiple instances of +any Java class in any given Java program.

+
+
+

JavaServer Faces technology provides the ability to create custom +components by extending the UIComponent class, the base class for all +standard UI components. A custom component can be used anywhere an +ordinary component can be used, such as within a composite component. A +UIComponent is identified by two names: component-family specifies +the general purpose of the component (input or output, for instance), +and component-type indicates the specific purpose of a component, such +as a text input field or a command button.

+
+
+

A Renderer is a helper to the UIComponent that deals with how that +specific UIComponent class should appear in a specific kind of client +device. Renderers are identified by two names: render-kit-id and +renderer-type. A render kit is just a bucket into which a particular +group of renderers is placed, and the render-kit-id identifies the +group. Most JavaServer Faces component libraries provide their own +render kits.

+
+
+

A javax.faces.view.facelets.Tag object is a helper to the +UIComponent and Renderer that allows the page author to include an +instance of a UIComponent in a JavaServer Faces view. A tag represents +a specific combination of component-type and renderer-type.

+
+
+

See Component, Renderer, and Tag +Combinations for information on how components, renderers, and tags +interact.

+
+
+

This chapter uses the image map component from the Duke’s Bookstore case +study example to explain how you can create simple custom components, +custom renderers, and associated custom tags, and take care of all the +other details associated with using the components and renderers in an +application. See Chapter 57, "Duke’s +Bookstore Case Study Example" for more information about this example.

+
+
+

The chapter also describes how to create other custom objects: custom +converters, custom listeners, and custom validators. It also describes +how to bind component values and instances to data objects and how to +bind custom objects to managed bean properties.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/jsf-custom002.html b/jsf-custom002.html new file mode 100644 index 0000000..febfb20 --- /dev/null +++ b/jsf-custom002.html @@ -0,0 +1,352 @@ + + + + + + Determining Whether You Need a Custom Component or Renderer + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

15.2 Determining Whether You Need a Custom Component or Renderer

+
+
+

The JavaServer Faces implementation supports a very basic set of +components and associated renderers. This section helps you to decide +whether you can use standard components and renderers in your +application or need a custom component or custom renderer.

+
+
+

The following topics are addressed here:

+
+ +
+

15.2.1 When to Use a Custom Component

+
+

A component class defines the state and behavior of a UI component. This +behavior includes converting the value of a component to the appropriate +markup, queuing events on components, performing validation, and any +other behavior related to how the component interacts with the browser +and the request-processing lifecycle.

+
+
+

You need to create a custom component in the following situations.

+
+
+
    +
  • +

    You need to add new behavior to a standard component, such as +generating an additional type of event (for example, notifying another +part of the page that something changed in this component as a result of +user interaction).

    +
  • +
  • +

    You need to take a different action in the request processing of the +value of a component from what is available in any of the existing +standard components.

    +
  • +
  • +

    You want to take advantage of an HTML capability offered by your +target browser, but none of the standard JavaServer Faces components +take advantage of the capability in the way you want, if at all. The +current release does not contain standard components for complex HTML +components, such as frames; however, because of the extensibility of the +component architecture, you can use JavaServer Faces technology to +create components like these. The Duke’s Bookstore case study creates +custom components that correspond to the HTML map and area tags.

    +
  • +
  • +

    You need to render to a non-HTML client that requires extra components +not supported by HTML. Eventually, the standard HTML render kit will +provide support for all standard HTML components. However, if you are +rendering to a different client, such as a phone, you might need to +create custom components to represent the controls uniquely supported by +the client. For example, some component architectures for wireless +clients include support for tickers and progress bars, which are not +available on an HTML client. In this case, you might also need a custom +renderer along with the component, or you might need only a custom +renderer.

    +
  • +
+
+
+

You do not need to create a custom component in the following cases.

+
+
+
    +
  • +

    You need to aggregate components to create a new component that has +its own unique behavior. In this situation, you can use a composite +component to combine existing standard components. For more information +on composite components, see Composite +Components and Chapter 14, "Composite +Components: Advanced Topics and an Example".

    +
  • +
  • +

    You simply need to manipulate data on the component or add +application-specific functionality to it. In this situation, you should +create a managed bean for this purpose and bind it to the standard +component rather than create a custom component. See +Managed Beans in JavaServer Faces +Technology for more information on managed beans.

    +
  • +
  • +

    You need to convert a component’s data to a type not supported by its +renderer. See Using the Standard +Converters for more information about converting a component’s data.

    +
  • +
  • +

    You need to perform validation on the component data. Standard +validators and custom validators can be added to a component by using +the validator tags from the page. See +Using the Standard Validators and +Creating and Using a Custom Validator for +more information about validating a component’s data.

    +
  • +
  • +

    You need to register event listeners on components. You can either +register event listeners on components using the f:valueChangeListener +and f:actionListener tags, or you can point at an event-processing +method on a managed bean using the component’s actionListener or +valueChangeListener attributes. See +Implementing an Event Listener and +Writing Managed Bean Methods for more +information.

    +
  • +
+
+
+
+

15.2.2 When to Use a Custom Renderer

+
+

A renderer, which generates the markup to display a component on a web +page, allows you to separate the semantics of a component from its +appearance. By keeping this separation, you can support different kinds +of client devices with the same kind of authoring experience. You can +think of a renderer as a "client adapter." It produces output suitable +for consumption and display by the client and accepts input from the +client when the user interacts with that component.

+
+
+

If you are creating a custom component, you need to ensure, among other +things, that your component class performs these operations that are +central to rendering the component:

+
+
+
    +
  • +

    Decoding: Converting the incoming request parameters to the local +value of the component

    +
  • +
  • +

    Encoding: Converting the current local value of the component into the +corresponding markup that represents it in the response

    +
  • +
+
+
+

The JavaServer Faces specification supports two programming models for +handling encoding and decoding.

+
+
+
    +
  • +

    Direct implementation: The component class itself implements the +decoding and encoding.

    +
  • +
  • +

    Delegated implementation: The component class delegates the +implementation of encoding and decoding to a separate renderer.

    +
  • +
+
+
+

By delegating the operations to the renderer, you have the option of +associating your custom component with different renderers so that you +can render the component on different clients. If you don’t plan to +render a particular component on different clients, it may be simpler to +let the component class handle the rendering. However, a separate +renderer enables you to preserve the separation of semantics from +appearance. The Duke’s Bookstore application separates the renderers +from the components, although it renders only to HTML 4 web browsers.

+
+
+

If you aren’t sure whether you will need the flexibility offered by +separate renderers but you want to use the simpler direct-implementation +approach, you can actually use both models. Your component class can +include some default rendering code, but it can delegate rendering to a +renderer if there is one.

+
+
+
+

15.2.3 Component, Renderer, and Tag Combinations

+
+

When you create a custom component, you can create a custom renderer to +go with it. To associate the component with the renderer and to +reference the component from the page, you will also need a custom tag.

+
+
+

Although you need to write the custom component and renderer, there is +no need to write code for a custom tag (called a tag handler). If you +specify the component and renderer combination, Facelets creates the tag +handler automatically.

+
+
+

In rare situations, you might use a custom renderer with a standard +component rather than a custom component. Or you might use a custom tag +without a renderer or a component. This section gives examples of these +situations and summarizes what is required for a custom component, +renderer, and tag.

+
+
+

You would use a custom renderer without a custom component if you wanted +to add some client-side validation on a standard component. You would +implement the validation code with a client-side scripting language, +such as JavaScript, and then render the JavaScript with the custom +renderer. In this situation, you need a custom tag to go with the +renderer so that its tag handler can register the renderer on the +standard component.

+
+
+

Custom components as well as custom renderers need custom tags +associated with them. However, you can have a custom tag without a +custom renderer or custom component. For example, suppose that you need +to create a custom validator that requires extra attributes on the +validator tag. In this case, the custom tag corresponds to a custom +validator and not to a custom component or custom renderer. In any case, +you still need to associate the custom tag with a server-side object.

+
+
+

Table 15-1 summarizes what you must or can associate with a +custom component, custom renderer, or custom tag.

+
+
+

+
+
+

Table 15-1 Requirements for Custom Components, Custom Renderers, and +Custom Tags

+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + +
Custom ItemMust HaveCan Have

Custom component

Custom tag

Custom renderer or standard renderer

Custom renderer

Custom tag

Custom component or standard component

Custom JavaServer Faces tag

Some server-side object, like a component, +a custom renderer, or custom validator

Custom component or standard +component associated with a custom renderer

+
+
+
+
+
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/jsf-custom003.html b/jsf-custom003.html new file mode 100644 index 0000000..a2a650d --- /dev/null +++ b/jsf-custom003.html @@ -0,0 +1,444 @@ + + + + + + Understanding the Image Map Example + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

15.3 Understanding the Image Map Example

+
+
+

Duke’s Bookstore includes a custom image map component on the +index.xhtml page. This image map displays a selection of six book +titles. When the user clicks one of the book titles in the image map, +the application goes to a page that displays the title of the selected +book as well as information about a featured book. The page allows the +user to add either book (or none) to the shopping cart.

+
+
+

The following topics are addressed here:

+
+ +
+

15.3.1 Why Use JavaServer Faces Technology to Implement an Image Map?

+
+

JavaServer Faces technology is an ideal framework to use for +implementing this kind of image map because it can perform the work that +must be done on the server without requiring you to create a server-side +image map.

+
+
+

In general, client-side image maps are preferred over server-side image +maps for several reasons. One reason is that the client-side image map +allows the browser to provide immediate feedback when a user positions +the mouse over a hotspot. Another reason is that client-side image maps +perform better because they don’t require round-trips to the server. +However, in some situations, your image map might need to access the +server to retrieve data or to change the appearance of nonform controls, +tasks that a client-side image map cannot do.

+
+
+

Because the image map custom component uses JavaServer Faces technology, +it has the best of both styles of image maps: It can handle the parts of +the application that need to be performed on the server while allowing +the other parts of the application to be performed on the client side.

+
+
+
+

15.3.2 Understanding the Rendered HTML

+
+

Here is an abbreviated version of the form part of the HTML page that +the application needs to render:

+
+
+
+
<form id="j_idt13" name="j_idt13" method="post"
+        action="/dukesbookstore/index.xhtml" ...>
+    ...
+    <img id="j_idt13:mapImage"
+         src="/dukesbookstore/javax.faces.resource/book_all.jpg?ln=images"
+         alt="Choose a Book from our Catalog"
+         usemap="#bookMap" />
+    ...
+    <map name="bookMap">
+       <area alt="Duke"
+          coords="67,23,212,268"
+          shape="rect"
+          onmouseout="document.forms[0]['j_idt13:mapImage'].src='resources/images/book_all.jpg'"
+          onmouseover="document.forms[0]['j_idt13:mapImage'].src='resources/images/book_201.jpg'"
+          onclick="document.forms[0]['bookMap_current'].value='Duke'; document.forms[0].submit()"
+       />
+    ...
+       <input type="hidden" name="bookMap_current">
+    </map>
+    ...
+</form>
+
+
+
+

The img tag associates an image (book_all.jpg) with the image map +referenced in the usemap attribute value.

+
+
+

The map tag specifies the image map and contains a set of area tags.

+
+
+

Each area tag specifies a region of the image map. The onmouseover, +onmouseout, and onclick attributes define which JavaScript code is +executed when these events occur. When the user moves the mouse over a +region, the onmouseover function associated with the region displays +the map with that region highlighted. When the user moves the mouse out +of a region, the onmouseout function redisplays the original image. If +the user clicks on a region, the onclick function sets the value of +the input tag to the ID of the selected area and submits the page.

+
+
+

The input tag represents a hidden control that stores the value of the +currently selected area between client-server exchanges so that the +server-side component classes can retrieve the value.

+
+
+

The server-side objects retrieve the value of bookMap_current and set +the locale in the javax.faces.context.FacesContext instance according +to the region that was selected.

+
+
+
+

15.3.3 Understanding the Facelets Page

+
+

Here is an abbreviated form of the Facelets page that the image map +component uses to generate the HTML page shown in the preceding section. +It uses custom bookstore:map and bookstore:area tags to represent +the custom components:

+
+
+
+
<h:form>
+    ...
+        <h:graphicImage id="mapImage"
+                        name="book_all.jpg"
+                        library="images"
+                        alt="#{bundle.ChooseBook}"
+                        usemap="#bookMap" />
+        <bookstore:map id="bookMap"
+                       current="map1"
+                       immediate="true"
+                       action="bookstore">
+            <f:actionListener
+                type="dukesbookstore.listeners.MapBookChangeListener" />
+            <bookstore:area id="map1" value="#{Book201}"
+                            onmouseover="resources/images/book_201.jpg"
+                            onmouseout="resources/images/book_all.jpg"
+                            targetImage="mapImage" />
+            <bookstore:area id="map2" value="#{Book202}"
+                            onmouseover="resources/images/book_202.jpg"
+                            onmouseout="resources/images/book_all.jpg"
+                            targetImage="mapImage"/>
+            ...
+        </bookstore:map>
+    ...
+</h:form>
+
+
+
+

The alt attribute of the h:graphicImage tag maps to the localized +string "Choose a Book from our Catalog".

+
+
+

The f:actionListener tag within the bookstore:map tag points to a +listener class for an action event. The processAction method of the +listener places the book ID for the selected map area into the session +map. The way this event is handled is explained more in +Handling Events for Custom Components.

+
+
+

The action attribute of the bookstore:map tag specifies a logical +outcome String, "bookstore", which by implicit navigation rules +sends the application to the page bookstore.xhtml. For more +information on navigation, see +Configuring Navigation Rules.

+
+
+

The immediate attribute of the bookstore:map tag is set to true, +which indicates that the default javax.faces.event.ActionListener +implementation should execute during the Apply Request Values phase of +the request-processing lifecycle, instead of waiting for the Invoke +Application phase. Because the request resulting from clicking the map +does not require any validation, data conversion, or server-side object +updates, it makes sense to skip directly to the Invoke Application +phase.

+
+
+

The current attribute of the bookstore:map tag is set to the default +area, which is map1 (the book My Early Years: Growing Up on Star7, by +Duke).

+
+
+

Notice that the bookstore:area tags do not contain any of the +JavaScript, coordinate, or shape data that is displayed on the HTML +page. The JavaScript is generated by the +dukesbookstore.renderers.AreaRenderer class. The onmouseover and +onmouseout attribute values indicate the image to be loaded when these +events occur. How the JavaScript is generated is explained more in +Performing Encoding.

+
+
+

The coordinate, shape, and alternate text data are obtained through the +value attribute, whose value refers to an attribute in application +scope. The value of this attribute is a bean, which stores the coords, +shape, and alt data. How these beans are stored in the application +scope is explained more in the next section.

+
+
+
+

15.3.4 Configuring Model Data

+
+

In a JavaServer Faces application, data such as the coordinates of a +hotspot of an image map is retrieved from the value attribute through +a bean. However, the shape and coordinates of a hotspot should be +defined together because the coordinates are interpreted differently +depending on what shape the hotspot is. Because a component’s value can +be bound only to one property, the value attribute cannot refer to +both the shape and the coordinates.

+
+
+

To solve this problem, the application encapsulates all of this +information in a set of ImageArea objects. These objects are +initialized into application scope by the managed bean creation facility +(see Section 16.5.1, "Using the +managed-bean Element"). Here is part of the managed bean declaration +for the ImageArea bean corresponding to the South America hotspot:

+
+
+
+
<managed-bean eager="true">
+    ...
+    <managed-bean-name>Book201</managed-bean-name>
+    <managed-bean-class>
+        javaeetutorial.dukesbookstore.model.ImageArea
+    </managed-bean-class>
+    <managed-bean-scope>application</managed-bean-scope>
+    <managed-property>
+        ...
+        <property-name>shape</property-name>
+        <value>rect</value>
+    </managed-property>
+    <managed-property>
+        ...
+        <property-name>alt</property-name>
+        <value>Duke</value>
+    </managed-property>
+    <managed-property>
+        ...
+        <property-name>coords</property-name>
+        <value>67,23,212,268</value>
+    </managed-property>
+</managed-bean>
+
+
+
+

For more information on initializing managed beans with the managed bean +creation facility, see the section +Application Configuration Resource +File.

+
+
+

The value attributes of the bookstore:area tags refer to the beans +in the application scope, as shown in this bookstore:area tag from +index.xhtml:

+
+
+
+
<bookstore:area id="map1" value="#{Book201}"
+                onmouseover="resources/images/book_201.jpg"
+                onmouseout="resources/images/book_all.jpg"
+                targetImage="mapImage" />
+
+
+
+

To reference the ImageArea model object bean values from the component +class, you implement a getValue method in the component class. This +method calls super.getValue. The superclass of +tut-install`/examples/case-studies/dukes-bookstore/src/java/dukesbookstore/components/AreaComponent.java`, +UIOutput, has a getValue method that does the work of finding the +ImageArea object associated with AreaComponent. The AreaRenderer +class, which needs to render the alt, shape, and coords values +from the ImageArea object, calls the getValue method of +AreaComponent to retrieve the ImageArea object.

+
+
+
+
ImageArea iarea = (ImageArea) area.getValue();
+
+
+
+

ImageArea is a simple bean, so you can access the shape, coordinates, +and alternative text values by calling the appropriate accessor methods +of ImageArea. Creating the Renderer +Class explains how to do this in the AreaRenderer class.

+
+
+
+

15.3.5 Summary of the Image Map Application Classes

+
+

Table 15-2 summarizes all the classes needed to implement +the image map component.

+
+
+

+
+
+

Table 15-2 Image Map Classes

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ClassFunction

AreaSelectedEvent

The javax.faces.event.ActionEvent indicating +that an AreaComponent from the MapComponent has been selected.

AreaComponent

The class that defines AreaComponent, which +corresponds to the bookstore:area custom tag.

MapComponent

The class that defines MapComponent, which +corresponds to the bookstore:map custom tag.

AreaRenderer

This javax.faces.render.Renderer performs the +delegated rendering for AreaComponent.

ImageArea

The bean that stores the shape and coordinates of the +hotspots.

MapBookChangeListener

The action listener for the MapComponent.

+
+
+
+
+
+
+
+

The Duke’s Bookstore source directory, called bookstore-dir, is +tut-install`/examples/case-studies/dukes-bookstore/src/java/dukesbookstore/. +The event and listener classes are located in +bookstore-dir/listeners/. The component classes are located in +bookstore-dir/components/. The renderer classes are located in +bookstore-dir/renderers/. `ImageArea is located in +bookstore-dir`/model/`.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/jsf-custom004.html b/jsf-custom004.html new file mode 100644 index 0000000..219b8ab --- /dev/null +++ b/jsf-custom004.html @@ -0,0 +1,142 @@ + + + + + + Steps for Creating a Custom Component + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

15.4 Steps for Creating a Custom Component

+
+
+

You can apply the following steps while developing your own custom +component.

+
+
+
    +
  1. +

    Create a custom component class that does the following:

    +
  2. +
  3. +

    Overrides the getFamily method to return the component family, +which is used to look up renderers that can render the component

    +
  4. +
  5. +

    Includes the rendering code or delegates it to a renderer (explained +in Step 2)

    +
  6. +
  7. +

    Enables component attributes to accept expressions

    +
  8. +
  9. +

    Queues an event on the component if the component generates events

    +
  10. +
  11. +

    Saves and restores the component state

    +
  12. +
  13. +

    +
    +

    Delegate rendering to a renderer if your component does not handle the +rendering. To do this:

    +
    +
  14. +
  15. +

    Create a custom renderer class by extending +javax.faces.render.Renderer.

    +
  16. +
  17. +

    Register the renderer to a render kit.

    +
  18. +
  19. +

    Register the component.

    +
  20. +
  21. +

    Create an event handler if your component generates events.

    +
  22. +
  23. +

    Create a tag library descriptor (TLD) that defines the custom tag.

    +
  24. +
+
+
+

See Registering a Custom Component and +Registering a Custom Renderer with a +Render Kit for information on registering the custom component and the +renderer. The section Using a Custom +Component discusses how to use the custom component in a JavaServer +Faces page.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/jsf-custom005.html b/jsf-custom005.html new file mode 100644 index 0000000..96235e0 --- /dev/null +++ b/jsf-custom005.html @@ -0,0 +1,676 @@ + + + + + + Creating Custom Component Classes + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

15.5 Creating Custom Component Classes

+
+
+

As explained in When to Use a Custom +Component, a component class defines the state and behavior of a UI +component. The state information includes the component’s type, +identifier, and local value. The behavior defined by the component class +includes the following:

+
+
+
    +
  • +

    Decoding (converting the request parameter to the component’s local +value)

    +
  • +
  • +

    Encoding (converting the local value into the corresponding markup)

    +
  • +
  • +

    Saving the state of the component

    +
  • +
  • +

    Updating the bean value with the local value

    +
  • +
  • +

    Processing validation on the local value

    +
  • +
  • +

    Queueing events

    +
  • +
+
+
+

The javax.faces.component.UIComponentBase class defines the default +behavior of a component class. All the classes representing the standard +components extend from UIComponentBase. These classes add their own +behavior definitions, as your custom component class will do.

+
+
+

Your custom component class must either extend UIComponentBase +directly or extend a class representing one of the standard components. +These classes are located in the javax.faces.component package, and +their names begin with UI.

+
+
+

If your custom component serves the same purpose as a standard +component, you should extend that standard component rather than +directly extend UIComponentBase. For example, suppose you want to +create an editable menu component. It makes sense to have this component +extend UISelectOne rather than UIComponentBase because you can reuse +the behavior already defined in UISelectOne. The only new +functionality you need to define is to make the menu editable.

+
+
+

Whether you decide to have your component extend UIComponentBase or a +standard component, you might also want your component to implement one +or more of these behavioral interfaces defined in the +javax.faces.component package:

+
+
+
    +
  • +

    ActionSource: Indicates that the component can fire a +javax.faces.event.ActionEvent

    +
  • +
  • +

    ActionSource2: Extends ActionSource and allows component +properties referencing methods that handle action events to use method +expressions as defined by the EL

    +
  • +
  • +

    EditableValueHolder: Extends ValueHolder and specifies additional +features for editable components, such as validation and emitting +value-change events

    +
  • +
  • +

    NamingContainer: Mandates that each component rooted at this +component has a unique ID

    +
  • +
  • +

    StateHolder: Denotes that a component has state that must be saved +between requests

    +
  • +
  • +

    ValueHolder: Indicates that the component maintains a local value as +well as the option of accessing data in the model tier

    +
  • +
+
+
+

If your component extends UIComponentBase, it automatically implements +only StateHolder. Because all components directly or indirectly extend +UIComponentBase, they all implement StateHolder. Any component that +implements StateHolder also implements the StateHelper interface, +which extends StateHolder and defines a Map-like contract that makes +it easy for components to save and restore a partial view state.

+
+
+

If your component extends one of the other standard components, it might +also implement other behavioral interfaces in addition to StateHolder. +If your component extends UICommand, it automatically implements +ActionSource2. If your component extends UIOutput or one of the +component classes that extend UIOutput, it automatically implements +ValueHolder. If your component extends UIInput, it automatically +implements EditableValueHolder and ValueHolder. See the JavaServer +Faces API documentation to find out what the other component classes +implement.

+
+
+

You can also make your component explicitly implement a behavioral +interface that it doesn’t already by virtue of extending a particular +standard component. For example, if you have a component that extends +UIInput and you want it to fire action events, you must make it +explicitly implement ActionSource2 because a UIInput component +doesn’t automatically implement this interface.

+
+
+

The Duke’s Bookstore image map example has two component classes: +AreaComponent and MapComponent. The MapComponent class extends +UICommand and therefore implements ActionSource2, which means it can +fire action events when a user clicks on the map. The AreaComponent +class extends the standard component UIOutput. The @FacesComponent +annotation registers the components with the JavaServer Faces +implementation:

+
+
+
+
@FacesComponent("DemoMap")
+public class MapComponent extends UICommand {...}
+
+@FacesComponent("DemoArea")
+public class AreaComponent extends UIOutput {...}
+
+
+
+

The MapComponent class represents the component corresponding to the +bookstore:map tag:

+
+
+
+
<bookstore:map id="bookMap"
+               current="map1"
+               immediate="true"
+               action="bookstore">
+    ...
+</bookstore:map>
+
+
+
+

The AreaComponent class represents the component corresponding to the +bookstore:area tag:

+
+
+
+
<bookstore:area id="map1" value="#{Book201}"
+                onmouseover="resources/images/book_201.jpg"
+                onmouseout="resources/images/book_all.jpg"
+                targetImage="mapImage"/>
+
+
+
+

MapComponent has one or more AreaComponent instances as children. +Its behavior consists of the following actions:

+
+
+
    +
  • +

    Retrieving the value of the currently selected area

    +
  • +
  • +

    Defining the properties corresponding to the component’s values

    +
  • +
  • +

    Generating an event when the user clicks on the image map

    +
  • +
  • +

    Queuing the event

    +
  • +
  • +

    Saving its state

    +
  • +
  • +

    Rendering the HTML map tag and the HTML input tag

    +
  • +
+
+
+

MapComponent delegates the rendering of the HTML map and input +tags to the MapRenderer class.

+
+
+

AreaComponent is bound to a bean that stores the shape and coordinates +of the region of the image map. You will see how all this data is +accessed through the value expression in +Creating the Renderer Class. The behavior +of AreaComponent consists of the following:

+
+
+
    +
  • +

    Retrieving the shape and coordinate data from the bean

    +
  • +
  • +

    Setting the value of the hidden tag to the id of this component

    +
  • +
  • +

    Rendering the area tag, including the JavaScript for the +onmouseover, onmouseout, and onclick functions

    +
  • +
+
+
+

Although these tasks are actually performed by AreaRenderer, +AreaComponent must delegate the tasks to AreaRenderer. See +Delegating Rendering to a Renderer for +more information.

+
+
+

The rest of this section describes the tasks that MapComponent +performs as well as the encoding and decoding that it delegates to +MapRenderer. Handling Events for Custom +Components details how MapComponent handles events.

+
+
+

15.5.1 Specifying the Component Family

+
+

If your custom component class delegates rendering, it needs to override +the getFamily method of UIComponent to return the identifier of a +component family, which is used to refer to a component or set of +components that can be rendered by a renderer or set of renderers. The +component family is used along with the renderer type to look up +renderers that can render the component:

+
+
+
+
public String getFamily() {
+    return ("Map");
+}
+
+
+
+

The component family identifier, Map, must match that defined by the +component-family elements included in the component and renderer +configurations in the application configuration resource file. +Registering a Custom Renderer with a +Render Kit explains how to define the component family in the renderer +configuration. Registering a Custom +Component explains how to define the component family in the component +configuration.

+
+
+
+

15.5.2 Performing Encoding

+
+

During the Render Response phase, the JavaServer Faces implementation +processes the encoding methods of all components and their associated +renderers in the view. The encoding methods convert the current local +value of the component into the corresponding markup that represents it +in the response.

+
+
+

The UIComponentBase class defines a set of methods for rendering +markup: encodeBegin, encodeChildren, and encodeEnd. If the +component has child components, you might need to use more than one of +these methods to render the component; otherwise, all rendering should +be done in encodeEnd. Alternatively, you can use the encodeALL +method, which encompasses all the methods.

+
+
+

Because MapComponent is a parent component of AreaComponent, the +area tags must be rendered after the beginning map tag and before +the ending map tag. To accomplish this, the MapRenderer class +renders the beginning map tag in encodeBegin and the rest of the +map tag in encodeEnd.

+
+
+

The JavaServer Faces implementation automatically invokes the +encodeEnd method of AreaComponent's renderer after it invokes +MapRenderer's encodeBegin method and before it invokes +MapRenderer's encodeEnd method. If a component needs to perform the +rendering for its children, it does this in the encodeChildren method.

+
+
+

Here are the encodeBegin and encodeEnd methods of MapRenderer:

+
+
+
+
@Override
+public void encodeBegin(FacesContext context, UIComponent component)
+        throws IOException {
+    if ((context == null)|| (component == null)) {
+        throw new NullPointerException();
+    }
+    MapComponent map = (MapComponent) component;
+    ResponseWriter writer = context.getResponseWriter();
+    writer.startElement("map", map);
+    writer.writeAttribute("name", map.getId(), "id");
+}
+
+@Override
+public void encodeEnd(FacesContext context, UIComponent component)
+        throws IOException {
+    if ((context == null) || (component == null)){
+        throw new NullPointerException();
+    }
+    MapComponent map = (MapComponent) component;
+    ResponseWriter writer = context.getResponseWriter();
+    writer.startElement("input", map);
+    writer.writeAttribute("type", "hidden", null);
+    writer.writeAttribute("name", getName(context,map), "clientId");
+    writer.endElement("input");
+    writer.endElement("map");
+}
+
+
+
+

Notice that encodeBegin renders only the beginning map tag. The +encodeEnd method renders the input tag and the ending map tag.

+
+
+

The encoding methods accept a UIComponent argument and a +javax.faces.context.FacesContext argument. The FacesContext instance +contains all the information associated with the current request. The +UIComponent argument is the component that needs to be rendered.

+
+
+

The rest of the method renders the markup to the +javax.faces.context.ResponseWriter instance, which writes out the +markup to the current response. This basically involves passing the HTML +tag names and attribute names to the ResponseWriter instance as +strings, retrieving the values of the component attributes, and passing +these values to the ResponseWriter instance.

+
+
+

The startElement method takes a String (the name of the tag) and the +component to which the tag corresponds (in this case, map). (Passing +this information to the ResponseWriter instance helps design-time +tools know which portions of the generated markup are related to which +components.)

+
+
+

After calling startElement, you can call writeAttribute to render +the tag’s attributes. The writeAttribute method takes the name of the +attribute, its value, and the name of a property or attribute of the +containing component corresponding to the attribute. The last parameter +can be null, and it won’t be rendered.

+
+
+

The name attribute value of the map tag is retrieved using the +getId method of UIComponent, which returns the component’s unique +identifier. The name attribute value of the input tag is retrieved +using the getName(FacesContext, UIComponent) method of MapRenderer.

+
+
+

If you want your component to perform its own rendering but delegate to +a renderer if there is one, include the following lines in the encoding +method to check whether there is a renderer associated with this +component:

+
+
+
+
if (getRendererType() != null) {
+    super.encodeEnd(context);
+    return;
+}
+
+
+
+

If there is a renderer available, this method invokes the superclass’s +encodeEnd method, which does the work of finding the renderer. The +MapComponent class delegates all rendering to MapRenderer, so it +does not need to check for available renderers.

+
+
+

In some custom component classes that extend standard components, you +might need to implement other methods in addition to encodeEnd. For +example, if you need to retrieve the component’s value from the request +parameters, you must also implement the decode method.

+
+
+
+

15.5.3 Performing Decoding

+
+

During the Apply Request Values phase, the JavaServer Faces +implementation processes the decode methods of all components in the +tree. The decode method extracts a component’s local value from +incoming request parameters and uses a javax.faces.convert.Converter +implementation to convert the value to a type that is acceptable to the +component class.

+
+
+

A custom component class or its renderer must implement the decode +method only if it must retrieve the local value or if it needs to queue +events. The component queues the event by calling queueEvent.

+
+
+

Here is the decode method of MapRenderer:

+
+
+
+
@Override
+public void decode(FacesContext context, UIComponent component) {
+    if ((context == null) || (component == null)) {
+        throw new NullPointerException();
+    }
+    MapComponent map = (MapComponent) component;
+    String key = getName(context, map);
+    String value = (String) context.getExternalContext().
+            getRequestParameterMap().get(key);
+    if (value != null)
+        map.setCurrent(value);
+    }
+}
+
+
+
+

The decode method first gets the name of the hidden input field by +calling getName(FacesContext, UIComponent). It then uses that name as +the key to the request parameter map to retrieve the current value of +the input field. This value represents the currently selected area. +Finally, it sets the value of the MapComponent class’s current +attribute to the value of the input field.

+
+
+
+

15.5.4 Enabling Component Properties to Accept Expressions

+
+

Nearly all the attributes of the standard JavaServer Faces tags can +accept expressions, whether they are value expressions or method +expressions. It is recommended that you also enable your component +attributes to accept expressions because it gives you much more +flexibility when you write Facelets pages.

+
+
+

To enable the attributes to accept expressions, the component class must +implement getter and setter methods for the component properties. These +methods can use the facilities offered by the StateHelper interface to +store and retrieve not only the values for these properties but also the +state of the components across multiple requests.

+
+
+

Because MapComponent extends UICommand, the UICommand class +already does the work of getting the ValueExpression and +MethodExpression instances associated with each of the attributes that +it supports. Similarly, the UIOutput class that AreaComponent +extends already obtains the ValueExpression instances for its +supported attributes. For both components, the simple getter and setter +methods store and retrieve the key values and state for the attributes, +as shown in this code fragment from AreaComponent:

+
+
+
+
enum PropertyKeys {
+    alt, coords, shape, targetImage;
+}
+public String getAlt() {
+    return (String) getStateHelper().eval(PropertyKeys.alt, null);
+}
+public void setAlt(String alt) {
+    getStateHelper().put(PropertyKeys.alt, alt);
+}
+...
+
+
+
+

However, if you have a custom component class that extends +UIComponentBase, you will need to implement the methods that get the +ValueExpression and MethodExpression instances associated with those +attributes that are enabled to accept expressions. For example, you +could include a method that gets the ValueExpression instance for the +immediate attribute:

+
+
+
+
public boolean isImmediate() {
+    if (this.immediateSet) {
+        return (this.immediate);
+    }
+    ValueExpression ve = getValueExpression("immediate");
+    if (ve != null) {
+        Boolean value = (Boolean) ve.getValue(
+            getFacesContext().getELContext());
+        return (value.booleanValue());
+    } else {
+        return (this.immediate);
+    }
+}
+
+
+
+

The properties corresponding to the component attributes that accept +method expressions must accept and return a MethodExpression object. +For example, if MapComponent extended UIComponentBase instead of +UICommand, it would need to provide an action property that returns +and accepts a MethodExpression object:

+
+
+
+
public MethodExpression getAction() {
+    return (this.action);
+}
+public void setAction(MethodExpression action) {
+    this.action = action;
+}
+
+
+
+
+

15.5.5 Saving and Restoring State

+
+

As described in Enabling Component Properties to Accept +Expressions, use of the StateHelper interface facilities allows you +to save the component’s state at the same time you set and retrieve +property values. The StateHelper implementation allows partial state +saving; it saves only the changes in the state since the initial +request, not the entire state, because the full state can be restored +during the Restore View phase.

+
+
+

Component classes that implement StateHolder may prefer to implement +the saveState(FacesContext) and restoreState(FacesContext, Object) +methods to help the JavaServer Faces implementation save and restore the +state of components across multiple requests.

+
+
+

To save a set of values, you can implement the saveState(FacesContext) +method. This method is called during the Render Response phase, during +which the state of the response is saved for processing on subsequent +requests. Here is a hypothetical method from MapComponent, which has +only one attribute, current:

+
+
+
+
@Override
+public Object saveState(FacesContext context) {
+    Object values[] = new Object[2];
+    values[0] = super.saveState(context);
+    values[1] = current;
+    return (values);
+}
+
+
+
+

This method initializes an array, which will hold the saved state. It +next saves all of the state associated with the component.

+
+
+

A component that implements StateHolder may also provide an +implementation for restoreState(FacesContext, Object), which restores +the state of the component to that saved with the +saveState(FacesContext) method. The +restoreState(FacesContext, Object) method is called during the Restore +View phase, during which the JavaServer Faces implementation checks +whether there is any state that was saved during the last Render +Response phase and needs to be restored in preparation for the next +postback.

+
+
+

Here is a hypothetical restoreState(FacesContext, Object) method from +MapComponent:

+
+
+
+
public void restoreState(FacesContext context, Object state) {
+    Object values[] = (Object[]) state;
+    super.restoreState(context, values[0]);
+    current = (String) values[1];
+}
+
+
+
+

This method takes a FacesContext and an Object instance, +representing the array that is holding the state for the component. This +method sets the component’s properties to the values saved in the +Object array.

+
+
+

Whether or not you implement these methods in your component class, you +can use the javax.faces.STATE_SAVING_METHOD context parameter to +specify in the deployment descriptor where you want the state to be +saved: either client or server. If state is saved on the client, the +state of the entire view is rendered to a hidden field on the page. By +default, the state is saved on the server.

+
+
+

The web applications in the Duke’s Forest case study save their view +state on the client.

+
+
+

Saving state on the client uses more bandwidth as well as more client +resources, whereas saving it on the server uses more server resources. +You may also want to save state on the client if you expect your users +to disable cookies.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/jsf-custom006.html b/jsf-custom006.html new file mode 100644 index 0000000..2815281 --- /dev/null +++ b/jsf-custom006.html @@ -0,0 +1,245 @@ + + + + + + Delegating Rendering to a Renderer + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

15.6 Delegating Rendering to a Renderer

+
+
+

Both MapComponent and AreaComponent delegate all of their rendering +to a separate renderer. The section +Performing Encoding explains how +MapRenderer performs the encoding for MapComponent. This section +explains in detail the process of delegating rendering to a renderer +using AreaRenderer, which performs the rendering for AreaComponent.

+
+
+

To delegate rendering, you perform the tasks described in the following +topics:

+
+ +
+

15.6.1 Creating the Renderer Class

+
+

When delegating rendering to a renderer, you can delegate all encoding +and decoding to the renderer, or you can choose to do part of it in the +component class. The AreaComponent class delegates encoding to the +AreaRenderer class.

+
+
+

The renderer class begins with a @FacesRenderer annotation:

+
+
+
+
@FacesRenderer(componentFamily = "Area", rendererType = "DemoArea")
+public class AreaRenderer extends Renderer {
+
+
+
+

The @FacesRenderer annotation registers the renderer class with the +JavaServer Faces implementation as a renderer class. The annotation +identifies the component family as well as the renderer type.

+
+
+

To perform the rendering for AreaComponent, AreaRenderer must +implement an encodeEnd method. The encodeEnd method of +AreaRenderer retrieves the shape, coordinates, and alternative text +values stored in the ImageArea bean that is bound to AreaComponent. +Suppose that the area tag currently being rendered has a value +attribute value of "book203". The following line from encodeEnd gets +the value of the attribute "book203" from the FacesContext instance:

+
+
+
+
ImageArea ia = (ImageArea)area.getValue();
+
+
+
+

The attribute value is the ImageArea bean instance, which contains the +shape, coords, and alt values associated with the book203 +AreaComponent instance. Configuring Model +Data describes how the application stores these values.

+
+
+

After retrieving the ImageArea object, the method renders the values +for shape, coords, and alt by simply calling the associated +accessor methods and passing the returned values to the ResponseWriter +instance, as shown by these lines of code, which write out the shape and +coordinates:

+
+
+
+
writer.startElement("area", area);
+writer.writeAttribute("alt", iarea.getAlt(), "alt");
+writer.writeAttribute("coords", iarea.getCoords(), "coords");
+writer.writeAttribute("shape", iarea.getShape(), "shape");
+
+
+
+

The encodeEnd method also renders the JavaScript for the onmouseout, +onmouseover, and onclick attributes. The Facelets page needs to +provide only the path to the images that are to be loaded during an +onmouseover or onmouseout action:

+
+
+
+
<bookstore:area id="map3" value="#{Book203}"
+                onmouseover="resources/images/book_203.jpg"
+                onmouseout="resources/images/book_all.jpg"
+                targetImage="mapImage"/>
+
+
+
+

The AreaRenderer class takes care of generating the JavaScript for +these actions, as shown in the following code from encodeEnd. The +JavaScript that AreaRenderer generates for the onclick action sets +the value of the hidden field to the value of the current area’s +component ID and submits the page.

+
+
+
+
sb = new StringBuffer("document.forms[0]['").append(targetImageId).
+        append("'].src='");
+sb.append(
+        getURI(context,
+        (String) area.getAttributes().get("onmouseout")));
+sb.append("'");
+writer.writeAttribute("onmouseout", sb.toString(), "onmouseout");
+sb = new StringBuffer("document.forms[0]['").append(targetImageId).
+        append("'].src='");
+sb.append(
+        getURI(context,
+        (String) area.getAttributes().get("onmouseover")));
+sb.append("'");
+writer.writeAttribute("onmouseover", sb.toString(), "onmouseover");
+sb = new StringBuffer("document.forms[0]['");
+sb.append(getName(context, area));
+sb.append("'].value='");
+sb.append(iarea.getAlt());
+sb.append("'; document.forms[0].submit()");
+writer.writeAttribute("onclick", sb.toString(), "value");
+writer.endElement("area");
+
+
+
+

By submitting the page, this code causes the JavaServer Faces lifecycle +to return back to the Restore View phase. This phase saves any state +information, including the value of the hidden field, so that a new +request component tree is constructed. This value is retrieved by the +decode method of the MapComponent class. This decode method is +called by the JavaServer Faces implementation during the Apply Request +Values phase, which follows the Restore View phase.

+
+
+

In addition to the encodeEnd method, AreaRenderer contains an empty +constructor. This is used to create an instance of AreaRenderer so +that it can be added to the render kit.

+
+
+

The @FacesRenderer annotation registers the renderer class with the +JavaServer Faces implementation as a renderer class. The annotation +identifies the component family as well as the renderer type.

+
+
+
+

15.6.2 Identifying the Renderer Type

+
+

Register the renderer with a render kit by using the @FacesRenderer +annotation (or by using the application configuration resource file, as +explained in Registering a Custom +Renderer with a Render Kit). During the Render Response phase, the +JavaServer Faces implementation calls the getRendererType method of +the component’s tag handler to determine which renderer to invoke, if +there is one.

+
+
+

You identify the type associated with the renderer in the rendererType +element of the @FacesRenderer annotation for AreaRenderer as well as +in the renderer-type element of the tag library descriptor.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/jsf-custom007.html b/jsf-custom007.html new file mode 100644 index 0000000..80c4d92 --- /dev/null +++ b/jsf-custom007.html @@ -0,0 +1,233 @@ + + + + + + Implementing an Event Listener + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

15.7 Implementing an Event Listener

+
+
+

The JavaServer Faces technology supports action events and value-change +events for components.

+
+
+

Action events occur when the user activates a component that implements +javax.faces.component.ActionSource. These events are represented by +the class javax.faces.event.ActionEvent.

+
+
+

Value-change events occur when the user changes the value of a component +that implements javax.faces.component.EditableValueHolder. These +events are represented by the class +javax.faces.event.ValueChangeEvent.

+
+
+

One way to handle events is to implement the appropriate listener +classes. Listener classes that handle the action events in an +application must implement the interface +javax.faces.event.ActionListener. Similarly, listeners that handle the +value-change events must implement the interface +javax.faces.event.ValueChangeListener.

+
+
+

This section explains how to implement the two listener classes.

+
+
+

To handle events generated by custom components, you must implement an +event listener and an event handler and manually queue the event on the +component. See Handling Events for Custom +Components for more information.

+
+
+
+
+
+
+
+ +++ + + + + + +
+

Note:

+
+
+

You do not need to create an ActionListener implementation to handle +an event that results solely in navigating to a page and does not +perform any other application-specific processing. See +Writing a Method to Handle Navigation for +information on how to manage page navigation.

+
+
+
+
+
+
+
+
+

15.7.1 Implementing Value-Change Listeners

+
+

A javax.faces.event.ValueChangeListener implementation must include a +processValueChange(ValueChangeEvent) method. This method processes the +specified value-change event and is invoked by the JavaServer Faces +implementation when the value-change event occurs. The +ValueChangeEvent instance stores the old and the new values of the +component that fired the event.

+
+
+

In the Duke’s Bookstore case study, the NameChanged listener +implementation is registered on the name UIInput component on the +bookcashier.xhtml page. This listener stores into session scope the +name the user entered in the field corresponding to the name component.

+
+
+

The bookreceipt.xhtml subsequently retrieves the name from the session +scope:

+
+
+
+
<h:outputFormat title="thanks"
+                value="#{bundle.ThankYouParam}">
+    <f:param value="#{sessionScope.name}"/>
+</h:outputFormat>
+
+
+
+

When the bookreceipt.xhtml page is loaded, it displays the name inside +the message:

+
+
+
+
"Thank you, {0}, for purchasing your books from us."
+
+
+
+

Here is part of the NameChanged listener implementation:

+
+
+
+
public class NameChanged extends Object implements ValueChangeListener {
+
+    @Override
+    public void processValueChange(ValueChangeEvent event)
+            throws AbortProcessingException {
+
+        if (null != event.getNewValue()) {
+            FacesContext.getCurrentInstance().getExternalContext().
+                getSessionMap().put("name", event.getNewValue());
+        }
+    }
+}
+
+
+
+

When the user enters the name in the field, a value-change event is +generated, and the processValueChange(ValueChangeEvent) method of the +NameChanged listener implementation is invoked. This method first gets +the ID of the component that fired the event from the ValueChangeEvent +object, and it puts the value, along with an attribute name, into the +session map of the FacesContext instance.

+
+
+

Registering a Value-Change Listener on a +Component explains how to register this listener onto a component.

+
+
+
+

15.7.2 Implementing Action Listeners

+
+

A javax.faces.event.ActionListener implementation must include a +processAction(ActionEvent) method. The processAction(ActionEvent) +method processes the specified action event. The JavaServer Faces +implementation invokes the processAction(ActionEvent) method when the +ActionEvent occurs.

+
+
+

The Duke’s Bookstore case study uses two ActionListener +implementations, LinkBookChangeListener and MapBookChangeListener. +See Handling Events for Custom Components +for details on MapBookChangeListener.

+
+
+

Registering an Action Listener on a +Component explains how to register this listener onto a component.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/jsf-custom008.html b/jsf-custom008.html new file mode 100644 index 0000000..57c9661 --- /dev/null +++ b/jsf-custom008.html @@ -0,0 +1,156 @@ + + + + + + Handling Events for Custom Components + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

15.8 Handling Events for Custom Components

+
+
+

As explained in Implementing an Event +Listener, events are automatically queued on standard components that +fire events. A custom component, on the other hand, must manually queue +events from its decode method if it fires events.

+
+
+

Performing Decoding explains how to queue +an event on MapComponent using its decode method. This section +explains how to write the class that represents the event of clicking on +the map and how to write the method that processes this event.

+
+
+

As explained in Understanding the Facelets +Page, the actionListener attribute of the bookstore:map tag points +to the MapBookChangeListener class. The listener class’s +processAction method processes the event of clicking the image map. +Here is the processAction method:

+
+
+
+
@Override
+public void processAction(ActionEvent actionEvent)
+        throws AbortProcessingException {
+
+    AreaSelectedEvent event = (AreaSelectedEvent) actionEvent;
+    String current = event.getMapComponent().getCurrent();
+    FacesContext context = FacesContext.getCurrentInstance();
+    String bookId = books.get(current);
+    context.getExternalContext().getSessionMap().put("bookId", bookId);
+}
+
+
+
+

When the JavaServer Faces implementation calls this method, it passes in +an ActionEvent object that represents the event generated by clicking +on the image map. Next, it casts it to an AreaSelectedEvent object +(see +tut-install`/examples/case-studies/dukes-bookstore/src/java/dukesbookstore/listeners/AreaSelectedEvent.java`). +Then this method gets the MapComponent associated with the event. +Next, it gets the value of the MapComponent object’s current +attribute, which indicates the currently selected area. The method then +uses the value of the current attribute to get the book’s ID value +from a HashMap object, which is constructed elsewhere in the +MapBookChangeListener class. Finally, the method places the ID +obtained from the HashMap object into the session map for the +application.

+
+
+

In addition to the method that processes the event, you need the event +class itself. This class is very simple to write; you have it extend +ActionEvent and provide a constructor that takes the component on +which the event is queued and a method that returns the component. Here +is the AreaSelectedEvent class used with the image map:

+
+
+
+
public class AreaSelectedEvent extends ActionEvent {
+    public AreaSelectedEvent(MapComponent map) {
+        super(map);
+    }
+    public MapComponent getMapComponent() {
+        return ((MapComponent) getComponent());
+    }
+}
+
+
+
+

As explained in the section Creating Custom +Component Classes, in order for MapComponent to fire events in the +first place, it must implement ActionSource. Because MapComponent +extends UICommand, it also implements ActionSource.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/jsf-custom009.html b/jsf-custom009.html new file mode 100644 index 0000000..b98268a --- /dev/null +++ b/jsf-custom009.html @@ -0,0 +1,147 @@ + + + + + + Defining the Custom Component Tag in a Tag Library Descriptor + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

15.9 Defining the Custom Component Tag in a Tag Library Descriptor

+
+
+

To use a custom tag, you declare it in a Tag Library Descriptor (TLD). +The TLD file defines how the custom tag is used in a JavaServer Faces +page. The web container uses the TLD to validate the tag. The set of +tags that are part of the HTML render kit are defined in the HTML_BASIC +TLD, available in the oJavaServer Faces standard HTML tag +library.

+
+
+

The TLD file name must end with taglib.xml. In the Duke’s Bookstore +case study, the custom tags area and map are defined in the file +web/WEB-INF/bookstore.taglib.xml.

+
+
+

All tag definitions must be nested inside the facelet-taglib element +in the TLD. Each tag is defined by a tag element. Here are the tag +definitions for the area and map components:

+
+
+
+
<facelet-taglib xmlns="http://xmlns.jcp.org/xml/ns/javaee"
+...>
+    <namespace>http://dukesbookstore</namespace>
+    <tag>
+        <tag-name>area</tag-name>
+        <component>
+            <component-type>DemoArea</component-type>
+            <renderer-type>DemoArea</renderer-type>
+        </component>
+    </tag>
+    <tag>
+        <tag-name>map</tag-name>
+        <component>
+            <component-type>DemoMap</component-type>
+            <renderer-type>DemoMap</renderer-type>
+        </component>
+    </tag>
+</facelet-taglib>
+
+
+
+

The component-type element specifies the name defined in the +@FacesComponent annotation, and the renderer-type element specifies +the rendererType defined in the @FacesRenderer annotation.

+
+
+

The facelet-taglib element must also include a namespace element, +which defines the namespace to be specified in pages that use the custom +component. See Using a Custom Component +for information on specifying the namespace in pages.

+
+
+

The TLD file is located in the WEB-INF directory. In addition, an +entry is included in the web deployment descriptor (web.xml) to +identify the custom tag library descriptor file, as follows:

+
+
+
+
    <context-param>
+        <param-name>javax.faces.FACELETS_LIBRARIES</param-name>
+        <param-value>/WEB-INF/bookstore.taglib.xml</param-value>
+    </context-param>
+
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/jsf-custom010.html b/jsf-custom010.html new file mode 100644 index 0000000..07ccc58 --- /dev/null +++ b/jsf-custom010.html @@ -0,0 +1,185 @@ + + + + + + Using a Custom Component + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

15.10 Using a Custom Component

+
+
+

To use a custom component in a page, you add the custom tag associated +with the component to the page.

+
+
+

As explained in Defining the Custom +Component Tag in a Tag Library Descriptor, you must ensure that the TLD +that defines any custom tags is packaged in the application if you +intend to use the tags in your pages. TLD files are stored in the +WEB-INF/ directory or subdirectory of the WAR file or in the +META-INF/ directory or subdirectory of a tag library packaged in a JAR +file.

+
+
+

You also need to include a namespace declaration in the page so that the +page has access to the tags. The custom tags for the Duke’s Bookstore +case study are defined in bookstore.taglib.xml. The ui:composition +tag on the index.xhtml page declares the namespace defined in the tag +library:

+
+
+
+
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
+                xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
+                xmlns:h="http://xmlns.jcp.org/jsf/html"
+                xmlns:f="http://xmlns.jcp.org/jsf/core"
+                xmlns:bookstore="http://dukesbookstore"
+                template="./bookstoreTemplate.xhtml">
+
+
+
+

Finally, to use a custom component in a page, you add the component’s +tag to the page.

+
+
+

The Duke’s Bookstore case study includes a custom image map component on +the index.xhtml page. This component allows you to select a book by +clicking on a region of the image map:

+
+
+
+
...
+<h:graphicImage id="mapImage"
+                name="book_all.jpg"
+                library="images
+                alt="#{bundle.chooseLocale}"
+                usemap="#bookMap" />
+<bookstore:map id="bookMap"
+               current="map1"
+               immediate="true"
+               action="bookstore">
+    <f:actionListener
+        type="javaeetutorial.dukesbookstore.listeners.MapBookChangeListener" />
+    <bookstore:area id="map1" value="#{Book201}"
+                    onmouseover="resources/images/book_201.jpg"
+                    onmouseout="resources/images/book_all.jpg"
+                    targetImage="mapImage" />
+    ...
+    <bookstore:area id="map6" value="#{Book207}"
+                    onmouseover="resources/images/book_207.jpg"
+                    onmouseout="resources/images//book_all.jpg"
+                    targetImage="mapImage" />
+</bookstore:map>
+
+
+
+

The standard h:graphicImage tag associates an image (book_all.jpg) +with an image map that is referenced in the usemap attribute value.

+
+
+

The custom bookstore:map tag that represents the custom component, +MapComponent, specifies the image map and contains a set of +bookstore:area tags. Each custom bookstore:area tag represents a +custom AreaComponent and specifies a region of the image map.

+
+
+

On the page, the onmouseover and onmouseout attributes specify the +image that is displayed when the user performs the actions described by +the attributes. The custom renderer also renders an onclick attribute.

+
+
+

In the rendered HTML page, the onmouseover, onmouseout, and +onclick attributes define which JavaScript code is executed when these +events occur. When the user moves the mouse over a region, the +onmouseover function associated with the region displays the map with +that region highlighted. When the user moves the mouse out of a region, +the onmouseout function redisplays the original image. When the user +clicks a region, the onclick function sets the value of a hidden +input tag to the ID of the selected area and submits the page.

+
+
+

When the custom renderer renders these attributes in HTML, it also +renders the JavaScript code. The custom renderer also renders the entire +onclick attribute rather than letting the page author set it.

+
+
+

The custom renderer that renders the HTML map tag also renders a +hidden input component that holds the current area. The server-side +objects retrieve the value of the hidden input field and set the +locale in the FacesContext instance according to which region was +selected.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/jsf-custom011.html b/jsf-custom011.html new file mode 100644 index 0000000..a115090 --- /dev/null +++ b/jsf-custom011.html @@ -0,0 +1,401 @@ + + + + + + Creating and Using a Custom Converter + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

15.11 Creating and Using a Custom Converter

+
+
+

A JavaServer Faces converter class converts strings to objects and +objects to strings as required. Several standard converters are provided +by JavaServer Faces for this purpose. See +Using the Standard Converters for more +information on these included converters.

+
+
+

As explained in Conversion Model, if the +standard converters included with JavaServer Faces cannot perform the +data conversion that you need, you can create a custom converter to +perform this specialized conversion. This implementation, at a minimum, +must define how to convert data both ways between the two views of the +data described in Conversion Model.

+
+
+

All custom converters must implement the javax.faces.convert.Converter +interface. This section explains how to implement this interface to +perform a custom data conversion.

+
+
+

The Duke’s Bookstore case study uses a custom Converter +implementation, located in +tut-install`/examples/case-studies/dukes-bookstore/src/java/dukesbookstore/converters/CreditCardConverter.java`, +to convert the data entered in the Credit Card Number field on the +bookcashier.xhtml page. It strips blanks and hyphens from the text +string and formats it so that a blank space separates every four +characters.

+
+
+

Another common use case for a custom converter is in a list for a +nonstandard object type. In the Duke’s Tutoring case study, the +Student and Guardian entities require a custom converter so that +they can be converted to and from a UISelectItems input component.

+
+
+

15.11.1 Creating a Custom Converter

+
+

The CreditCardConverter custom converter class is created as follows:

+
+
+
+
@FacesConverter("ccno")
+public class CreditCardConverter implements Converter {
+    ...
+}
+
+
+
+

The @FacesConverter annotation registers the custom converter class as +a converter with the name of ccno with the JavaServer Faces +implementation. Alternatively, you can register the converter with +entries in the application configuration resource file, as shown in +Registering a Custom Converter.

+
+
+

To define how the data is converted from the presentation view to the +model view, the Converter implementation must implement the +getAsObject(FacesContext, UIComponent, String) method from the +Converter interface. Here is the implementation of this method from +CreditCardConverter:

+
+
+
+
@Override
+public Object getAsObject(FacesContext context,
+        UIComponent component, String newValue)
+        throws ConverterException {
+
+    if (newValue.isEmpty()) {
+        return null;
+    }
+    // Since this is only a String to String conversion,
+    // this conversion does not throw ConverterException.
+
+    String convertedValue = newValue.trim();
+    if ( (convertedValue.contains("-")) || (convertedValue.contains(" "))) {
+        char[] input = convertedValue.toCharArray();
+        StringBuilder builder = new StringBuilder(input.length);
+        for (int i = 0; i < input.length; ++i) {
+            if ((input[i] == '-') || (input[i] == ' ')) {
+            } else {
+                builder.append(input[i]);
+            }
+        }
+        convertedValue = builder.toString();
+    }
+    return convertedValue;
+}
+
+
+
+

During the Apply Request Values phase, when the components' decode +methods are processed, the JavaServer Faces implementation looks up the +component’s local value in the request and calls the getAsObject +method. When calling this method, the JavaServer Faces implementation +passes in the current FacesContext instance, the component whose data +needs conversion, and the local value as a String. The method then +writes the local value to a character array, trims the hyphens and +blanks, adds the rest of the characters to a String, and returns the +String.

+
+
+

To define how the data is converted from the model view to the +presentation view, the Converter implementation must implement the +getAsString(FacesContext, UIComponent, Object) method from the +Converter interface. Here is an implementation of this method:

+
+
+
+
@Override
+public String getAsString(FacesContext context,
+        UIComponent component, Object value)
+        throws ConverterException {
+
+    String inputVal = null;
+    if ( value == null ) {
+        return "";
+    }
+    // value must be of a type that can be cast to a String.
+    try {
+        inputVal = (String)value;
+    } catch (ClassCastException ce) {
+        FacesMessage errMsg = new FacesMessage(CONVERSION_ERROR_MESSAGE_ID);
+        FacesContext.getCurrentInstance().addMessage(null, errMsg);
+        throw new ConverterException(errMsg.getSummary());
+    }
+    // insert spaces after every four characters for better
+    // readability if they are not already present.
+    char[] input = inputVal.toCharArray();
+    StringBuilder builder = new StringBuilder(input.length + 3);
+    for (int i = 0; i < input.length; ++i) {
+        if ((i % 4) == 0 && (i != 0)) {
+            if ({input[i] != ' ') || (input[i] != '-')){
+                builder.append(" ");
+                // if there are any "-"'s convert them to blanks.
+            } else if (input[i] == '-') {
+                builder.append(" ");
+            }
+         }
+         builder.append(input[i]);
+    }
+    String convertedValue = builder.toString();
+    return convertedValue;
+}
+
+
+
+

During the Render Response phase, in which the components' encode +methods are called, the JavaServer Faces implementation calls the +getAsString method in order to generate the appropriate output. When +the JavaServer Faces implementation calls this method, it passes in the +current FacesContext, the UIComponent whose value needs to be +converted, and the bean value to be converted. Because this converter +does a String-to-String conversion, this method can cast the bean +value to a String.

+
+
+

If the value cannot be converted to a String, the method throws an +exception, passing an error message from the resource bundle that is +registered with the application. +Registering Application Messages +explains how to register custom error messages with the application.

+
+
+

If the value can be converted to a String, the method reads the +String to a character array and loops through the array, adding a +space after every four characters.

+
+
+

You can also create a custom converter with a @FacesConverter +annotation that specifies the forClass attribute, as shown in the +following example from the Duke’s Tutoring case study:

+
+
+
+
@FacesConverter(forClass=Guardian.class, value="guardian")
+public class GuardianConverter extends EntityConverter implements Converter { ...
+
+
+
+

The forClass attribute registers the converter as the default +converter for the Guardian class. Therefore, whenever that class is +specified by a value attribute of an input component, the converter is +invoked automatically.

+
+
+

A converter class can be a separate Java POJO class, as in the Duke’s +Bookstore case study. If it needs to access objects defined in a managed +bean class, however, it can be a subclass of a JavaServer Faces managed +bean, as in the address-book persistence example, in which the +converters use an enterprise bean that is injected into the managed bean +class.

+
+
+
+

15.11.2 Using a Custom Converter

+
+

To apply the data conversion performed by a custom converter to a +particular component’s value, you must do one of the following.

+
+
+
    +
  • +

    Reference the converter from the component tag’s converter +attribute.

    +
  • +
  • +

    Nest an f:converter tag inside the component’s tag and reference the +custom converter from one of the f:converter tag’s attributes.

    +
  • +
+
+
+

If you are using the component tag’s converter attribute, this +attribute must reference the Converter implementation’s identifier or +the fully-qualified class name of the converter. Creating +and Using a Custom Converter explains how to implement a custom +converter.

+
+
+

The identifier for the credit card converter class is ccno, the value +specified in the @FacesConverter annotation:

+
+
+
+
@FacesConverter("ccno")
+public class CreditCardConverter implements Converter {
+    ...
+
+
+
+

Therefore, the CreditCardConverter instance can be registered on the +ccno component as shown in the following example:

+
+
+
+
<h:inputText id="ccno"
+             size="19"
+             converter="ccno"
+             value="#{cashierBean.creditCardNumber}"
+             required="true"
+             requiredMessage="#{bundle.ReqCreditCard}">
+    ...
+</h:inputText>
+
+
+
+

By setting the converter attribute of a component’s tag to the +converter’s identifier or its class name, you cause that component’s +local value to be automatically converted according to the rules +specified in the Converter implementation.

+
+
+

Instead of referencing the converter from the component tag’s +converter attribute, you can reference the converter from an +f:converter tag nested inside the component’s tag. To reference the +custom converter using the f:converter tag, you do one of the +following.

+
+
+
    +
  • +

    Set the f:converter tag’s converterId attribute to the Converter +implementation’s identifier defined in the @FacesConverter annotation +or in the application configuration resource file. This method is shown +in bookcashier.xhtml:

    +
    +
    +
    <h:inputText id="ccno"
    +             size="19"
    +             value="#{cashierBean.creditCardNumber}"
    +             required="true"
    +             requiredMessage="#{bundle.ReqCreditCard}">
    +    <f:converter converterId="ccno"/>
    +    <f:validateRegex
    +       pattern="\d{16}|\d{4} \d{4} \d{4} \d{4}|\d{4}-\d{4}-\d{4}-\d{4}"/>
    +</h:inputText>
    +
    +
    +
  • +
  • +

    Bind the Converter implementation to a managed bean property using +the f:converter tag’s binding attribute, as described in +Binding Converters, Listeners, and +Validators to Managed Bean Properties.

    +
  • +
+
+
+

The JavaServer Faces implementation calls the converter’s getAsObject +method to strip spaces and hyphens from the input value. The +getAsString method is called when the bookcashier.xhtml page is +redisplayed; this happens if the user orders more than $100 worth of +books.

+
+
+

In the Duke’s Tutoring case study, each converter is registered as the +converter for a particular class. The converter is automatically invoked +whenever that class is specified by a value attribute of an input +component. In the following example, the itemValue attribute +(highlighted in bold) calls the converter for the Guardian class:

+
+
+
+
<h:selectManyListbox id="selectGuardiansMenu"
+                     title="#{bundle['action.add.guardian']}"
+                     value="#{guardianManager.selectedGuardians}"
+                     size="5"
+                     converter="guardian">
+    <f:selectItems value="#{guardianManager.allGuardians}"
+                   var="selectedGuardian"
+                   itemLabel="#{selectedGuardian.name}"
+                   itemValue="#{selectedGuardian}" />
+</h:selectManyListbox>
+
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/jsf-custom012.html b/jsf-custom012.html new file mode 100644 index 0000000..3c35ff1 --- /dev/null +++ b/jsf-custom012.html @@ -0,0 +1,435 @@ + + + + + + Creating and Using a Custom Validator + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

15.12 Creating and Using a Custom Validator

+
+
+

If the standard validators or Bean Validation don’t perform the +validation checking you need, you can create a custom validator to +validate user input. As explained in +Validation Model, there are two ways to +implement validation code.

+
+
+
    +
  • +

    Implement a managed bean method that performs the validation.

    +
  • +
  • +

    Provide an implementation of the javax.faces.validator.Validator +interface to perform the validation.

    +
  • +
+
+
+

Writing a Method to Perform Validation +explains how to implement a managed bean method to perform validation. +The rest of this section explains how to implement the Validator +interface.

+
+
+

If you choose to implement the Validator interface and you want to +allow the page author to configure the validator’s attributes from the +page, you also must specify a custom tag for registering the validator +on a component.

+
+
+

If you prefer to configure the attributes in the Validator +implementation, you can forgo specifying a custom tag and instead let +the page author register the validator on a component using the +f:validator tag, as described in Using a Custom +Validator.

+
+
+

You can also create a managed bean property that accepts and returns the +Validator implementation you create, as described in +Writing Properties Bound to Converters, +Listeners, or Validators. You can use the f:validator tag’s binding +attribute to bind the Validator implementation to the managed bean +property.

+
+
+

Usually, you will want to display an error message when data fails +validation. You need to store these error messages in a resource bundle.

+
+
+

After creating the resource bundle, you have two ways to make the +messages available to the application. You can queue the error messages +onto the FacesContext programmatically, or you can register the error +messages in the application configuration resource file, as explained in +Registering Application Messages.

+
+
+

For example, an e-commerce application might use a general-purpose +custom validator called FormatValidator.java to validate input data +against a format pattern that is specified in the custom validator tag. +This validator would be used with a Credit Card Number field on a +Facelets page. Here is the custom validator tag:

+
+
+
+
<mystore:formatValidator
+ formatPatterns="9999999999999999|9999 9999 9999 9999|9999-9999-9999-9999"/>
+
+
+
+

According to this validator, the data entered in the field must be one +of the following:

+
+
+
    +
  • +

    A 16-digit number with no spaces

    +
  • +
  • +

    A 16-digit number with a space between every four digits

    +
  • +
  • +

    A 16-digit number with hyphens between every four digits

    +
  • +
+
+
+

The f:validateRegex tag makes a custom validator unnecessary in this +situation. However, the rest of this section describes how this +validator would be implemented and how to specify a custom tag so that +the page author could register the validator on a component.

+
+
+

15.12.1 Implementing the Validator Interface

+
+

A Validator implementation must contain a constructor, a set of +accessor methods for any attributes on the tag, and a validate method, +which overrides the validate method of the Validator interface.

+
+
+

The hypothetical FormatValidator class also defines accessor methods +for setting the formatPatterns attribute, which specifies the +acceptable format patterns for input into the fields. The setter method +calls the parseFormatPatterns method, which separates the components +of the pattern string into a string array, formatPatternsList.

+
+
+
+
public String getFormatPatterns() {
+    return (this.formatPatterns);
+}
+public void setFormatPatterns(String formatPatterns) {
+    this.formatPatterns = formatPatterns;
+    parseFormatPatterns();
+}
+
+
+
+

In addition to defining accessor methods for the attributes, the class +overrides the validate method of the Validator interface. This +method validates the input and also accesses the custom error messages +to be displayed when the String is invalid.

+
+
+

The validate method performs the actual validation of the data. It +takes the FacesContext instance, the component whose data needs to be +validated, and the value that needs to be validated. A validator can +validate only data of a component that implements +javax.faces.component.EditableValueHolder.

+
+
+

Here is an implementation of the validate method:

+
+
+
+
@FacesValidator
+public class FormatValidator implements Validator, StateHolder {
+    ...
+    public void validate(FacesContext context, UIComponent component,
+                         Object toValidate) {
+
+        boolean valid = false;
+        String value = null;
+        if ((context == null) || (component == null)) {
+            throw new NullPointerException();
+        }
+        if (!(component instanceof UIInput)) {
+            return;
+        }
+        if ( null == formatPatternsList || null == toValidate) {
+            return;
+        }
+        value = toValidate.toString();
+        // validate the value against the list of valid patterns.
+        Iterator patternIt = formatPatternsList.iterator();
+        while (patternIt.hasNext()) {
+            valid = isFormatValid(
+                ((String)patternIt.next()), value);
+            if (valid) {
+                break;
+            }
+        }
+        if ( !valid ) {
+            FacesMessage errMsg =
+                new FacesMessage(FORMAT_INVALID_MESSAGE_ID);
+            FacesContext.getCurrentInstance().addMessage(null, errMsg);
+            throw new ValidatorException(errMsg);
+        }
+    }
+}
+
+
+
+

The @FacesValidator annotation registers the FormatValidator class +as a validator with the JavaServer Faces implementation. The validate +method gets the local value of the component and converts it to a +String. It then iterates over the formatPatternsList list, which is +the list of acceptable patterns that was parsed from the +formatPatterns attribute of the custom validator tag.

+
+
+

While iterating over the list, this method checks the pattern of the +component’s local value against the patterns in the list. If the pattern +of the local value does not match any pattern in the list, this method +generates an error message. It then creates a +javax.faces.application.FacesMessage and queues it on the +FacesContext for display, using a String that represents the key in +the Properties file:

+
+
+
+
public static final String FORMAT_INVALID_MESSAGE_ID =
+     "FormatInvalid";
+}
+
+
+
+

Finally, the method passes the message to the constructor of +javax.faces.validator.ValidatorException.

+
+
+

When the error message is displayed, the format pattern will be +substituted for the {0} in the error message, which, in English, is as +follows:

+
+
+
+
Input must match one of the following patterns: {0}
+
+
+
+

You may wish to save and restore state for your validator, although +state saving is not usually necessary. To do so, you will need to +implement the StateHolder interface as well as the Validator +interface. To implement StateHolder, you would need to implement its +four methods: saveState(FacesContext), +restoreState(FacesContext, Object), isTransient, and +setTransient(boolean). See Saving and +Restoring State for more information.

+
+
+
+

15.12.2 Specifying a Custom Tag

+
+

If you implemented a Validator interface rather than implementing a +managed bean method that performs the validation, you need to do one of +the following.

+
+
+
    +
  • +

    Allow the page author to specify the Validator implementation to use +with the f:validator tag. In this case, the Validator implementation +must define its own properties. Using a Custom Validator +explains how to use the f:validator tag.

    +
  • +
  • +

    Specify a custom tag that provides attributes for configuring the +properties of the validator from the page.

    +
  • +
+
+
+

To create a custom tag, you need to add the tag to the tag library +descriptor for the application, bookstore.taglib.xml:

+
+
+
+
<tag>
+    <tag-name>validator</tag-name>
+    <validator>
+        <validator-id>formatValidator</validator-id>
+        <validator-class>
+            dukesbookstore.validators.FormatValidator
+        </validator-class>
+    </validator>
+</tag>
+
+
+
+

The tag-name element defines the name of the tag as it must be used in +a Facelets page. The validator-id element identifies the custom +validator. The validator-class element wires the custom tag to its +implementation class.

+
+
+

Using a Custom Validator explains how to use the custom +validator tag on the page.

+
+
+
+

15.12.3 Using a Custom Validator

+
+

To register a custom validator on a component, you must do one of the +following.

+
+
+
    +
  • +

    Nest the validator’s custom tag inside the tag of the component whose +value you want to be validated.

    +
  • +
  • +

    Nest the standard f:validator tag within the tag of the component +and reference the custom Validator implementation from the +f:validator tag.

    +
  • +
+
+
+

Here is a hypothetical custom formatValidator tag for the Credit Card +Number field, nested within the h:inputText tag:

+
+
+
+
<h:inputText id="ccno" size="19"
+  ...
+  required="true">
+  <mystore:formatValidator
+  formatPatterns="9999999999999999|9999 9999 9999 9999|9999-9999-9999-9999"/>
+</h:inputText>
+<h:message styleClass="validationMessage" for="ccno"/>
+
+
+
+

This tag validates the input of the ccno field against the patterns +defined by the page author in the formatPatterns attribute.

+
+
+

You can use the same custom validator for any similar component by +simply nesting the custom validator tag within the component tag.

+
+
+

If the application developer who created the custom validator prefers to +configure the attributes in the Validator implementation rather than +allow the page author to configure the attributes from the page, the +developer will not create a custom tag for use with the validator.

+
+
+

In this case, the page author must nest the f:validator tag inside the +tag of the component whose data needs to be validated. Then the page +author needs to do one of the following.

+
+
+
    +
  • +

    Set the f:validator tag’s validatorId attribute to the ID of the +validator that is defined in the application configuration resource +file.

    +
  • +
  • +

    Bind the custom Validator implementation to a managed bean property +using the f:validator tag’s binding attribute, as described in +Binding Converters, Listeners, and +Validators to Managed Bean Properties.

    +
  • +
+
+
+

The following tag registers a hypothetical validator on a component +using an f:validator tag and references the ID of the validator:

+
+
+
+
<h:inputText id="name" value="#{CustomerBean.name}"
+            size="10" ...>
+    <f:validator validatorId="customValidator" />
+    ...
+</h:inputText>
+
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/jsf-custom013.html b/jsf-custom013.html new file mode 100644 index 0000000..d40a19d --- /dev/null +++ b/jsf-custom013.html @@ -0,0 +1,508 @@ + + + + + + Binding Component Values and Instances to Managed Bean Properties + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

15.13 Binding Component Values and Instances to Managed Bean Properties

+
+
+

A component tag can wire its data to a managed bean by one of the +following methods:

+
+
+
    +
  • +

    Binding its component’s value to a bean property

    +
  • +
  • +

    Binding its component’s instance to a bean property

    +
  • +
+
+
+

To bind a component’s value to a managed bean property, a component +tag’s value attribute uses an EL value expression. To bind a component +instance to a bean property, a component tag’s binding attribute uses +a value expression.

+
+
+

When a component instance is bound to a managed bean property, the +property holds the component’s local value. Conversely, when a +component’s value is bound to a managed bean property, the property +holds the value stored in the managed bean. This value is updated with +the local value during the Update Model Values phase of the lifecycle. +There are advantages to both of these methods.

+
+
+

Binding a component instance to a bean property has the following +advantages.

+
+
+
    +
  • +

    The managed bean can programmatically modify component attributes.

    +
  • +
  • +

    The managed bean can instantiate components rather than let the page +author do so.

    +
  • +
+
+
+

Binding a component’s value to a bean property has the following +advantages.

+
+
+
    +
  • +

    The page author has more control over the component attributes.

    +
  • +
  • +

    The managed bean has no dependencies on the JavaServer Faces API (such +as the component classes), allowing for greater separation of the +presentation layer from the model layer.

    +
  • +
  • +

    The JavaServer Faces implementation can perform conversions on the +data based on the type of the bean property without the developer +needing to apply a converter.

    +
  • +
+
+
+

In most situations, you will bind a component’s value rather than its +instance to a bean property. You’ll need to use a component binding only +when you need to change one of the component’s attributes dynamically. +For example, if an application renders a component only under certain +conditions, it can set the component’s rendered property accordingly +by accessing the property to which the component is bound.

+
+
+

When referencing the property using the component tag’s value +attribute, you need to use the proper syntax. For example, suppose a +managed bean called MyBean has this int property:

+
+
+
+
protected int currentOption = null;
+public int getCurrentOption(){...}
+public void setCurrentOption(int option){...}
+
+
+
+

The value attribute that references this property must have this +value-binding expression:

+
+
+
+
#{myBean.currentOption}
+
+
+
+

In addition to binding a component’s value to a bean property, the +value attribute can specify a literal value or can map the component’s +data to any primitive (such as int), structure (such as an array), or +collection (such as a list), independent of a JavaBeans component. +Table 15-3 lists some example value-binding expressions +that you can use with the value attribute.

+
+
+

+
+
+

Table 15-3 Examples of Value-Binding Expressions

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ValueExpression

A Boolean

cart.numberOfItems> 0

A property initialized from a context initialization parameter

initParam.quantity

A bean property

cashierBean.name

A value in an array

books[3]

A value in a collection

books["fiction"]

A property of an object in an array of objects

books[3].price

+
+
+
+
+
+
+
+

The next two sections explain how to use the value attribute to bind a +component’s value to a bean property or other data objects and how to +use the binding attribute to bind a component instance to a bean +property.

+
+
+

15.13.1 Binding a Component Value to a Property

+
+

To bind a component’s value to a managed bean property, you specify the +name of the bean and the property using the value attribute.

+
+
+

This means that the first part of the EL value expression must match the +name of the managed bean up to the first period (.) and the part of +the value expression after the period must match the property of the +managed bean.

+
+
+

For example, in the Duke’s Bookstore case study, the h:dataTable tag +in bookcatalog.xhtml sets the value of the component to the value of +the books property of the BookstoreBean backing bean, whose name is +store:

+
+
+
+
<h:dataTable id="books"
+             value="#{store.books}"
+             var="book"
+             headerClass="list-header"
+             styleClass="list-background"
+             rowClasses="list-row-even, list-row-odd"
+             border="1"
+             summary="#{bundle.BookCatalog}">
+
+
+
+

The value is obtained by calling the backing bean’s getBooks method, +which in turn calls the BookRequestBean session bean’s getBooks +method.

+
+
+

If you use the application configuration resource file to configure +managed beans instead of defining them in managed bean classes, the name +of the bean in the value expression must match the managed-bean-name +element of the managed bean declaration up to the first period (.) in +the expression. Similarly, the part of the value expression after the +period must match the name specified in the corresponding +property-name element in the application configuration resource file.

+
+
+

For example, consider this managed bean configuration, which configures +the ImageArea bean corresponding to the top-left book in the image map +on the index.html page of the Duke’s Bookstore case study:

+
+
+
+
<managed-bean eager="true">
+    ...
+    <managed-bean-name>Book201</managed-bean-name>
+    <managed-bean-class>dukesbookstore.model.ImageArea</managed-bean-class>
+    <managed-bean-scope>application</managed-bean-scope>
+    <managed-property>
+        ...
+        <property-name>shape</property-name>
+        <value>rect</value>
+    </managed-property>
+    <managed-property>
+        ...
+        <property-name>alt</property-name>
+        <value>Duke</value>
+    </managed-property>
+    ...
+
+
+
+

This example configures a bean called Book201, which has several +properties, one of which is called shape.

+
+
+

Although the bookstore:area tags on the index.xhtml page do not bind +to an ImageArea property (they bind to the bean itself), you could +refer to the property using a value expression from the value +attribute of the component’s tag:

+
+
+
+
<h:outputText value="#{Book201.shape}" />
+
+
+
+

See Configuring Managed Beans for +information on how to configure beans in the application configuration +resource file.

+
+
+
+

15.13.2 Binding a Component Value to an Implicit Object

+
+

One external data source that a value attribute can refer to is an +implicit object.

+
+
+

The bookreceipt.xhtml page of the Duke’s Bookstore case study has a +reference to an implicit object:

+
+
+
+
<h:outputFormat title="thanks"
+                value="#{bundle.ThankYouParam}">
+    <f:param value="#{sessionScope.name}"/>
+</h:outputFormat>
+
+
+
+

This tag gets the name of the customer from the session scope and +inserts it into the parameterized message at the key ThankYouParam +from the resource bundle. For example, if the name of the customer is +Gwen Canigetit, this tag will render:

+
+
+
+
Thank you, Gwen Canigetit, for purchasing your books from us.
+
+
+
+

Retrieving values from other implicit objects is done in a similar way +to the example shown in this section. Table 15-4 lists the +implicit objects to which a value attribute can refer. All of the +implicit objects, except for the scope objects, are read-only and +therefore should not be used as values for a UIInput component.

+
+
+

+
+
+

Table 15-4 Implicit Objects

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Implicit ObjectWhat It Is

applicationScope

A Map of the application scope attribute values, +keyed by attribute name

cookie

A Map of the cookie values for the current request, keyed +by cookie name

facesContext

The FacesContext instance for the current request

header

A Map of HTTP header values for the current request, keyed +by header name

headerValues

A Map of String arrays containing all the header +values for HTTP headers in the current request, keyed by header name

initParam

A Map of the context initialization parameters for this +web application

param

A Map of the request parameters for this request, keyed by +parameter name

paramValues

A Map of String arrays containing all the parameter +values for request parameters in the current request, keyed by parameter +name

requestScope

A Map of the request attributes for this request, +keyed by attribute name

sessionScope

A Map of the session attributes for this request, +keyed by attribute name

view

The root UIComponent in the current component tree stored in +the FacesRequest for this request

+
+
+
+
+
+
+
+
+

15.13.3 Binding a Component Instance to a Bean Property

+
+

A component instance can be bound to a bean property using a value +expression with the binding attribute of the component’s tag. You +usually bind a component instance rather than its value to a bean +property if the bean must dynamically change the component’s attributes.

+
+
+

Here are two tags from the bookcashier.xhtml page that bind components +to bean properties:

+
+
+
+
<h:selectBooleanCheckbox id="fanClub"
+                         rendered="false"
+                         binding="#{cashierBean.specialOffer}" />
+<h:outputLabel for="fanClub"
+               rendered="false"
+               binding="#{cashierBean.specialOfferText}"
+               value="#{bundle.DukeFanClub}"/>
+</h:outputLabel>
+
+
+
+

The h:selectBooleanCheckbox tag renders a check box and binds the +fanClub UISelectBoolean component to the specialOffer property of +the cashier bean. The h:outputLabel tag binds the component +representing the check box’s label to the specialOfferText property of +the cashier bean. If the application’s locale is English, the +h:outputLabel tag renders

+
+
+
+
I'd like to join the Duke Fan Club, free with my purchase of over $100
+
+
+
+

The rendered attributes of both tags are set to false to prevent the +check box and its label from being rendered. If the customer makes a +large order and clicks the Submit button, the submit method of +CashierBean sets both components' rendered properties to true, +causing the check box and its label to be rendered.

+
+
+

These tags use component bindings rather than value bindings because the +managed bean must dynamically set the values of the components' +rendered properties.

+
+
+

If the tags were to use value bindings instead of component bindings, +the managed bean would not have direct access to the components and +would therefore require additional code to access the components from +the FacesContext instance to change the components' rendered +properties.

+
+
+

Writing Properties Bound to Component +Instances explains how to write the bean properties bound to the +example components.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/jsf-custom014.html b/jsf-custom014.html new file mode 100644 index 0000000..3dd6fa2 --- /dev/null +++ b/jsf-custom014.html @@ -0,0 +1,172 @@ + + + + + + Binding Converters, Listeners, and Validators to Managed Bean Properties + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

15.14 Binding Converters, Listeners, and Validators to Managed BeanProperties

+
+
+

As described in Adding Components to a Page +Using HTML Tag Library Tags, a page author can bind converter, +listener, and validator implementations to managed bean properties using +the binding attributes of the tags that are used to register the +implementations on components.

+
+
+

This technique has similar advantages to binding component instances to +managed bean properties, as described in +Binding Component Values and Instances to +Managed Bean Properties. In particular, binding a converter, listener, +or validator implementation to a managed bean property yields the +following benefits.

+
+
+
    +
  • +

    The managed bean can instantiate the implementation instead of +allowing the page author to do so.

    +
  • +
  • +

    The managed bean can programmatically modify the attributes of the +implementation. In the case of a custom implementation, the only other +way to modify the attributes outside of the implementation class would +be to create a custom tag for it and require the page author to set the +attribute values from the page.

    +
  • +
+
+
+

Whether you are binding a converter, listener, or validator to a managed +bean property, the process is the same for any of the implementations.

+
+
+
    +
  • +

    Nest the converter, listener, or validator tag within an appropriate +component tag.

    +
  • +
  • +

    Make sure that the managed bean has a property that accepts and +returns the converter, listener, or validator implementation class that +you want to bind to the property.

    +
  • +
  • +

    Reference the managed bean property using a value expression from the +binding attribute of the converter, listener, or validator tag.

    +
  • +
+
+
+

For example, say that you want to bind the standard DateTime converter +to a managed bean property because you want to set the formatting +pattern of the user’s input in the managed bean rather than on the +Facelets page. First, the page registers the converter onto the +component by nesting the f:convertDateTime tag within the component +tag. Then, the page references the property with the binding attribute +of the f:convertDateTime tag:

+
+
+
+
<h:inputText value="#{loginBean.birthDate}">
+    <f:convertDateTime binding="#{loginBean.convertDate}" />
+</h:inputText>
+
+
+
+

The convertDate property would look something like this:

+
+
+
+
private DateTimeConverter convertDate;
+public DateTimeConverter getConvertDate() {
+    ...
+    return convertDate;
+}
+public void setConvertDate(DateTimeConverter convertDate) {
+    convertDate.setPattern("EEEEEEEE, MMM dd, yyyy");
+    this.convertDate = convertDate;
+}
+
+
+
+

See Writing Properties Bound to +Converters, Listeners, or Validators for more information on writing +managed bean properties for converter, listener, and validator +implementations.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/jsf-develop.html b/jsf-develop.html new file mode 100644 index 0000000..38f608b --- /dev/null +++ b/jsf-develop.html @@ -0,0 +1,106 @@ + + + + + + Developing with JavaServer Faces Technology + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

12 Developing with JavaServer Faces Technology

+
+
+

This chapter provides an overview of managed beans and explains how to +write methods and properties of managed beans that are used by a +JavaServer Faces application. This chapter also introduces the Bean +Validation feature.

+
+
+

The following topics are addressed here:

+
+ +
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/jsf-develop001.html b/jsf-develop001.html new file mode 100644 index 0000000..cef26b9 --- /dev/null +++ b/jsf-develop001.html @@ -0,0 +1,318 @@ + + + + + + Managed Beans in JavaServer Faces Technology + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

12.1 Managed Beans in JavaServer Faces Technology

+
+
+

A typical JavaServer Faces application includes one or more managed +beans, each of which can be associated with the components used in a +particular page. This section introduces the basic concepts of creating, +configuring, and using managed beans in an application.

+
+
+
+
+
+
+
+ +++ + + + + + +
+

Note:

+
+
+

Chapter 10, "Using JavaServer Faces Technology +in Web Pages" and Chapter 11, "Using +Converters, Listeners, and Validators" show how to add components to a +page and connect them to server-side objects by using component tags and +core tags. These chapters also show how to provide additional +functionality to the components through converters, listeners, and +validators. Developing a JavaServer Faces application also involves the +task of programming the server-side objects: managed beans, converters, +event handlers, and validators.

+
+
+
+
+
+
+
+
+

The following topics are addressed here:

+
+ +
+

12.1.1 Creating a Managed Bean

+
+

A managed bean is created with a constructor with no arguments, a set of +properties, and a set of methods that perform functions for a component. +Each of the managed bean properties can be bound to one of the +following:

+
+
+
    +
  • +

    A component value

    +
  • +
  • +

    A component instance

    +
  • +
  • +

    A converter instance

    +
  • +
  • +

    A listener instance

    +
  • +
  • +

    A validator instance

    +
  • +
+
+
+

The most common functions that managed bean methods perform include the +following:

+
+
+
    +
  • +

    Validating a component’s data

    +
  • +
  • +

    Handling an event fired by a component

    +
  • +
  • +

    Performing processing to determine the next page to which the +application must navigate

    +
  • +
+
+
+

As with all JavaBeans components, a property consists of a private data +field and a set of accessor methods, as shown by this code:

+
+
+
+
private Integer userNumber = null;
+...
+public void setUserNumber(Integer user_number) {
+    userNumber = user_number;
+}
+public Integer getUserNumber() {
+    return userNumber;
+}
+
+
+
+

When bound to a component’s value, a bean property can be any of the +basic primitive and numeric types or any Java object type for which the +application has access to an appropriate converter. For example, a +property can be of type java.util.Date if the application has access +to a converter that can convert the Date type to a String and back +again. See Writing Bean Properties for +information on which types are accepted by which component tags.

+
+
+

When a bean property is bound to a component instance, the property’s +type must be the same as the component object. For example, if a +javax.faces.component.UISelectBoolean component is bound to the +property, the property must accept and return a UISelectBoolean +object. Likewise, if the property is bound to a converter, validator, or +listener instance, the property must be of the appropriate converter, +validator, or listener type.

+
+
+

For more information on writing beans and their properties, see +Writing Bean Properties.

+
+
+
+

12.1.2 Using the EL to Reference Managed Beans

+
+

To bind component values and objects to managed bean properties or to +reference managed bean methods from component tags, page authors use the +Expression Language syntax. As explained in +Overview of the EL, the following are some of +the features that the EL offers:

+
+
+
    +
  • +

    Deferred evaluation of expressions

    +
  • +
  • +

    The ability to use a value expression to both read and write data

    +
  • +
  • +

    Method expressions

    +
  • +
+
+
+

Deferred evaluation of expressions is important because the JavaServer +Faces lifecycle is split into several phases in which component event +handling, data conversion and validation, and data propagation to +external objects are all performed in an orderly fashion. The +implementation must be able to delay the evaluation of expressions until +the proper phase of the lifecycle has been reached. Therefore, the +implementation’s tag attributes always use deferred-evaluation syntax, +which is distinguished by the #{} delimiter.

+
+
+

To store data in external objects, almost all JavaServer Faces tag +attributes use lvalue expressions, which are expressions that allow both +getting and setting data on external objects.

+
+
+

Finally, some component tag attributes accept method expressions that +reference methods that handle component events or validate or convert +component data.

+
+
+

To illustrate a JavaServer Faces tag using the EL, the following tag +references a method that validates user input:

+
+
+
+
<h:inputText id="inputGuess"
+    value="#{userNumberBean.userNumber}"
+    required="true" size="3"
+    disabled="#{userNumberBean.number eq userNumberBean.userNumber ...}"
+    validator="#{userNumberBean.validateNumberRange}">
+</h:inputText>
+
+
+
+

This tag binds the inputGuess component’s value to the +UserNumberBean.userNumber managed bean property by using an lvalue +expression. The tag uses a method expression to refer to the +UserNumberBean.validateNumberRange method, which performs validation +of the component’s local value. The local value is whatever the user +types into the field corresponding to this tag. This method is invoked +when the expression is evaluated.

+
+
+

Nearly all JavaServer Faces tag attributes accept value expressions. In +addition to referencing bean properties, value expressions can reference +lists, maps, arrays, implicit objects, and resource bundles.

+
+
+

Another use of value expressions is to bind a component instance to a +managed bean property. A page author does this by referencing the +property from the binding attribute:

+
+
+
+
<h:outputLabel for="fanClub"
+               rendered="false"
+               binding="#{cashierBean.specialOfferText}">
+               value="#{bundle.DukeFanClub}"/>
+</h:outputLabel>
+
+
+
+

In addition to using expressions with the standard component tags, you +can configure your custom component properties to accept expressions by +creating javax.el.ValueExpression or javax.el.MethodExpression +instances for them.

+
+
+

For information on the EL, see Chapter 9, +"Expression Language".

+
+
+

For information on referencing managed bean methods from component tags, +see Referencing a Managed Bean Method.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/jsf-develop002.html b/jsf-develop002.html new file mode 100644 index 0000000..5ded780 --- /dev/null +++ b/jsf-develop002.html @@ -0,0 +1,721 @@ + + + + + + Writing Bean Properties + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

12.2 Writing Bean Properties

+
+
+

As explained in Managed Beans in +JavaServer Faces Technology, a managed bean property can be bound to +one of the following items:

+
+
+
    +
  • +

    A component value

    +
  • +
  • +

    A component instance

    +
  • +
  • +

    A converter implementation

    +
  • +
  • +

    A listener implementation

    +
  • +
  • +

    A validator implementation

    +
  • +
+
+
+

These properties follow the conventions of JavaBeans components (also +called beans). For more information on JavaBeans components, see the +JavaBeans Tutorial at +http://docs.oracle.com/javase/tutorial/javabeans/index.html.

+
+
+

The component’s tag binds the component’s value to a managed bean +property by using its value attribute and binds the component’s +instance to a managed bean property by using its binding attribute. +Likewise, all the converter, listener, and validator tags use their +binding attributes to bind their associated implementations to managed +bean properties. See Binding Component +Values and Instances to Managed Bean Properties and +Binding Converters, Listeners, and +Validators to Managed Bean Properties for more information.

+
+
+

To bind a component’s value to a managed bean property, the type of the +property must match the type of the component’s value to which it is +bound. For example, if a managed bean property is bound to a +UISelectBoolean component’s value, the property should accept and +return a boolean value or a Boolean wrapper Object instance.

+
+
+

To bind a component instance to a managed bean property, the property +must match the type of component. For example, if a managed bean +property is bound to a UISelectBoolean instance, the property should +accept and return a UISelectBoolean value.

+
+
+

Similarly, to bind a converter, listener, or validator implementation to +a managed bean property, the property must accept and return the same +type of converter, listener, or validator object. For example, if you +are using the convertDateTime tag to bind a +javax.faces.convert.DateTimeConverter to a property, that property +must accept and return a DateTimeConverter instance.

+
+
+

The rest of this section explains how to write properties that can be +bound to component values, to component instances for the component +objects described in Adding Components to a +Page Using HTML Tag Library Tags, and to converter, listener, and +validator implementations.

+
+
+

12.2.1 Writing Properties Bound to Component Values

+
+

To write a managed bean property that is bound to a component’s value, +you must match the property type to the component’s value.

+
+
+

Table 12-1 lists the javax.faces.component classes and +the acceptable types of their values.

+
+
+

+
+
+

Table 12-1 Acceptable Types of Component Values

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Component ClassAcceptable Types of Component Values

UIInput, UIOutput, UISelectItem, UISelectOne

Any of the basic +primitive and numeric types or any Java programming language object type +for which an appropriate javax.faces.convert.Converter implementation +is available

UIData

array of beans, List of beans, single bean, +java.sql.ResultSet, javax.servlet.jsp.jstl.sql.Result, +javax.sql.RowSet

UISelectBoolean

boolean or Boolean

UISelectItems

java.lang.String, Collection, Array, Map

UISelectMany

array or List, although elements of the array or +List can be any of the standard types

+
+
+
+
+
+
+
+

When they bind components to properties by using the value attributes +of the component tags, page authors need to ensure that the +corresponding properties match the types of the components' values.

+
+
+

12.2.1.1 UIInput and UIOutput Properties

+
+

The UIInput and UIOutput component classes are represented by the +component tags that begin with h:input and h:output, respectively +(for example, h:inputText and h:outputText).

+
+
+

In the following example, an h:inputText tag binds the name +component to the name property of a managed bean called CashierBean.

+
+
+
+
<h:inputText id="name"
+             size="30"
+             value="#{cashierBean.name}"
+    ...>
+</h:inputText>
+
+
+
+

The following code snippet from the managed bean CashierBean shows the +bean property type bound by the preceding component tag:

+
+
+
+
protected String name = null;
+
+public void setName(String name) {
+    this.name = name;
+}
+public String getName() {
+    return this.name;
+}
+
+
+
+

As described in Using the Standard +Converters, to convert the value of an input or output component you +can either apply a converter or create the bean property bound to the +component with the matching type. Here is the example tag, from +Using DateTimeConverter, that displays +the date on which items will be shipped.

+
+
+
+
<h:outputText value="#{cashierBean.shipDate}">
+    <f:convertDateTime type="date" dateStyle="full" />
+</h:outputText>
+
+
+
+

The bean property represented by this tag must have a type of +java.util.Date. The following code snippet shows the shipDate +property, from the managed bean CashierBean, that is bound by the +tag’s value in the preceding example:

+
+
+
+
private Date shipDate;
+
+public Date getShipDate() {
+    return this.shipDate;
+}
+public void setShipDate(Date shipDate) {
+    this.shipDate = shipDate;
+}
+
+
+
+
+

12.2.1.2 UIData Properties

+
+

The UIData component class is represented by the h:dataTable +component tag.

+
+
+

UIData components must be bound to one of the managed bean property +types listed in Table 12-1. Data components are discussed +in Using Data-Bound Table Components. Here +is part of the start tag of dataTable from that section:

+
+
+
+
<h:dataTable id="items"
+    ...
+    value="#{cart.items}"
+    ...
+    var="item">
+
+
+
+

The value expression points to the items property of a shopping cart +bean named cart. The cart bean maintains a map of ShoppingCartItem +beans.

+
+
+

The getItems method from the cart bean populates a List with +ShoppingCartItem instances that are saved in the items map when the +customer adds books to the cart, as shown in the following code segment:

+
+
+
+
public synchronized List<ShoppingCartItem> getItems() {
+    List<ShoppingCartItem> results = new ArrayList<ShoppingCartItem>();
+    results.addAll(this.items.values());
+    return results;
+}
+
+
+
+

All the components contained in the UIData component are bound to the +properties of the cart bean that is bound to the entire UIData +component. For example, here is the h:outputText tag that displays the +book title in the table:

+
+
+
+
<h:commandLink action="#{showcart.details}">
+    <h:outputText value="#{item.item.title}"/>
+</h:commandLink>
+
+
+
+

The title is actually a link to the bookdetails.xhtml page. The +h:outputText tag uses the value expression #{item.item.title} to +bind its UIOutput component to the title property of the Book +entity. The first item in the expression is the ShoppingCartItem +instance that the h:dataTable tag is referencing while rendering the +current row. The second item in expression refers to the item property +of ShoppingCartItem, which returns an Object (in this case, a +Book). The title part of the expression refers to the title +property of Book. The value of the UIOutput component corresponding +to this tag is bound to the title property of the Book entity:

+
+
+
+
private String title;
+...
+public String getTitle() {
+    return title;
+}
+
+public void setTitle(String title) {
+    this.title = title;
+}
+
+
+
+
+

12.2.1.3 UISelectBoolean Properties

+
+

The UISelectBoolean component class is represented by the component +tag h:selectBooleanCheckbox.

+
+
+

Managed bean properties that hold a UISelectBoolean component’s data +must be of boolean or Boolean type. The example +selectBooleanCheckbox tag from the section +Displaying Components for Selecting One +Value binds a component to a property. The following example shows a +tag that binds a component value to a boolean property:

+
+
+
+
<h:selectBooleanCheckbox title="#{bundle.receiveEmails}"
+                         value="#{custFormBean.receiveEmails}">
+</h:selectBooleanCheckbox>
+<h:outputText value="#{bundle.receiveEmails}">
+
+
+
+

Here is an example property that can be bound to the component +represented by the example tag:

+
+
+
+
private boolean receiveEmails = false;
+...
+public void setReceiveEmails(boolean receiveEmails) {
+    this.receiveEmails = receiveEmails;
+}
+public boolean getReceiveEmails() {
+    return receiveEmails;
+}
+
+
+
+
+

12.2.1.4 UISelectMany Properties

+
+

The UISelectMany component class is represented by the component tags +that begin with h:selectMany (for example, h:selectManyCheckbox and +h:selectManyListbox).

+
+
+

Because a UISelectMany component allows a user to select one or more +items from a list of items, this component must map to a bean property +of type List or array. This bean property represents the set of +currently selected items from the list of available items.

+
+
+

The following example of the selectManyCheckbox tag comes from +Displaying Components for Selecting Multiple +Values:

+
+
+
+
<h:selectManyCheckbox id="newslettercheckbox"
+                      layout="pageDirection"
+                      value="#{cashierBean.newsletters}">
+    <f:selectItems value="#{cashierBean.newsletterItems}"/>
+</h:selectManyCheckbox>
+
+
+
+

Here is the bean property that maps to the value of the +selectManyCheckbox tag from the preceding example:

+
+
+
+
private String[] newsletters;
+
+public void setNewsletters(String[] newsletters) {
+    this.newsletters = newsletters;
+}
+public String[] getNewsletters() {
+    return this.newsletters;
+}
+
+
+
+

The UISelectItem and UISelectItems components are used to represent +all the values in a UISelectMany component. See +UISelectItem Properties and UISelectItems +Properties for information on writing the bean properties for the +UISelectItem and UISelectItems components.

+
+
+
+

12.2.1.5 UISelectOne Properties

+
+

The UISelectOne component class is represented by the component tags +that begin with h:selectOne (for example, h:selectOneRadio and +h:selectOneListbox).

+
+
+

UISelectOne properties accept the same types as UIInput and +UIOutput properties, because a UISelectOne component represents the +single selected item from a set of items. This item can be any of the +primitive types and anything else for which you can apply a converter.

+
+
+

Here is an example of the h:selectOneMenu tag from +Displaying a Menu Using the h:selectOneMenu +Tag:

+
+
+
+
<h:selectOneMenu id="shippingOption"
+                 required="true"
+                 value="#{cashierBean.shippingOption}">
+    <f:selectItem itemValue="2"
+                  itemLabel="#{bundle.QuickShip}"/>
+    <f:selectItem itemValue="5"
+                  itemLabel="#{bundle.NormalShip}"/>
+    <f:selectItem itemValue="7"
+                  itemLabel="#{bundle.SaverShip}"/>
+ </h:selectOneMenu>
+
+
+
+

Here is the bean property corresponding to this tag:

+
+
+
+
private String shippingOption = "2";
+
+public void setShippingOption(String shippingOption) {
+    this.shippingOption = shippingOption;
+}
+public String getShippingOption() {
+    return this.shippingOption;
+}
+
+
+
+

Note that shippingOption represents the currently selected item from +the list of items in the UISelectOne component.

+
+
+

The UISelectItem and UISelectItems components are used to represent +all the values in a UISelectOne component. This is explained in +Displaying a Menu Using the h:selectOneMenu +Tag.

+
+
+

For information on how to write the managed bean properties for the +UISelectItem and UISelectItems components, see +UISelectItem Properties and UISelectItems +Properties.

+
+
+
+

12.2.1.6 UISelectItem Properties

+
+

A UISelectItem component represents a single value in a set of values +in a UISelectMany or a UISelectOne component. A UISelectItem +component must be bound to a managed bean property of type +javax.faces.model.SelectItem. A SelectItem object is composed of an +Object representing the value along with two Strings representing +the label and the description of the UISelectItem object.

+
+
+

The example selectOneMenu tag from UISelectOne Properties +contains selectItem tags that set the values of the list of items in +the page. Here is an example of a bean property that can set the values +for this list in the bean:

+
+
+
+
SelectItem itemOne = null;
+
+SelectItem getItemOne(){
+    return itemOne;
+}
+void setItemOne(SelectItem item) {
+    itemOne = item;
+}
+
+
+
+
+

12.2.1.7 UISelectItems Properties

+
+

UISelectItems components are children of UISelectMany and +UISelectOne components. Each UISelectItems component is composed of +a set of either UISelectItem instances or any collection of objects, +such as an array, a list, or even POJOs.

+
+
+

The following code snippet from CashierBean shows how to write the +properties for selectItems tags containing SelectItem instances.

+
+
+
+
private String[] newsletters;
+private static final SelectItem[] newsletterItems = {
+    new SelectItem("Duke's Quarterly"),
+    new SelectItem("Innovator's Almanac"),
+    new SelectItem("Duke's Diet and Exercise Journal"),
+    new SelectItem("Random Ramblings")
+};
+...
+public void setNewsletters(String[] newsletters) {
+    this.newsletters = newsletters;
+}
+
+public String[] getNewsletters() {
+    return this.newsletters;
+}
+
+public SelectItem[] getNewsletterItems() {
+    return newsletterItems;
+}
+
+
+
+

Here, the newsletters property represents the SelectItems object, +whereas the newsletterItems property represents a static array of +SelectItem objects. The SelectItem class has several constructors; +in this example, the first argument is an Object representing the +value of the item, whereas the second argument is a String +representing the label that appears in the UISelectMany component on +the page.

+
+
+
+
+

12.2.2 Writing Properties Bound to Component Instances

+
+

A property bound to a component instance returns and accepts a component +instance rather than a component value. The following components bind a +component instance to a managed bean property:

+
+
+
+
<h:selectBooleanCheckbox id="fanClub"
+                         rendered="false"
+                         binding="#{cashierBean.specialOffer}" />
+<h:outputLabel for="fanClub"
+               rendered="false"
+               binding="#{cashierBean.specialOfferText}"
+               value="#{bundle.DukeFanClub}" />
+</h:outputLabel>
+
+
+
+

The selectBooleanCheckbox tag renders a check box and binds the +fanClub UISelectBoolean component to the specialOffer property of +CashierBean. The outputLabel tag binds the value of the value +attribute, which represents the check box’s label, to the +specialOfferText property of CashierBean. If the user orders more +than $100 worth of books and clicks the Submit button, the submit +method of CashierBean sets both components' rendered properties to +true, causing the check box and label to display when the page is +re-rendered.

+
+
+

Because the components corresponding to the example tags are bound to +the managed bean properties, these properties must match the components' +types. This means that the specialOfferText property must be of type +UIOutput, and the specialOffer property must be of type +UISelectBoolean:

+
+
+
+
UIOutput specialOfferText = null;
+UISelectBoolean specialOffer = null;
+
+public UIOutput getSpecialOfferText() {
+    return this.specialOfferText;
+}
+public void setSpecialOfferText(UIOutput specialOfferText) {
+    this.specialOfferText = specialOfferText;
+}
+
+public UISelectBoolean getSpecialOffer() {
+    return this.specialOffer;
+}
+public void setSpecialOffer(UISelectBoolean specialOffer) {
+    this.specialOffer = specialOffer;
+}
+
+
+
+

For more general information on component binding, see +Managed Beans in JavaServer Faces +Technology.

+
+
+

For information on how to reference a managed bean method that performs +navigation when a button is clicked, see +Referencing a Method That Performs +Navigation.

+
+
+

For more information on writing managed bean methods that handle +navigation, see Writing a Method to Handle +Navigation.

+
+
+
+

12.2.3 Writing Properties Bound to Converters, Listeners, or Validators

+
+

All the standard converter, listener, and validator tags included with +JavaServer Faces technology support binding attributes that allow you to +bind converter, listener, or validator implementations to managed bean +properties.

+
+
+

The following example shows a standard convertDateTime tag using a +value expression with its binding attribute to bind the +javax.faces.convert.DateTimeConverter instance to the convertDate +property of LoginBean:

+
+
+
+
<h:inputText value="#{loginBean.birthDate}">
+    <f:convertDateTime binding="#{loginBean.convertDate}" />
+</h:inputText>
+
+
+
+

The convertDate property must therefore accept and return a +DateTimeConverter object, as shown here:

+
+
+
+
private DateTimeConverter convertDate;
+public DateTimeConverter getConvertDate() {
+       ...
+    return convertDate;
+}
+public void setConvertDate(DateTimeConverter convertDate) {
+    convertDate.setPattern("EEEEEEEE, MMM dd, yyyy");
+    this.convertDate = convertDate;
+}
+
+
+
+

Because the converter is bound to a managed bean property, the managed +bean property can modify the attributes of the converter or add new +functionality to it. In the case of the preceding example, the property +sets the date pattern that the converter uses to parse the user’s input +into a Date object.

+
+
+

The managed bean properties that are bound to validator or listener +implementations are written in the same way and have the same general +purpose.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/jsf-develop003.html b/jsf-develop003.html new file mode 100644 index 0000000..066bbf2 --- /dev/null +++ b/jsf-develop003.html @@ -0,0 +1,380 @@ + + + + + + Writing Managed Bean Methods + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

12.3 Writing Managed Bean Methods

+
+
+

Methods of a managed bean can perform several application-specific +functions for components on the page. These functions include

+
+
+
    +
  • +

    Performing processing associated with navigation

    +
  • +
  • +

    Handling action events

    +
  • +
  • +

    Performing validation on the component’s value

    +
  • +
  • +

    Handling value-change events

    +
  • +
+
+
+

12.3.1 Why Use Managed Beans

+
+

By using a managed bean to perform these functions, you eliminate the +need to implement the javax.faces.validator.Validator interface to +handle the validation or one of the listener interfaces to handle +events. Also, by using a managed bean instead of a Validator +implementation to perform validation, you eliminate the need to create a +custom tag for the Validator implementation.

+
+
+

In general, it is good practice to include these methods in the same +managed bean that defines the properties for the components referencing +these methods. The reason for doing so is that the methods might need to +access the component’s data to determine how to handle the event or to +perform the validation associated with the component.

+
+
+

The following sections explain how to write various types of managed +bean methods.

+
+
+
+

12.3.2 Writing a Method to Handle Navigation

+
+

An action method, a managed bean method that handles navigation +processing, must be a public method that takes no parameters and returns +an Object, which is the logical outcome that the navigation system +uses to determine the page to display next. This method is referenced +using the component tag’s action attribute.

+
+
+

The following action method is from the managed bean CashierBean, +which is invoked when a user clicks the Submit button on the page. If +the user has ordered more than $100 worth of books, this method sets the +rendered properties of the fanClub and specialOffer components to +true, causing them to be displayed on the page the next time that page +is rendered.

+
+
+

After setting the components' rendered properties to true, this +method returns the logical outcome null. This causes the JavaServer +Faces implementation to re-render the page without creating a new view +of the page, retaining the customer’s input. If this method were to +return purchase, which is the logical outcome to use to advance to a +payment page, the page would re-render without retaining the customer’s +input. In this case, you want to re-render the page without clearing the +data.

+
+
+

If the user does not purchase more than $100 worth of books or if the +thankYou component has already been rendered, the method returns +bookreceipt. The JavaServer Faces implementation loads the +bookreceipt.xhtml page after this method returns:

+
+
+
+
public String submit() {
+    ...
+    if ((cart().getTotal()> 100.00) && !specialOffer.isRendered()) {
+        specialOfferText.setRendered(true);
+        specialOffer.setRendered(true);
+        return null;
+    } else if (specialOffer.isRendered() && !thankYou.isRendered()) {
+        thankYou.setRendered(true);
+        return null;
+    } else {
+        ...
+        cart.clear();
+        return ("bookreceipt");
+    }
+}
+
+
+
+

Typically, an action method will return a String outcome, as shown in +the preceding example. Alternatively, you can define an Enum class +that encapsulates all possible outcome strings and then make an action +method return an enum constant, which represents a particular String +outcome defined by the Enum class.

+
+
+

The following example uses an Enum class to encapsulate all logical +outcomes:

+
+
+
+
public enum Navigation  {
+    main, accountHist, accountList, atm, atmAck, transferFunds,
+     transferAck, error
+}
+
+
+
+

When it returns an outcome, an action method uses the dot notation to +reference the outcome from the Enum class:

+
+
+
+
public Object submit(){
+    ...
+    return Navigation.accountHist;
+}
+
+
+
+

The section Referencing a Method That +Performs Navigation explains how a component tag references this +method. The section Writing Properties +Bound to Component Instances explains how to write the bean properties +to which the components are bound.

+
+
+
+

12.3.3 Writing a Method to Handle an Action Event

+
+

A managed bean method that handles an action event must be a public +method that accepts an action event and returns void. This method is +referenced using the component tag’s actionListener attribute. Only +components that implement javax.faces.component.ActionSource can refer +to this method.

+
+
+

In the following example, a method from a managed bean named +ActionBean processes the event of a user clicking one of the links on +the page:

+
+
+
+
public void chooseBookFromLink(ActionEvent event) {
+    String current = event.getComponent().getId();
+    FacesContext context = FacesContext.getCurrentInstance();
+    String bookId = books.get(current);
+    context.getExternalContext().getSessionMap().put("bookId", bookId);
+}
+
+
+
+

This method gets the component that generated the event from the event +object; then it gets the component’s ID, which is a code for the book. +The method matches the code against a HashMap object that contains the +book codes and corresponding book ID values. Finally, the method sets +the book ID by using the selected value from the HashMap object.

+
+
+

Referencing a Method That Handles an +Action Event explains how a component tag references this method.

+
+
+
+

12.3.4 Writing a Method to Perform Validation

+
+

Instead of implementing the javax.faces.validator.Validator interface +to perform validation for a component, you can include a method in a +managed bean to take care of validating input for the component. A +managed bean method that performs validation must accept a +javax.faces.context.FacesContext, the component whose data must be +validated, and the data to be validated, just as the validate method +of the Validator interface does. A component refers to the managed +bean method by using its validator attribute. Only values of UIInput +components or values of components that extend UIInput can be +validated.

+
+
+

Here is an example of a managed bean method that validates user input, +from The guessnumber-cdi CDI +Example:

+
+
+
+
public void validateNumberRange(FacesContext context,
+                                UIComponent toValidate,
+                                Object value) {
+    if (remainingGuesses <= 0) {
+        ((UIInput) toValidate).setValid(false);
+        FacesMessage message = new FacesMessage("No guesses left!");
+        context.addMessage(toValidate.getClientId(context), message);
+        return;
+    }
+
+    int input = (Integer) value;
+    if (input < minimum || input> maximum) {
+        ((UIInput) toValidate).setValid(false);
+
+        FacesMessage message = new FacesMessage("Invalid guess");
+        context.addMessage(toValidate.getClientId(context), message);
+    }
+}
+
+
+
+

The validateNumberRange method performs two different validations.

+
+
+
    +
  • +

    If the user has run out of guesses, the method sets the valid +property of the UIInput component to false. Then it queues a message +onto the FacesContext instance, associating the message with the +component ID, and returns.

    +
  • +
  • +

    If the user has some remaining guesses, the method then retrieves the +local value of the component. If the input value is outside the +allowable range, the method again sets the valid property of the +UIInput component to false, queues a different message on the +FacesContext instance, and returns.

    +
  • +
+
+
+

See Referencing a Method That Performs +Validation for information on how a component tag references this +method.

+
+
+
+

12.3.5 Writing a Method to Handle a Value-Change Event

+
+

A managed bean that handles a value-change event must use a public +method that accepts a value-change event and returns void. This method +is referenced using the component’s valueChangeListener attribute. +This section explains how to write a managed bean method to replace the +javax.faces.event.ValueChangeListener implementation.

+
+
+

The following example tag comes from +Registering a Value-Change Listener on a +Component, where the h:inputText tag with the id of name has a +ValueChangeListener instance registered on it. This +ValueChangeListener instance handles the event of entering a value in +the field corresponding to the component. When the user enters a value, +a value-change event is generated, and the +processValueChange(ValueChangeEvent) method of the +ValueChangeListener class is invoked:

+
+
+
+
<h:inputText id="name"
+             size="30"
+             value="#{cashierBean.name}"
+             required="true"
+             requiredMessage="#{bundle.ReqCustomerName}">
+     <f:valueChangeListener
+         type="javaeetutorial.dukesbookstore.listeners.NameChanged" />
+</h:inputText>
+
+
+
+

Instead of implementing ValueChangeListener, you can write a managed +bean method to handle this event. To do this, you move the +processValueChange(ValueChangeEvent) method from the +ValueChangeListener class, called NameChanged, to your managed bean.

+
+
+

Here is the managed bean method that processes the event of entering a +value in the name field on the page:

+
+
+
+
public void processValueChange(ValueChangeEvent event)
+        throws AbortProcessingException {
+    if (null != event.getNewValue()) {
+        FacesContext.getCurrentInstance().getExternalContext().
+                getSessionMap().put("name", event.getNewValue());
+    }
+}
+
+
+
+

To make this method handle the ValueChangeEvent generated by an input +component, reference this method from the component tag’s +valueChangeListener attribute. See +Referencing a Method That Handles a +Value-Change Event for more information.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/jsf-el.html b/jsf-el.html new file mode 100644 index 0000000..c93f2f8 --- /dev/null +++ b/jsf-el.html @@ -0,0 +1,125 @@ + + + + + + Expression Language + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

9 Expression Language

+
+
+

This chapter introduces the Expression Language (also referred to as the +EL), which provides an important mechanism for enabling the presentation +layer (web pages) to communicate with the application logic (managed +beans). The EL is used by several JavaEE technologies, such as +JavaServer Faces technology, JavaServer Pages (JSP) technology, and +Contexts and Dependency Injection for Java EE (CDI). The EL can also be +used in stand-alone environments. This chapter only covers the use of +the EL in Java EE containers.

+
+
+

The following topics are addressed here:

+
+ +
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/jsf-el001.html b/jsf-el001.html new file mode 100644 index 0000000..8967846 --- /dev/null +++ b/jsf-el001.html @@ -0,0 +1,137 @@ + + + + + + Overview of the EL + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

9.1 Overview of the EL

+
+
+

The EL allows page authors to use simple expressions to dynamically +access data from JavaBeans components. For example, the test attribute +of the following conditional tag is supplied with an EL expression that +compares 0 with the number of items in the session-scoped bean named +cart.

+
+
+
+
<c:if test="${sessionScope.cart.numberOfItems > 0}">
+  ...
+</c:if>
+
+
+
+

See Using the EL to Reference Managed +Beans for more information on how to use the EL in JavaServer Faces +applications.

+
+
+

To summarize, the EL provides a way to use simple expressions to perform +the following tasks:

+
+
+
    +
  • +

    Dynamically read application data stored in JavaBeans components, +various data structures, and implicit objects

    +
  • +
  • +

    Dynamically write data, such as user input into forms, to JavaBeans +components

    +
  • +
  • +

    Invoke arbitrary static and public methods

    +
  • +
  • +

    Dynamically perform arithmetic, boolean, and string operations

    +
  • +
  • +

    Dynamically construct collection objects and perform operations on +collections

    +
  • +
+
+
+

In a JavaServer Faces page, an EL expression can be used either in +static text or in the attribute of a custom tag or standard action.

+
+
+

Finally, the EL provides a pluggable API for resolving expressions so +that custom resolvers that can handle expressions not already supported +by the EL can be implemented.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/jsf-el002.html b/jsf-el002.html new file mode 100644 index 0000000..c6f7f03 --- /dev/null +++ b/jsf-el002.html @@ -0,0 +1,182 @@ + + + + + + Immediate and Deferred Evaluation Syntax + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

9.2 Immediate and Deferred Evaluation Syntax

+
+
+

The EL supports both immediate and deferred evaluation of expressions. +Immediate evaluation means that the expression is evaluated and the +result returned as soon as the page is first rendered. Deferred +evaluation means that the technology using the expression language can +use its own machinery to evaluate the expression sometime later during +the page’s lifecycle, whenever it is appropriate to do so.

+
+
+

Those expressions that are evaluated immediately use the ${} syntax. +Expressions whose evaluation is deferred use the #{} syntax.

+
+
+

Because of its multiphase lifecycle, JavaServer Faces technology uses +mostly deferred evaluation expressions. During the lifecycle, component +events are handled, data is validated, and other tasks are performed in +a particular order. Therefore, a JavaServer Faces implementation must +defer evaluation of expressions until the appropriate point in the +lifecycle.

+
+
+

Other technologies using the EL might have different reasons for using +deferred expressions.

+
+
+

9.2.1 Immediate Evaluation

+
+

All expressions using the ${} syntax are evaluated immediately. These +expressions can appear as part of a template (static) text or as the +value of a tag attribute that can accept runtime expressions.

+
+
+

The following example shows a tag whose value attribute references an +immediate evaluation expression that updates the quantity of books +retrieved from the backing bean named catalog:

+
+
+
+
<h:outputText value="${catalog.bookQuantity}" />
+
+
+
+

The JavaServer Faces implementation evaluates the expression +${catalog.bookQuantity}, converts it, and passes the returned value to +the tag handler. The value is updated on the page.

+
+
+
+

9.2.2 Deferred Evaluation

+
+

Deferred evaluation expressions take the form #{expr} and can be +evaluated at other phases of a page lifecycle as defined by whatever +technology is using the expression. In the case of JavaServer Faces +technology, its controller can evaluate the expression at different +phases of the lifecycle, depending on how the expression is being used +in the page.

+
+
+

The following example shows a JavaServer Faces h:inputText tag, which +represents a field component into which a user enters a value. The +h:inputText tag’s value attribute references a deferred evaluation +expression that points to the name property of the customer bean:

+
+
+
+
<h:inputText id="name" value="#{customer.name}" />
+
+
+
+

For an initial request of the page containing this tag, the JavaServer +Faces implementation evaluates the #{customer.name} expression during +the render-response phase of the lifecycle. During this phase, the +expression merely accesses the value of name from the customer bean, +as is done in immediate evaluation.

+
+
+

For a postback request, the JavaServer Faces implementation evaluates +the expression at different phases of the lifecycle, during which the +value is retrieved from the request, validated, and propagated to the +customer bean.

+
+
+

As shown in this example, deferred evaluation expressions can be

+
+
+
    +
  • +

    Value expressions that can be used to both read and write data

    +
  • +
  • +

    Method expressions

    +
  • +
+
+
+

Value expressions (both immediate and deferred) and method expressions +are explained in the next section.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/jsf-el003.html b/jsf-el003.html new file mode 100644 index 0000000..66c4124 --- /dev/null +++ b/jsf-el003.html @@ -0,0 +1,644 @@ + + + + + + Value and Method Expressions + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

9.3 Value and Method Expressions

+
+
+

The EL defines two kinds of expressions: value expressions and method +expressions. Value expressions can be evaluated to yield a value, and +method expressions are used to reference a method.

+
+
+

The following topics are addressed here:

+
+ +
+

9.3.1 Value Expressions

+
+

Value expressions can be further categorized into rvalue and lvalue +expressions. An lvalue expression can specify a target, such as an +object, a bean property, or elements of a collection, that can be +assigned a value. An rvalue expression cannot specify such a target.

+
+
+

All expressions that are evaluated immediately use the ${} delimiters, +and although the expression can be an lvalue expression, no assignments +will ever happen. Expressions whose evaluation can be deferred use the +#{} delimiters and can act as both rvalue and lvalue expressions; if +the expression is an lvalue expression, it can be assigned a new value. +Consider the following two value expressions:

+
+
+
+
${customer.name}
+
+#{customer.name}
+
+
+
+

The former uses immediate evaluation syntax, whereas the latter uses +deferred evaluation syntax. The first expression accesses the name +property, gets its value, and passes the value to the tag handler. With +the second expression, the tag handler can defer the expression +evaluation to a later time in the page lifecycle if the technology using +this tag allows.

+
+
+

In the case of JavaServer Faces technology, the latter tag’s expression +is evaluated immediately during an initial request for the page. During +a postback request, this expression can be used to set the value of the +name property with user input.

+
+
+

9.3.1.1 Referencing Objects

+
+

A top-level identifier (such as customer in the expression +customer.name) can refer to the following objects:

+
+
+
    +
  • +

    Lambda parameters

    +
  • +
  • +

    EL variables

    +
  • +
  • +

    Managed beans

    +
  • +
  • +

    Implicit objects

    +
  • +
  • +

    Classes of static fields and methods

    +
  • +
+
+
+

To refer to these objects, you write an expression using a variable that +is the name of the object. The following expression references a managed +bean called customer:

+
+
+
+
${customer}
+
+
+
+

You can use a custom EL resolver to alter the way variables are +resolved. For instance, you can provide an EL resolver that intercepts +objects with the name customer, so that ${customer} returns a value +in the EL resolver instead. (JavaServer Faces technology uses an EL +resolver to handle managed beans.)

+
+
+

An enum constant is a special case of a static field, and you can +reference such a constant directly. For example, consider this enum +class:

+
+
+
+
public enum Suit {hearts, spades, diamonds, clubs}
+
+
+
+

In the following expression, in which mySuit is an instance of Suit, +you can compare suit.hearts to the instance:

+
+
+
+
${mySuit == suit.hearts}
+
+
+
+
+

9.3.1.2 Referencing Object Properties or Collection Elements

+
+

To refer to properties of a bean, static fields or methods of a class, +or items of a collection, you use the . or [] notation. The same +syntax can be used for attributes of an implicit object, because +attributes are placed in a map.

+
+
+

To reference the name property of the customer bean, use either the +expression ${customer.name} or the expression ${customer["name"]}. +Here, the part inside the brackets is a String literal that is the +name of the property to reference. The [] syntax is more general than +the . syntax, because the part inside the brackets can be any String +expression, not just literals.

+
+
+

You can use double or single quotes for the String literal. You can +also combine the [] and . notations, as shown here:

+
+
+
+
${customer.address["street"]}
+
+
+
+

You can reference a static field or method using the syntax +classname.field, as in the following example:

+
+
+
+
Boolean.FALSE
+
+
+
+

The classname is the name of the class without the package name. By +default, all the java.lang packages are imported. You can import other +packages, classes, and static fields as needed.

+
+
+

If you are accessing an item in an array or list, you must use the [] +notation and specify an index in the array or list. The index is an +expression that can be converted to int. The following example +references the first of the customer orders, assuming that +customer.orders is a List:

+
+
+
+
${customer.orders[1]}
+
+
+
+

If you are accessing an item in a Map, you must specify the key for +the Map. If the key is a String literal, the dot (.) notation can +be used. Assuming that customer.orders is a Map with a String key, +the following examples reference the item with the key "socks":

+
+
+
+
${customer.orders["socks"]}
+
+${customer.orders.socks}
+
+
+
+
+

9.3.1.3 Referencing Literals

+
+

The EL defines the following literals:

+
+
+
    +
  • +

    Boolean: true and false

    +
  • +
  • +

    Integer: As in Java

    +
  • +
  • +

    Floating-point: As in Java

    +
  • +
  • +

    String: With single and double quotes; " is escaped as \", ' is +escaped as \', and \ is escaped as \\

    +
  • +
  • +

    Null: null

    +
  • +
+
+
+

Here are some examples:

+
+
+
    +
  • +

    ${"literal"}

    +
  • +
  • +

    ${true}

    +
  • +
  • +

    ${57}

    +
  • +
+
+
+
+

9.3.1.4 Parameterized Method Calls

+
+

The EL offers support for parameterized method calls.

+
+
+

Both the . and [] operators can be used for invoking method calls +with parameters, as shown in the following expression syntax:

+
+
+
    +
  • +

    expr-a`[expr-b](parameters)`

    +
  • +
  • +

    expr-a`.identifier-b(parameters)`

    +
  • +
+
+
+

In the first expression syntax, expr-a is evaluated to represent a bean +object. The expression expr-b is evaluated and cast to a string that +represents a method in the bean represented by expr-a. In the second +expression syntax, expr-a is evaluated to represent a bean object, and +identifier-b is a string that represents a method in the bean object. +The parameters in parentheses are the arguments for the method +invocation. Parameters can be zero or more values of expressions, +separated by commas.

+
+
+

Parameters are supported for both value expressions and method +expressions. In the following example, which is a modified tag from the +guessnumber application, a random number is provided as an argument +rather than from user input to the method call:

+
+
+
+
<h:inputText value="#{userNumberBean.userNumber('5')}">
+
+
+
+

The preceding example uses a value expression.

+
+
+

Consider the following example of a JavaServer Faces component tag that +uses a method expression:

+
+
+
+
<h:commandButton action="#{trader.buy}" value="buy"/>
+
+
+
+

The EL expression trader.buy calls the trader bean’s buy method. +You can modify the tag to pass on a parameter. Here is the revised tag +in which a parameter is passed:

+
+
+
+
<h:commandButton action="#{trader.buy('SOMESTOCK')}" value="buy"/>
+
+
+
+

In the preceding example, you are passing the string 'SOMESTOCK' (a +stock symbol) as a parameter to the buy method.

+
+
+
+

9.3.1.5 Where Value Expressions Can Be Used

+
+

Value expressions using the ${} delimiters can be used

+
+
+
    +
  • +

    In static text

    +
  • +
  • +

    In any standard or custom tag attribute that can accept an expression

    +
  • +
+
+
+

The value of an expression in static text is computed and inserted into +the current output. Here is an example of an expression embedded in +static text:

+
+
+
+
<some:tag>
+    some text ${expr} some text
+</some:tag>
+
+
+
+

A tag attribute can be set in the following ways.

+
+
+
    +
  • +

    With a single expression construct:

    +
    +
    +
    <some:tag value="${expr}"/>
    +
    +<another:tag value="#{expr}"/>
    +
    +
    +
    +

    These expressions are evaluated, and the result is converted to the +attribute’s expected type.

    +
    +
  • +
  • +

    With one or more expressions separated or surrounded by text:

    +
    +
    +
    <some:tag value="some${expr}${expr}text${expr}"/>
    +
    +<another:tag value="some#{expr}#{expr}text#{expr}"/>
    +
    +
    +
    +

    These kinds of expression, called composite expressions, are evaluated +from left to right. Each expression embedded in the composite expression +is converted to a String and then concatenated with any intervening +text. The resulting String is then converted to the attribute’s +expected type.

    +
    +
  • +
  • +

    With text only:

    +
    +
    +
    <some:tag value="sometext"/>
    +
    +
    +
    +

    The attribute’s String value is converted to the attribute’s expected +type.

    +
    +
  • +
+
+
+

You can use the string concatenation operator += to create a single +expression from what would otherwise be a composite expression. For +example, you could change the composite expression

+
+
+
+
<some:tag value="sometext ${expr} moretext"/>
+
+
+
+

to

+
+
+
+
<some:tag value="${sometext += expr += moretext}"/>
+
+
+
+

All expressions used to set attribute values are evaluated in the +context of an expected type. If the result of the expression evaluation +does not match the expected type exactly, a type conversion will be +performed. For example, the expression ${1.2E4} provided as the value +of an attribute of type float will result in the following conversion:

+
+
+
+
Float.valueOf("1.2E4").floatValue()
+
+
+
+
+
+

9.3.2 Method Expressions

+
+

Another feature of the EL is its support of deferred method expressions. +A method expression is used to refer to a public method of a bean and +has the same syntax as an lvalue expression.

+
+
+

In JavaServer Faces technology, a component tag represents a component +on a page. The component tag uses method expressions to specify methods +that can be invoked to perform some processing for the component. These +methods are necessary for handling events that the components generate +and for validating component data, as shown in this example:

+
+
+
+
<h:form>
+    <h:inputText id="name"
+                 value="#{customer.name}"
+                 validator="#{customer.validateName}"/>
+    <h:commandButton id="submit"
+                     action="#{customer.submit}" />
+</h:form>
+
+
+
+

The h:inputText tag displays as a field. The validator attribute of +this h:inputText tag references a method, called validateName, in +the bean, called customer.

+
+
+

Because a method can be invoked during different phases of the +lifecycle, method expressions must always use the deferred evaluation +syntax.

+
+
+

Like lvalue expressions, method expressions can use the . and the [] +operators. For example, #{object.method} is equivalent to +#{object["method"]}. The literal inside the [] is converted to +String and is used to find the name of the method that matches it.

+
+
+

Method expressions can be used only in tag attributes and only in the +following ways:

+
+
+
    +
  • +

    With a single expression construct, where bean refers to a JavaBeans +component and method refers to a method of the JavaBeans component:

    +
    +
    +
    <some:tag value="#{bean.method}"/>
    +
    +
    +
    +

    The expression is evaluated to a method expression, which is passed to +the tag handler. The method represented by the method expression can +then be invoked later.

    +
    +
  • +
  • +

    With text only:

    +
    +
    +
    <some:tag value="sometext"/>
    +
    +
    +
    +

    Method expressions support literals primarily to support action +attributes in JavaServer Faces technology. When the method referenced by +this method expression is invoked, the method returns the String +literal, which is then converted to the expected return type, as defined +in the tag’s tag library descriptor.

    +
    +
  • +
+
+
+
+

9.3.3 Lambda Expressions

+
+

A lambda expression is a value expression with parameters. The syntax is +similar to that of the lambda expression in the Java programming +language, except that in the EL, the body of the lambda expression is an +EL expression.

+
+
+

For basic information on lambda expressions, see +http://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html.

+
+
+
+
+
+
+
+ +++ + + + + + +
+

Note:

+
+
+

Lambda expressions are part of Java SE 8, but you can use them in EL +expressions with Java SE 7, the Java version associated with the Java EE +7 platform.

+
+
+
+
+
+
+
+
+

A lambda expression uses the arrow token (->) operator. The +identifiers to the left of the operator are called lambda parameters. +The body, to the right of the operator, must be an EL expression. The +lambda parameters are enclosed in parentheses; the parentheses can be +omitted if there is only one parameter. Here are some examples:

+
+
+
+
x -> x+1
+(x, y) -> x + y
+() -> 64
+
+
+
+

A lambda expression behaves like a function. It can be invoked +immediately. For example, the following invocation evaluates to 7:

+
+
+
+
((x, y) -> x + y)(3, 4)
+
+
+
+

You can use a lambda expression in conjunction with the assignment and +semicolon operators. For example, the following code assigns the +previous lambda expression to a variable and then invokes it. The result +is again 7:

+
+
+
+
v = (x, y) -> x + y; v(3, 4)
+
+
+
+

A lambda expression can also be passed as an argument to a method and be +invoked in the method. It can also be nested in another lambda +expression.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/jsf-el004.html b/jsf-el004.html new file mode 100644 index 0000000..7e7e283 --- /dev/null +++ b/jsf-el004.html @@ -0,0 +1,227 @@ + + + + + + Operations on Collection Objects + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

9.4 Operations on Collection Objects

+
+
+

The EL supports operations on collection objects: sets, lists, and maps. +It allows the dynamic creation of collection objects, which can then be +operated on using streams and pipelines.

+
+
+
+
+
+
+
+ +++ + + + + + +
+

Note:

+
+
+

Like lambda expressions, operations on collection objects are part of +Java SE 8, but you can use them in EL expressions with Java SE 7, the +Java version associated with the Java EE 7 platform.

+
+
+
+
+
+
+
+
+

For example, you can construct a set as follows:

+
+
+
+
{1,2,3}
+
+
+
+

You can construct a list as follows; a list can contain various types of +items:

+
+
+
+
[1,2,3]
+[1, "two", [three,four]]
+
+
+
+

You can construct a map by using a colon to define the entries, as +follows:

+
+
+
+
{"one":1, "two":2, "three":3}
+
+
+
+

You operate on collection objects using method calls to the stream of +elements derived from the collection. Some operations return another +stream, which allows additional operations. Therefore, you can chain +these operations together in a pipeline.

+
+
+

A stream pipeline consists of the following:

+
+
+
    +
  • +

    A source (the Stream object)

    +
  • +
  • +

    Any number of intermediate operations that return a stream (for +example, filter and map)

    +
  • +
  • +

    A terminal operation that does not return a stream (for example, +toList())

    +
  • +
+
+
+

The stream method obtains a Stream from a java.util.Collection or +a Java array. The stream operations do not modify the original +collection object.

+
+
+

For example, you might generate a list of titles of history books as +follows:

+
+
+
+
books.stream().filter(b->b.category == 'history')
+              .map(b->b.title)
+              .toList()
+
+
+
+

The following simpler example returns a sorted version of the original +list:

+
+
+
+
[1,3,5,2].stream().sorted().toList()
+
+
+
+

Streams and stream operations are documented in the Java SE 8 API +documentation, available at http://docs.oracle.com/javase/8/docs/api/. +The following subset of operations is supported by the EL:

+
+
+
+
 +
+`allMatch` +
+`anyMatch` +
+`average` +
+`count` +
+`distinct` +
+`filter` +
+`findFirst` +
+`flatMap` +
+`forEach` +
+`iterator` +
+`limit` +
+`map` +
+`max` +
+`min` +
+`noneMatch` +
+`peek` +
+`reduce` +
+`sorted` +
+`substream` +
+`sum` +
+`toArray` +
+`toList` +
+
+
+
+

See the EL specification at http://www.jcp.org/en/jsr/detail?id=341 +for details on these operations.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/jsf-el005.html b/jsf-el005.html new file mode 100644 index 0000000..208f734 --- /dev/null +++ b/jsf-el005.html @@ -0,0 +1,174 @@ + + + + + + Operators + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

9.5 Operators

+
+
+

In addition to the . and [] operators discussed in +Value and Method Expressions, the EL provides +the following operators, which can be used in rvalue expressions only.

+
+
+
    +
  • +

    Arithmetic: +, - (binary), *, / and div, % and mod, - +(unary).

    +
  • +
  • +

    String concatenation: +=.

    +
  • +
  • +

    Logical: and, &&, or, ||, not, !.

    +
  • +
  • +

    Relational: ==, eq, !=, ne, <, lt, >, gt, <=, ge, +>=, le. Comparisons can be made against other values or against +Boolean, string, integer, or floating-point literals.

    +
  • +
  • +

    Empty: The empty operator is a prefix operation that can be used to +determine whether a value is null or empty.

    +
  • +
  • +

    Conditional: A ? B : C. Evaluate B or C, depending on the result +of the evaluation of A.

    +
  • +
  • +

    Lambda expression: ->, the arrow token.

    +
  • +
  • +

    Assignment: =.

    +
  • +
  • +

    Semicolon: ;.

    +
  • +
+
+
+

The precedence of operators, highest to lowest, left to right, is as +follows:

+
+
+
    +
  • +

    [] .

    +
  • +
  • +

    () (used to change the precedence of operators)

    +
  • +
  • +

    - (unary) not ! empty

    +
  • +
  • +

    * / div % mod

    +
  • +
  • +

    + - (binary)

    +
  • +
  • +

    +=

    +
  • +
  • +

    <> <= >= lt gt le ge

    +
  • +
  • +

    == != eq ne

    +
  • +
  • +

    && and

    +
  • +
  • +

    || or

    +
  • +
  • +

    ? :

    +
  • +
  • +

    ->

    +
  • +
  • +

    =

    +
  • +
  • +

    ;

    +
  • +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/jsf-el006.html b/jsf-el006.html new file mode 100644 index 0000000..509bada --- /dev/null +++ b/jsf-el006.html @@ -0,0 +1,108 @@ + + + + + + Reserved Words + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

9.6 Reserved Words

+
+
+

The following words are reserved for the EL and should not be used as +identifiers:

+
+
+
+
 +
+`and` +
+`or` +
+`not` +
+`eq` +
+`ne` +
+`lt` +
+`gt` +
+`le` +
+`ge` +
+`true` +
+`false` +
+`null` +
+`instanceof` +
+`empty` +
+`div` +
+`mod`
+
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/jsf-el007.html b/jsf-el007.html new file mode 100644 index 0000000..c127c1c --- /dev/null +++ b/jsf-el007.html @@ -0,0 +1,212 @@ + + + + + + Examples of EL Expressions + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

9.7 Examples of EL Expressions

+
+
+

Table 9-1 contains example EL expressions and the result of +evaluating them.

+
+
+

+
+
+

Table 9-1 Example Expressions

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EL ExpressionResult

${1> (4/2)}

false

${4.0>= 3}

true

${100.0 == 100}

true

${(10*10) ne 100}

false

${'a' > 'b'}

false

${'hip' lt 'hit'}

true

${4> 3}

true

${1.2E4 + 1.4}

12001.4

${3 div 4}

0.75

${10 mod 4}

2

${((x, y) -> x + y)(3, 5.5)}

8.5

[1,2,3,4].stream().sum()

10

[1,3,5,2].stream().sorted().toList()

[1, 2, 3, 5]

${!empty param.Add}

False if the request parameter named Add is +null or an empty string

${pageContext.request.contextPath}

The context path

${sessionScope.cart.numberOfItems}

The value of the numberOfItems +property of the session-scoped attribute named cart

${param['mycom.productId']}

The value of the request parameter named +mycom.productId

${header["host"]}

The host

${departments[deptName]}

The value of the entry named deptName in +the departments map

+
+
${requestScope['javax.servlet.forward.servlet_path']}
+
+

The value of the request-scoped attribute named +javax.servlet.forward.servlet_path

#{customer.lName}

Gets the value of the property lName from the +customer bean during an initial request; sets the value of lName +during a postback

#{customer.calcTotal}

The return value of the method calcTotal of +the customer bean

+
+
+
+
+
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/jsf-el008.html b/jsf-el008.html new file mode 100644 index 0000000..ff56dd0 --- /dev/null +++ b/jsf-el008.html @@ -0,0 +1,102 @@ + + + + + + Further Information about the Expression Language + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

9.8 Further Information about the Expression Language

+
+
+

For more information about the EL, see

+
+
+
    +
  • +

    The Expression Language 3.0 specification:

    +
    +

    http://www.jcp.org/en/jsr/detail?id=341

    +
    +
  • +
  • +

    The EL specification website:

    +
    +

    https://java.net/projects/el-spec/

    +
    +
  • +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/jsf-facelets.html b/jsf-facelets.html new file mode 100644 index 0000000..194cebd --- /dev/null +++ b/jsf-facelets.html @@ -0,0 +1,129 @@ + + + + + + Introduction to Facelets + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

8 Introduction to Facelets

+
+
+

The term Facelets refers to the view declaration language for JavaServer +Faces technology. Facelets is a part of the JavaServer Faces +specification and also the preferred presentation technology for +building JavaServer Faces technology–based applications. JavaServer +Pages (JSP) technology, previously used as the presentation technology +for JavaServer Faces, does not support all the new features available in +JavaServer Faces in the Java EE 7 platform. JSP technology is considered +to be a deprecated presentation technology for JavaServer Faces.

+
+
+

The following topics are addressed here:

+
+ +
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/jsf-facelets001.html b/jsf-facelets001.html new file mode 100644 index 0000000..a82b082 --- /dev/null +++ b/jsf-facelets001.html @@ -0,0 +1,302 @@ + + + + + + What Is Facelets? + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

8.1 What Is Facelets?

+
+
+

Facelets is a powerful but lightweight page declaration language that is +used to build JavaServer Faces views using HTML style templates and to +build component trees. Facelets features include the following:

+
+
+
    +
  • +

    Use of XHTML for creating web pages

    +
  • +
  • +

    Support for Facelets tag libraries in addition to JavaServer Faces and +JSTL tag libraries

    +
  • +
  • +

    Support for the Expression Language (EL)

    +
  • +
  • +

    Templating for components and pages

    +
  • +
+
+
+

The advantages of Facelets for large-scale development projects include +the following:

+
+
+
    +
  • +

    Support for code reuse through templating and composite components

    +
  • +
  • +

    Functional extensibility of components and other server-side objects +through customization

    +
  • +
  • +

    Faster compilation time

    +
  • +
  • +

    Compile-time EL validation

    +
  • +
  • +

    High-performance rendering

    +
  • +
+
+
+

In short, the use of Facelets reduces the time and effort that needs to +be spent on development and deployment.

+
+
+

Facelets views are usually created as XHTML pages. JavaServer Faces +implementations support XHTML pages created in conformance with the +XHTML Transitional Document Type Definition (DTD), as listed at +http://www.w3.org/TR/xhtml1/#a_dtd_XHTML-1.0-Transitional. By +convention, web pages built with XHTML have an .xhtml extension.

+
+
+

JavaServer Faces technology supports various tag libraries to add +components to a web page. To support the JavaServer Faces tag library +mechanism, Facelets uses XML namespace declarations. Table +8-1 lists the tag libraries supported by Facelets.

+
+
+

+
+
+

Table 8-1 Tag Libraries Supported by Facelets

+
+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Tag LibraryURIPrefixExampleContents

JavaServer Faces Facelets Tag Library

http://xmlns.jcp.org/jsf/facelets

ui:

+

ui:component

+
+
+

ui:insert

+

Tags for templating

JavaServer Faces HTML Tag Library

http://xmlns.jcp.org/jsf/html

h:

+

h:head

+
+
+

h:body

+
+
+

h:outputText

+
+
+

h:inputText

+

JavaServer Faces component tags for all UIComponent objects

JavaServer Faces Core Tag Library

http://xmlns.jcp.org/jsf/core

f:

+

f:actionListener

+
+
+

f:attribute

+

Tags for JavaServer Faces custom actions that are independent of any +particular render kit

Pass-through Elements Tag Library

http://xmlns.jcp.org/jsf

jsf:

jsf:id

Tags to support HTML5-friendly markup

Pass-through Attributes Tag Library

http://xmlns.jcp.org/jsf/passthrough

p:

p:type

Tags to support +HTML5-friendly markup

Composite Component Tag Library

http://xmlns.jcp.org/jsf/composite

cc:

cc:interface

Tags to support composite components

JSTL Core Tag Library

http://xmlns.jcp.org/jsp/jstl/core

c:

+

c:forEach

+
+
+

c:catch

+

JSTL 1.2 Core Tags

JSTL Functions Tag Library

http://xmlns.jcp.org/jsp/jstl/functions

fn:

+

fn:toUpperCase

+
+
+

fn:toLowerCase

+

JSTL 1.2 Functions Tags

+
+
+
+
+
+
+
+

Facelets provides two namespaces to support HTML5-friendly markup. For +details, see HTML5-Friendly Markup.

+
+
+

Facelets supports tags for composite components, for which you can +declare custom prefixes. For more information on composite components, +see Composite Components.

+
+
+

The namespace prefixes shown in the table are conventional, not +mandatory. As is always the case when you declare an XML namespace, you +can specify any prefix in your Facelets page. For example, you can +declare the prefix for the composite component tag library as

+
+
+
+
xmlns:composite="http://java.sun.com/jsf/composite"
+
+
+
+

instead of as

+
+
+
+
xmlns:cc="http://java.sun.com/jsf/composite"
+
+
+
+

Based on the JavaServer Faces support for Expression Language (EL) +syntax, Facelets uses EL expressions to reference properties and methods +of managed beans. EL expressions can be used to bind component objects +or values to methods or properties of managed beans that are used as +backing beans. For more information on using EL expressions, see +Using the EL to Reference Managed Beans.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/jsf-facelets002.html b/jsf-facelets002.html new file mode 100644 index 0000000..a61c40b --- /dev/null +++ b/jsf-facelets002.html @@ -0,0 +1,136 @@ + + + + + + The Lifecycle of a Facelets Application + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

8.2 The Lifecycle of a Facelets Application

+
+
+

The JavaServer Faces specification defines the lifecycle of a JavaServer +Faces application. For more information on this lifecycle, see +The Lifecycle of a JavaServer Faces +Application. The following steps describe that process as applied to a +Facelets-based application.

+
+
+
    +
  1. +

    When a client, such as a browser, makes a new request to a page that +is created using Facelets, a new component tree or +javax.faces.component.UIViewRoot is created and placed in the +FacesContext.

    +
  2. +
  3. +

    +
    +

    The UIViewRoot is applied to the Facelets, and the view is populated +with components for rendering.

    +
    +
  4. +
  5. +

    The newly built view is rendered back as a response to the client.

    +
  6. +
  7. +

    On rendering, the state of this view is stored for the next request. +The state of input components and form data is stored.

    +
  8. +
  9. +

    The client may interact with the view and request another view or +change from the JavaServer Faces application. At this time, the saved +view is restored from the stored state.

    +
  10. +
  11. +

    The restored view is once again passed through the JavaServer Faces +lifecycle, which eventually will either generate a new view or re-render +the current view if there were no validation problems and no action was +triggered.

    +
  12. +
  13. +

    If the same view is requested, the stored view is rendered once +again.

    +
  14. +
  15. +

    If a new view is requested, then the process described in Step +2 is continued.

    +
  16. +
  17. +

    The new view is then rendered back as a response to the client.

    +
  18. +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/jsf-facelets003.html b/jsf-facelets003.html new file mode 100644 index 0000000..084590d --- /dev/null +++ b/jsf-facelets003.html @@ -0,0 +1,550 @@ + + + + + + Developing a Simple Facelets Application: The guessnumber-jsf Example Application + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

8.3 Developing a Simple Facelets Application: The guessnumber-jsfExample Application

+
+
+

This section describes the general steps involved in developing a +JavaServer Faces application. The following tasks are usually required:

+
+
+
    +
  • +

    Developing the managed beans

    +
  • +
  • +

    Creating the pages using the component tags

    +
  • +
  • +

    Defining page navigation

    +
  • +
  • +

    Mapping the FacesServlet instance

    +
  • +
  • +

    Adding managed bean declarations

    +
  • +
+
+
+

The following topics are addressed here:

+
+ +
+

8.3.1 Creating a Facelets Application

+
+

The example used in this tutorial is the guessnumber-jsf application. +The application presents you with a page that asks you to guess a number +from 0 to 10, validates your input against a random number, and responds +with another page that informs you whether you guessed the number +correctly or incorrectly.

+
+
+

The source code for this application is in the +tut-install`/examples/web/jsf/guessnumber-jsf/` directory.

+
+
+

8.3.1.1 Developing a Managed Bean

+
+

In a typical JavaServer Faces application, each page of the application +connects to a managed bean that serves as a backing bean. The backing +bean defines the methods and properties that are associated with the +components. In this example, both pages use the same backing bean.

+
+
+

The following managed bean class, UserNumberBean.java, generates a +random number from 0 to 10 inclusive:

+
+
+
+
package javaeetutorial.guessnumber;
+
+import java.io.Serializable;
+import java.util.Random;
+import javax.enterprise.context.SessionScoped;
+import javax.inject.Named;
+
+@Named
+@SessionScoped
+public class UserNumberBean implements Serializable {
+
+    private static final long serialVersionUID = 5443351151396868724L;
+    Integer randomInt = null;
+    Integer userNumber = null;
+    String response = null;
+    private int maximum = 10;
+    private int minimum = 0;
+
+    public UserNumberBean() {
+        Random randomGR = new Random();
+        randomInt = new Integer(randomGR.nextInt(maximum + 1));
+        // Print number to server log
+        System.out.println("Duke's number: " + randomInt);
+    }
+
+    public void setUserNumber(Integer user_number) {
+        userNumber = user_number;
+    }
+
+    public Integer getUserNumber() {
+        return userNumber;
+    }
+
+    public String getResponse() {
+        if ((userNumber == null) || (userNumber.compareTo(randomInt) != 0)) {
+            return "Sorry, " + userNumber + " is incorrect.";
+        } else {
+            return "Yay! You got it!";
+        }
+    }
+
+    public int getMaximum() {
+        return (this.maximum);
+    }
+
+    public void setMaximum(int maximum) {
+        this.maximum = maximum;
+    }
+
+    public int getMinimum() {
+        return (this.minimum);
+    }
+
+    public void setMinimum(int minimum) {
+        this.minimum = minimum;
+    }
+}
+
+
+
+

Note the use of the @Named annotation, which makes the managed bean +accessible through the EL. The @SessionScoped annotation registers the +bean scope as session to enable you to make multiple guesses as you +run the application.

+
+
+
+

8.3.1.2 Creating Facelets Views

+
+

To create a page or view, you add components to the pages, wire the +components to backing bean values and properties, and register +converters, validators, or listeners on the components.

+
+
+

For the example application, XHTML web pages serve as the front end. The +first page of the example application is a page called greeting.xhtml. +A closer look at various sections of this web page provides more +information.

+
+
+

The first section of the web page declares the content type for the +page, which is XHTML:

+
+
+
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+
+

The next section specifies the language of the XHTML page and then +declares the XML namespace for the tag libraries that are used in the +web page:

+
+
+
+
<html lang="en"
+      xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:h="http://xmlns.jcp.org/jsf/html"
+      xmlns:f="http://xmlns.jcp.org/jsf/core">
+
+
+
+

The next section uses various tags to insert components into the web +page:

+
+
+
+
    <h:head>
+        <h:outputStylesheet library="css" name="default.css"/>
+        <title>Guess Number Facelets Application</title>
+    </h:head>
+    <h:body>
+        <h:form>
+            <h:graphicImage value="#{resource['images:wave.med.gif']}"
+                            alt="Duke waving his hand"/>
+            <h2>
+                Hi, my name is Duke. I am thinking of a number from
+                #{userNumberBean.minimum} to #{userNumberBean.maximum}.
+                Can you guess it?
+            </h2>
+            <p><h:inputText id="userNo"
+                            title="Enter a number from 0 to 10:"
+                            value="#{userNumberBean.userNumber}">
+                   <f:validateLongRange minimum="#{userNumberBean.minimum}"
+                                        maximum="#{userNumberBean.maximum}"/>
+                </h:inputText>
+                <h:commandButton id="submit" value="Submit"
+                                 action="response"/>
+            </p>
+            <h:message showSummary="true" showDetail="false"
+                       style="color: #d20005;
+                       font-family: 'New Century Schoolbook', serif;
+                       font-style: oblique;
+                       text-decoration: overline"
+                       id="errors1"
+                       for="userNo"/>
+        </h:form>
+    </h:body>
+
+
+
+

Note the use of the following tags:

+
+
+
    +
  • +

    Facelets HTML tags (those beginning with h:) to add components

    +
  • +
  • +

    The Facelets core tag f:validateLongRange to validate the user input

    +
  • +
+
+
+

An h:inputText tag accepts user input and sets the value of the +managed bean property userNumber through the EL expression +#{userNumberBean.userNumber}. The input value is validated for value +range by the JavaServer Faces standard validator tag +f:validateLongRange.

+
+
+

The image file, wave.med.gif, is added to the page as a resource, as +is the style sheet. For more details about the resources facility, see +Web Resources.

+
+
+

An h:commandButton tag with the ID submit starts validation of the +input data when a user clicks the button. Using implicit navigation, the +tag redirects the client to another page, response.xhtml, which shows +the response to your input. The page specifies only response, which by +default causes the server to look for response.xhtml.

+
+
+

You can now create the second page, response.xhtml, with the following +content:

+
+
+
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html lang="en"
+      xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:h="http://xmlns.jcp.org/jsf/html">
+
+    <h:head>
+        <h:outputStylesheet library="css" name="default.css"/>
+        <title>Guess Number Facelets Application</title>
+    </h:head>
+    <h:body>
+        <h:form>
+            <h:graphicImage value="#{resource['images:wave.med.gif']}"
+                            alt="Duke waving his hand"/>
+            <h2>
+                <h:outputText id="result" value="#{userNumberBean.response}"/>
+            </h2>
+            <h:commandButton id="back" value="Back" action="greeting"/>
+        </h:form>
+    </h:body>
+</html>
+
+
+
+

This page also uses implicit navigation, setting the action attribute +for the Back button to send the user to the greeting.xhtml page.

+
+
+
+
+

8.3.2 Configuring the Application

+
+

Configuring a JavaServer Faces application involves mapping the Faces +Servlet in the web deployment descriptor file, such as a web.xml file, +and possibly adding managed bean declarations, navigation rules, and +resource bundle declarations to the application configuration resource +file, faces-config.xml.

+
+
+

If you are using NetBeans IDE, a web deployment descriptor file is +automatically created for you. In such an IDE-created web.xml file, +change the default greeting page, which is index.xhtml, to +greeting.xhtml. Here is an example web.xml file, showing this change +in bold.

+
+
+
+
<?xml version="1.0" encoding="UTF-8"?>
+<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
+  http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
+    <context-param>
+        <param-name>javax.faces.PROJECT_STAGE</param-name>
+        <param-value>Development</param-value>
+    </context-param>
+    <servlet>
+        <servlet-name>Faces Servlet</servlet-name>
+        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
+        <load-on-startup>1</load-on-startup>
+    </servlet>
+    <servlet-mapping>
+        <servlet-name>Faces Servlet</servlet-name>
+        <url-pattern>*.xhtml</url-pattern>
+    </servlet-mapping>
+    <session-config>
+        <session-timeout>
+            30
+        </session-timeout>
+    </session-config>
+    <welcome-file-list>
+        <welcome-file>greeting.xhtml</welcome-file>
+    </welcome-file-list>
+</web-app>
+
+
+
+

Note the use of the context parameter PROJECT_STAGE. This parameter +identifies the status of a JavaServer Faces application in the software +lifecycle.

+
+
+

The stage of an application can affect the behavior of the application. +For example, if the project stage is defined as Development, debugging +information is automatically generated for the user. If not defined by +the user, the default project stage is Production.

+
+
+
+

8.3.3 Running the guessnumber-jsf Facelets Example

+
+

You can use either NetBeans IDE or Maven to build, package, deploy, and +run the guessnumber-jsf example.

+
+
+

The following topics are addressed here:

+
+ +
+

8.3.3.1 To Build, Package, and Deploy the guessnumber-jsf Example Using +NetBeans IDE +^^^^^^^^^^^^^^^^^^^^^^^^^^^^

+
+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    From the File menu, choose Open Project.

    +
  4. +
  5. +

    In the Open Project dialog box, navigate to:

    +
    +
    +
    tut-install/examples/web/jsf
    +
    +
    +
  6. +
  7. +

    Select the guessnumber-jsf folder.

    +
  8. +
  9. +

    Click Open Project.

    +
  10. +
  11. +

    In the Projects tab, right-click the guessnumber-jsf project and +select Build.

    +
    +

    This option builds the example application and deploys it to your +GlassFish Server instance.

    +
    +
  12. +
+
+
+

8.3.3.2 To Build, Package, and Deploy the guessnumber-jsf Example Using +Maven +^^^^^^^^^^^^^^^^^^^^^^^^^^^

+
+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    In a terminal window, go to:

    +
    +
    +
    tut-install/examples/web/jsf/guessnumber-jsf/
    +
    +
    +
  4. +
  5. +

    Enter the following command:

    +
    +
    +
    mvn install
    +
    +
    +
    +

    This command builds and packages the application into a WAR file, +guessnumber-jsf.war, that is located in the target directory. It +then deploys it to the server.

    +
    +
  6. +
+
+
+

8.3.3.3 To Run the guessnumber-jsf Example

+
+
    +
  1. +

    Open a web browser.

    +
  2. +
  3. +

    Enter the following URL in your web browser:

    +
    +
    +
    http://localhost:8080/guessnumber-jsf
    +
    +
    +
  4. +
  5. +

    In the field, enter a number from 0 to 10 and click Submit.

    +
    +

    Another page appears, reporting whether your guess is correct or +incorrect.

    +
    +
  6. +
  7. +

    If you guessed incorrectly, click Back to return to the main page.

    +
    +

    You can continue to guess until you get the correct answer, or you can +look in the server log, where the UserNumberBean constructor displays +the correct answer.

    +
    +
  8. +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+
+ + + \ No newline at end of file diff --git a/jsf-facelets004.html b/jsf-facelets004.html new file mode 100644 index 0000000..596a3cb --- /dev/null +++ b/jsf-facelets004.html @@ -0,0 +1,262 @@ + + + + + + Using Facelets Templates + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

8.4 Using Facelets Templates

+
+
+

JavaServer Faces technology provides the tools to implement user +interfaces that are easy to extend and reuse. Templating is a useful +Facelets feature that allows you to create a page that will act as the +base, or template, for the other pages in an application. By using +templates, you can reuse code and avoid recreating similarly constructed +pages. Templating also helps in maintaining a standard look and feel in +an application with a large number of pages.

+
+
+

Table 8-2 lists Facelets tags that are used for templating +and their respective functionality.

+
+
+

+
+
+

Table 8-2 Facelets Templating Tags

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TagFunction

ui:component

Defines a component that is created and added to the +component tree.

ui:composition

Defines a page composition that optionally uses a +template. Content outside of this tag is ignored.

ui:debug

Defines a debug component that is created and added to the +component tree.

ui:decorate

Similar to the composition tag but does not disregard +content outside this tag.

ui:define

Defines content that is inserted into a page by a +template.

ui:fragment

Similar to the component tag but does not disregard +content outside this tag.

ui:include

Encapsulates and reuses content for multiple pages.

ui:insert

Inserts content into a template.

ui:param

Used to pass parameters to an included file.

ui:repeat

Used as an alternative for loop tags, such as c:forEach +or h:dataTable.

ui:remove

Removes content from a page.

+
+
+
+
+
+
+
+

For more information on Facelets templating tags, see the +oJavaServer Faces Facelets Tag Library documentation.

+
+
+

The Facelets tag library includes the main templating tag ui:insert. A +template page that is created with this tag allows you to define a +default structure for a page. A template page is used as a template for +other pages, usually referred to as client pages.

+
+
+

Here is an example of a template saved as template.xhtml:

+
+
+
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
+      xmlns:h="http://xmlns.jcp.org/jsf/html">
+
+    <h:head>
+        <meta http-equiv="Content-Type"
+              content="text/html; charset=UTF-8" />
+        <h:outputStylesheet library="css" name="default.css"/>
+        <h:outputStylesheet library="css" name="cssLayout.css"/>
+        <title>Facelets Template</title>
+    </h:head>
+
+    <h:body>
+        <div id="top" class="top">
+            <ui:insert name="top">Top Section</ui:insert>
+        </div>
+        <div>
+        <div id="left">
+             <ui:insert name="left">Left Section</ui:insert>
+        </div>
+        <div id="content" class="left_content">
+             <ui:insert name="content">Main Content</ui:insert>
+        </div>
+        </div>
+    </h:body>
+</html>
+
+
+
+

The example page defines an XHTML page that is divided into three +sections: a top section, a left section, and a main section. The +sections have style sheets associated with them. The same structure can +be reused for the other pages of the application.

+
+
+

The client page invokes the template by using the ui:composition tag. +In the following example, a client page named templateclient.xhtml +invokes the template page named template.xhtml from the preceding +example. A client page allows content to be inserted with the help of +the ui:define tag.

+
+
+
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
+      xmlns:h="http://xmlns.jcp.org/jsf/html">
+
+    <h:body>
+        <ui:composition template="./template.xhtml">
+            <ui:define name="top">
+                Welcome to Template Client Page
+            </ui:define>
+
+            <ui:define name="left">
+                <h:outputLabel value="You are in the Left Section"/>
+            </ui:define>
+
+            <ui:define name="content">
+                <h:graphicImage value="#{resource['images:wave.med.gif']}"/>
+                <h:outputText value="You are in the Main Content Section"/>
+            </ui:define>
+        </ui:composition>
+    </h:body>
+</html>
+
+
+
+

You can use NetBeans IDE to create Facelets template and client pages. +For more information on creating these pages, see +https://netbeans.org/kb/docs/web/jsf20-intro.html.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/jsf-facelets005.html b/jsf-facelets005.html new file mode 100644 index 0000000..9f65124 --- /dev/null +++ b/jsf-facelets005.html @@ -0,0 +1,272 @@ + + + + + + Composite Components + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

8.5 Composite Components

+
+
+

JavaServer Faces technology offers the concept of composite components +with Facelets. A composite component is a special type of template that +acts as a component.

+
+
+

Any component is essentially a piece of reusable code that behaves in a +particular way. For example, an input component accepts user input. A +component can also have validators, converters, and listeners attached +to it to perform certain defined actions.

+
+
+

A composite component consists of a collection of markup tags and other +existing components. This reusable, user-created component has a +customized, defined functionality and can have validators, converters, +and listeners attached to it like any other component.

+
+
+

With Facelets, any XHTML page that contains markup tags and other +components can be converted into a composite component. Using the +resources facility, the composite component can be stored in a library +that is available to the application from the defined resources +location.

+
+
+

Table 8-3 lists the most commonly used composite tags and +their functions.

+
+
+

+
+
+

Table 8-3 Composite Component Tags

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TagFunction

composite:interface

Declares the usage contract for a composite +component. The composite component can be used as a single component +whose feature set is the union of the features declared in the usage +contract.

composite:implementation

Defines the implementation of the composite +component. If a composite:interface element appears, there must be a +corresponding composite:implementation.

composite:attribute

Declares an attribute that may be given to an +instance of the composite component in which this tag is declared.

composite:insertChildren

Any child components or template text +within the composite component tag in the using page will be reparented +into the composite component at the point indicated by this tag’s +placement within the composite:implementation section.

composite:valueHolder

Declares that the composite component whose +contract is declared by the composite:interface in which this element +is nested exposes an implementation of ValueHolder suitable for use as +the target of attached objects in the using page.

composite:editableValueHolder

Declares that the composite component +whose contract is declared by the composite:interface in which this +element is nested exposes an implementation of EditableValueHolder +suitable for use as the target of attached objects in the using page.

composite:actionSource

Declares that the composite component whose +contract is declared by the composite:interface in which this element +is nested exposes an implementation of ActionSource2 suitable for use +as the target of attached objects in the using page.

+
+
+
+
+
+
+
+

For more information and a complete list of Facelets composite tags, see +the oJavaServer Faces Facelets Tag Library documentation.

+
+
+

The following example shows a composite component that accepts an email +address as input:

+
+
+
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"
+  xmlns:composite="http://xmlns.jcp.org/jsf/composite"
+  xmlns:h="http://xmlns.jcp.org/jsf/html">
+
+    <h:head>
+        <title>This content will not be displayed</title>
+    </h:head>
+    <h:body>
+        <composite:interface>
+            <composite:attribute name="value" required="false"/>
+        </composite:interface>
+
+        <composite:implementation>
+            <h:outputLabel value="Email id: "></h:outputLabel>
+            <h:inputText value="#{cc.attrs.value}"></h:inputText>
+        </composite:implementation>
+    </h:body>
+</html>
+
+
+
+

Note the use of cc.attrs.value when defining the value of the +inputText component. The word cc in JavaServer Faces is a reserved +word for composite components. The #{cc.attrs.`attribute-name}` +expression is used to access the attributes defined for the composite +component’s interface, which in this case happens to be value.

+
+
+

The preceding example content is stored as a file named email.xhtml in +a folder named resources/emcomp, under the application web root +directory. This directory is considered a library by JavaServer Faces, +and a component can be accessed from such a library. For more +information on resources, see Web +Resources.

+
+
+

The web page that uses this composite component is generally called a +using page. The using page includes a reference to the composite +component, in the xml namespace declarations:

+
+
+
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"
+  xmlns:h="http://xmlns.jcp.org/jsf/html"
+  xmlns:em="http://xmlns.jcp.org/jsf/composite/emcomp">
+
+    <h:head>
+        <title>Using a sample composite component</title>
+    </h:head>
+
+    <body>
+        <h:form>
+            <em:email value="Enter your email id" />
+        </h:form>
+    </body>
+</html>
+
+
+
+

The local composite component library is defined in the xmlns +namespace with the declaration +xmlns:em="http://xmlns.jcp.org/jsf/composite/emcomp". The component +itself is accessed through the em:email tag. The preceding example +content can be stored as a web page named emuserpage.xhtml under the +web root directory. When compiled and deployed on a server, it can be +accessed with the following URL:

+
+
+
+
http://localhost:8080/application-name/emuserpage.xhtml
+
+
+ +
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/jsf-facelets006.html b/jsf-facelets006.html new file mode 100644 index 0000000..1adcfe6 --- /dev/null +++ b/jsf-facelets006.html @@ -0,0 +1,153 @@ + + + + + + Web Resources + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

8.6 Web Resources

+
+
+

Web resources are any software artifacts that the web application +requires for proper rendering, including images, script files, and any +user-created component libraries. Resources must be collected in a +standard location, which can be one of the following.

+
+
+
    +
  • +

    A resource packaged in the web application root must be in a +subdirectory of a resources directory at the web application root: +`resources/`resource-identifier.

    +
  • +
  • +

    A resource packaged in the web application’s classpath must be in a +subdirectory of the META-INF/resources directory within a web +application: `META-INF/resources/`resource-identifier. You can use this +file structure to package resources in a JAR file bundled in the web +application.

    +
  • +
+
+
+

The JavaServer Faces runtime will look for the resources in the +preceding listed locations, in that order.

+
+
+

Resource identifiers are unique strings that conform to the following +format (all on one line):

+
+
+
+
[locale-prefix/][library-name/][library-version/]resource-name[/resource-version]
+
+
+
+

Elements of the resource identifier in brackets ([]) are optional, +indicating that only a resource-name, which is usually a file name, is a +required element. For example, the most common way to specify a style +sheet, image, or script is to use the library and name attributes, +as in the following tag from the guessnumber-jsf example:

+
+
+
+
<h:outputStylesheet library="css" name="default.css"/>
+
+
+
+

This tag specifies that the default.css style sheet is in the +directory web/resources/css.

+
+
+

You can also specify the location of an image using the following +syntax, also from the guessnumber-jsf example:

+
+
+
+
<h:graphicImage value="#{resource['images:wave.med.gif']}"/>
+
+
+
+

This tag specifies that the image named wave.med.gif is in the +directory web/resources/images.

+
+
+

Resources can be considered as a library location. Any artifact, such as +a composite component or a template that is stored in the resources +directory, becomes accessible to the other application components, which +can use it to create a resource instance.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/jsf-facelets007.html b/jsf-facelets007.html new file mode 100644 index 0000000..1fccf03 --- /dev/null +++ b/jsf-facelets007.html @@ -0,0 +1,123 @@ + + + + + + Relocatable Resources + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

8.7 Relocatable Resources

+
+
+

You can place a resource tag in one part of a page and specify that it +be rendered in another part of the page. To do this, you use the +target attribute of a tag that specifies a resource. Acceptable values +for this attribute are as follows.

+
+
+
    +
  • +

    "head" renders the resource in the head element.

    +
  • +
  • +

    "body" renders the resource in the body element.

    +
  • +
  • +

    "form" renders the resource in the form element.

    +
  • +
+
+
+

For example, the following h:outputScript tag is placed within an +h:form element, but it renders the JavaScript in the head element:

+
+
+
+
<h:form>
+    <h:outputScript name="myscript.js" library="mylibrary" target="head"/>
+</h:form>
+
+
+
+

The h:outputStylesheet tag also supports resource relocation, in a +similar way.

+
+
+

Relocatable resources are essential for composite components that use +stylesheets and can also be useful for composite components that use +JavaScript. See The +compositecomponentexample Example Application for an example.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/jsf-facelets008.html b/jsf-facelets008.html new file mode 100644 index 0000000..3ed7463 --- /dev/null +++ b/jsf-facelets008.html @@ -0,0 +1,385 @@ + + + + + + Resource Library Contracts + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

8.8 Resource Library Contracts

+
+
+

Resource library contracts allow you to define a different look and feel +for different parts of one or more applications, instead of either +having to use the same look and feel for all or having to specify a +different look on a page-by-page basis.

+
+
+

To do this, you create a contracts section of your web application. +Within the contracts section, you can specify any number of named +areas, each of which is called a contract. Within each contract you can +specify resources such as template files, stylesheets, JavaScript files, +and images.

+
+
+

For example, you could specify two contracts named c1 and c2, each +of which uses a template and other files:

+
+
+
+
src/main/webapp
+    WEB-INF/
+    contracts
+        c1
+            template.xhtml
+            style.css
+            myImg.gif
+            myJS.js
+        c2
+            template.xhtml
+            style2.css
+            img2.gif
+            JS2.js
+    index.xhtml
+    ...
+
+
+
+

One part of the application can use c1, while another can use c2.

+
+
+

Another way to use contracts is to specify a single contract that +contains multiple templates:

+
+
+
+
src/main/webapp
+    contracts
+        myContract
+            template1.xhtml
+            template2.xhtml
+            style.css
+            img.png
+            img2.png
+
+
+
+

You can package a resource library contract in a JAR file for reuse in +different applications. If you do so, the contracts must be located +under META-INF/contracts. You can then place the JAR file in the +WEB-INF/lib directory of an application. This means that the +application would be organized as follows:

+
+
+
+
src/main/webapp/
+    WEB-INF/lib/myContract.jar
+    ...
+
+
+
+

You can specify the contract usage within an application’s +faces-config.xml file, under the resource-library-contracts element. +You need to use this element only if your application uses more than one +contract, however.

+
+
+

8.8.1 The hello1-rlc Example Application

+
+

The hello1-rlc example modifies the simple hello1 example from +A Web Module That Uses JavaServer Faces +Technology: The hello1 Example to use two resource library contracts. +Each of the two pages in the application uses a different contract.

+
+
+

The managed bean for hello1-rlc, Hello.java, is identical to the one +for hello1 (except that it replaces the @Named and @RequestScoped +annotations with @Model).

+
+
+

The source code for this application is in the +tut-install`/examples/web/jsf/hello1-rlc/` directory.

+
+
+

The following topics are addressed here:

+
+ +
+

8.8.1.1 Configuring the hello1-rlc Example

+
+

The faces-config.xml file for the hello1-rlc example contains the +following elements:

+
+
+
+
<resource-library-contracts>
+    <contract-mapping>
+        <url-pattern>/reply/*</url-pattern>
+        <contracts>reply</contracts>
+    </contract-mapping>
+    <contract-mapping>
+        <url-pattern>*</url-pattern>
+        <contracts>hello</contracts>
+    </contract-mapping>
+</resource-library-contracts>
+
+
+
+

The contract-mapping elements within the resource-library-contracts +element map each contract to a different set of pages within the +application. One contract, named reply, is used for all pages under +the reply area of the application (/reply/*). The other contract, +hello, is used for all other pages in the application (*).

+
+
+

The application is organized as follows:

+
+
+
+
hello1-rlc
+    pom.xml
+    src/main/java/javaeetutorial/hello1rlc/Hello.java
+    src/main/webapp
+        WEB-INF
+            faces-config.xml
+            web.xml
+        contracts
+            hello
+                default.css
+                duke.handsOnHips.gif
+                template.xhtml
+            reply
+                default.css
+                duke.thumbsup.gif
+                template.xhtml
+        reply
+            response.xhtml
+        greeting.xhtml
+
+
+
+

The web.xml file specifies the welcome-file as greeting.xhtml. +Because it is not located under src/main/webapp/reply, this Facelets +page uses the hello contract, whereas +src/main/webapp/reply/response.xhtml uses the reply contract.

+
+
+
+

8.8.1.2 The Facelets Pages for the hello1-rlc Example

+
+

The greeting.xhtml and response.xhtml pages have identical code +calling in their templates:

+
+
+
+
<ui:composition template="/template.xhtml">
+
+
+
+

The template.xhtml files in the hello and reply contracts differ +only in two respects: the placeholder text for the title element +("Hello Template" and "Reply Template") and the graphic that each +specifies.

+
+
+

The default.css stylesheets in the two contracts differ in only one +respect: the background color specified for the body element.

+
+
+

8.8.1.3 To Build, Package, and Deploy the hello1-rlc Example Using +NetBeans IDE +^^^^^^^^^^^^^^^^^^^^^^^^^^^

+
+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    From the File menu, choose Open Project.

    +
  4. +
  5. +

    In the Open Project dialog box, navigate to:

    +
    +
    +
    tut-install/examples/web/jsf
    +
    +
    +
  6. +
  7. +

    Select the hello1-rlc folder.

    +
  8. +
  9. +

    Click Open Project.

    +
  10. +
  11. +

    In the Projects tab, right-click the hello1-rlc project and select +Build.

    +
    +

    This option builds the example application and deploys it to your +GlassFish Server instance.

    +
    +
  12. +
+
+
+
+

8.8.1.4 To Build, Package, and Deploy the hello1-rlc Example Using Maven

+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    In a terminal window, go to:

    +
    +
    +
    tut-install/examples/web/jsf/hello1-rlc/
    +
    +
    +
  4. +
  5. +

    Enter the following command:

    +
    +
    +
    mvn install
    +
    +
    +
    +

    This command builds and packages the application into a WAR file, +hello1-rlc.war, that is located in the target directory. It then +deploys it to your GlassFish Server instance.

    +
    +
  6. +
+
+
+
+

8.8.1.5 To Run the hello1-rlc Example

+
+
    +
  1. +

    Enter the following URL in your web browser:

    +
    +
    +
    http://localhost:8080/hello1-rlc
    +
    +
    +
  2. +
  3. +

    The greeting.xhtml page looks just like the one from hello1 +except for its background color and graphic.

    +
  4. +
  5. +

    In the text field, enter your name and click Submit.

    +
  6. +
  7. +

    The response page also looks just like the one from hello1 except +for its background color and graphic.

    +
    +

    The page displays the name you submitted. Click Back to return to the +greeting.xhtml page.

    +
    +
  8. +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+
+ + + \ No newline at end of file diff --git a/jsf-facelets009.html b/jsf-facelets009.html new file mode 100644 index 0000000..d8640c8 --- /dev/null +++ b/jsf-facelets009.html @@ -0,0 +1,727 @@ + + + + + + HTML5-Friendly Markup + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

8.9 HTML5-Friendly Markup

+
+
+

When you want to produce user interface features for which HTML does not +have its own elements, you can create a custom JavaServer Faces +component and insert it in your Facelets page. This mechanism can cause +a simple element to create complex web code. However, creating such a +component is a significant task (see Chapter +15, "Creating Custom UI Components and Other Custom Objects").

+
+
+

HTML5 offers new elements and attributes that can make it unnecessary to +write your own components. It also provides many new capabilities for +existing components. JavaServer Faces technology supports HTML5 not by +introducing new UI components that imitate HTML5 ones but by allowing +you to use HTML5 markup directly. It also allows you to use JavaServer +Faces attributes within HTML5 elements. JavaServer Faces technology +support for HTML5 falls into two categories:

+
+
+
    +
  • +

    Pass-through elements

    +
  • +
  • +

    Pass-through attributes

    +
  • +
+
+
+

The effect of the HTML5-friendly markup feature is to offer the Facelets +page author almost complete control over the rendered page output, +rather than having to pass this control off to component authors. You +can mix and match JavaServer Faces and HTML5 components and elements as +you see fit.

+
+
+

8.9.1 Using Pass-Through Elements

+
+

Pass-through elements allow you to use HTML5 tags and attributes but to +treat them as equivalent to JavaServer Faces components associated with +a server-side UIComponent instance.

+
+
+

To make an element that is not a JavaServer Faces element a pass-through +element, specify at least one of its attributes using the +http://xmlns.jcp.org/jsf namespace. For example, the following code +declares the namespace with the short name jsf:

+
+
+
+
<html ... xmlns:jsf="http://xmlns.jcp.org/jsf"
+...
+    <input type="email" jsf:id="email" name="email"
+           value="#{reservationBean.email}" required="required"/>
+
+
+
+

Here, the jsf prefix is placed on the id attribute so that the HTML5 +input tag’s attributes are treated as part of the Facelets page. This +means that, for example, you can use EL expressions to retrieve managed +bean properties.

+
+
+

Table 8-4 shows how pass-through elements are rendered +as Facelets tags. The JSF implementation uses the element name and the +identifying attribute to determine the corresponding Facelets tag that +will be used in the server-side processing. The browser, however, +interprets the markup that the page author has written.

+
+
+

+
+
+

Table 8-4 How Facelets Renders HTML5 Elements

+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
HTML5 Element NameIdentifying AttributeFacelets Tag

a

jsf:action

h:commandLink

a

jsf:actionListener

h:commandLink

a

jsf:value

h:outputLink

a

jsf:outcome

h:link

body

+

h:body

button

+

h:commandButton

button

jsf:outcome

h:button

form

+

h:form

head

+

h:head

img

+

h:graphicImage

input

type="button"

h:commandButton

input

type="checkbox"

h:selectBooleanCheckbox

input

type="color"

h:inputText

input

type="date"

h:inputText

input

type="datetime"

h:inputText

input

type="datetime-local"

h:inputText

input

type="email"

h:inputText

input

type="month"

h:inputText

input

type="number"

h:inputText

input

type="range"

h:inputText

input

type="search"

h:inputText

input

type="time"

h:inputText

input

type="url"

h:inputText

input

type="week"

h:inputText

input

type="file"

h:inputFile

input

type="hidden"

h:inputHidden

input

type="password"

h:inputSecret

input

type="reset"

h:commandButton

input

type="submit"

h:commandButton

input

type="*"

h:inputText

label

+

h:outputLabel

link

+

h:outputStylesheet

script

+

h:outputScript

select

multiple="*"

h:selectManyListbox

select

+

h:selectOneListbox

textarea

+

h:inputTextArea

+
+
+
+
+
+
+
+
+

8.9.2 Using Pass-Through Attributes

+
+

Pass-through attributes are the converse of pass-through elements. They +allow you to pass attributes that are not JavaServer Faces attributes +through to the browser without interpretation. If you specify a +pass-through attribute in a JavaServer Faces UIComponent, the +attribute name and value are passed straight through to the browser +without being interpreted by JavaServer Faces components or renderers. +There are several ways to specify pass-through attributes.

+
+
+
    +
  • +

    Use the JavaServer Faces namespace for pass-through attributes to +prefix the attribute names within a JavaServer Faces component. For +example, the following code declares the namespace with the short name +p, then passes the type, min, max, required, and title +attributes through to the HTML5 input component:

    +
    +
    +
    <html ... xmlns:p="http://xmlns.jcp.org/jsf/passthrough"
    +...
    +
    +<h:form prependId="false">
    +<h:inputText id="nights" p:type="number" value="#{bean.nights}"
    +             p:min="1" p:max="30" p:required="required"
    +             p:title="Enter a number between 1 and 30 inclusive.">
    +        ...
    +
    +
    +
    +

    This will cause the following markup to be rendered (assuming that +bean.nights has a default value set to 1):

    +
    +
    +
    +
    <input id="nights" type="number" value="1" min="1" max="30"
    +       required="required"
    +       title="Enter a number between 1 and 30 inclusive.">
    +
    +
    +
  • +
  • +

    To pass a single attribute, nest the f:passThroughAttribute tag +within a component tag. For example:

    +
    +
    +
    <h:inputText value="#{user.email}">
    +    <f:passThroughAttribute name="type" value="email" />
    +</h:inputText>
    +
    +
    +
    +

    This code would be rendered similarly to the following:

    +
    +
    +
    +
    <input value="me@me.com" type="email" />
    +
    +
    +
  • +
  • +

    To pass a group of attributes, nest the f:passThroughAttributes tag +within a component tag, specifying an EL value that must evaluate to a +Map<String, Object>. For example:

    +
    +
    +
    <h:inputText value="#{bean.nights">
    +    <f:passThroughAttributes value="#{bean.nameValuePairs}" />
    +</h:inputText>
    +
    +
    +
    +

    If the bean used the following Map declaration and initialized the map +in the constructor as follows, the markup would be similar to the output +of the code that uses the pass-through attribute namespace:

    +
    +
    +
    +
    private Map<String, Object> nameValuePairs;
    +...
    +public Bean() {
    +    this.nameValuePairs = new HashMap<>();
    +    this.nameValuePairs.put("type", "number");
    +    this.nameValuePairs.put("min", "1");
    +    this.nameValuePairs.put("max", "30");
    +    this.nameValuePairs.put("required", "required");
    +    this.nameValuePairs.put("title",
    +            "Enter a number between 1 and 4 inclusive.");
    +}
    +
    +
    +
  • +
+
+
+
+

8.9.3 The reservation Example Application

+
+

The reservation example application provides a set of HTML5 input +elements of various types to simulate purchasing tickets for a +theatrical event. It consists of two Facelets pages, reservation.xhtml +and confirmation.xhtml, and a backing bean, ReservationBean.java. +The pages use both pass-through attributes and pass-through elements.

+
+
+

The source code for this application is in the +tut-install`/examples/web/jsf/reservation/` directory.

+
+
+

The following topics are addressed here:

+
+ +
+

8.9.3.1 The Facelets Pages for the reservation Application

+
+

The first important feature of the Facelets pages for the reservation +application is the DOCTYPE header. Most Facelets pages in JavaServer +Faces applications refer to the XHTML DTD. The facelets pages for this +application begin simply with the following DOCTYPE header, which +indicates an HTML5 page:

+
+
+
+
<!DOCTYPE html>
+
+
+
+

The namespace declarations in the html element of the +reservation.xhtml page specify both the jsf and the passthrough +namespaces:

+
+
+
+
<html lang="en"
+      xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:f="http://xmlns.jcp.org/jsf/core"
+      xmlns:h="http://xmlns.jcp.org/jsf/html"
+      xmlns:p="http://xmlns.jcp.org/jsf/passthrough"
+      xmlns:jsf="http://xmlns.jcp.org/jsf">
+
+
+
+

Next, an empty h:head tag followed by an h:outputStylesheet tag +within the h:body tag illustrates the use of a relocatable resource +(as described in Relocatable +Resources):

+
+
+
+
<h:head>
+</h:head>
+<h:body>
+    <h:outputStylesheet name="css/stylesheet.css" target="head"/>
+
+
+
+

The reservation.xhtml page uses pass-through elements for most of the +form fields on the page. This allows it to use some HTML5-specific +input element types, such as date and email. For example, the +following element renders both a date format and a calendar from which +you can choose a date. The jsf prefix on the id attribute makes the +element a pass-through one:

+
+
+
+
    <input type="date" jsf:id="date" name="date"
+           value="#{reservationBean.date}" required="required"
+           title="Enter or choose a date."/>
+
+
+
+

The field for the number of tickets, however, uses the +h:passThroughAttributes tag to pass a Map defined in the managed +bean. It also recalculates the total in response to a change in the +field:

+
+
+
+
    <h:inputText id="tickets" value="#{reservationBean.tickets}">
+        <f:passThroughAttributes value="#{reservationBean.ticketAttrs}"/>
+        <f:ajax event="change" render="total"
+                listener="#{reservationBean.calculateTotal}"/>
+    </h:inputText>
+
+
+
+

The field for the price specifies the number type as a pass-through +attribute of the h:inputText element, offering a range of four ticket +prices. Here, the p prefix on the HTML5 attributes passes them through +to the browser uninterpreted by the JavaServer Faces input component:

+
+
+
+
    <h:inputText id="price" p:type="number"
+                 value="#{reservationBean.price}"
+                 p:min="80" p:max="120"
+                 p:step="20" p:required="required"
+                 p:title="Enter a price: 80, 100, 120, or 140.">
+        <f:ajax event="change" render="total"
+                listener="#{reservationBean.calculateTotal}"/>
+    </h:inputText>
+
+
+
+

The output of the calculateTotal method that is specified as the +listener for the Ajax event is rendered in the output element whose id +and name value is total. See Chapter 13, +"Using Ajax with JavaServer Faces Technology", for more information.

+
+
+

The second Facelets page, confirmation.xhtml, uses a pass-through +output element to display the values entered by the user and provides +a Facelets h:commandButton tag to allow the user to return to the +reservation.xhtml page.

+
+
+
+

8.9.3.2 The Managed Bean for the reservation Application

+
+

The session-scoped managed bean for the reservation application, +ReservationBean.java, contains properties for all the elements on the +Facelets pages. It also contains two methods, calculateTotal and +clear, that act as listeners for Ajax events on the +reservation.xhtml page.

+
+
+

8.9.3.3 To Build, Package, and Deploy the reservation Example Using +NetBeans IDE +^^^^^^^^^^^^^^^^^^^^^^^^^^^^

+
+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    From the File menu, choose Open Project.

    +
  4. +
  5. +

    In the Open Project dialog box, navigate to:

    +
    +
    +
    tut-install/examples/web/jsf
    +
    +
    +
  6. +
  7. +

    Select the reservation folder.

    +
  8. +
  9. +

    Click Open Project.

    +
  10. +
  11. +

    In the Projects tab, right-click the reservation project and +select Build.

    +
    +

    This option builds the example application and deploys it to your +GlassFish Server instance.

    +
    +
  12. +
+
+
+

8.9.3.4 To Build, Package, and Deploy the reservation Example Using +Maven +^^^^^^^^^^^^^^^^^^^^^^^^^

+
+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    In a terminal window, go to:

    +
    +
    +
    tut-install/examples/web/jsf/reservation/
    +
    +
    +
  4. +
  5. +

    Enter the following command:

    +
    +
    +
    mvn install
    +
    +
    +
    +

    This command builds and packages the application into a WAR file, +reservation.war, that is located in the target directory. It then +deploys the WAR file to your GlassFish Server instance.

    +
    +
  6. +
+
+
+
+

8.9.3.5 To Run the reservation Example

+
+

At the time of the publication of this tutorial, the browser that most +fully implements HTML5 is Google Chrome, and it is recommended that you +use it to run this example. Other browsers are catching up, however, and +may work equally well by the time you read this.

+
+
+
    +
  1. +

    Enter the following URL in your web browser:

    +
    +
    +
    http://localhost:8080/reservation
    +
    +
    +
  2. +
  3. +

    Enter information in the fields of the reservation.xhtml page.

    +
    +

    The Performance Date field has a date field with up and down arrows that +allow you to increment and decrement the month, day, and year as well as +a larger down arrow that brings up a date editor in calendar form.

    +
    +
    +

    The Number of Tickets and Ticket Price fields also have up and down +arrows that allow you to increment and decrement the values within the +allowed range and steps. The Estimated Total changes when you change +either of these two fields.

    +
    +
    +

    Email addresses and dates are checked for format, but not for validity +(you can make a reservation for a past date, for instance).

    +
    +
  4. +
  5. +

    Click Make Reservation to complete the reservation or Clear to +restore the fields to their default values.

    +
  6. +
  7. +

    If you click Make Reservation, the confirmation.xhtml page +appears, displaying the submitted values.

    +
    +

    Click Back to return to the reservation.xhtml page.

    +
    +
  8. +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+
+ + + \ No newline at end of file diff --git a/jsf-intro.html b/jsf-intro.html new file mode 100644 index 0000000..6f0088c --- /dev/null +++ b/jsf-intro.html @@ -0,0 +1,124 @@ + + + + + + JavaServer Faces Technology + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

7 JavaServer Faces Technology

+ +
+ + + \ No newline at end of file diff --git a/jsf-intro001.html b/jsf-intro001.html new file mode 100644 index 0000000..d1a3ca5 --- /dev/null +++ b/jsf-intro001.html @@ -0,0 +1,139 @@ + + + + + + Introduction to JavaServer Faces Technology + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

7.1 Introduction to JavaServer Faces Technology

+
+
+

JavaServer Faces technology consists of the following:

+
+
+
    +
  • +

    An API for representing components and managing their state; handling +events, server-side validation, and data conversion; defining page +navigation; supporting internationalization and accessibility; and +providing extensibility for all these features

    +
  • +
  • +

    Tag libraries for adding components to web pages and for connecting +components to server-side objects

    +
  • +
+
+
+

JavaServer Faces technology provides a well-defined programming model +and various tag libraries. The tag libraries contain tag handlers that +implement the component tags. These features significantly ease the +burden of building and maintaining web applications with server-side +user interfaces (UIs). With minimal effort, you can complete the +following tasks.

+
+
+
    +
  • +

    Create a web page.

    +
  • +
  • +

    Drop components onto a web page by adding component tags.

    +
  • +
  • +

    Bind components on a page to server-side data.

    +
  • +
  • +

    Wire component-generated events to server-side application code.

    +
  • +
  • +

    Save and restore application state beyond the life of server requests.

    +
  • +
  • +

    Reuse and extend components through customization.

    +
  • +
+
+
+

This chapter provides an overview of JavaServer Faces technology. After +explaining what a JavaServer Faces application is and reviewing some of +the primary benefits of using JavaServer Faces technology, this chapter +describes the process of creating a simple JavaServer Faces application. +This chapter also introduces the JavaServer Faces lifecycle by +describing the example JavaServer Faces application and its progression +through the lifecycle stages.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/jsf-intro002.html b/jsf-intro002.html new file mode 100644 index 0000000..27d20c2 --- /dev/null +++ b/jsf-intro002.html @@ -0,0 +1,162 @@ + + + + + + What Is a JavaServer Faces Application? + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

7.2 What Is a JavaServer Faces Application?

+
+
+

The functionality provided by a JavaServer Faces application is similar +to that of any other Java web application. A typical JavaServer Faces +application includes the following parts.

+
+
+
    +
  • +

    A set of web pages in which components are laid out.

    +
  • +
  • +

    A set of tags to add components to the web page.

    +
  • +
  • +

    A set of managed beans, which are lightweight, container-managed +objects (POJOs). In a JavaServer Faces application, managed beans serve +as backing beans, which define properties and functions for UI +components on a page.

    +
  • +
  • +

    A web deployment descriptor (web.xml file).

    +
  • +
  • +

    Optionally, one or more application configuration resource files, such +as a faces-config.xml file, which can be used to define page +navigation rules and configure beans and other custom objects, such as +custom components.

    +
  • +
  • +

    Optionally, a set of custom objects, which can include custom +components, validators, converters, or listeners, created by the +application developer.

    +
  • +
  • +

    Optionally, a set of custom tags for representing custom objects on +the page.

    +
  • +
+
+
+

Figure 7-1 shows the interaction between client and server +in a typical JavaServer Faces application. In response to a client +request, a web page is rendered by the web container that implements +JavaServer Faces technology.

+
+
+

Figure 7-1 Responding to a Client Request for a JavaServer Faces Page

+
+ +
+

The web page, myfacelet.xhtml, is built using JavaServer Faces +component tags. Component tags are used to add components to the view +(represented by myView in the diagram), which is the server-side +representation of the page. In addition to components, the web page can +also reference objects, such as the following:

+
+
+
    +
  • +

    Any event listeners, validators, and converters that are registered on +the components

    +
  • +
  • +

    The JavaBeans components that capture the data and process the +application-specific functionality of the components

    +
  • +
+
+
+

On request from the client, the view is rendered as a response. +Rendering is the process whereby, based on the server-side view, the web +container generates output, such as HTML or XHTML, that can be read by +the client, such as a browser.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/jsf-intro003.html b/jsf-intro003.html new file mode 100644 index 0000000..96ea98c --- /dev/null +++ b/jsf-intro003.html @@ -0,0 +1,154 @@ + + + + + + JavaServer Faces Technology Benefits + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

7.3 JavaServer Faces Technology Benefits

+
+
+

One of the greatest advantages of JavaServer Faces technology is that it +offers a clean separation between behavior and presentation for web +applications. A JavaServer Faces application can map HTTP requests to +component-specific event handling and manage components as stateful +objects on the server. JavaServer Faces technology allows you to build +web applications that implement the finer-grained separation of behavior +and presentation that is traditionally offered by client-side UI +architectures.

+
+
+

The separation of logic from presentation also allows each member of a +web application development team to focus on a single piece of the +development process and provides a simple programming model to link the +pieces. For example, page authors with no programming expertise can use +JavaServer Faces technology tags in a web page to link to server-side +objects without writing any scripts.

+
+
+

Another important goal of JavaServer Faces technology is to leverage +familiar component and web-tier concepts without limiting you to a +particular scripting technology or markup language. JavaServer Faces +technology APIs are layered directly on top of the Servlet API, as shown +in Figure 7-2.

+
+
+

Figure 7-2 Java Web Application Technologies

+
+ +
+

This layering of APIs enables several important application use cases, +such as using different presentation technologies, creating your own +custom components directly from the component classes, and generating +output for various client devices.

+
+
+

Facelets technology, available as part of JavaServer Faces technology, +is the preferred presentation technology for building JavaServer Faces +technology–based web applications. For more information on Facelets +technology features, see Chapter 8, +"Introduction to Facelets".

+
+
+

Facelets technology offers several advantages.

+
+
+
    +
  • +

    Code can be reused and extended for components through the templating +and composite component features.

    +
  • +
  • +

    You can use annotations to automatically register the managed bean as +a resource available for JavaServer Faces applications. In addition, +implicit navigation rules allow developers to quickly configure page +navigation (see Navigation Model for +details). These features reduce the manual configuration process for +applications.

    +
  • +
  • +

    Most important, JavaServer Faces technology provides a rich +architecture for managing component state, processing component data, +validating user input, and handling events.

    +
  • +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/jsf-intro004.html b/jsf-intro004.html new file mode 100644 index 0000000..93f694a --- /dev/null +++ b/jsf-intro004.html @@ -0,0 +1,216 @@ + + + + + + A Simple JavaServer Faces Application + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

7.4 A Simple JavaServer Faces Application

+
+
+

JavaServer Faces technology provides an easy and user-friendly process +for creating web applications. Developing a simple JavaServer Faces +application typically requires the following tasks, which have already +been described in A Web Module That Uses +JavaServer Faces Technology: The hello1 Example:

+
+
+
    +
  • +

    Creating web pages using component tags

    +
  • +
  • +

    Developing managed beans

    +
  • +
  • +

    Mapping the FacesServlet instance

    +
  • +
+
+
+

The hello1 example includes a managed bean and two Facelets web pages. +When accessed by a client, the first web page asks the user for his or +her name, and the second page responds by providing a greeting.

+
+
+

For details on Facelets technology, see +Chapter 8, "Introduction to Facelets". For +details on using EL expressions, see Chapter 9, +"Expression Language". For details on the JavaServer Faces programming +model and building web pages using JavaServer Faces technology, see +Chapter 10, "Using JavaServer Faces Technology +in Web Pages".

+
+
+

Every web application has a lifecycle. Common tasks, such as handling +incoming requests, decoding parameters, modifying and saving state, and +rendering web pages to the browser, are all performed during a web +application lifecycle. Some web application frameworks hide the details +of the lifecycle from you, whereas others require you to manage them +manually.

+
+
+

By default, JavaServer Faces automatically handles most of the lifecycle +actions for you. However, it also exposes the various stages of the +request lifecycle so that you can modify or perform different actions if +your application requirements warrant it.

+
+
+

The lifecycle of a JavaServer Faces application starts and ends with the +following activity: The client makes a request for the web page, and the +server responds with the page. The lifecycle consists of two main +phases: Execute and Render.

+
+
+

During the Execute phase, several actions can take place.

+
+
+
    +
  • +

    The application view is built or restored.

    +
  • +
  • +

    The request parameter values are applied.

    +
  • +
  • +

    Conversions and validations are performed for component values.

    +
  • +
  • +

    Managed beans are updated with component values.

    +
  • +
  • +

    Application logic is invoked.

    +
  • +
+
+
+

For a first (initial) request, only the view is built. For subsequent +(postback) requests, some or all of the other actions can take place.

+
+
+

In the Render phase, the requested view is rendered as a response to the +client. Rendering is typically the process of generating output, such as +HTML or XHTML, that can be read by the client, usually a browser.

+
+
+

The following short description of the example JavaServer Faces +application passing through its lifecycle summarizes the activity that +takes place behind the scenes.

+
+
+

The hello1 example application goes through the following stages when +it is deployed on GlassFish Server.

+
+
+
    +
  1. +

    When the hello1 application is built and deployed on GlassFish +Server, the application is in an uninitiated state.

    +
  2. +
  3. +

    When a client makes an initial request for the index.xhtml web +page, the hello1 Facelets application is compiled.

    +
  4. +
  5. +

    The compiled Facelets application is executed, and a new component +tree is constructed for the hello1 application and placed in a +FacesContext.

    +
  6. +
  7. +

    The component tree is populated with the component and the managed +bean property associated with it, represented by the EL expression +hello.name.

    +
  8. +
  9. +

    A new view is built, based on the component tree.

    +
  10. +
  11. +

    The view is rendered to the requesting client as a response.

    +
  12. +
  13. +

    The component tree is destroyed automatically.

    +
  14. +
  15. +

    On subsequent (postback) requests, the component tree is rebuilt, +and the saved state is applied.

    +
  16. +
+
+
+

For full details on the lifecycle, see The +Lifecycle of a JavaServer Faces Application.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/jsf-intro005.html b/jsf-intro005.html new file mode 100644 index 0000000..51f8276 --- /dev/null +++ b/jsf-intro005.html @@ -0,0 +1,588 @@ + + + + + + User Interface Component Model + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

7.5 User Interface Component Model

+
+
+

In addition to the lifecycle description, an overview of JavaServer +Faces architecture provides better understanding of the technology.

+
+
+

JavaServer Faces components are the building blocks of a JavaServer +Faces view. A component can be a user interface (UI) component or a +non-UI component.

+
+
+

JavaServer Faces UI components are configurable, reusable elements that +compose the user interfaces of JavaServer Faces applications. A +component can be simple, such as a button, or can be compound, such as a +table composed of multiple components.

+
+
+

JavaServer Faces technology provides a rich, flexible component +architecture that includes the following:

+
+
+
    +
  • +

    A set of javax.faces.component.UIComponent classes for specifying +the state and behavior of UI components

    +
  • +
  • +

    A rendering model that defines how to render the components in various +ways

    +
  • +
  • +

    A conversion model that defines how to register data converters onto a +component

    +
  • +
  • +

    An event and listener model that defines how to handle component +events

    +
  • +
  • +

    A validation model that defines how to register validators onto a +component

    +
  • +
+
+
+

This section briefly describes each of these pieces of the component +architecture.

+
+
+

7.5.1 User Interface Component Classes

+
+

JavaServer Faces technology provides a set of UI component classes and +associated behavioral interfaces that specify all the UI component +functionality, such as holding component state, maintaining a reference +to objects, and driving event handling and rendering for a set of +standard components.

+
+
+

The component classes are completely extensible, allowing component +writers to create their own custom components. See +Chapter 15, "Creating Custom UI Components and +Other Custom Objects" for more information.

+
+
+

The abstract base class for all components is +javax.faces.component.UIComponent. JavaServer Faces UI component +classes extend the UIComponentBase class (a subclass of +UIComponent), which defines the default state and behavior of a +component. The following set of component classes is included with +JavaServer Faces technology.

+
+
+
    +
  • +

    UIColumn: Represents a single column of data in a UIData +component.

    +
  • +
  • +

    UICommand: Represents a control that fires actions when activated.

    +
  • +
  • +

    UIData: Represents a data binding to a collection of data +represented by a javax.faces.model.DataModel instance.

    +
  • +
  • +

    UIForm: Represents an input form to be presented to the user. Its +child components represent (among other things) the input fields to be +included when the form is submitted. This component is analogous to the +form tag in HTML.

    +
  • +
  • +

    UIGraphic: Displays an image.

    +
  • +
  • +

    UIInput: Takes data input from a user. This class is a subclass of +UIOutput.

    +
  • +
  • +

    UIMessage: Displays a localized error message.

    +
  • +
  • +

    UIMessages: Displays a set of localized error messages.

    +
  • +
  • +

    UIOutcomeTarget: Displays a link in the form of a link or a button.

    +
  • +
  • +

    UIOutput: Displays data output on a page.

    +
  • +
  • +

    UIPanel: Manages the layout of its child components.

    +
  • +
  • +

    UIParameter: Represents substitution parameters.

    +
  • +
  • +

    UISelectBoolean: Allows a user to set a boolean value on a control +by selecting or deselecting it. This class is a subclass of the +UIInput class.

    +
  • +
  • +

    UISelectItem: Represents a single item in a set of items.

    +
  • +
  • +

    UISelectItems: Represents an entire set of items.

    +
  • +
  • +

    UISelectMany: Allows a user to select multiple items from a group of +items. This class is a subclass of the UIInput class.

    +
  • +
  • +

    UISelectOne: Allows a user to select one item from a group of items. +This class is a subclass of the UIInput class.

    +
  • +
  • +

    UIViewParameter: Represents the query parameters in a request. This +class is a subclass of the UIInput class.

    +
  • +
  • +

    UIViewRoot: Represents the root of the component tree.

    +
  • +
+
+
+

In addition to extending UIComponentBase, the component classes also +implement one or more behavioral interfaces, each of which defines +certain behavior for a set of components whose classes implement the +interface.

+
+
+

These behavioral interfaces, all defined in the javax.faces.component +package unless otherwise stated, are as follows.

+
+
+
    +
  • +

    ActionSource: Indicates that the component can fire an action event. +This interface is intended for use with components based on JavaServer +Faces technology 1.1_01 and earlier versions. This interface is +deprecated in JavaServer Faces 2.

    +
  • +
  • +

    ActionSource2: Extends ActionSource and therefore provides the +same functionality. However, it allows components to use the Expression +Language (EL) when they are referencing methods that handle action +events.

    +
  • +
  • +

    EditableValueHolder: Extends ValueHolder and specifies additional +features for editable components, such as validation and emitting +value-change events.

    +
  • +
  • +

    NamingContainer: Mandates that each component rooted at this +component have a unique ID.

    +
  • +
  • +

    StateHolder: Denotes that a component has state that must be saved +between requests.

    +
  • +
  • +

    ValueHolder: Indicates that the component maintains a local value as +well as the option of accessing data in the model tier.

    +
  • +
  • +

    javax.faces.event.SystemEventListenerHolder: Maintains a list of +javax.faces.event.SystemEventListener instances for each type of +javax.faces.event.SystemEvent defined by that class.

    +
  • +
  • +

    javax.faces.component.behavior.ClientBehaviorHolder: Adds the +ability to attach javax.faces.component.behavior.ClientBehavior +instances, such as a reusable script.

    +
  • +
+
+
+

UICommand implements ActionSource2 and StateHolder. UIOutput and +component classes that extend UIOutput implement StateHolder and +ValueHolder. UIInput and component classes that extend UIInput +implement EditableValueHolder, StateHolder, and ValueHolder. +UIComponentBase implements StateHolder.

+
+
+

Only component writers will need to use the component classes and +behavioral interfaces directly. Page authors and application developers +will use a standard component by including a tag that represents it on a +page. Most of the components can be rendered in different ways on a +page. For example, a UICommand component can be rendered as a button +or a link.

+
+
+

The next section explains how the rendering model works and how page +authors can choose to render the components by selecting the appropriate +tags.

+
+
+
+

7.5.2 Component Rendering Model

+
+

The JavaServer Faces component architecture is designed such that the +functionality of the components is defined by the component classes, +whereas the component rendering can be defined by a separate renderer +class. This design has several benefits, including the following.

+
+
+
    +
  • +

    Component writers can define the behavior of a component once but +create multiple renderers, each of which defines a different way to +render the component to the same client or to different clients.

    +
  • +
  • +

    Page authors and application developers can change the appearance of a +component on the page by selecting the tag that represents the +appropriate combination of component and renderer.

    +
  • +
+
+
+

A render kit defines how component classes map to component tags that +are appropriate for a particular client. The JavaServer Faces +implementation includes a standard HTML render kit for rendering to an +HTML client.

+
+
+

The render kit defines a set of javax.faces.render.Renderer classes +for each component that it supports. Each Renderer class defines a +different way to render the particular component to the output defined +by the render kit. For example, a UISelectOne component has three +different renderers. One of them renders the component as a group of +options. Another renders the component as a combo box. The third one +renders the component as a list box. Similarly, a UICommand component +can be rendered as a button or a link, using the h:commandButton or +h:commandLink tag. The command part of each tag corresponds to the +UICommand class, specifying the functionality, which is to fire an +action. The Button or Link part of each tag corresponds to a +separate Renderer class that defines how the component appears on the +page.

+
+
+

Each custom tag defined in the standard HTML render kit is composed of +the component functionality (defined in the UIComponent class) and the +rendering attributes (defined by the Renderer class).

+
+
+

The section Adding Components to a Page Using +HTML Tag Library Tags lists all supported component tags and +illustrates how to use the tags in an example.

+
+
+

The JavaServer Faces implementation provides a custom tag library for +rendering components in HTML.

+
+
+
+

7.5.3 Conversion Model

+
+

A JavaServer Faces application can optionally associate a component with +server-side object data. This object is a JavaBeans component, such as a +managed bean. An application gets and sets the object data for a +component by calling the appropriate object properties for that +component.

+
+
+

When a component is bound to an object, the application has two views of +the component’s data.

+
+
+
    +
  • +

    The model view, in which data is represented as data types, such as +int or long.

    +
  • +
  • +

    The presentation view, in which data is represented in a manner that +can be read or modified by the user. For example, a java.util.Date +might be represented as a text string in the format mm/dd/yy or as a +set of three text strings.

    +
  • +
+
+
+

The JavaServer Faces implementation automatically converts component +data between these two views when the bean property associated with the +component is of one of the types supported by the component’s data. For +example, if a UISelectBoolean component is associated with a bean +property of type java.lang.Boolean, the JavaServer Faces +implementation will automatically convert the component’s data from +String to Boolean. In addition, some component data must be bound to +properties of a particular type. For example, a UISelectBoolean +component must be bound to a property of type boolean or +java.lang.Boolean.

+
+
+

Sometimes you might want to convert a component’s data to a type other +than a standard type, or you might want to convert the format of the +data. To facilitate this, JavaServer Faces technology allows you to +register a javax.faces.convert.Converter implementation on UIOutput +components and components whose classes subclass UIOutput. If you +register the Converter implementation on a component, the Converter +implementation converts the component’s data between the two views.

+
+
+

You can either use the standard converters supplied with the JavaServer +Faces implementation or create your own custom converter. Custom +converter creation is covered in Chapter 15, +"Creating Custom UI Components and Other Custom Objects".

+
+
+
+

7.5.4 Event and Listener Model

+
+

The JavaServer Faces event and listener model is similar to the +JavaBeans event model in that it has strongly typed event classes and +listener interfaces that an application can use to handle events +generated by components.

+
+
+

The JavaServer Faces specification defines three types of events: +application events, system events, and data-model events.

+
+
+

Application events are tied to a particular application and are +generated by a UIComponent. They represent the standard events +available in previous versions of JavaServer Faces technology.

+
+
+

An event object identifies the component that generated the event and +stores information about the event. To be notified of an event, an +application must provide an implementation of the listener class and +must register it on the component that generates the event. When the +user activates a component, such as by clicking a button, an event is +fired. This causes the JavaServer Faces implementation to invoke the +listener method that processes the event.

+
+
+

JavaServer Faces supports two kinds of application events: action events +and value-change events.

+
+
+

An action event (class javax.faces.event.ActionEvent) occurs when the +user activates a component that implements ActionSource. These +components include buttons and links.

+
+
+

A value-change event (class javax.faces.event.ValueChangeEvent) occurs +when the user changes the value of a component represented by UIInput +or one of its subclasses. An example is selecting a check box, an action +that results in the component’s value changing to true. The component +types that can generate these types of events are the UIInput, +UISelectOne, UISelectMany, and UISelectBoolean components. +Value-change events are fired only if no validation errors are detected.

+
+
+

Depending on the value of the immediate property (see +The immediate Attribute) of the component +emitting the event, action events can be processed during the Invoke +Application phase or the Apply Request Values phase, and value-change +events can be processed during the Process Validations phase or the +Apply Request Values phase.

+
+
+

System events are generated by an Object rather than a UIComponent. +They are generated during the execution of an application at predefined +times. They are applicable to the entire application rather than to a +specific component.

+
+
+

A data-model event occurs when a new row of a UIData component is +selected.

+
+
+

There are two ways to cause your application to react to action events +or value-change events that are emitted by a standard component:

+
+
+
    +
  • +

    Implement an event listener class to handle the event, and register +the listener on the component by nesting either an +f:valueChangeListener tag or an f:actionListener tag inside the +component tag.

    +
  • +
  • +

    Implement a method of a managed bean to handle the event, and refer to +the method with a method expression from the appropriate attribute of +the component’s tag.

    +
  • +
+
+
+

See Implementing an Event Listener for +information on how to implement an event listener. See +Registering Listeners on Components for +information on how to register the listener on a component.

+
+
+

See Writing a Method to Handle an Action +Event and Writing a Method to Handle a +Value-Change Event for information on how to implement managed bean +methods that handle these events.

+
+
+

See Referencing a Managed Bean Method +for information on how to refer to the managed bean method from the +component tag.

+
+
+

When emitting events from custom components, you must implement the +appropriate event class and manually queue the event on the component in +addition to implementing an event listener class or a managed bean +method that handles the event. Handling +Events for Custom Components explains how to do this.

+
+
+
+

7.5.5 Validation Model

+
+

JavaServer Faces technology supports a mechanism for validating the +local data of editable components (such as text fields). This validation +occurs before the corresponding model data is updated to match the local +value.

+
+
+

Like the conversion model, the validation model defines a set of +standard classes for performing common data validation checks. The +JavaServer Faces core tag library also defines a set of tags that +correspond to the standard javax.faces.validator.Validator +implementations. See Using the Standard +Validators for a list of all the standard validation classes and +corresponding tags.

+
+
+

Most of the tags have a set of attributes for configuring the +validator’s properties, such as the minimum and maximum allowable values +for the component’s data. The page author registers the validator on a +component by nesting the validator’s tag within the component’s tag.

+
+
+

In addition to validators that are registered on the component, you can +declare a default validator that is registered on all UIInput +components in the application. For more information on default +validators, see Using Default +Validators.

+
+
+

The validation model also allows you to create your own custom validator +and corresponding tag to perform custom validation. The validation model +provides two ways to implement custom validation.

+
+
+
    +
  • +

    Implement a Validator interface that performs the validation.

    +
  • +
  • +

    Implement a managed bean method that performs the validation.

    +
  • +
+
+
+

If you are implementing a Validator interface, you must also do the +following.

+
+
+
    +
  • +

    Register the Validator implementation with the application.

    +
  • +
  • +

    Create a custom tag or use an f:validator tag to register the +validator on the component.

    +
  • +
+
+
+

In the previously described standard validation model, the validator is +defined for each input component on a page. The Bean Validation model +allows the validator to be applied to all fields in a page. See +Chapter 21, "Introduction to Bean +Validation" and Chapter 22, +"Bean Validation: Advanced Topics" for more information on Bean +Validation.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/jsf-intro006.html b/jsf-intro006.html new file mode 100644 index 0000000..954dfe3 --- /dev/null +++ b/jsf-intro006.html @@ -0,0 +1,306 @@ + + + + + + Navigation Model + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+ +
+
+

The JavaServer Faces navigation model makes it easy to define page +navigation and to handle any additional processing that is needed to +choose the sequence in which pages are loaded.

+
+
+

In JavaServer Faces technology, navigation is a set of rules for +choosing the next page or view to be displayed after an application +action, such as when a button or link is clicked.

+
+
+

Navigation can be implicit or user-defined. Implicit navigation comes +into play when user-defined navigation rules are not configured in the +application configuration resource files.

+
+
+

When you add a component such as a commandButton to a Facelets page, +and assign another page as the value for its action property, the +default navigation handler will try to match a suitable page within the +application implicitly. In the following example, the default navigation +handler will try to locate a page named response.xhtml within the +application and navigate to it:

+
+
+
+
<h:commandButton value="submit" action="response">
+
+
+
+

User-defined navigation rules are declared in zero or more application +configuration resource files, such as faces-config.xml, by using a set +of XML elements. The default structure of a navigation rule is as +follows:

+
+
+
+
<navigation-rule>
+    <description></description
+    <from-view-id></from-view-id>
+    <navigation-case>
+        <from-action></from-action>
+        <from-outcome></from-outcome>
+        <if></if>
+        <to-view-id></to-view-id>
+    </navigation-case>
+</navigation-rule>
+
+
+
+

User-defined navigation is handled as follows.

+
+
+
    +
  • +

    Define the rules in the application configuration resource file.

    +
  • +
  • +

    Refer to an outcome String from the button or link component’s +action attribute. This outcome String is used by the JavaServer +Faces implementation to select the navigation rule.

    +
  • +
+
+
+

Here is an example navigation rule:

+
+
+
+
<navigation-rule>
+    <from-view-id>/greeting.xhtml</from-view-id>
+    <navigation-case>
+        <from-outcome>success</from-outcome>
+        <to-view-id>/response.xhtml</to-view-id>
+    </navigation-case>
+</navigation-rule>
+
+
+
+

This rule states that when a command component (such as an +h:commandButton or an h:commandLink) on greeting.xhtml is +activated, the application will navigate from the greeting.xhtml page +to the response.xhtml page if the outcome referenced by the button +component’s tag is success. Here is an h:commandButton tag from +greeting.xhtml that would specify a logical outcome of success:

+
+
+
+
<h:commandButton id="submit" value="Submit" action="success"/>
+
+
+
+

As the example demonstrates, each navigation-rule element defines how +to get from one page (specified in the from-view-id element) to the +other pages of the application. The navigation-rule elements can +contain any number of navigation-case elements, each of which defines +the page to open next (defined by to-view-id) based on a logical +outcome (defined by from-outcome).

+
+
+

In more complicated applications, the logical outcome can also come from +the return value of an action method in a managed bean. This method +performs some processing to determine the outcome. For example, the +method can check whether the password the user entered on the page +matches the one on file. If it does, the method might return success; +otherwise, it might return failure. An outcome of failure might +result in the logon page being reloaded. An outcome of success might +cause the page displaying the user’s credit card activity to open. If +you want the outcome to be returned by a method on a bean, you must +refer to the method using a method expression with the action +attribute, as shown by this example:

+
+
+
+
<h:commandButton id="submit" value="Submit"
+                 action="#{cashierBean.submit}" />
+
+
+
+

When the user clicks the button represented by this tag, the +corresponding component generates an action event. This event is handled +by the default javax.faces.event.ActionListener instance, which calls +the action method referenced by the component that triggered the event. +The action method returns a logical outcome to the action listener.

+
+
+

The listener passes the logical outcome and a reference to the action +method that produced the outcome to the default +javax.faces.application.NavigationHandler. The NavigationHandler +selects the page to display next by matching the outcome or the action +method reference against the navigation rules in the application +configuration resource file by the following process.

+
+
+
    +
  1. +

    The NavigationHandler selects the navigation rule that matches the +page currently displayed.

    +
  2. +
  3. +

    It matches the outcome or the action method reference that it +received from the default javax.faces.event.ActionListener with those +defined by the navigation cases.

    +
  4. +
  5. +

    It tries to match both the method reference and the outcome against +the same navigation case.

    +
  6. +
  7. +

    If the previous step fails, the navigation handler attempts to match +the outcome.

    +
  8. +
  9. +

    Finally, the navigation handler attempts to match the action method +reference if the previous two attempts failed.

    +
  10. +
  11. +

    If no navigation case is matched, it displays the same view again.

    +
  12. +
+
+
+

When the NavigationHandler achieves a match, the Render Response phase +begins. During this phase, the page selected by the NavigationHandler +will be rendered.

+
+
+

The Duke’s Tutoring case study example application uses navigation rules +in the business methods that handle creating, editing, and deleting the +users of the application. For example, the form for creating a student +has the following h:commandButton tag:

+
+
+
+
<h:commandButton id="submit"
+        action="#{adminBean.createStudent(studentManager.newStudent)}"
+        value="#{bundle['action.submit']}"/>
+
+
+
+

The action event calls the dukestutoring.ejb.AdminBean.createStudent +method:

+
+
+
+
public String createStudent(Student student) {
+    em.persist(student);
+    return "createdStudent";
+}
+
+
+
+

The return value of createdStudent has a corresponding navigation case +in the faces-config.xml configuration file:

+
+
+
+
<navigation-rule>
+    <from-view-id>/admin/student/createStudent.xhtml</from-view-id>
+    <navigation-case>
+        <from-outcome>createdStudent</from-outcome>
+        <to-view-id>/admin/index.xhtml</to-view-id>
+    </navigation-case>
+</navigation-rule>
+
+
+
+

After the student is created, the user is returned to the Administration +index page.

+
+
+

For more information on how to define navigation rules, see +Configuring Navigation Rules.

+
+
+

For more information on how to implement action methods to handle +navigation, see Writing a Method to Handle +an Action Event.

+
+
+

For more information on how to reference outcomes or action methods from +component tags, see Referencing a Method +That Performs Navigation.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/jsf-intro007.html b/jsf-intro007.html new file mode 100644 index 0000000..1e3615a --- /dev/null +++ b/jsf-intro007.html @@ -0,0 +1,437 @@ + + + + + + The Lifecycle of a JavaServer Faces Application + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

7.7 The Lifecycle of a JavaServer Faces Application

+
+
+

The lifecycle of an application refers to the various stages of +processing of that application, from its initiation to its conclusion. +All applications have lifecycles. During a web application lifecycle, +common tasks are performed, including the following.

+
+
+
    +
  • +

    Handling incoming requests

    +
  • +
  • +

    Decoding parameters

    +
  • +
  • +

    Modifying and saving state

    +
  • +
  • +

    Rendering web pages to the browser

    +
  • +
+
+
+

The JavaServer Faces web application framework manages lifecycle phases +automatically for simple applications or allows you to manage them +manually for more complex applications as required.

+
+
+

JavaServer Faces applications that use advanced features may require +interaction with the lifecycle at certain phases. For example, Ajax +applications use partial processing features of the lifecycle (see +Partial Processing and Partial Rendering). +A clearer understanding of the lifecycle phases is key to creating +well-designed components.

+
+
+

A simplified view of the JavaServer faces lifecycle, consisting of the +two main phases of a JavaServer Faces web application, is introduced in +A Simple JavaServer Faces Application. This +section examines the JavaServer Faces lifecycle in more detail.

+
+
+

7.7.1 Overview of the JavaServer Faces Lifecycle

+
+

The lifecycle of a JavaServer Faces application begins when the client +makes an HTTP request for a page and ends when the server responds with +the page, translated to HTML.

+
+
+

The lifecycle can be divided into two main phases: Execute and Render. +The Execute phase is further divided into subphases to support the +sophisticated component tree. This structure requires that component +data be converted and validated, component events be handled, and +component data be propagated to beans in an orderly fashion.

+
+
+

A JavaServer Faces page is represented by a tree of components, called a +view. During the lifecycle, the JavaServer Faces implementation must +build the view while considering the state saved from a previous +submission of the page. When the client requests a page, the JavaServer +Faces implementation performs several tasks, such as validating the data +input of components in the view and converting input data to types +specified on the server side.

+
+
+

The JavaServer Faces implementation performs all these tasks as a series +of steps in the JavaServer Faces request-response lifecycle. +Figure 7-3 illustrates these steps.

+
+
+

Figure 7-3 JavaServer Faces Standard Request-Response Lifecycle

+
+ +
+

The request-response lifecycle handles two kinds of requests: initial +requests and postbacks. An initial request occurs when a user makes a +request for a page for the first time. A postback request occurs when a +user submits the form contained on a page that was previously loaded +into the browser as a result of executing an initial request.

+
+
+

When the lifecycle handles an initial request, it executes only the +Restore View and Render Response phases, because there is no user input +or action to process. Conversely, when the lifecycle handles a postback, +it executes all of the phases.

+
+
+

Usually, the first request for a JavaServer Faces page comes in from a +client, as a result of clicking a link or button component on a +JavaServer Faces page. To render a response that is another JavaServer +Faces page, the application creates a new view and stores it in the +javax.faces.context.FacesContext instance, which represents all of the +information associated with processing an incoming request and creating +a response. The application then acquires object references needed by +the view and calls the FacesContext.renderResponse method, which +forces immediate rendering of the view by skipping to the +Render Response Phase of the lifecycle, as is shown by the +arrows labelled Render Response in .

+
+
+

Sometimes, an application might need to redirect to a different web +application resource, such as a web service, or generate a response that +does not contain JavaServer Faces components. In these situations, the +developer must skip the Render Response phase by calling the +FacesContext.responseComplete method. This situation is also shown in +, with the arrows labelled Response Complete.

+
+
+

The most common situation is that a JavaServer Faces component submits a +request for another JavaServer Faces page. In this case, the JavaServer +Faces implementation handles the request and automatically goes through +the phases in the lifecycle to perform any necessary conversions, +validations, and model updates and to generate the response.

+
+
+

There is one exception to the lifecycle described in this section. When +a component’s immediate attribute is set to true, the validation, +conversion, and events associated with these components are processed +during the Apply Request Values Phase rather than in a +later phase.

+
+
+

The details of the lifecycle explained in the following sections are +primarily intended for developers who need to know information such as +when validations, conversions, and events are usually handled and ways +to change how and when they are handled. For more information on each of +the lifecycle phases, download the latest JavaServer Faces Specification +documentation from https://jcp.org/en/jsr/detail?id=372.

+
+
+

The JavaServer Faces application lifecycle Execute phase contains the +following subphases:

+
+ +
+
+

7.7.2 Restore View Phase

+
+

When a request for a JavaServer Faces page is made, usually by an +action, such as when a link or a button component is clicked, the +JavaServer Faces implementation begins the Restore View phase.

+
+
+

During this phase, the JavaServer Faces implementation builds the view +of the page, wires event handlers and validators to components in the +view, and saves the view in the FacesContext instance, which contains +all the information needed to process a single request. All the +application’s components, event handlers, converters, and validators +have access to the FacesContext instance.

+
+
+

If the request for the page is an initial request, the JavaServer Faces +implementation creates an empty view during this phase and the lifecycle +advances to the Render Response phase, during which the empty view is +populated with the components referenced by the tags in the page.

+
+
+

If the request for the page is a postback, a view corresponding to this +page already exists in the FacesContext instance. During this phase, +the JavaServer Faces implementation restores the view by using the state +information saved on the client or the server.

+
+
+
+

7.7.3 Apply Request Values Phase

+
+

After the component tree is restored during a postback request, each +component in the tree extracts its new value from the request parameters +by using its decode (processDecodes()) method. The value is then +stored locally on each component.

+
+
+

If any decode methods or event listeners have called the +renderResponse method on the current FacesContext instance, the +JavaServer Faces implementation skips to the Render Response phase.

+
+
+

If any events have been queued during this phase, the JavaServer Faces +implementation broadcasts the events to interested listeners.

+
+
+

If some components on the page have their immediate attributes (see +The immediate Attribute) set to true, then +the validations, conversions, and events associated with these +components will be processed during this phase. If any conversion fails, +an error message associated with the component is generated and queued +on FacesContext. This message will be displayed during the Render +Response phase, along with any validation errors resulting from the +Process Validations phase.

+
+
+

At this point, if the application needs to redirect to a different web +application resource or generate a response that does not contain any +JavaServer Faces components, it can call the +FacesContext.responseComplete method.

+
+
+

At the end of this phase, the components are set to their new values, +and messages and events have been queued.

+
+
+

If the current request is identified as a partial request, the partial +context is retrieved from the FacesContext, and the partial processing +method is applied.

+
+
+
+

7.7.4 Process Validations Phase

+
+

During this phase, the JavaServer Faces implementation processes all +validators registered on the components in the tree by using its +validate (processValidators) method. It examines the component +attributes that specify the rules for the validation and compares these +rules to the local value stored for the component. The JavaServer Faces +implementation also completes conversions for input components that do +not have the immediate attribute set to true.

+
+
+

If the local value is invalid, or if any conversion fails, the +JavaServer Faces implementation adds an error message to the +FacesContext instance, and the lifecycle advances directly to the +Render Response phase so that the page is rendered again with the error +messages displayed. If there were conversion errors from the Apply +Request Values phase, the messages for these errors are also displayed.

+
+
+

If any validate methods or event listeners have called the +renderResponse method on the current FacesContext, the JavaServer +Faces implementation skips to the Render Response phase.

+
+
+

At this point, if the application needs to redirect to a different web +application resource or generate a response that does not contain any +JavaServer Faces components, it can call the +FacesContext.responseComplete method.

+
+
+

If events have been queued during this phase, the JavaServer Faces +implementation broadcasts them to interested listeners.

+
+
+

If the current request is identified as a partial request, the partial +context is retrieved from the FacesContext, and the partial processing +method is applied.

+
+
+
+

7.7.5 Update Model Values Phase

+
+

After the JavaServer Faces implementation determines that the data is +valid, it traverses the component tree and sets the corresponding +server-side object properties to the components' local values. The +JavaServer Faces implementation updates only the bean properties pointed +at by an input component’s value attribute. If the local data cannot +be converted to the types specified by the bean properties, the +lifecycle advances directly to the Render Response phase so that the +page is re-rendered with errors displayed. This is similar to what +happens with validation errors.

+
+
+

If any updateModels methods or any listeners have called the +renderResponse method on the current FacesContext instance, the +JavaServer Faces implementation skips to the Render Response phase.

+
+
+

At this point, if the application needs to redirect to a different web +application resource or generate a response that does not contain any +JavaServer Faces components, it can call the +FacesContext.responseComplete method.

+
+
+

If any events have been queued during this phase, the JavaServer Faces +implementation broadcasts them to interested listeners.

+
+
+

If the current request is identified as a partial request, the partial +context is retrieved from the FacesContext, and the partial processing +method is applied.

+
+
+
+

7.7.6 Invoke Application Phase

+
+

During this phase, the JavaServer Faces implementation handles any +application-level events, such as submitting a form or linking to +another page.

+
+
+

At this point, if the application needs to redirect to a different web +application resource or generate a response that does not contain any +JavaServer Faces components, it can call the +FacesContext.responseComplete method.

+
+
+

If the view being processed was reconstructed from state information +from a previous request and if a component has fired an event, these +events are broadcast to interested listeners.

+
+
+

Finally, the JavaServer Faces implementation transfers control to the +Render Response phase.

+
+
+
+

7.7.7 Render Response Phase

+
+

During this phase, JavaServer Faces builds the view and delegates +authority to the appropriate resource for rendering the pages.

+
+
+

If this is an initial request, the components that are represented on +the page will be added to the component tree. If this is not an initial +request, the components are already added to the tree and need not be +added again.

+
+
+

If the request is a postback and errors were encountered during the +Apply Request Values phase, Process Validations phase, or Update Model +Values phase, the original page is rendered again during this phase. If +the pages contain h:message or h:messages tags, any queued error +messages are displayed on the page.

+
+
+

After the content of the view is rendered, the state of the response is +saved so that subsequent requests can access it. The saved state is +available to the Restore View phase.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/jsf-intro008.html b/jsf-intro008.html new file mode 100644 index 0000000..4029491 --- /dev/null +++ b/jsf-intro008.html @@ -0,0 +1,104 @@ + + + + + + Partial Processing and Partial Rendering + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

7.8 Partial Processing and Partial Rendering

+
+
+

The JavaServer Faces lifecycle spans all of the execute and render +processes of an application. It is also possible to process and render +only parts of an application, such as a single component. For example, +the JavaServer Faces Ajax framework can generate requests containing +information on which particular component may be processed and which +particular component may be rendered back to the client.

+
+
+

Once such a partial request enters the JavaServer Faces lifecycle, the +information is identified and processed by a +javax.faces.context.PartialViewContext object. The JavaServer Faces +lifecycle is still aware of such Ajax requests and modifies the +component tree accordingly.

+
+
+

The execute and render attributes of the f:ajax tag are used to +identify which components may be executed and rendered. For more +information on these attributes, see Chapter 13, +"Using Ajax with JavaServer Faces Technology".

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/jsf-intro009.html b/jsf-intro009.html new file mode 100644 index 0000000..f28da87 --- /dev/null +++ b/jsf-intro009.html @@ -0,0 +1,102 @@ + + + + + + Further Information about JavaServer Faces Technology + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

7.9 Further Information about JavaServer Faces Technology

+
+
+

For more information on JavaServer Faces technology, see

+
+
+
    +
  • +

    JavaServer Faces 2.3 specification:

    +
    +

    http://jcp.org/en/jsr/detail?id=372

    +
    +
  • +
  • +

    JavaServer Faces project website:

    +
    +

    https://javaserverfaces.github.io/users.html

    +
    +
  • +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/jsf-page-core.html b/jsf-page-core.html new file mode 100644 index 0000000..c3ab3bc --- /dev/null +++ b/jsf-page-core.html @@ -0,0 +1,128 @@ + + + + + + Using Converters, Listeners, and Validators + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

11 Using Converters, Listeners, and Validators

+
+
+

The previous chapter described components and explained how to add them +to a web page. This chapter provides information on adding more +functionality to the components through converters, listeners, and +validators.

+
+
+
    +
  • +

    Converters are used to convert data that is received from the input +components. Converters allow an application to bring the strongly typed +features of the Java programming language into the String-based world of +HTTP servlet programming.

    +
  • +
  • +

    Listeners are used to listen to the events happening in the page and +perform actions as defined.

    +
  • +
  • +

    Validators are used to validate the data that is received from the +input components. Validators allow an application to express constraints +on form input data to ensure that the necessary requirements are met +before the input data is processed.

    +
  • +
+
+
+

The following topics are addressed here:

+
+ +
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/jsf-page-core001.html b/jsf-page-core001.html new file mode 100644 index 0000000..c974096 --- /dev/null +++ b/jsf-page-core001.html @@ -0,0 +1,594 @@ + + + + + + Using the Standard Converters + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

11.1 Using the Standard Converters

+
+
+

The JavaServer Faces implementation provides a set of Converter +implementations that you can use to convert component data. The purpose +of conversion is to take the String-based data coming in from the +Servlet API and convert it to strongly typed Java objects suitable for +the business domain. For more information on the conceptual details of +the conversion model, see Conversion Model.

+
+
+

The standard Converter implementations are located in the +javax.faces.convert package. Normally, converters are implicitly +assigned based on the type of the EL expression pointed to by the value +of the component. However, these converters can also be accessed by a +converter ID. Table 11-1 shows the converter classes and +their associated converter IDs.

+
+
+

+
+
+

Table 11-1 Converter Classes and Converter IDs

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Class in the javax.faces.convert PackageConverter ID

BigDecimalConverter

javax.faces.BigDecimal

BigIntegerConverter

javax.faces.BigInteger

BooleanConverter

javax.faces.Boolean

ByteConverter

javax.faces.Byte

CharacterConverter

javax.faces.Character

DateTimeConverter

javax.faces.DateTime

DoubleConverter

javax.faces.Double

EnumConverter

javax.faces.Enum

FloatConverter

javax.faces.Float

IntegerConverter

javax.faces.Integer

LongConverter

javax.faces.Long

NumberConverter

javax.faces.Number

ShortConverter

javax.faces.Short

+
+
+
+
+
+
+
+

A standard error message is associated with each of these converters. If +you have registered one of these converters onto a component on your +page and the converter is not able to convert the component’s value, the +converter’s error message will display on the page. For example, the +following error message appears if BigIntegerConverter fails to +convert a value:

+
+
+
+
{0} must be a number consisting of one or more digits
+
+
+
+

In this case, the {0} substitution parameter will be replaced with the +name of the input component on which the converter is registered.

+
+
+

Two of the standard converters (DateTimeConverter and +NumberConverter) have their own tags, which allow you to configure the +format of the component data using the tag attributes. For more +information about using DateTimeConverter, see Using +DateTimeConverter. For more information about using NumberConverter, +see Using NumberConverter. The following section explains +how to convert a component’s value, including how to register other +standard converters with a component.

+
+
+

11.1.1 Converting a Component’s Value

+
+

To use a particular converter to convert a component’s value, you need +to register the converter onto the component. You can register any of +the standard converters in one of the following ways.

+
+
+
    +
  • +

    Nest one of the standard converter tags inside the component’s tag. +These tags are f:convertDateTime and f:convertNumber, which are +described in Using DateTimeConverter and Using +NumberConverter, respectively.

    +
  • +
  • +

    Bind the value of the component to a managed bean property of the same +type as the converter. This is the most common technique.

    +
  • +
  • +

    Refer to the converter from the component tag’s converter attribute, +specifying the ID of the converter class.

    +
  • +
  • +

    Nest an f:converter tag inside of the component tag, and use either +the f:converter tag’s converterId attribute or its binding +attribute to refer to the converter.

    +
  • +
+
+
+

As an example of the second technique, if you want a component’s data to +be converted to an Integer, you can simply bind the component’s value +to a managed bean property. Here is an example:

+
+
+
+
Integer age = 0;
+public Integer getAge(){ return age;}
+public void setAge(Integer age) {this.age = age;}
+
+
+
+

The data from the h:inputText tag in the this example will be +converted to a java.lang.Integer value. The Integer type is a +supported type of NumberConverter. If you don’t need to specify any +formatting instructions using the f:convertNumber tag attributes, and +if one of the standard converters will suffice, you can simply reference +that converter by using the component tag’s converter attribute.

+
+
+

You can also nest an f:converter tag within the component tag and use +either the converter tag’s converterId attribute or its binding +attribute to reference the converter.

+
+
+

The converterId attribute must reference the converter’s ID. Here is +an example that uses one of the converter IDs listed in +Table 11-1:

+
+
+
+
<h:inputText value="#{loginBean.age}">
+    <f:converter converterId="javax.faces.Integer" />
+</h:inputText>
+
+
+
+

Instead of using the converterId attribute, the f:converter tag can +use the binding attribute. The binding attribute must resolve to a +bean property that accepts and returns an appropriate Converter +instance.

+
+
+

You can also create custom converters and register them on components +using the f:converter tag. For details, see +Creating and Using a Custom Converter.

+
+
+
+

11.1.2 Using DateTimeConverter

+
+

You can convert a component’s data to a java.util.Date by nesting the +convertDateTime tag inside the component tag. The convertDateTime +tag has several attributes that allow you to specify the format and type +of the data. Table 11-2 lists the attributes.

+
+
+

Here is a simple example of a convertDateTime tag:

+
+
+
+
<h:outputText value="#{cashierBean.shipDate}">
+    <f:convertDateTime type="date" dateStyle="full" />
+</h:outputText>
+
+
+
+

When binding the DateTimeConverter to a component, ensure that the +managed bean property to which the component is bound is of type +java.util.Date. In the preceding example, cashierBean.shipDate must +be of type java.util.Date.

+
+
+

The example tag can display the following output:

+
+
+
+
Saturday, September 21, 2013
+
+
+
+

You can also display the same date and time by using the following tag +in which the date format is specified:

+
+
+
+
<h:outputText value="#{cashierBean.shipDate}">
+    <f:convertDateTime pattern="EEEEEEEE, MMM dd, yyyy" />
+</h:outputText>
+
+
+
+

If you want to display the example date in Spanish, you can use the +locale attribute:

+
+
+
+
<h:outputText value="#{cashierBean.shipDate}">
+    <f:convertDateTime dateStyle="full"
+                       locale="es"
+                       timeStyle="long" type="both" />
+</h:outputText>
+
+
+
+

This tag would display the following output:

+
+
+
+
jueves 24 de octubre de 2013 15:07:04 GMT
+
+
+
+

Refer to the "Customizing Formats" lesson of the Java Tutorial at +http://docs.oracle.com/javase/tutorial/i18n/format/simpleDateFormat.html +for more information on how to format the output using the pattern +attribute of the convertDateTime tag.

+
+
+

+
+
+

Table 11-2 Attributes for the f:convertDateTime Tag

+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AttributeTypeDescription

binding

DateTimeConverter

Used to bind a converter to a managed +bean property.

dateStyle

String

Defines the format, as specified by +java.text.DateFormat, of a date or the date part of a date string. +Applied only if type is date or both and if pattern is not +defined. Valid values: default, short, medium, long, and full. +If no value is specified, default is used.

for

String

Used with composite components. Refers to one of the +objects within the composite component inside which this tag is nested.

locale

String or Locale

Locale whose predefined styles for +dates and times are used during formatting or parsing. If not specified, +the Locale returned by FacesContext.getLocale will be used.

pattern

String

Custom formatting pattern that determines how the +date/time string should be formatted and parsed. If this attribute is +specified, dateStyle, timeStyle, and type attributes are ignored.

timeStyle

String

Defines the format, as specified by +java.text.DateFormat, of a time or the time part of a date string. +Applied only if type is time and pattern is not defined. Valid +values: default, short, medium, long, and full. If no value is +specified, default is used.

timeZone

String or TimeZone

Time zone in which to interpret any +time information in the date string.

type

String

Specifies whether the string value will contain a +date, a time, or both. Valid values are date, time, or both. If no +value is specified, date is used.

+
+
+
+
+
+
+
+
+

11.1.3 Using NumberConverter

+
+

You can convert a component’s data to a java.lang.Number by nesting +the convertNumber tag inside the component tag. The convertNumber +tag has several attributes that allow you to specify the format and type +of the data. Table 11-3 lists the attributes.

+
+
+

The following example uses a convertNumber tag to display the total +prices of the contents of a shopping cart:

+
+
+
+
<h:outputText value="#{cart.total}">
+    <f:convertNumber currencySymbol="$" type="currency"/>
+</h:outputText>
+
+
+
+

When binding the NumberConverter to a component, ensure that the +managed bean property to which the component is bound is of a primitive +type or has a type of java.lang.Number. In the preceding example, +cart.total is of type double.

+
+
+

Here is an example of a number that this tag can display:

+
+
+
+
$934
+
+
+
+

This result can also be displayed by using the following tag in which +the currency pattern is specified:

+
+
+
+
<h:outputText id="cartTotal" value="#{cart.total}">
+    <f:convertNumber pattern="$####" />
+</h:outputText>
+
+
+
+

See the "Customizing Formats" lesson of the Java Tutorial at +http://docs.oracle.com/javase/tutorial/i18n/format/decimalFormat.html +for more information on how to format the output by using the pattern +attribute of the convertNumber tag.

+
+
+

+
+
+

Table 11-3 Attributes for the f:convertNumber Tag

+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AttributeTypeDescription

binding

NumberConverter

Used to bind a converter to a managed +bean property.

currencyCode

String

ISO 4217 currency code, used only when +formatting currencies.

currencySymbol

String

Currency symbol, applied only when +formatting currencies.

for

String

Used with composite components. Refers to one of the +objects within the composite component inside which this tag is nested.

groupingUsed

Boolean

Specifies whether formatted output contains +grouping separators.

integerOnly

Boolean

Specifies whether only the integer part of +the value will be parsed.

locale

String or Locale

Locale whose number styles are used +to format or parse data.

maxFractionDigits

int

Maximum number of digits formatted in the +fractional part of the output.

maxIntegerDigits

int

Maximum number of digits formatted in the +integer part of the output.

minFractionDigits

int

Minimum number of digits formatted in the +fractional part of the output.

minIntegerDigits

int

Minimum number of digits formatted in the +integer part of the output.

pattern

String

Custom formatting pattern that determines how the +number string is formatted and parsed.

type

String

Specifies whether the string value is parsed and +formatted as a number, currency, or percentage. If not specified, +number is used.

+
+
+
+
+
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/jsf-page-core002.html b/jsf-page-core002.html new file mode 100644 index 0000000..5f6ff1b --- /dev/null +++ b/jsf-page-core002.html @@ -0,0 +1,294 @@ + + + + + + Registering Listeners on Components + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

11.2 Registering Listeners on Components

+
+
+

An application developer can implement listeners as classes or as +managed bean methods. If a listener is a managed bean method, the page +author references the method from either the component’s +valueChangeListener attribute or its actionListener attribute. If +the listener is a class, the page author can reference the listener from +either an f:valueChangeListener tag or an f:actionListener tag and +nest the tag inside the component tag to register the listener on the +component.

+
+
+

Referencing a Method That Handles an +Action Event and Referencing a Method +That Handles a Value-Change Event explain how a page author uses the +valueChangeListener and actionListener attributes to reference +managed bean methods that handle events.

+
+
+

This section explains how to register a NameChanged value-change +listener and a BookChange action listener implementation on +components. The Duke’s Bookstore case study includes both of these +listeners.

+
+
+

11.2.1 Registering a Value-Change Listener on a Component

+
+

A page author can register a ValueChangeListener implementation on a +component that implements EditableValueHolder by nesting an +f:valueChangeListener tag within the component’s tag on the page. The +f:valueChangeListener tag supports the attributes shown in +Table 11-4, one of which must be used.

+
+
+

+
+
+

Table 11-4 Attributes for the f:valueChangeListener Tag

+
+ ++++ + + + + + + + + + + + + + + + + +
AttributeDescription

type

References the fully qualified class name of a +ValueChangeListener implementation. Can accept a literal or a value +expression.

binding

References an object that implements ValueChangeListener. +Can accept only a value expression, which must point to a managed bean +property that accepts and returns a ValueChangeListener +implementation.

+
+
+
+
+
+
+
+

The following example shows a value-change listener registered on a +component:

+
+
+
+
<h:inputText id="name"
+             size="30"
+             value="#{cashierBean.name}"
+             required="true"
+             requiredMessage="#{bundle.ReqCustomerName}">
+    <f:valueChangeListener
+        type="javaeetutorial.dukesbookstore.listeners.NameChanged" />
+</h:inputText>
+
+
+
+

In the example, the core tag type attribute specifies the custom +NameChanged listener as the ValueChangeListener implementation +registered on the name component.

+
+
+

After this component tag is processed and local values have been +validated, its corresponding component instance will queue the +ValueChangeEvent associated with the specified ValueChangeListener +to the component.

+
+
+

The binding attribute is used to bind a ValueChangeListener +implementation to a managed bean property. This attribute works in a +similar way to the binding attribute supported by the standard +converter tags. See Binding Component +Values and Instances to Managed Bean Properties for more information.

+
+
+
+

11.2.2 Registering an Action Listener on a Component

+
+

A page author can register an ActionListener implementation on a +command component by nesting an f:actionListener tag within the +component’s tag on the page. Similarly to the f:valueChangeListener +tag, the f:actionListener tag supports both the type and binding +attributes. One of these attributes must be used to reference the action +listener.

+
+
+

Here is an example of an h:commandLink tag that references an +ActionListener implementation:

+
+
+
+
<h:commandLink id="Duke" action="bookstore">
+    <f:actionListener
+        type="javaeetutorial.dukesbookstore.listeners.LinkBookChangeListener" />
+    <h:outputText value="#{bundle.Book201}"/>
+</h:commandLink>
+
+
+
+

The type attribute of the f:actionListener tag specifies the fully +qualified class name of the ActionListener implementation. Similarly +to the f:valueChangeListener tag, the f:actionListener tag also +supports the binding attribute. See +Binding Converters, Listeners, and +Validators to Managed Bean Properties for more information about +binding listeners to managed bean properties.

+
+
+

In addition to the actionListener tag that allows you register a +custom listener onto a component, the core tag library includes the +f:setPropertyActionListener tag. You use this tag to register a +special action listener onto the ActionSource instance associated with +a component. When the component is activated, the listener will store +the object referenced by the tag’s value attribute into the object +referenced by the tag’s target attribute.

+
+
+

The bookcatalog.xhtml page of the Duke’s Bookstore application uses +f:setPropertyActionListener with two components: the h:commandLink +component used to link to the bookdetails.xhtml page and the +h:commandButton component used to add a book to the cart:

+
+
+
+
<h:dataTable id="books"
+    value="#{store.books}"
+    var="book"
+    headerClass="list-header"
+    styleClass="list-background"
+    rowClasses="list-row-even, list-row-odd"
+    border="1"
+    summary="#{bundle.BookCatalog}" >
+    ...
+    <h:column>
+        <f:facet name="header">
+            <h:outputText value="#{bundle.ItemTitle}"/>
+        </f:facet>
+        <h:commandLink action="#{catalog.details}"
+                       value="#{book.title}">
+            <f:setPropertyActionListener target="#{requestScope.book}"
+                                         value="#{book}"/>
+        </h:commandLink>
+    </h:column>
+    ...
+    <h:column>
+        <f:facet name="header">
+            <h:outputText value="#{bundle.CartAdd}"/>
+        </f:facet>
+        <h:commandButton id="add"
+                         action="#{catalog.add}"
+                         value="#{bundle.CartAdd}">
+            <f:setPropertyActionListener target="#{requestScope.book}"
+                                         value="#{book}"/>
+        </h:commandButton>
+    </h:column>
+
+
+
+

The h:commandLink and h:commandButton tags are within an +h:dataTable tag, which iterates over the list of books. The var +attribute refers to a single book in the list of books.

+
+
+

The object referenced by the var attribute of an h:dataTable tag is +in page scope. However, in this case you need to put this object into +request scope so that when the user activates the commandLink +component to go to bookdetails.xhtml or activates the commandButton +component to go to bookcatalog.xhtml, the book data is available to +those pages. Therefore, the f:setPropertyActionListener tag is used to +set the current book object into request scope when the commandLink or +commandButton component is activated.

+
+
+

In the preceding example, the f:setPropertyActionListener tag’s +value attribute references the book object. The +f:setPropertyActionListener tag’s target attribute references the +value expression requestScope.book, which is where the book object +referenced by the value attribute is stored when the commandLink or +the commandButton component is activated.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/jsf-page-core003.html b/jsf-page-core003.html new file mode 100644 index 0000000..3a87bbd --- /dev/null +++ b/jsf-page-core003.html @@ -0,0 +1,294 @@ + + + + + + Using the Standard Validators + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

11.3 Using the Standard Validators

+
+
+

JavaServer Faces technology provides a set of standard classes and +associated tags that page authors and application developers can use to +validate a component’s data. Table 11-5 lists all the +standard validator classes and the tags that allow you to use the +validators from the page.

+
+
+

+
+
+

Table 11-5 The Validator Classes

+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Validator ClassTagFunction

BeanValidator

validateBean

Registers a bean validator for the +component.

DoubleRangeValidator

validateDoubleRange

Checks whether the local +value of a component is within a certain range. The value must be +floating-point or convertible to floating-point.

LengthValidator

validateLength

Checks whether the length of a +component’s local value is within a certain range. The value must be a +java.lang.String.

LongRangeValidator

validateLongRange

Checks whether the local +value of a component is within a certain range. The value must be any +numeric type or String that can be converted to a long.

RegexValidator

validateRegex

Checks whether the local value of a +component is a match against a regular expression from the +java.util.regex package.

RequiredValidator

validateRequired

Ensures that the local value +is not empty on an EditableValueHolder component.

+
+
+
+
+
+
+
+

All of these validator classes implement the Validator interface. +Component writers and application developers can also implement this +interface to define their own set of constraints for a component’s +value.

+
+
+

Similar to the standard converters, each of these validators has one or +more standard error messages associated with it. If you have registered +one of these validators onto a component on your page and the validator +is unable to validate the component’s value, the validator’s error +message will display on the page. For example, the error message that +displays when the component’s value exceeds the maximum value allowed by +LongRangeValidator is as follows:

+
+
+
+
{1}: Validation Error: Value is greater than allowable maximum of "{0}"
+
+
+
+

In this case, the {1} substitution parameter is replaced by the +component’s label or id, and the {0} substitution parameter is +replaced with the maximum value allowed by the validator.

+
+
+

See Displaying Error Messages with the +h:message and h:messages Tags for information on how to display +validation error messages on the page when validation fails.

+
+
+

Instead of using the standard validators, you can use Bean Validation to +validate data. If you specify bean validation constraints on your +managed bean properties, the constraints are automatically placed on the +corresponding fields on your applications web pages. See +Chapter 21, "Introduction to Bean +Validation" for more information. You do not need to specify the +validateBean tag to use Bean Validation, but the tag allows you to use +more advanced Bean Validation features. For example, you can use the +validationGroups attribute of the tag to specify constraint groups.

+
+
+

You can also create and register custom validators, although Bean +Validation has made this feature less useful. For details, see +Creating and Using a Custom Validator.

+
+
+

11.3.1 Validating a Component’s Value

+
+

To validate a component’s value using a particular validator, you need +to register that validator on the component. You can do this in one of +the following ways.

+
+
+
    +
  • +

    Nest the validator’s corresponding tag (shown in Table +11-5) inside the component’s tag. Using Validator Tags +explains how to use the validateLongRange tag. You can use the other +standard tags in the same way.

    +
  • +
  • +

    Refer to a method that performs the validation from the component +tag’s validator attribute.

    +
  • +
  • +

    Nest a validator tag inside the component tag, and use either the +validator tag’s validatorId attribute or its binding attribute to +refer to the validator.

    +
  • +
+
+
+

See Referencing a Method That Performs +Validation for more information on using the validator attribute.

+
+
+

The validatorId attribute works similarly to the converterId +attribute of the converter tag, as described in +Converting a Component’s Value.

+
+
+

Keep in mind that validation can be performed only on components that +implement EditableValueHolder, because these components accept values +that can be validated.

+
+
+
+

11.3.2 Using Validator Tags

+
+

The following example shows how to use the f:validateLongRange +validator tag on an input component named quantity:

+
+
+
+
<h:inputText id="quantity" size="4" value="#{item.quantity}">
+    <f:validateLongRange minimum="1"/>
+</h:inputText>
+<h:message for="quantity"/>
+
+
+
+

This tag requires the user to enter a number that is at least 1. The +validateLongRange tag also has a maximum attribute, which sets a +maximum value for the input.

+
+
+

The attributes of all the standard validator tags accept EL value +expressions. This means that the attributes can reference managed bean +properties rather than specify literal values. For example, the +f:validateLongRange tag in the preceding example can reference managed +bean properties called minimum and maximum to get the minimum and +maximum values acceptable to the validator implementation, as shown in +this snippet from the guessnumber-jsf example:

+
+
+
+
<h:inputText id="userNo"
+             title="Type a number from 0 to 10:"
+             value="#{userNumberBean.userNumber}">
+    <f:validateLongRange minimum="#{userNumberBean.minimum}"
+                         maximum="#{userNumberBean.maximum}"/>
+</h:inputText>
+
+
+
+

The following f:validateRegex tag shows how you might ensure that a +password is from 4 to 10 characters long and contains at least one +digit, at least one lowercase letter, and at least one uppercase letter:

+
+
+
+
<f:validateRegex pattern="((?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{4,10})"
+                 for="passwordVal"/>
+
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/jsf-page-core004.html b/jsf-page-core004.html new file mode 100644 index 0000000..dfee8b5 --- /dev/null +++ b/jsf-page-core004.html @@ -0,0 +1,276 @@ + + + + + + Referencing a Managed Bean Method + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

11.4 Referencing a Managed Bean Method

+
+
+

A component tag has a set of attributes for referencing managed bean +methods that can perform certain functions for the component associated +with the tag. These attributes are summarized in Table +11-6.

+
+
+

+
+
+

Table 11-6 Component Tag Attributes That Reference Managed Bean Methods

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + +
AttributeFunction

action

Refers to a managed bean method that performs navigation +processing for the component and returns a logical outcome String

actionListener

Refers to a managed bean method that handles action +events

validator

Refers to a managed bean method that performs validation +on the component’s value

valueChangeListener

Refers to a managed bean method that handles +value-change events

+
+
+
+
+
+
+
+

Only components that implement ActionSource can use the action and +actionListener attributes. Only components that implement +EditableValueHolder can use the validator or valueChangeListener +attributes.

+
+
+

The component tag refers to a managed bean method using a method +expression as a value of one of the attributes. The method referenced by +an attribute must follow a particular signature, which is defined by the +tag attribute’s definition in the oJavaServer Faces Facelets +Tag Library documentation. For example, the definition of the +validator attribute of the inputText tag is the following:

+
+
+
+
void validate(javax.faces.context.FacesContext,
+              javax.faces.component.UIComponent, java.lang.Object)
+
+
+
+

The following sections give examples of how to use the attributes.

+
+
+

11.4.1 Referencing a Method That Performs Navigation

+
+

If your page includes a component, such as a button or a link, that +causes the application to navigate to another page when the component is +activated, the tag corresponding to this component must include an +action attribute. This attribute does one of the following:

+
+
+
    +
  • +

    Specifies a logical outcome String that tells the application which +page to access next

    +
  • +
  • +

    References a managed bean method that performs some processing and +returns a logical outcome String

    +
  • +
+
+
+

The following example shows how to reference a navigation method:

+
+
+
+
<h:commandButton value="#{bundle.Submit}"
+                 action="#{cashierBean.submit}" />
+
+
+
+

See Writing a Method to Handle Navigation +for information on how to write such a method.

+
+
+
+

11.4.2 Referencing a Method That Handles an Action Event

+
+

If a component on your page generates an action event, and if that event +is handled by a managed bean method, you refer to the method by using +the component’s actionListener attribute.

+
+
+

The following example shows how such a method could be referenced:

+
+
+
+
<h:commandLink id="Duke" action="bookstore"
+               actionListener="#{actionBean.chooseBookFromLink}">
+
+
+
+

The actionListener attribute of this component tag references the +chooseBookFromLink method using a method expression. The +chooseBookFromLink method handles the event when the user clicks the +link rendered by this component. See +Writing a Method to Handle an Action +Event for information on how to write such a method.

+
+
+
+

11.4.3 Referencing a Method That Performs Validation

+
+

If the input of one of the components on your page is validated by a +managed bean method, refer to the method from the component’s tag by +using the validator attribute.

+
+
+

The following simplified example from +The guessnumber-cdi CDI Example +shows how to reference a method that performs validation on +inputGuess, an input component:

+
+
+
+
<h:inputText id="inputGuess"
+    value="#{userNumberBean.userNumber}"
+    required="true" size="3"
+    disabled="#{userNumberBean.number eq userNumberBean.userNumber ...}"
+    validator="#{userNumberBean.validateNumberRange}">
+</h:inputText>
+
+
+
+

The managed bean method validateNumberRange verifies that the input +value is within the valid range, which changes each time another guess +is made. See Writing a Method to Perform +Validation for information on how to write such a method.

+
+
+
+

11.4.4 Referencing a Method That Handles a Value-Change Event

+
+

If you want a component on your page to generate a value-change event +and you want that event to be handled by a managed bean method instead +of a ValueChangeListener implementation, you refer to the method by +using the component’s valueChangeListener attribute:

+
+
+
+
<h:inputText id="name"
+             size="30"
+             value="#{cashierBean.name}"
+             required="true"
+             valueChangeListener="#{cashierBean.processValueChange}" />
+</h:inputText>
+
+
+
+

The valueChangeListener attribute of this component tag references the +processValueChange method of CashierBean by using a method +expression. The processValueChange method handles the event of a user +entering a name in the input field rendered by this component.

+
+
+

Writing a Method to Handle a Value-Change +Event describes how to implement a method that handles a +ValueChangeEvent.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/jsf-page.html b/jsf-page.html new file mode 100644 index 0000000..93fa26c --- /dev/null +++ b/jsf-page.html @@ -0,0 +1,119 @@ + + + + + + Using JavaServer Faces Technology in Web Pages + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

10 Using JavaServer Faces Technology in Web Pages

+
+
+

Web pages (Facelets pages, in most cases) represent the presentation +layer for web applications. The process of creating web pages for a +JavaServer Faces application includes using component tags to add +components to the page and wire them to backing beans, validators, +listeners, converters, and other server-side objects that are associated +with the page.

+
+
+

This chapter explains how to create web pages using various types of +component and core tags. In the next chapter, you will learn about +adding converters, validators, and listeners to component tags to +provide additional functionality to components.

+
+
+

Many of the examples in this chapter are taken from +Chapter 57, "Duke’s Bookstore Case Study +Example."

+
+
+

The following topics are addressed here:

+
+ +
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/jsf-page001.html b/jsf-page001.html new file mode 100644 index 0000000..f664344 --- /dev/null +++ b/jsf-page001.html @@ -0,0 +1,155 @@ + + + + + + Setting Up a Page + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

10.1 Setting Up a Page

+
+
+

A typical JavaServer Faces web page includes the following elements:

+
+
+
    +
  • +

    A set of namespace declarations that declare the JavaServer Faces tag +libraries

    +
  • +
  • +

    Optionally, the HTML head (h:head) and body (h:body) tags

    +
  • +
  • +

    A form tag (h:form) that represents the user input components

    +
  • +
+
+
+

To add the JavaServer Faces components to your web page, you need to +provide the page access to the two standard tag libraries: the +JavaServer Faces HTML render kit tag library and the JavaServer Faces +core tag library. The oJavaServer Faces standard HTML tag +library defines tags that represent common HTML user interface +components. The JavaServer Faces core tag library defines tags that +perform core actions and are independent of a particular render kit.

+
+
+

For a complete list of JavaServer Faces Facelets tags and their +attributes, refer to the oJavaServer Faces Facelets Tag +Library documentation.

+
+
+

To use any of the JavaServer Faces tags, you need to include appropriate +directives at the top of each page specifying the tag libraries.

+
+
+

For Facelets applications, the XML namespace directives uniquely +identify the tag library URI and the tag prefix.

+
+
+

For example, when you create a Facelets XHTML page, include namespace +directives as follows:

+
+
+
+
<html xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:h="http://xmlns.jcp.org/jsf/html"
+      xmlns:f="http://xmlns.jcp.org/jsf/core">
+
+
+
+

The XML namespace URI identifies the tag library location, and the +prefix value is used to distinguish the tags belonging to that specific +tag library. You can also use other prefixes instead of the standard h +or f. However, when including the tag in the page you must use the +prefix that you have chosen for the tag library. For example, in the +following web page the form tag must be referenced using the h +prefix because the preceding tag library directive uses the h prefix +to distinguish the tags defined in the HTML tag library:

+
+
+
+
<h:form ...>
+
+
+
+

The sections Adding Components to a Page +Using HTML Tag Library Tags and Using Core +Tags describe how to use the component tags from the JavaServer Faces +standard HTML tag library and the core tags from the JavaServer Faces +core tag library.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/jsf-page002.html b/jsf-page002.html new file mode 100644 index 0000000..4878ffb --- /dev/null +++ b/jsf-page002.html @@ -0,0 +1,2544 @@ + + + + + + Adding Components to a Page Using HTML Tag Library Tags + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

10.2 Adding Components to a Page Using HTML Tag Library Tags

+
+
+

The tags defined by the JavaServer Faces standard HTML tag library +represent HTML form components and other basic HTML elements. These +components display data or accept data from the user. This data is +collected as part of a form and is submitted to the server, usually when +the user clicks a button. This section explains how to use each of the +component tags shown in Table 10-1.

+
+
+

+
+
+

Table 10-1 The Component Tags

+
+ ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TagFunctionsRendered AsAppearance

h:column

Represents a column of data in a data component

A column +of data in an HTML table

A column in a table

h:commandButton

Submits a form to the application

An HTML +<input type=`value>` element for which the type value can be +"submit", "reset", or "image"

A button

h:commandLink

Links to another page or location on a page

An HTML +<a href> element

A link

h:dataTable

Represents a data wrapper

An HTML <table> element

A +table that can be updated dynamically

h:form

Represents an input form (inner tags of the form receive the +data that will be submitted with the form)

An HTML <form> element

No +appearance

h:graphicImage

Displays an image

An HTML <img> element

An image

h:inputFile

Allows a user to upload a file

An HTML +<input type="file"> element

A field with a Browse…​ button

h:inputHidden

Allows a page author to include a hidden variable in a +page

An HTML <input type="hidden"> element

No appearance

h:inputSecret

Allows a user to input a string without the actual +string appearing in the field

An HTML <input type="password"> element

A field that displays a row of characters instead of the actual string +entered

h:inputText

Allows a user to input a string

An HTML +<input type="text"> element

A field

h:inputTextarea

Allows a user to enter a multiline string

An HTML +<textarea> element

A multirow field

h:message

Displays a localized message

An HTML <span> tag if +styles are used

A text string

h:messages

Displays localized messages

A set of HTML <span> tags +if styles are used

A text string

h:outputFormat

Displays a formatted message

Plain text

Plain text

h:outputLabel

Displays a nested component as a label for a specified +input field

An HTML <label> element

Plain text

h:outputLink

Links to another page or location on a page without +generating an action event

An HTML <a> element

A link

h:outputText

Displays a line of text

Plain text

Plain text

h:panelGrid

Displays a table

An HTML <table> element with <tr> +and <td> elements

A table

h:panelGroup

Groups a set of components under one parent

A HTML +<div> or <span> element

A row in a table

h:selectBooleanCheckbox

Allows a user to change the value of a +Boolean choice

An HTML <input type="checkbox"> element

A check box

h:selectManyCheckbox

Displays a set of check boxes from which the +user can select multiple values

A set of HTML <input> elements of +type checkbox

A group of check boxes

h:selectManyListbox

Allows a user to select multiple items from a +set of items all displayed at once

An HTML <select> element

A box

h:selectManyMenu

Allows a user to select multiple items from a set +of items

An HTML <select> element

A menu

h:selectOneListbox

Allows a user to select one item from a set of +items all displayed at once

An HTML <select> element

A box

h:selectOneMenu

Allows a user to select one item from a set of items

An HTML <select> element

A menu

h:selectOneRadio

Allows a user to select one item from a set of +items

An HTML <input type="radio"> element

A group of options

+
+
+
+
+
+
+
+

The tags correspond to components in the javax.faces.component +package. The components are discussed in more detail in +Chapter 12, "Developing with JavaServer Faces +Technology."

+
+
+

The next section explains the important attributes that are common to +most component tags. For each of the components discussed in the +following sections, Writing Bean +Properties explains how to write a bean property bound to that +particular component or its value.

+
+
+

For reference information about the tags and their attributes, see the +oJavaServer Faces Facelets Tag Library documentation.

+
+
+

10.2.1 Common Component Tag Attributes

+
+

Most of the component tags support the attributes shown in +Table 10-2.

+
+
+

+
+
+

Table 10-2 Common Component Tag Attributes

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescription

binding

Identifies a bean property and binds the component instance +to it.

id

Uniquely identifies the component.

immediate

If set to true, indicates that any events, validation, +and conversion associated with the component should happen when request +parameter values are applied.

rendered

Specifies a condition under which the component should be +rendered. If the condition is not satisfied, the component is not +rendered.

style

Specifies a Cascading Style Sheet (CSS) style for the tag.

styleClass

Specifies a CSS class that contains definitions of the +styles.

value

Specifies the value of the component in the form of a value +expression.

+
+
+
+
+
+
+
+

All the tag attributes except id can accept expressions, as defined by +the EL, described in Expression Language.

+
+
+

An attribute such as rendered or value can be set on the page and +then modified in the backing bean for the page.

+
+
+

10.2.1.1 The id Attribute

+
+

The id attribute is not usually required for a component tag but is +used when another component or a server-side class must refer to the +component. If you don’t include an id attribute, the JavaServer Faces +implementation automatically generates a component ID. Unlike most other +JavaServer Faces tag attributes, the id attribute takes expressions +using only the evaluation syntax described in +Immediate Evaluation, which uses the ${} +delimiters. For more information on expression syntax, see +Value Expressions.

+
+
+
+

10.2.1.2 The immediate Attribute

+
+

Input components and command components (those that implement the +ActionSource interface, such as buttons and links) can set the +immediate attribute to true to force events, validations, and +conversions to be processed when request parameter values are applied.

+
+
+

You need to carefully consider how the combination of an input +component’s immediate value and a command component’s immediate +value determines what happens when the command component is activated.

+
+
+

Suppose that you have a page with a button and a field for entering the +quantity of a book in a shopping cart. If the immediate attributes of +both the button and the field are set to true, the new value entered +in the field will be available for any processing associated with the +event that is generated when the button is clicked. The event associated +with the button as well as the events, validation, and conversion +associated with the field are all handled when request parameter values +are applied.

+
+
+

If the button’s immediate attribute is set to true but the field’s +immediate attribute is set to false, the event associated with the +button is processed without updating the field’s local value to the +model layer. The reason is that any events, conversion, and validation +associated with the field occur after request parameter values are +applied.

+
+
+

The bookshowcart.xhtml page of the Duke’s Bookstore case study has +examples of components using the immediate attribute to control which +component’s data is updated when certain buttons are clicked. The +quantity field for each book does not set the immediate attribute, +so the value is false (the default).

+
+
+
+
<h:inputText id="quantity"
+             size="4"
+             value="#{item.quantity}"
+             title="#{bundle.ItemQuantity}">
+    <f:validateLongRange minimum="0"/>
+    ...
+</h:inputText>
+
+
+
+

The immediate attribute of the Continue Shopping hyperlink is set to +true, while the immediate attribute of the Update Quantities +hyperlink is set to false:

+
+
+
+
<h:commandLink id="continue"
+               action="bookcatalog"
+               immediate="true">
+    <h:outputText value="#{bundle.ContinueShopping}"/>
+</h:commandLink>
+...
+<h:commandLink id="update"
+               action="#{showcart.update}"
+               immediate="false">
+    <h:outputText value="#{bundle.UpdateQuantities}"/>
+</h:commandLink>
+
+
+
+

If you click the Continue Shopping hyperlink, none of the changes +entered into the quantity input fields will be processed. If you click +the Update Quantities hyperlink, the values in the quantity fields +will be updated in the shopping cart.

+
+
+
+

10.2.1.3 The rendered Attribute

+
+

A component tag uses a Boolean EL expression along with the rendered +attribute to determine whether the component will be rendered. For +example, the commandLink component in the following section of a page +is not rendered if the cart contains no items:

+
+
+
+
<h:commandLink id="check"
+    ...
+    rendered="#{cart.numberOfItems > 0}">
+    <h:outputText
+        value="#{bundle.CartCheck}"/>
+</h:commandLink>
+
+
+
+

Unlike nearly every other JavaServer Faces tag attribute, the rendered +attribute is restricted to using rvalue expressions. As explained in +Value and Method Expressions, these rvalue +expressions can only read data; they cannot write the data back to the +data source. Therefore, expressions used with rendered attributes can +use the arithmetic operators and literals that rvalue expressions can +use but lvalue expressions cannot use. For example, the expression in +the preceding example uses the > operator.

+
+
+
+
+
+
+
+ +++ + + + + + +
+

Note:

+
+
+

In this example and others, bundle refers to a +java.util.ResourceBundle file that contains locale-specific strings to +be displayed. Resource bundles are discussed in +Chapter 20, "Internationalizing and Localizing +Web Applications".

+
+
+
+
+
+
+
+
+
+

10.2.1.4 The style and styleClass Attributes

+
+

The style and styleClass attributes allow you to specify CSS styles +for the rendered output of your tags. Displaying Error +Messages with the h:message and h:messages Tags describes an example of +using the style attribute to specify styles directly in the attribute. +A component tag can instead refer to a CSS class.

+
+
+

The following example shows the use of a dataTable tag that references +the style class list-background:

+
+
+
+
<h:dataTable id="items"
+             ...
+             styleClass="list-background"
+             value="#{cart.items}"
+             var="book">
+
+
+
+

The style sheet that defines this class is stylesheet.css, which will +be included in the application. For more information on defining styles, +see the Cascading Style Sheets specifications and drafts at +http://www.w3.org/Style/CSS/.

+
+
+
+

10.2.1.5 The value and binding Attributes

+
+

A tag representing an output component uses the value and binding +attributes to bind its component’s value or instance, respectively, to a +data object. The value attribute is used more commonly than the +binding attribute, and examples appear throughout this chapter. For +more information on these attributes, see +Creating a Managed Bean, +Writing Properties Bound to Component +Values, and Writing Properties Bound to +Component Instances.

+
+
+
+
+

10.2.2 Adding HTML Head and Body Tags

+
+

The HTML head (h:head) and body (h:body) tags add HTML page +structure to JavaServer Faces web pages.

+
+
+
    +
  • +

    The h:head tag represents the head element of an HTML page.

    +
  • +
  • +

    The h:body tag represents the body element of an HTML page.

    +
  • +
+
+
+

The following is an example of an XHTML page using the usual head and +body markup tags:

+
+
+
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+    <head>
+        <title>Add a title</title>
+    </head>
+    <body>
+        Add Content
+    </body>
+</html>
+
+
+
+

The following is an example of an XHTML page using h:head and h:body +tags:

+
+
+
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:h="http://xmlns.jcp.org/jsf/html">
+    <h:head>
+        Add a title
+    </h:head>
+    <h:body>
+        Add Content
+    </h:body>
+</html>
+
+
+
+

Both of the preceding example code segments render the same HTML +elements. The head and body tags are useful mainly for resource +relocation. For more information on resource relocation, see +Resource Relocation Using h:outputScript and +h:outputStylesheet Tags.

+
+
+
+

10.2.3 Adding a Form Component

+
+

An h:form tag represents an input form, which includes child +components that can contain data that is either presented to the user or +submitted with the form.

+
+
+

Figure 10-1 shows a typical login form in which a user +enters a user name and password, then submits the form by clicking the +Login button.

+
+
+

Figure 10-1 A Typical Form

+
+ +
+

The h:form tag represents the form on the page and encloses all the +components that display or collect data from the user, as shown here:

+
+
+
+
<h:form>
+... other JavaServer Faces tags and other content...
+</h:form>
+
+
+
+

The h:form tag can also include HTML markup to lay out the components +on the page. Note that the h:form tag itself does not perform any +layout; its purpose is to collect data and to declare attributes that +can be used by other components in the form.

+
+
+

A page can include multiple h:form tags, but only the values from the +form submitted by the user will be included in the postback request.

+
+
+
+

10.2.4 Using Text Components

+
+

Text components allow users to view and edit text in web applications. +The basic types of text components are as follows:

+
+
+
    +
  • +

    Label, which displays read-only text

    +
  • +
  • +

    Field, which allows users to enter text (on one or more lines), often +to be submitted as part of a form

    +
  • +
  • +

    Password field, which is a type of field that displays a set of +characters, such as asterisks, instead of the password text that the +user enters

    +
  • +
+
+
+

Figure 10-2 shows examples of these text components.

+
+
+

Figure 10-2 Example Text Components

+
+ +
+

Text components can be categorized as either input or output. A +JavaServer Faces output component, such as a label, is rendered as +read-only text. A JavaServer Faces input component, such as a field, is +rendered as editable text.

+
+
+

The input and output components can each be rendered in various ways to +display more specialized text.

+
+
+

Table 10-3 lists the tags that represent the input +components.

+
+
+

+
+
+

Table 10-3 Input Tags

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + +
TagFunction

h:inputHidden

Allows a page author to include a hidden variable in a +page

h:inputSecret

The standard password field: accepts one line of text +with no spaces and displays it as a set of asterisks as it is entered

h:inputText

The standard field: accepts a one-line text string

h:inputTextarea

The standard multiline field: accepts multiple lines +of text

+
+
+
+
+
+
+
+

The input tags support the tag attributes shown in Table +10-4 in addition to those described in Common Component Tag +Attributes. Note that this table does not include all the attributes +supported by the input tags but just those that are used most often. For +the complete list of attributes, refer to the oJavaServer +Faces Facelets Tag Library documentation.

+
+
+

+
+
+

Table 10-4 Input Tag Attributes

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescription

converter

Identifies a converter that will be used to convert the +component’s local data. See Using the +Standard Converters for more information on how to use this attribute.

converterMessage

Specifies an error message to display when the +converter registered on the component fails.

dir

Specifies the direction of the text displayed by this component. +Acceptable values are ltr, meaning left to right, and rtl, meaning +right to left.

label

Specifies a name that can be used to identify this component +in error messages.

lang

Specifies the code for the language used in the rendered +markup, such as en or pt-BR.

required

Takes a boolean value that indicates whether the user +must enter a value in this component.

requiredMessage

Specifies an error message to display when the user +does not enter a value into the component.

validator

Identifies a method expression pointing to a managed bean +method that performs validation on the component’s data. See +Referencing a Method That Performs +Validation for an example of using the f:validator tag.

validatorMessage

Specifies an error message to display when the +validator registered on the component fails to validate the component’s +local value.

valueChangeListener

Identifies a method expression that points to a +managed bean method that handles the event of entering a value in this +component. See Referencing a Method That +Handles a Value-Change Event for an example of using +valueChangeListener.

+
+
+
+
+
+
+
+

Table 10-5 lists the tags that represent the output +components.

+
+
+

+
+
+

Table 10-5 Output Tags

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + +
TagFunction

h:outputFormat

Displays a formatted message

h:outputLabel

The standard read-only label: displays a component as +a label for a specified input field

h:outputLink

Displays an <a href> tag that links to another page +without generating an action event

h:outputText

Displays a one-line text string

+
+
+
+
+
+
+
+

The output tags support the converter tag attribute in addition to +those listed in Common Component Tag Attributes.

+
+
+

The rest of this section explains how to use some of the tags listed in +Table 10-3 and Output Tags. The other tags are +written in a similar way.

+
+
+

10.2.4.1 Rendering a Field with the h:inputText Tag

+
+

The h:inputText tag is used to display a field. A similar tag, the +h:outputText tag, displays a read-only, single-line string. This +section shows you how to use the h:inputText tag. The h:outputText +tag is written in a similar way.

+
+
+

Here is an example of an h:inputText tag:

+
+
+
+
<h:inputText id="name"
+             label="Customer Name"
+             size="30"
+             value="#{cashierBean.name}"
+             required="true"
+             requiredMessage="#{bundle.ReqCustomerName}">
+    <f:valueChangeListener
+        type="javaeetutorial.dukesbookstore.listeners.NameChanged" />
+ </h:inputText>
+
+
+
+

The label attribute specifies a user-friendly name that will be used +in the substitution parameters of error messages displayed for this +component.

+
+
+

The value attribute refers to the name property of a managed bean +named CashierBean. This property holds the data for the name +component. After the user submits the form, the value of the name +property in CashierBean will be set to the text entered in the field +corresponding to this tag.

+
+
+

The required attribute causes the page to reload, displaying errors, +if the user does not enter a value in the name field. The JavaServer +Faces implementation checks whether the value of the component is null +or is an empty string.

+
+
+

If your component must have a non-null value or a String value at +least one character in length, you should add a required attribute to +your tag and set its value to true. If your tag has a required +attribute that is set to true and the value is null or a zero-length +string, no other validators that are registered on the tag are called. +If your tag does not have a required attribute set to true, other +validators that are registered on the tag are called, but those +validators must handle the possibility of a null or zero-length string. +See Validating Null and Empty Strings +for more information.

+
+
+
+

10.2.4.2 Rendering a Password Field with the h:inputSecret Tag

+
+

The h:inputSecret tag renders an <input type="password"> HTML tag. +When the user types a string into this field, a row of asterisks is +displayed instead of the text entered by the user. Here is an example:

+
+
+
+
<h:inputSecret redisplay="false"
+               value="#{loginBean.password}" />
+
+
+
+

In this example, the redisplay attribute is set to false. This will +prevent the password from being displayed in a query string or in the +source file of the resulting HTML page.

+
+
+
+

10.2.4.3 Rendering a Label with the h:outputLabel Tag

+
+

The h:outputLabel tag is used to attach a label to a specified input +field for the purpose of making it accessible. The following page uses +an h:outputLabel tag to render the label of a check box:

+
+
+
+
<h:selectBooleanCheckbox id="fanClub"
+                         rendered="false"
+                         binding="#{cashierBean.specialOffer}" />
+<h:outputLabel for="fanClub"
+               rendered="false
+               binding="#{cashierBean.specialOfferText}">
+    <h:outputText id="fanClubLabel"
+                  value="#{bundle.DukeFanClub}" />
+</h:outputLabel>
+...
+
+
+
+

The h:selectBooleanCheckbox tag and the h:outputLabel tag have +rendered attributes that are set to false on the page but are set to +true in the CashierBean under certain circumstances. The for +attribute of the h:outputLabel tag maps to the id of the input field +to which the label is attached. The h:outputText tag nested inside the +h:outputLabel tag represents the label component. The value +attribute on the h:outputText tag indicates the text that is displayed +next to the input field.

+
+
+

Instead of using an h:outputText tag for the text displayed as a +label, you can simply use the h:outputLabel tag’s value attribute. +The following code snippet shows what the previous code snippet would +look like if it used the value attribute of the h:outputLabel tag to +specify the text of the label:

+
+
+
+
<h:selectBooleanCheckbox id="fanClub"
+                         rendered="false"
+                         binding="#{cashierBean.specialOffer}" />
+<h:outputLabel for="fanClub"
+               rendered="false"
+               binding="#{cashierBean.specialOfferText}"
+               value="#{bundle.DukeFanClub}" />
+</h:outputLabel>
+...
+
+
+
+
+ +
+

The h:outputLink tag is used to render a link that, when clicked, +loads another page but does not generate an action event. You should use +this tag instead of the h:commandLink tag if you always want the URL +specified by the h:outputLink tag’s value attribute to open and do +not want any processing to be performed when the user clicks the link. +Here is an example:

+
+
+
+
<h:outputLink value="javadocs">
+    Documentation for this demo
+</h:outputLink>
+
+
+
+

The text in the body of the h:outputLink tag identifies the text that +the user clicks to get to the next page.

+
+
+
+

10.2.4.5 Displaying a Formatted Message with the h:outputFormat Tag

+
+

The h:outputFormat tag allows display of concatenated messages as a +MessageFormat pattern, as described in the API documentation for +java.text.MessageFormat. Here is an example of an h:outputFormat +tag:

+
+
+
+
<h:outputFormat value="Hello, {0}!">
+    <f:param value="#{hello.name}"/>
+</h:outputFormat>
+
+
+
+

The value attribute specifies the MessageFormat pattern. The +f:param tag specifies the substitution parameters for the message. The +value of the parameter replaces the {0} in the sentence. If the value +of "#{hello.name}" is "Bill", the message displayed in the page is as +follows:

+
+
+
+
Hello, Bill!
+
+
+
+

An h:outputFormat tag can include more than one f:param tag for +those messages that have more than one parameter that must be +concatenated into the message. If you have more than one parameter for +one message, make sure that you put the f:param tags in the proper +order so that the data is inserted in the correct place in the message. +Here is the preceding example modified with an additional parameter:

+
+
+
+
<h:outputFormat value="Hello, {0}! You are visitor number {1} to the page.">
+    <f:param value="#{hello.name}" />
+    <f:param value="#{bean.numVisitor}"/>
+</h:outputFormat>
+
+
+
+

The value of {1} is replaced by the second parameter. The parameter is +an EL expression, bean.numVisitor, in which the property numVisitor +of the managed bean bean keeps track of visitors to the page. This is +an example of a value-expression-enabled tag attribute accepting an EL +expression. The message displayed in the page is now as follows:

+
+
+
+
Hello, Bill! You are visitor number 10 to the page.
+
+
+
+
+
+

10.2.5 Using Command Component Tags for Performing Actions andNavigation

+
+

In JavaServer Faces applications, the button and link component tags are +used to perform actions, such as submitting a form, and for navigating +to another page. These tags are called command component tags because +they perform an action when activated.

+
+
+

The h:commandButton tag is rendered as a button. The h:commandLink +tag is rendered as a link.

+
+
+

In addition to the tag attributes listed in Common Component +Tag Attributes, the h:commandButton and h:commandLink tags can use +the following attributes.

+
+
+
    +
  • +

    action, which is either a logical outcome String or a method +expression pointing to a bean method that returns a logical outcome +String. In either case, the logical outcome String is used to +determine what page to access when the command component tag is +activated.

    +
  • +
  • +

    actionListener, which is a method expression pointing to a bean +method that processes an action event fired by the command component +tag.

    +
  • +
+
+
+

See Referencing a Method That Performs +Navigation for more information on using the action attribute. See +Referencing a Method That Handles an +Action Event for details on using the actionListener attribute.

+
+
+

10.2.5.1 Rendering a Button with the h:commandButton Tag

+
+

If you are using an h:commandButton component tag, the data from the +current page is processed when a user clicks the button, and the next +page is opened. Here is an example of the h:commandButton tag:

+
+
+
+
<h:commandButton value="Submit"
+                 action="#{cashierBean.submit}"/>
+
+
+
+

Clicking the button will cause the submit method of CashierBean to +be invoked because the action attribute references this method. The +submit method performs some processing and returns a logical outcome.

+
+
+

The value attribute of the example h:commandButton tag references +the button’s label. For information on how to use the action +attribute, see Referencing a Method That +Performs Navigation.

+
+
+
+ +
+

The h:commandLink tag represents an HTML link and is rendered as an +HTML <a> element.

+
+
+

An h:commandLink tag must include a nested h:outputText tag, which +represents the text that the user clicks to generate the event. Here is +an example:

+
+
+
+
<h:commandLink id="Duke" action="bookstore">
+    <f:actionListener
+        type="javaeetutorial.dukesbookstore.listeners.LinkBookChangeListener" />
+    <h:outputText value="#{bundle.Book201}"/>
+/h:commandLink>
+
+
+
+

This tag will render HTML that looks something like the following:

+
+
+
+
<a id="_idt16:Duke" href="#"
+     onclick="mojarra.jsfcljs(document.getElementById('j_idt16'),
+     {'j_idt16:Duke':'j_idt16:Duke'},'');
+     return false;">My Early Years: Growing Up on Star7, by Duke</a>
+
+
+
+
+
+
+
+
+ +++ + + + + + +
+

Note:

+
+
+

The h:commandLink tag will render JavaScript scripting language. If +you use this tag, make sure that your browser is enabled for JavaScript +technology.

+
+
+
+
+
+
+
+
+
+
+

10.2.6 Adding Graphics and Images with the h:graphicImage Tag

+
+

In a JavaServer Faces application, use the h:graphicImage tag to +render an image on a page:

+
+
+
+
<h:graphicImage id="mapImage" url="/resources/images/book_all.jpg"/>
+
+
+
+

In this example, the url attribute specifies the path to the image. +The URL of the example tag begins with a slash (/), which adds the +relative context path of the web application to the beginning of the +path to the image.

+
+
+

Alternatively, you can use the facility described in +Web Resources to point to the image +location. Here are two examples:

+
+
+
+
<h:graphicImage id="mapImage"
+                name="book_all.jpg"
+                library="images"
+                alt="#{bundle.ChooseBook}"
+                usemap="#bookMap" />
+
+<h:graphicImage value="#{resource['images:wave.med.gif']}"/>
+
+
+
+

You can use similar syntax to refer to an image in a style sheet. The +following syntax in a style sheet specifies that the image is to be +found at resources/img/top-background.jpg:

+
+
+
+
header {
+    position: relative;
+    height: 150px;
+    background: #fff url(#{resource['img:top-background.jpg']}) repeat-x;
+    ...
+
+
+
+
+

10.2.7 Laying Out Components with the h:panelGrid and h:panelGroup Tags

+
+

In a JavaServer Faces application, you use a panel as a layout container +for a set of other components. A panel is rendered as an HTML table. +Table 10-6 lists the tags used to create panels.

+
+
+

+
+
+

Table 10-6 Panel Component Tags

+
+ +++++ + + + + + + + + + + + + + + + + + + + +
TagAttributesFunction

h:panelGrid

columns, columnClasses, footerClass, +headerClass, panelClass, rowClasses, role

Displays a table

h:panelGroup

layout

Groups a set of components under one parent

+
+
+
+
+
+
+
+

The h:panelGrid tag is used to represent an entire table. The +h:panelGroup tag is used to represent rows in a table. Other tags are +used to represent individual cells in the rows.

+
+
+

The columns attribute defines how to group the data in the table and +therefore is required if you want your table to have more than one +column. The h:panelGrid tag also has a set of optional attributes that +specify CSS classes: columnClasses, footerClass, headerClass, +panelClass, and rowClasses. The role attribute can have the value +"presentation" to indicate that the purpose of the table is to format +the display rather than to show data.

+
+
+

If the headerClass attribute value is specified, the h:panelGrid tag +must have a header as its first child. Similarly, if a footerClass +attribute value is specified, the h:panelGrid tag must have a footer +as its last child.

+
+
+

Here is an example:

+
+
+
+
<h:panelGrid columns="2"
+             headerClass="list-header"
+             styleClass="list-background"
+             rowClasses="list-row-even, list-row-odd"
+             summary="#{bundle.CustomerInfo}"
+             title="#{bundle.Checkout}"
+             role="presentation">
+    <f:facet name="header">
+        <h:outputText value="#{bundle.Checkout}"/>
+    </f:facet>
+
+    <h:outputLabel for="name" value="#{bundle.Name}" />
+    <h:inputText id="name" size="30"
+                 value="#{cashierBean.name}"
+                 required="true"
+                 requiredMessage="#{bundle.ReqCustomerName}">
+         <f:valueChangeListener
+             type="javaeetutorial.dukesbookstore.listeners.NameChanged" />
+    </h:inputText>
+    <h:message styleClass="error-message" for="name"/>
+
+    <h:outputLabel for="ccno" value="#{bundle.CCNumber}"/>
+    <h:inputText id="ccno"
+                 size="19"
+                 converterMessage="#{bundle.CreditMessage}"
+                 required="true"
+                 requiredMessage="#{bundle.ReqCreditCard}">
+    <f:converter converterId="ccno"/>
+    <f:validateRegex
+        pattern="\d{16}|\d{4} \d{4} \d{4} \d{4}|\d{4}-\d{4}-\d{4}-\d{4}" />
+    </h:inputText>
+    <h:message styleClass="error-message"  for="ccno"/>
+    ...
+</h:panelGrid>
+
+
+
+

The preceding h:panelGrid tag is rendered as a table that contains +components in which a customer inputs personal information. This +h:panelGrid tag uses style sheet classes to format the table. The +following code shows the list-header definition:

+
+
+
+
.list-header {
+    background-color: #ffffff;
+    color: #000000;
+    text-align: center;
+}
+
+
+
+

Because the h:panelGrid tag specifies a headerClass, the +h:panelGrid tag must contain a header. The example h:panelGrid tag +uses an f:facet tag for the header. Facets can have only one child, so +an h:panelGroup tag is needed if you want to group more than one +component within an f:facet. The example h:panelGrid tag has only +one cell of data, so an h:panelGroup tag is not needed. (For more +information about facets, see Using Data-Bound Table +Components.

+
+
+

The h:panelGroup tag has an attribute, layout, in addition to those +listed in Common Component Tag Attributes. If the layout +attribute has the value block, an HTML div element is rendered to +enclose the row; otherwise, an HTML span element is rendered to +enclose the row. If you are specifying styles for the h:panelGroup +tag, you should set the layout attribute to block in order for the +styles to be applied to the components within the h:panelGroup tag. +You should do this because styles, such as those that set width and +height, are not applied to inline elements, which is how content +enclosed by the span element is defined.

+
+
+

An h:panelGroup tag can also be used to encapsulate a nested tree of +components so that the tree of components appears as a single component +to the parent component.

+
+
+

Data, represented by the nested tags, is grouped into rows according to +the value of the columns attribute of the h:panelGrid tag. The +columns attribute in the example is set to 2, and therefore the +table will have two columns. The column in which each component is +displayed is determined by the order in which the component is listed on +the page modulo 2. So, if a component is the fifth one in the list of +components, that component will be in the 5 modulo 2 column, or column +1.

+
+
+
+

10.2.8 Displaying Components for Selecting One Value

+
+

Another commonly used component is one that allows a user to select one +value, whether it is the only value available or one of a set of +choices. The most common tags for this kind of component are as follows:

+
+
+
    +
  • +

    An h:selectBooleanCheckbox tag, displayed as a check box, which +represents a Boolean state

    +
  • +
  • +

    An h:selectOneRadio tag, displayed as a set of options

    +
  • +
  • +

    An h:selectOneMenu tag, displayed as a scrollable list

    +
  • +
  • +

    An h:selectOneListbox tag, displayed as an unscrollable list

    +
  • +
+
+
+

Figure 10-3 shows examples of these components.

+
+
+

Figure 10-3 Example Components for Selecting One Item

+
+ +
+

10.2.8.1 Displaying a Check Box Using the h:selectBooleanCheckbox Tag

+
+

The h:selectBooleanCheckbox tag is the only tag that JavaServer Faces +technology provides for representing a Boolean state.

+
+
+

Here is an example that shows how to use the h:selectBooleanCheckbox +tag:

+
+
+
+
<h:selectBooleanCheckbox id="fanClub"
+                         rendered="false"
+                         binding="#{cashierBean.specialOffer}" />
+<h:outputLabel for="fanClub"
+               rendered="false"
+               binding="#{cashierBean.specialOfferText}"
+               value="#{bundle.DukeFanClub}" />
+
+
+
+

The h:selectBooleanCheckbox tag and the h:outputLabel tag have +rendered attributes that are set to false on the page but are set to +true in the CashierBean under certain circumstances. When the +h:selectBooleanCheckbox tag is rendered, it displays a check box to +allow users to indicate whether they want to join the Duke Fan Club. +When the h:outputLabel tag is rendered, it displays the label for the +check box. The label text is represented by the value attribute.

+
+
+
+

10.2.8.2 Displaying a Menu Using the h:selectOneMenu Tag

+
+

A component that allows the user to select one value from a set of +values can be rendered as a box or a set of options. This section +describes the h:selectOneMenu tag. The h:selectOneRadio and +h:selectOneListbox tags are used in a similar way. The +h:selectOneListbox tag is similar to the h:selectOneMenu tag except +that h:selectOneListbox defines a size attribute that determines how +many of the items are displayed at once.

+
+
+

The h:selectOneMenu tag represents a component that contains a list of +items from which a user can select one item. This menu component is +sometimes known as a drop-down list or a combo box. The following code +snippet shows how the h:selectOneMenu tag is used to allow the user to +select a shipping method:

+
+
+
+
<h:selectOneMenu id="shippingOption"
+                 required="true"
+                 value="#{cashierBean.shippingOption}">
+    <f:selectItem itemValue="2"
+                  itemLabel="#{bundle.QuickShip}"/>
+    <f:selectItem itemValue="5"
+                  itemLabel="#{bundle.NormalShip}"/>
+    <f:selectItem itemValue="7"
+                  itemLabel="#{bundle.SaverShip}"/>
+ </h:selectOneMenu>
+
+
+
+

The value attribute of the h:selectOneMenu tag maps to the property +that holds the currently selected item’s value. In this case, the value +is set by the backing bean. You are not required to provide a value for +the currently selected item. If you don’t provide a value, the browser +determines which one is selected.

+
+
+

Like the h:selectOneRadio tag, the h:selectOneMenu tag must contain +either an f:selectItems tag or a set of f:selectItem tags for +representing the items in the list. Using the f:selectItem +and f:selectItems Tags describes these tags.

+
+
+
+
+

10.2.9 Displaying Components for Selecting Multiple Values

+
+

In some cases, you need to allow your users to select multiple values +rather than just one value from a list of choices. You can do this using +one of the following component tags:

+
+
+
    +
  • +

    An h:selectManyCheckbox tag, displayed as a set of check boxes

    +
  • +
  • +

    An h:selectManyMenu tag, displayed as a menu

    +
  • +
  • +

    An h:selectManyListbox tag, displayed as a box

    +
  • +
+
+
+

Figure 10-4 shows examples of these components.

+
+
+

Figure 10-4 Example Components for Selecting Multiple Values

+
+ +
+

These tags allow the user to select zero or more values from a set of +values. This section explains the h:selectManyCheckbox tag. The +h:selectManyListbox and h:selectManyMenu tags are used in a similar +way.

+
+
+

Unlike a menu, a list displays a subset of items in a box; a menu +displays only one item at a time when the user is not selecting the +menu. The size attribute of the h:selectManyListbox tag determines +the number of items displayed at one time. The box includes a scroll bar +for scrolling through any remaining items in the list.

+
+
+

The h:selectManyCheckbox tag renders a group of check boxes, with each +check box representing one value that can be selected:

+
+
+
+
<h:selectManyCheckbox id="newslettercheckbox"
+                      layout="pageDirection"
+                      value="#{cashierBean.newsletters}">
+    <f:selectItems value="#{cashierBean.newsletterItems}"/>
+</h:selectManyCheckbox>
+
+
+
+

The value attribute of the h:selectManyCheckbox tag identifies the +newsletters property of the CashierBean managed bean. This property +holds the values of the currently selected items from the set of check +boxes. You are not required to provide a value for the currently +selected items. If you don’t provide a value, the first item in the list +is selected by default. In the CashierBean managed bean, this value is +instantiated to 0, so no items are selected by default.

+
+
+

The layout attribute indicates how the set of check boxes is arranged +on the page. Because layout is set to pageDirection, the check boxes +are arranged vertically. The default is lineDirection, which aligns +the check boxes horizontally.

+
+
+

The h:selectManyCheckbox tag must also contain a tag or set of tags +representing the set of check boxes. To represent a set of items, you +use the f:selectItems tag. To represent each item individually, you +use the f:selectItem tag. The following section explains these tags in +more detail.

+
+
+
+

10.2.10 Using the f:selectItem and f:selectItems Tags

+
+

The f:selectItem and f:selectItems tags represent components that +can be nested inside a component that allows you to select one or +multiple items. An f:selectItem tag contains the value, label, and +description of a single item. An f:selectItems tag contains the +values, labels, and descriptions of the entire list of items.

+
+
+

You can use either a set of f:selectItem tags or a single +f:selectItems tag within your component tag.

+
+
+

The advantages of using the f:selectItems tag are as follows.

+
+
+
    +
  • +

    Items can be represented by using different data structures, including +Array, Map, and Collection. The value of the f:selectItems tag +can represent even a generic collection of POJOs.

    +
  • +
  • +

    Different lists can be concatenated into a single component, and the +lists can be grouped within the component.

    +
  • +
  • +

    Values can be generated dynamically at runtime.

    +
  • +
+
+
+

The advantages of using f:selectItem are as follows.

+
+
+
    +
  • +

    Items in the list can be defined from the page.

    +
  • +
  • +

    Less code is needed in the backing bean for the f:selectItem +properties.

    +
  • +
+
+
+

The rest of this section shows you how to use the f:selectItems and +f:selectItem tags.

+
+
+

10.2.10.1 Using the f:selectItems Tag

+
+

The following example from Displaying Components for +Selecting Multiple Values shows how to use the h:selectManyCheckbox +tag:

+
+
+
+
<h:selectManyCheckbox id="newslettercheckbox"
+                      layout="pageDirection"
+                      value="#{cashierBean.newsletters}">
+    <f:selectItems value="#{cashierBean.newsletterItems}"/>
+</h:selectManyCheckbox>
+
+
+
+

The value attribute of the f:selectItems tag is bound to the managed +bean property cashierBean.newsletterItems. The individual SelectItem +objects are created programmatically in the managed bean.

+
+
+

See UISelectItems Properties for +information on how to write a managed bean property for one of these +tags.

+
+
+
+

10.2.10.2 Using the f:selectItem Tag

+
+

The f:selectItem tag represents a single item in a list of items. Here +is the example from Displaying a Menu Using the +h:selectOneMenu Tag once again:

+
+
+
+
<h:selectOneMenu id="shippingOption"
+                 required="true"
+                 value="#{cashierBean.shippingOption}">
+    <f:selectItem itemValue="2"
+                  itemLabel="#{bundle.QuickShip}"/>
+    <f:selectItem itemValue="5"
+                  itemLabel="#{bundle.NormalShip}"/>
+    <f:selectItem itemValue="7"
+                  itemLabel="#{bundle.SaverShip}"/>
+ </h:selectOneMenu>
+
+
+
+

The itemValue attribute represents the value for the f:selectItem +tag. The itemLabel attribute represents the String that appears in +the list component on the page.

+
+
+

The itemValue and itemLabel attributes are value-binding enabled, +meaning that they can use value-binding expressions to refer to values +in external objects. These attributes can also define literal values, as +shown in the example h:selectOneMenu tag.

+
+
+
+
+

10.2.11 Displaying the Results from Selection Components

+
+

If you display components that allow a user to select values, you may +also want to display the result of the selection.

+
+
+

For example, you might want to thank a user who selected the checkbox to +join the Duke Fan Club, as described in Displaying a Check +Box Using the h:selectBooleanCheckbox Tag. Because the checkbox is +bound to the specialOffer property of CashierBean, a +UISelectBoolean value, you can call the isSelected method of the +property to determine whether to render a thank-you message:

+
+
+
+
<h:outputText value="#{bundle.DukeFanClubThanks}"
+              rendered="#{cashierBean.specialOffer.isSelected()}"/>
+
+
+
+

Similarly, you might want to acknowledge that a user subscribed to +newsletters using the h:selectManyCheckbox tag, as described in +Displaying Components for Selecting Multiple Values. To do +so, you can retrieve the value of the newsletters property, the +String array that holds the selected items:

+
+
+
+
<h:outputText value="#{bundle.NewsletterThanks}"
+              rendered="#{!empty cashierBean.newsletters}"/>
+<ul>
+    <ui:repeat value="#{cashierBean.newsletters}" var="nli">
+        <li><h:outputText value="#{nli}" /></li>
+    </ui:repeat>
+</ul>
+
+
+
+

An introductory thank-you message is displayed only if the newsletters +array is not empty. Then a ui:repeat tag, a simple way to show values +in a loop, displays the contents of the selected items in an itemized +list. (This tag is listed in Table 8-2.)

+
+
+
+

10.2.12 Using Data-Bound Table Components

+
+

Data-bound table components display relational data in a tabular format. +In a JavaServer Faces application, the h:dataTable component tag +supports binding to a collection of data objects and displays the data +as an HTML table. The h:column tag represents a column of data within +the table, iterating over each record in the data source, which is +displayed as a row. Here is an example:

+
+
+
+
<h:dataTable id="items"
+             captionClass="list-caption
+             columnClasses="list-column-center, list-column-left,
+             list-column-right, list-column-center"
+             footerClass="list-footer"
+             headerClass="list-header"
+             rowClasses="list-row-even, list-row-odd"
+             styleClass="list-background"
+             summary="#{bundle.ShoppingCart}"
+             value="#{cart.items}"
+             border="1"
+             var="item">
+    <h:column>
+        <f:facet name="header">
+            <h:outputText value="#{bundle.ItemQuantity}" />
+        </f:facet>
+        <h:inputText id="quantity"
+                     size="4"
+                     value="#{item.quantity}"
+                     title="#{bundle.ItemQuantity}">
+            <f:validateLongRange minimum="1"/>
+            <f:valueChangeListener
+                type="javaeetutorial.dukesbookstore.listeners.QuantityChanged"/>
+        </h:inputText>
+    </h:column>
+    <h:column>
+        <f:facet name="header">
+            <h:outputText value="#{bundle.ItemTitle}"/>
+        </f:facet>
+        <h:commandLink action="#{showcart.details}">
+            <h:outputText value="#{item.item.title}"/>
+        </h:commandLink>
+    </h:column>
+    ...
+    <f:facet name="footer"
+        <h:panelGroup>
+            <h:outputText value="#{bundle.Subtotal}"/>
+            <h:outputText value="#{cart.total}" />
+                <f:convertNumber currencySymbol="$" type="currency" />
+            </h:outputText>
+        </h:panelGroup>
+    </f:facet>
+    <f:facet name="caption">
+        <h:outputText value="#{bundle.Caption}"/>
+    </f:facet>
+</h:dataTable>
+
+
+
+

The example h:dataTable tag displays the books in the shopping cart as +well as the quantity of each book in the shopping cart, the prices, and +a set of buttons the user can click to remove books from the shopping +cart.

+
+
+

The h:column tags represent columns of data in a data component. While +the data component is iterating over the rows of data, it processes the +column component associated with each h:column tag for each row in the +table.

+
+
+

The h:dataTable tag shown in the preceding code example iterates +through the list of books (cart.items) in the shopping cart and +displays their titles, authors, and prices. Each time the h:dataTable +tag iterates through the list of books, it renders one cell in each +column.

+
+
+

The h:dataTable and h:column tags use facets to represent parts of +the table that are not repeated or updated. These parts include headers, +footers, and captions.

+
+
+

In the preceding example, h:column tags include f:facet tags for +representing column headers or footers. The h:column tag allows you to +control the styles of these headers and footers by supporting the +headerClass and footerClass attributes. These attributes accept +space-separated lists of CSS classes, which will be applied to the +header and footer cells of the corresponding column in the rendered +table.

+
+
+

Facets can have only one child, so an h:panelGroup tag is needed if +you want to group more than one component within an f:facet. Because +the facet tag representing the footer includes more than one tag, the +h:panelGroup tag is needed to group those tags. Finally, this +h:dataTable tag includes an f:facet tag with its name attribute +set to caption, causing a table caption to be rendered above the +table.

+
+
+

This table is a classic use case for a data component because the number +of books might not be known to the application developer or the page +author when that application is developed. The data component can +dynamically adjust the number of rows of the table to accommodate the +underlying data.

+
+
+

The value attribute of an h:dataTable tag references the data to be +included in the table. This data can take the form of any of the +following:

+
+
+
    +
  • +

    A list of beans

    +
  • +
  • +

    An array of beans

    +
  • +
  • +

    A single bean

    +
  • +
  • +

    A javax.faces.model.DataModel object

    +
  • +
  • +

    A java.sql.ResultSet object

    +
  • +
  • +

    A javax.servlet.jsp.jstl.sql.Result object

    +
  • +
  • +

    A javax.sql.RowSet object

    +
  • +
+
+
+

All data sources for data components have a DataModel wrapper. Unless +you explicitly construct a DataModel wrapper, the JavaServer Faces +implementation will create one around data of any of the other +acceptable types. See Writing Bean +Properties for more information on how to write properties for use with +a data component.

+
+
+

The var attribute specifies a name that is used by the components +within the h:dataTable tag as an alias to the data referenced in the +value attribute of h:dataTable.

+
+
+

In the example h:dataTable tag, the value attribute points to a list +of books. The var attribute points to a single book in that list. As +the h:dataTable tag iterates through the list, each reference to +item points to the current book in the list.

+
+
+

The h:dataTable tag also has the ability to display only a subset of +the underlying data. This feature is not shown in the preceding example. +To display a subset of the data, you use the optional first and rows +attributes.

+
+
+

The first attribute specifies the first row to be displayed. The +rows attribute specifies the number of rows, starting with the first +row, to be displayed. For example, if you wanted to display records 2 +through 10 of the underlying data, you would set first to 2 and rows +to 9. When you display a subset of the data in your pages, you might +want to consider including a link or button that causes subsequent rows +to display when clicked. By default, both first and rows are set to +zero, and this causes all the rows of the underlying data to display.

+
+
+

Table 10-7 shows the optional attributes for the +h:dataTable tag.

+
+
+

+
+
+

Table 10-7 Optional Attributes for the h:dataTable Tag

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AttributeDefines Styles For

captionClass

Table caption

columnClasses

All the columns

footerClass

Footer

headerClass

Header

rowClasses

Rows

styleClass

The entire table

+
+
+
+
+
+
+
+

Each of the attributes in Table 10-7 can specify more than +one style. If columnClasses or rowClasses specifies more than one +style, the styles are applied to the columns or rows in the order that +the styles are listed in the attribute. For example, if columnClasses +specifies styles list-column-center and list-column-right, and if +the table has two columns, the first column will have style +list-column-center, and the second column will have style +list-column-right.

+
+
+

If the style attribute specifies more styles than there are columns or +rows, the remaining styles will be assigned to columns or rows starting +from the first column or row. Similarly, if the style attribute +specifies fewer styles than there are columns or rows, the remaining +columns or rows will be assigned styles starting from the first style.

+
+
+
+

10.2.13 Displaying Error Messages with the h:message and h:messages Tags

+
+

The h:message and h:messages tags are used to display error messages +when conversion or validation fails. The h:message tag displays error +messages related to a specific input component, whereas the h:messages +tag displays the error messages for the entire page.

+
+
+

Here is an example h:message tag from the guessnumber-jsf +application:

+
+
+
+
<p>
+    <h:inputText id="userNo"
+                 title="Type a number from 0 to 10:"
+                 value="#{userNumberBean.userNumber}">
+        <f:validateLongRange minimum="#{userNumberBean.minimum}"
+                             maximum="#{userNumberBean.maximum}"/>
+   </h:inputText>
+   <h:commandButton id="submit" value="Submit"
+                    action="response"/>
+</p>
+<h:message showSummary="true" showDetail="false"
+           style="color: #d20005;
+           font-family: 'New Century Schoolbook', serif;
+           font-style: oblique;
+           text-decoration: overline"
+           id="errors1"
+           for="userNo"/>
+
+
+
+

The for attribute refers to the ID of the component that generated the +error message. The error message is displayed at the same location that +the h:message tag appears in the page. In this case, the error message +will appear below the Submit button.

+
+
+

The style attribute allows you to specify the style of the text of the +message. In the example in this section, the text will be a shade of +red, New Century Schoolbook, serif font family, and oblique style, and a +line will appear over the text. The message and messages tags support +many other attributes for defining styles. For more information on these +attributes, refer to the oJavaServer Faces Facelets Tag +Library documentation.

+
+
+

Another attribute supported by the h:messages tag is the layout +attribute. Its default value is list, which indicates that the +messages are displayed in a bullet list using the HTML ul and li +elements. If you set the attribute value to table, the messages will +be rendered in a table using the HTML table element.

+
+
+

The preceding example shows a standard validator that is registered on +the input component. The message tag displays the error message that is +associated with this validator when the validator cannot validate the +input component’s value. In general, when you register a converter or +validator on a component, you are queueing the error messages associated +with the converter or validator on the component. The h:message and +h:messages tags display the appropriate error messages that are queued +on the component when the validators or converters registered on that +component fail to convert or validate the component’s value.

+
+
+

Standard error messages are provided with standard converters and +standard validators. An application architect can override these +standard messages and supply error messages for custom converters and +validators by registering custom error messages with the application.

+
+
+
+ +
+

The ability to create bookmarkable URLs refers to the ability to +generate links based on a specified navigation outcome and on component +parameters.

+
+
+

In HTTP, most browsers by default send GET requests for URL retrieval +and POST requests for data processing. The GET requests can have query +parameters and can be cached, which is not advised for POST requests, +which send data to servers for processing. The other JavaServer Faces +tags capable of generating links use either simple GET requests, as in +the case of h:outputLink, or POST requests, as in the case of +h:commandLink or h:commandButton tags. GET requests with query +parameters provide finer granularity to URL strings. These URLs are +created with one or more name=value parameters appended to the simple +URL after a ? character and separated by either &; or &amp; +strings.

+
+
+

To create a bookmarkable URL, use an h:link or h:button tag. Both of +these tags can generate a link based on the outcome attribute of the +component. For example:

+
+
+
+
<h:link outcome="somepage" value="Message" />
+
+
+
+

The h:link tag will generate a URL link that points to the +somepage.xhtml file on the same server. The following sample HTML is +generated from the preceding tag, assuming that the application name is +simplebookmark:

+
+
+
+
<a href="/simplebookmark/somepage.xhtml>Message</a>
+
+
+
+

This is a simple GET request that cannot pass any data from page to +page. To create more complex GET requests and utilize the complete +functionality of the h:link tag, use view parameters.

+
+
+
+

10.2.15 Using View Parameters to Configure Bookmarkable URLs

+
+

To pass a parameter from one page to another, use the +includeViewParams attribute in your h:link tag and, in addition, use +an f:param tag to specify the name and value to be passed. Here the +h:link tag specifies the outcome page as personal.xhtml and provides +a parameter named Result whose value is a managed bean property:

+
+
+
+
<h:body>
+    <h:form>
+        <h:graphicImage url="#{resource['images:duke.waving.gif']}"
+                        alt="Duke waving his hand"/>
+        <h2>Hello, #{hello.name}!</h2>
+        <p>I've made your
+            <h:link outcome="personal" value="personal greeting page!"
+                    includeViewParams="true">
+                <f:param name="Result" value="#{hello.name}"/>
+            </h:link>
+        </p>
+        <h:commandButton id="back" value="Back" action="index" />
+    </h:form>
+</h:body>
+
+
+
+

If the includeViewParams attribute is set on the component, the view +parameters are added to the hyperlink. Therefore, the resulting URL will +look something like this if the value of hello.name is Timmy:

+
+
+
+
http://localhost:8080/bookmarks/personal.xhtml?Result=Timmy
+
+
+
+

On the outcome page, specify the core tags f:metadata and +f:viewparam as the source of parameters for configuring the URLs. View +parameters are declared as part of f:metadata for a page, as shown in +the following example:

+
+
+
+
<f:metadata>
+    <f:viewParam name="Result" value="#{hello.name}"/>
+</f:metadata>
+
+
+
+

This allows you to specify the bean property value on the page:

+
+
+
+
<h:outputText value="Howdy, #{hello.name}!" />
+
+
+
+

As a view parameter, the name also appears in the page’s URL. If you +edit the URL, you change the output on the page.

+
+
+

Because the URL can be the result of various parameter values, the order +of the URL creation has been predefined. The order in which the various +parameter values are read is as follows:

+
+
+
    +
  1. +

    Component

    +
  2. +
  3. +

    Navigation-case parameters

    +
  4. +
  5. +

    View parameters

    +
  6. +
+
+
+
+

10.2.16 The bookmarks Example Application

+
+

The bookmarks example application modifies the hello1 application +described in A Web Module That Uses JavaServer +Faces Technology: The hello1 Example to use a bookmarkable URL that +uses view parameters.

+
+
+

Like hello1, the application includes the Hello.java managed bean, +an index.xhtml page, and a response.xhtml page. In addition, it +includes a personal.xhtml page, to which a bookmarkable URL and view +parameters are passed from the response.xhtml page, as described in +Using View Parameters to Configure Bookmarkable URLs.

+
+
+

You can use either NetBeans IDE or Maven to build, package, deploy, and +run the bookmarks example. The source code for this example is in the +tut-install`/examples/web/jsf/bookmarks/` directory.

+
+
+

The following topics are addressed here:

+
+ +
+

10.2.16.1 To Build, Package, and Deploy the bookmarks Example Using +NetBeans IDE +^^^^^^^^^^^^^^^^^^^^^^^^^^^^

+
+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    From the File menu, choose Open Project.

    +
  4. +
  5. +

    In the Open Project dialog box, navigate to:

    +
    +
    +
    tut-install/examples/web/jsf
    +
    +
    +
  6. +
  7. +

    Select the bookmarks folder.

    +
  8. +
  9. +

    Click Open Project.

    +
  10. +
  11. +

    In the Projects tab, right-click the bookmarks project and select +Build.

    +
    +

    This option builds the example application and deploys it to your +GlassFish Server instance.

    +
    +
  12. +
+
+
+

10.2.16.2 To Build, Package, and Deploy the bookmarks Example Using +Maven +^^^^^^^^^^^^^^^^^^^^^^^^^

+
+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    In a terminal window, go to:

    +
    +
    +
    tut-install/examples/web/jsf/bookmarks/
    +
    +
    +
  4. +
  5. +

    Enter the following command:

    +
    +
    +
    mvn install
    +
    +
    +
    +

    This command builds and packages the application into a WAR file, +bookmarks.war, that is located in the target directory. It then +deploys the WAR file to your GlassFish Server instance.

    +
    +
  6. +
+
+
+

10.2.16.3 To Run the bookmarks Example

+
+
    +
  1. +

    Enter the following URL in your web browser:

    +
    +
    +
    http://localhost:8080/bookmarks
    +
    +
    +
  2. +
  3. +

    In the text field, enter a name and click Submit.

    +
  4. +
  5. +

    On the response page, move your mouse over the "personal greeting +page" link to view the URL with the view parameter, then click the link.

    +
    +

    The personal.xhtml page opens, displaying a greeting to the name you +typed.

    +
    +
  6. +
  7. +

    In the URL field, modify the Result parameter value and press +Return.

    +
    +

    The name in the greeting changes to what you typed.

    +
    +
  8. +
+
+
+
+
+

10.2.17 Resource Relocation Using h:outputScript and h:outputStylesheetTags

+
+

Resource relocation refers to the ability of a JavaServer Faces +application to specify the location where a resource can be rendered. +Resource relocation can be defined with the following HTML tags:

+
+
+
    +
  • +

    h:outputScript

    +
  • +
  • +

    h:outputStylesheet

    +
  • +
+
+
+

These tags have name and target attributes, which can be used to +define the render location. For a complete list of attributes for these +tags, see theoJavaServer Faces Facelets Tag Library +documentation.

+
+
+

For the h:outputScript tag, the name and target attributes define +where the output of a resource may appear. Here is an example:

+
+
+
+
<html xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:h="http://xmlns.jcp.org/jsf/html">
+    <h:head id="head">
+        <title>Resource Relocation</title>
+    </h:head>
+    <h:body id="body">
+        <h:form id="form">
+            <h:outputScript name="hello.js"/>
+            <h:outputStylesheet name="hello.css"/>
+        </h:form>
+    </h:body>
+</html>
+
+
+
+

Because the target attribute is not defined in the tags, the style +sheet hello.css is rendered in the head element of the page, and the +hello.js script is rendered in the body of the page.

+
+
+

Here is the HTML generated by the preceding code:

+
+
+
+
<html xmlns="http://www.w3.org/1999/xhtml">
+    <head>
+        <title>Resource Relocation</title>
+        <link type="text/css" rel="stylesheet"
+              href="/context-root/javax.faces.resource/hello.css"/>
+    </head>
+    <body>
+        <form id="form" name="form" method="post"
+              action="..." enctype="...">
+            <script type="text/javascript"
+                    src="/context-root/javax.faces.resource/hello.js">
+            </script>
+        </form>
+    </body>
+</html>
+
+
+
+

If you set the target attribute for the h:outputScript tag, the +incoming GET request provides the location parameter. Here is an +example:

+
+
+
+
<html xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:h="http://xmlns.jcp.org/jsf/html">
+    <h:head id="head">
+        <title>Resource Relocation</title>
+    </h:head>
+    <h:body id="body">
+        <h:form id="form">
+            <h:outputScript name="hello.js" target="#{param.location}"/>
+            <h:outputStylesheet name="hello.css"/>
+        </h:form>
+    </h:body>
+</html>
+
+
+
+

In this case, if the incoming request does not provide a location +parameter, the default locations will still apply: The style sheet is +rendered in the head, and the script is rendered inline. However, if the +incoming request specifies the location parameter as the head, both the +style sheet and the script will be rendered in the head element.

+
+
+

The HTML generated by the preceding code is as follows:

+
+
+
+
<html xmlns="http://www.w3.org/1999/xhtml">
+    <head>
+        <title>Resource Relocation</title>
+        <link type="text/css" rel="stylesheet"
+              href="/context-root/javax.faces.resource/hello.css"/>
+        <script type="text/javascript"
+                src="/context-root/javax.faces.resource/hello.js">
+          </script>
+    </head>
+    <body>
+        <form id="form" name="form" method="post"
+              action="..." enctype="...">
+        </form>
+    </body>
+</html>
+
+
+
+

Similarly, if the incoming request provides the location parameter as +the body, the script will be rendered in the body element.

+
+
+

The preceding section describes simple uses for resource relocation. +That feature can add even more functionality for the components and +pages. A page author does not have to know the location of a resource or +its placement.

+
+
+

By using a @ResourceDependency annotation for the components, +component authors can define the resources for the component, such as a +style sheet and script. This allows the page authors freedom from +defining resource locations.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/jsf-page003.html b/jsf-page003.html new file mode 100644 index 0000000..10e076e --- /dev/null +++ b/jsf-page003.html @@ -0,0 +1,493 @@ + + + + + + Using Core Tags + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

10.3 Using Core Tags

+
+
+

The tags included in the JavaServer Faces core tag library are used to +perform core actions that are not performed by HTML tags.

+
+
+

Table 10-8 lists the event-handling core tags.

+
+
+

+
+
+

Table 10-8 Event-Handling Core Tags

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + +
TagFunction

f:actionListener

Adds an action listener to a parent component

f:phaseListener

Adds a PhaseListener to a page

f:setPropertyActionListener

Registers a special action listener +whose sole purpose is to push a value into a managed bean when a form is +submitted

f:valueChangeListener

Adds a value-change listener to a parent +component

+
+
+
+
+
+
+
+

Table 10-9 lists the data-conversion core tags.

+
+
+

+
+
+

Table 10-9 Data-Conversion Core Tags

+
+ ++++ + + + + + + + + + + + + + + + + + + + + +
TagFunction

f:converter

Adds an arbitrary converter to the parent component

f:convertDateTime

Adds a DateTimeConverter instance to the parent +component

f:convertNumber

Adds a NumberConverter instance to the parent +component

+
+
+
+
+
+
+
+

Table 10-10 lists the facet core tags.

+
+
+

+
+
+

Table 10-10 Facet Core Tags

+
+ ++++ + + + + + + + + + + + + + + + + +
TagFunction

f:facet

Adds a nested component that has a special relationship to +its enclosing tag

f:metadata

Registers a facet on a parent component

+
+
+
+
+
+
+
+

Table 10-11 lists the core tags that represent items in a +list.

+
+
+

+
+
+

Table 10-11 Core Tags That Represent Items in a List

+
+ ++++ + + + + + + + + + + + + + + + + +
TagFunction

f:selectItem

Represents one item in a list of items

f:selectItems

Represents a set of items

+
+
+
+
+
+
+
+

Table 10-12 lists the validator core tags.

+
+
+

+
+
+

Table 10-12 Validator Core Tags

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TagFunction

f:validateDoubleRange

Adds a DoubleRangeValidator to a component

f:validateLength

Adds a LengthValidator to a component

f:validateLongRange

Adds a LongRangeValidator to a component

f:validator

Adds a custom validator to a component

f:validateRegEx

Adds a RegExValidator to a component

f:validateBean

Delegates the validation of a local value to a +BeanValidator

f:validateRequired

Enforces the presence of a value in a component

+
+
+
+
+
+
+
+

Table 10-13 lists the core tags that fall into other +categories.

+
+
+

+
+
+

Table 10-13 Miscellaneous Core Tags

+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Tag CategoryTagFunction

Attribute configuration

f:attribute

Adds configurable attributes to +a parent component

Localization

f:loadBundle

Specifies a ResourceBundle that is +exposed as a Map

Parameter substitution

f:param

Substitutes parameters into a +MessageFormat instance and adds query string name-value pairs to a URL

Ajax

f:ajax

Associates an Ajax action with a single component or a +group of components based on placement

Event

f:event

Allows installing a ComponentSystemEventListener on +a component

+
+
+
+
+
+
+
+

These tags, which are used in conjunction with component tags, are +explained in other sections of this tutorial.

+
+
+

Table 10-14 lists the sections that explain how to use +specific core tags.

+
+
+

+
+
+

Table 10-14 Where the Core Tags Are Explained

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TagsWhere Explained

Event-handling tags

Data-conversion tags

f:facet

Using Data-Bound Table +Components and Laying Out Components with +the h:panelGrid and h:panelGroup Tags

f:loadBundle

f:metadata

f:param

f:selectItem and f:selectItems

Validator tags

Using the Standard +Validators

f:ajax

+
+
+
+
+
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/jsonp.html b/jsonp.html new file mode 100644 index 0000000..a723086 --- /dev/null +++ b/jsonp.html @@ -0,0 +1,121 @@ + + + + + + JSON Processing + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

19 JSON Processing

+
+
+

This chapter describes the Java API for JSON Processing (JSR 353). JSON +is a data exchange format widely used in web services and other +connected applications. JSR 353 provides an API to parse, transform, and +query JSON data using the object model or the streaming model.

+
+
+

The following topics are addressed here:

+
+ +
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/jsonp001.html b/jsonp001.html new file mode 100644 index 0000000..76a3517 --- /dev/null +++ b/jsonp001.html @@ -0,0 +1,223 @@ + + + + + + Introduction to JSON + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

19.1 Introduction to JSON

+
+
+

JSON is a text-based data exchange format derived from JavaScript that +is used in web services and other connected applications. The following +sections provide an introduction to JSON syntax, an overview of JSON +uses, and a description of the most common approaches to generate and +parse JSON.

+
+
+

The following topics are addressed here:

+
+ +
+

19.1.1 JSON Syntax

+
+

JSON defines only two data structures: objects and arrays. An object is +a set of name-value pairs, and an array is a list of values. JSON +defines seven value types: string, number, object, array, true, false, +and null.

+
+
+

The following example shows JSON data for a sample object that contains +name-value pairs. The value for the name "phoneNumbers" is an array +whose elements are two objects.

+
+
+
+
{
+   "firstName": "Duke",
+   "lastName": "Java",
+   "age": 18,
+   "streetAddress": "100 Internet Dr",
+   "city": "JavaTown",
+   "state": "JA",
+   "postalCode": "12345",
+   "phoneNumbers": [
+      { "Mobile": "111-111-1111" },
+      { "Home": "222-222-2222" }
+   ]
+}
+
+
+
+

JSON has the following syntax.

+
+
+
    +
  • +

    Objects are enclosed in braces ({}), their name-value pairs are +separated by a comma (,), and the name and value in a pair are +separated by a colon (:). Names in an object are strings, whereas +values may be of any of the seven value types, including another object +or an array.

    +
  • +
  • +

    Arrays are enclosed in brackets ([]), and their values are separated +by a comma (,). Each value in an array may be of a different type, +including another array or an object.

    +
  • +
  • +

    When objects and arrays contain other objects or arrays, the data has +a tree-like structure.

    +
  • +
+
+
+
+

19.1.2 Uses of JSON

+
+

JSON is often used as a common format to serialize and deserialize data +in applications that communicate with each other over the Internet. +These applications are created using different programming languages and +run in very different environments. JSON is suited to this scenario +because it is an open standard, it is easy to read and write, and it is +more compact than other representations.

+
+
+

RESTful web services use JSON extensively as the format for the data +inside requests and responses. The HTTP header used to indicate that the +content of a request or a response is JSON data is

+
+
+
+
Content-Type: application/json
+
+
+
+

JSON representations are usually more compact than XML representations +because JSON does not have closing tags. Unlike XML, JSON does not have +a widely accepted schema for defining and validating the structure of +JSON data.

+
+
+
+

19.1.3 Generating and Parsing JSON Data

+
+

For generating and parsing JSON data, there are two programming models, +which are similar to those used for XML documents.

+
+
+
    +
  • +

    The object model creates a tree that represents the JSON data in +memory. The tree can then be navigated, analyzed, or modified. This +approach is the most flexible and allows for processing that requires +access to the complete contents of the tree. However, it is often slower +than the streaming model and requires more memory. The object model +generates JSON output by navigating the entire tree at once.

    +
  • +
  • +

    The streaming model uses an event-based parser that reads JSON data +one element at a time. The parser generates events and stops for +processing when an object or an array begins or ends, when it finds a +key, or when it finds a value. Each element can be processed or +discarded by the application code, and then the parser proceeds to the +next event. This approach is adequate for local processing, in which the +processing of an element does not require information from the rest of +the data. The streaming model generates JSON output to a given stream by +making a function call with one element at a time.

    +
  • +
+
+
+

There are many JSON generators and parsers available for different +programming languages and environments. JSON +Processing in the Java EE Platform describes the functionality provided +by the Java API for JSON Processing (JSR 353).

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/jsonp002.html b/jsonp002.html new file mode 100644 index 0000000..63571bc --- /dev/null +++ b/jsonp002.html @@ -0,0 +1,225 @@ + + + + + + JSON Processing in the Java EE Platform + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

19.2 JSON Processing in the Java EE Platform

+
+
+

Java EE includes support for JSR 353, which provides an API to parse, +transform, and query JSON data using the object model or the streaming +model described in Generating and Parsing +JSON Data. The Java API for JSON Processing contains the following +packages.

+
+
+
    +
  • +

    The javax.json package contains a reader interface, a writer +interface, and a model builder interface for the object model. This +package also contains other utility classes and Java types for JSON +elements. Table 19-1 lists the main classes and +interfaces in this package.

    +
  • +
  • +

    The javax.json.stream package contains a parser interface and a +generator interface for the streaming model. Table 19-2 +lists the main classes and interfaces in this package.

    +
  • +
+
+
+

+
+
+

Table 19-1 Main Classes and Interfaces in javax.json

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Class or InterfaceDescription

Json

Contains static methods to create instances of JSON parsers, +builders, and generators. This class also contains methods to create +parser, builder, and generator factory objects.

JsonReader

Reads JSON data from a stream and creates an object model +in memory.

+

JsonObjectBuilder

+
+
+

JsonArrayBuilder

+

Create an object model or an array model in memory by adding elements +from application code.

JsonWriter

Writes an object model from memory to a stream.

JsonValue

Represents an element (such as an object, an array, or a +value) in JSON data.

JsonStructure

Represents an object or an array in JSON data. This +interface is a subtype of JsonValue.

+

JsonObject

+
+
+

JsonArray

+

Represent an object or an array in JSON data. These two interfaces are +subtypes of JsonStructure.

+

JsonString

+
+
+

JsonNumber

+

Represent data types for elements in JSON data. These two interfaces +are subtypes of JsonValue.

JsonException

Indicates that a problem occurred during JSON +processing.

+
+
+
+
+
+
+
+

+
+
+

Table 19-2 Main Classes and Interfaces in javax.json.stream

+
+ ++++ + + + + + + + + + + + + + + + + +
Class or InterfaceDescription

JsonParser

Represents an event-based parser that can read JSON data +from a stream or from an object model.

JsonGenerator

Writes JSON data to a stream one element at a time.

+
+
+
+
+
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/jsonp003.html b/jsonp003.html new file mode 100644 index 0000000..75404a4 --- /dev/null +++ b/jsonp003.html @@ -0,0 +1,339 @@ + + + + + + Using the Object Model API + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

19.3 Using the Object Model API

+
+
+

This section describes four use cases of the object model API: creating +an object model from JSON data, creating an object model from +application code, navigating an object model, and writing an object +model to a stream.

+
+
+

The following topics are addressed here:

+
+ +
+

19.3.1 Creating an Object Model from JSON Data

+
+

The following code demonstrates how to create an object model from JSON +data in a text file:

+
+
+
+
import java.io.FileReader;
+import javax.json.Json;
+import javax.json.JsonReader;
+import javax.json.JsonStructure;
+...
+JsonReader reader = Json.createReader(new FileReader("jsondata.txt"));
+JsonStructure jsonst = reader.read();
+
+
+
+

The object reference jsonst can be either of type JsonObject or of +type JsonArray, depending on the contents of the file. JsonObject +and JsonArray are subtypes of JsonStructure. This reference +represents the top of the tree and can be used to navigate the tree or +to write it to a stream as JSON data.

+
+
+
+

19.3.2 Creating an Object Model from Application Code

+
+

The following code demonstrates how to create an object model from +application code:

+
+
+
+
import javax.json.Json;
+import javax.json.JsonObject;
+...
+JsonObject model = Json.createObjectBuilder()
+   .add("firstName", "Duke")
+   .add("lastName", "Java")
+   .add("age", 18)
+   .add("streetAddress", "100 Internet Dr")
+   .add("city", "JavaTown")
+   .add("state", "JA")
+   .add("postalCode", "12345")
+   .add("phoneNumbers", Json.createArrayBuilder()
+      .add(Json.createObjectBuilder()
+         .add("type", "mobile")
+         .add("number", "111-111-1111"))
+      .add(Json.createObjectBuilder()
+         .add("type", "home")
+         .add("number", "222-222-2222")))
+   .build();
+
+
+
+

The object reference model represents the top of the tree, which is +created by nesting calls to the add methods and built by calling the +build method. The JsonObjectBuilder class contains the following +add methods:

+
+
+
+
JsonObjectBuilder add(String name, BigDecimal value)
+JsonObjectBuilder add(String name, BigInteger value)
+JsonObjectBuilder add(String name, boolean value)
+JsonObjectBuilder add(String name, double value)
+JsonObjectBuilder add(String name, int value)
+JsonObjectBuilder add(String name, JsonArrayBuilder builder)
+JsonObjectBuilder add(String name, JsonObjectBuilder builder)
+JsonObjectBuilder add(String name, JsonValue value)
+JsonObjectBuilder add(String name, long value)
+JsonObjectBuilder add(String name, String value)
+JsonObjectBuilder addNull(String name)
+
+
+
+

The JsonArrayBuilder class contains similar add methods that do not +have a name (key) parameter. You can nest arrays and objects by passing +a new JsonArrayBuilder object or a new JsonObjectBuilder object to +the corresponding add method, as shown in this example.

+
+
+

The resulting tree represents the JSON data from +JSON Syntax.

+
+
+
+ +
+

The following code demonstrates a simple approach to navigating an +object model:

+
+
+
+
import javax.json.JsonValue;
+import javax.json.JsonObject;
+import javax.json.JsonArray;
+import javax.json.JsonNumber;
+import javax.json.JsonString;
+...
+public static void navigateTree(JsonValue tree, String key) {
+   if (key != null)
+      System.out.print("Key " + key + ": ");
+   switch(tree.getValueType()) {
+      case OBJECT:
+         System.out.println("OBJECT");
+         JsonObject object = (JsonObject) tree;
+         for (String name : object.keySet())
+            navigateTree(object.get(name), name);
+         break;
+      case ARRAY:
+         System.out.println("ARRAY");
+         JsonArray array = (JsonArray) tree;
+         for (JsonValue val : array)
+            navigateTree(val, null);
+         break;
+      case STRING:
+         JsonString st = (JsonString) tree;
+         System.out.println("STRING " + st.getString());
+         break;
+      case NUMBER:
+         JsonNumber num = (JsonNumber) tree;
+         System.out.println("NUMBER " + num.toString());
+         break;
+      case TRUE:
+      case FALSE:
+      case NULL:
+         System.out.println(tree.getValueType().toString());
+         break;
+   }
+}
+
+
+
+

The method navigateTree can be used with the models built in +Creating an Object Model from JSON Data and +Creating an Object Model from Application Code as +follows:

+
+
+
+
navigateTree(model, null);
+
+
+
+

The navigateTree method takes two arguments: a JSON element and a key. +The key is used only to help print the key-value pairs inside objects. +Elements in a tree are represented by the JsonValue type. If the +element is an object or an array, a new call to this method is made for +every element contained in the object or array. If the element is a +value, it is printed to the standard output.

+
+
+

The JsonValue.getValueType method identifies the element as an object, +an array, or a value. For objects, the JsonObject.keySet method +returns a set of strings that contains the keys in the object, and the +JsonObject.get(String name) method returns the value of the element +whose key is name. For arrays, JsonArray implements the +List<JsonValue> interface. You can use enhanced for loops with the +Set<String> instance returned by JsonObject.keySet and with +instances of JsonArray, as shown in this example.

+
+
+

The navigateTree method for the model built in Creating +an Object Model from Application Code produces the following output:

+
+
+
+
OBJECT
+Key firstName: STRING Duke
+Key lastName: STRING Java
+Key age: NUMBER 18
+Key streetAddress: STRING 100 Internet Dr
+Key city: STRING JavaTown
+Key state: STRING JA
+Key postalCode: STRING 12345
+Key phoneNumbers: ARRAY
+OBJECT
+Key type: STRING mobile
+Key number: STRING 111-111-1111
+OBJECT
+Key type: STRING home
+Key number: STRING 222-222-2222
+
+
+
+
+

19.3.4 Writing an Object Model to a Stream

+
+

The object models created in Creating an Object Model +from JSON Data and Creating an Object Model from +Application Code can be written to a stream using the JsonWriter +class as follows:

+
+
+
+
import java.io.StringWriter;
+import javax.json.JsonWriter;
+...
+StringWriter stWriter = new StringWriter();
+JsonWriter jsonWriter = Json.createWriter(stWriter);
+jsonWriter.writeObject(model);
+jsonWriter.close();
+
+String jsonData = stWriter.toString();
+System.out.println(jsonData);
+
+
+
+

The Json.createWriter method takes an output stream as a parameter. +The JsonWriter.writeObject method writes the object to the stream. The +JsonWriter.close method closes the underlying output stream.

+
+
+

The following example uses try-with-resources to close the JSON writer +automatically:

+
+
+
+
StringWriter stWriter = new StringWriter();
+try (JsonWriter jsonWriter = Json.createWriter(stWriter)) {
+   jsonWriter.writeObject(model);
+}
+
+String jsonData = stWriter.toString();
+System.out.println(jsonData);
+
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/jsonp004.html b/jsonp004.html new file mode 100644 index 0000000..599693d --- /dev/null +++ b/jsonp004.html @@ -0,0 +1,250 @@ + + + + + + Using the Streaming API + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

19.4 Using the Streaming API

+
+
+

This section describes two use cases of the streaming API.

+
+
+

The following topics are addressed here:

+
+ +
+

19.4.1 Reading JSON Data Using a Parser

+
+

The streaming API is the most efficient approach for parsing JSON text. +The following code demonstrates how to create a JsonParser object and +how to parse JSON data using events:

+
+
+
+
import javax.json.Json;
+import javax.json.stream.JsonParser;
+...
+JsonParser parser = Json.createParser(new StringReader(jsonData));
+while (parser.hasNext()) {
+   JsonParser.Event event = parser.next();
+   switch(event) {
+      case START_ARRAY:
+      case END_ARRAY:
+      case START_OBJECT:
+      case END_OBJECT:
+      case VALUE_FALSE:
+      case VALUE_NULL:
+      case VALUE_TRUE:
+         System.out.println(event.toString());
+         break;
+      case KEY_NAME:
+         System.out.print(event.toString() + " " +
+                          parser.getString() + " - ");
+         break;
+      case VALUE_STRING:
+      case VALUE_NUMBER:
+         System.out.println(event.toString() + " " +
+                            parser.getString());
+         break;
+   }
+}
+
+
+
+

This example consists of three steps.

+
+
+
    +
  1. +

    Obtain a parser instance by calling the Json.createParser static +method.

    +
  2. +
  3. +

    Iterate over the parser events with the JsonParser.hasNext and the +JsonParser.next methods.

    +
  4. +
  5. +

    Perform local processing for each element.

    +
  6. +
+
+
+

The example shows the ten possible event types from the parser. The +parser’s next method advances it to the next event. For the event +types KEY_NAME, VALUE_STRING, and VALUE_NUMBER, you can obtain the +content of the element by calling the method JsonParser.getString. For +VALUE_NUMBER events, you can also use the following methods:

+
+
+
    +
  • +

    JsonParser.isIntegralNumber

    +
  • +
  • +

    JsonParser.getInt

    +
  • +
  • +

    JsonParser.getLong

    +
  • +
  • +

    JsonParser.getBigDecimal

    +
  • +
+
+
+

See the Java EE 7 API reference for the javax.json.stream.JsonParser +interface for more information.

+
+
+

The output of this example is the following:

+
+
+
+
START_OBJECT
+KEY_NAME firstName - VALUE_STRING Duke
+KEY_NAME lastName - VALUE_STRING Java
+KEY_NAME age - VALUE_NUMBER 18
+KEY_NAME streetAddress - VALUE_STRING 100 Internet Dr
+KEY_NAME city - VALUE_STRING JavaTown
+KEY_NAME state - VALUE_STRING JA
+KEY_NAME postalCode - VALUE_STRING 12345
+KEY_NAME phoneNumbers - START_ARRAY
+START_OBJECT
+KEY_NAME type - VALUE_STRING mobile
+KEY_NAME number - VALUE_STRING 111-111-1111
+END_OBJECT
+START_OBJECT
+KEY_NAME type - VALUE_STRING home
+KEY_NAME number - VALUE_STRING 222-222-2222
+END_OBJECT
+END_ARRAY
+END_OBJECT
+
+
+
+
+

19.4.2 Writing JSON Data Using a Generator

+
+

The following code demonstrates how to write JSON data to a file using +the streaming API:

+
+
+
+
FileWriter writer = new FileWriter("test.txt");
+JsonGenerator gen = Json.createGenerator(writer);
+gen.writeStartObject()
+   .write("firstName", "Duke")
+   .write("lastName", "Java")
+   .write("age", 18)
+   .write("streetAddress", "100 Internet Dr")
+   .write("city", "JavaTown")
+   .write("state", "JA")
+   .write("postalCode", "12345")
+   .writeStartArray("phoneNumbers")
+      .writeStartObject()
+         .write("type", "mobile")
+         .write("number", "111-111-1111")
+      .writeEnd()
+      .writeStartObject()
+         .write("type", "home")
+         .write("number", "222-222-2222")
+      .writeEnd()
+   .writeEnd()
+.writeEnd();
+gen.close();
+
+
+
+

This example obtains a JSON generator by calling the +Json.createGenerator static method, which takes a writer or an output +stream as a parameter. The example writes JSON data to the test.txt +file by nesting calls to the write, writeStartArray, +writeStartObject, and writeEnd methods. The JsonGenerator.close +method closes the underlying writer or output stream.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+ + + \ No newline at end of file diff --git a/jsonp005.html b/jsonp005.html new file mode 100644 index 0000000..2f948ed --- /dev/null +++ b/jsonp005.html @@ -0,0 +1,109 @@ + + + + + + JSON in Java EE RESTful Web Services + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

19.5 JSON in Java EE RESTful Web Services

+
+
+

This section explains how the Java API for JSON Processing is related to +other Java EE packages that provide JSON support for RESTful web +services. See Chapter 29, "Building RESTful Web +Services with JAX-RS," for more information on RESTful web services.

+
+
+

Jersey, the reference implementation for JAX-RS (JSR 311) included in +GlassFish Server, provides support for binding JSON data from RESTful +resource methods to Java objects using JAXB, as described in +Using JAX-RS with JAXB in +Chapter 31, "JAX-RS: Advanced Topics and +an Example". However, JSON support is not part of JAX-RS (JSR 311) or +JAXB (JSR 222), so that procedure may not work for Java EE +implementations other than GlassFish Server.

+
+
+

The Java API for JSON Processing (JSR 353) does not explicitly support +JSON binding in Java. A future JSR (JSON Binding) that is similar to +JAXB for XML is under consideration for a future release of Java EE.

+
+
+

You can still use the Java API for JSON Processing with JAX-RS resource +methods. For more information, see the sample code for JSON Processing +included with the Java EE 7 SDK.

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/jsonp006.html b/jsonp006.html new file mode 100644 index 0000000..5c47add --- /dev/null +++ b/jsonp006.html @@ -0,0 +1,270 @@ + + + + + + The jsonpmodel Example Application + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

19.6 The jsonpmodel Example Application

+
+
+

This section describes how to build and run the jsonpmodel example +application. This example is a web application that demonstrates how to +create an object model from form data, how to parse JSON data, and how +write JSON data using the object model API.

+
+
+

The jsonpmodel example application is in the +tut-install`/examples/web/jsonp/jsonpmodel` directory.

+
+
+

The following topics are addressed here:

+
+ +
+

19.6.1 Components of the jsonpmodel Example Application

+
+

The jsonpmodel example application contains the following files.

+
+
+
    +
  • +

    Three JavaServer Faces pages.

    +
    +
      +
    • +

      The index.xhtml page contains a form to collect information.

      +
    • +
    • +

      The modelcreated.xhtml page contains a text area that displays JSON +data.

      +
    • +
    • +

      The parsejson.xhtml page contains a table that shows the elements +of the object model.

      +
    • +
    +
    +
  • +
  • +

    The ObjectModelBean.java managed bean, which is a session-scoped +managed bean that stores the data from the form and directs the +navigation between the Facelets pages. This file also contains code that +uses the JSON object model API.

    +
  • +
+
+
+

The code used in ObjectModelBean.java to create an object model from +the data in the form is similar to the example in +Creating an Object Model from Application +Code. The code to write JSON output from the model is similar to the +example in Writing an Object Model to a +Stream. The code to navigate the object model tree is similar to the +example in Navigating an Object Model.

+
+
+
+

19.6.2 Running the jsonpmodel Example Application

+
+

This section describes how to run the jsonpmodel example application +using NetBeans IDE and from the command line.

+
+
+

The following topics are addressed here:

+
+ +
+

19.6.2.1 To Run the jsonpmodel Example Application Using NetBeans IDE

+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    From the File menu, choose Open Project.

    +
  4. +
  5. +

    In the Open Project dialog box, navigate to:

    +
    +
    +
    tut-install/examples/web/jsonp
    +
    +
    +
  6. +
  7. +

    Select the jsonpmodel folder.

    +
  8. +
  9. +

    Click Open Project.

    +
  10. +
  11. +

    In the Projects tab, right-click the jsonpmodel project and select +Run.

    +
    +

    This command builds and packages the application into a WAR file +(jsonpmodel.war) located in the target directory, deploys it to the +server, and opens a web browser window with the following URL:

    +
    +
    +
    +
    http://localhost:8080/jsonpmodel/
    +
    +
    +
  12. +
  13. +

    Edit the data on the page and click Create a JSON Object to submit +the form. The following page shows a JSON object that contains the data +from the form.

    +
  14. +
  15. +

    Click Parse JSON. The following page contains a table that lists the +nodes of the object model tree.

    +
  16. +
+
+
+
+

19.6.2.2 To Run the jsonpmodel Example Application Using Maven

+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    In a terminal window, go to:

    +
    +
    +
    tut-install/examples/web/jsonp/jsonpmodel
    +
    +
    +
  4. +
  5. +

    Enter the following command to deploy the application:

    +
    +
    +
    mvn install
    +
    +
    +
  6. +
  7. +

    Open a web browser window and enter the following address:

    +
    +
    +
    http://localhost:8080/jsonpmodel/
    +
    +
    +
  8. +
  9. +

    Edit the data on the page and click Create a JSON Object to submit +the form. The following page shows a JSON object that contains the data +from the form.

    +
  10. +
  11. +

    Click Parse JSON. The following page contains a table that lists the +nodes of the object model tree.

    +
  12. +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+
+ + + \ No newline at end of file diff --git a/jsonp007.html b/jsonp007.html new file mode 100644 index 0000000..03708dd --- /dev/null +++ b/jsonp007.html @@ -0,0 +1,270 @@ + + + + + + The jsonpstreaming Example Application + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

19.7 The jsonpstreaming Example Application

+
+
+

This section describes how to build and run the jsonpstreaming example +application. This example is a web application that demonstrates how to +create JSON data from form data, how to parse JSON data, and how to +write JSON output using the streaming API.

+
+
+

The jsonpstreaming example application is in the +tut-install`/examples/web/jsonp/jsonpstreaming` directory.

+
+
+

The following topics are addressed here:

+
+ +
+

19.7.1 Components of the jsonpstreaming Example Application

+
+

The jsonpstreaming example application contains the following files.

+
+
+
    +
  • +

    Three JavaServer Faces pages.

    +
    +
      +
    • +

      The index.xhtml page contains a form to collect information.

      +
    • +
    • +

      The filewritten.xhtml page contains a text area that displays JSON +data.

      +
    • +
    • +

      The parsed.xhtml page contains a table that lists the events from +the parser.

      +
    • +
    +
    +
  • +
  • +

    The StreamingBean.java managed bean, a session-scoped managed bean +that stores the data from the form and directs the navigation between +the Facelets pages. This file also contains code that uses the JSON +streaming API.

    +
  • +
+
+
+

The code used in StreamingBean.java to write JSON data to a file is +similar to the example in Writing JSON Data +Using a Generator. The code to parse JSON data from a file is similar +to the example in Reading JSON Data Using a +Parser.

+
+
+
+

19.7.2 Running the jsonpstreaming Example Application

+
+

This section describes how to run the jsonpstreaming example +application using NetBeans IDE and from the command line.

+
+
+

The following topics are addressed here:

+
+ +
+

19.7.2.1 To Run the jsonpstreaming Example Application Using NetBeans +IDE +^^^^^^^^^^^^^^^^^^^^^^^^^

+
+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    From the File menu, choose Open Project.

    +
  4. +
  5. +

    In the Open Project dialog box, navigate to:

    +
    +
    +
    tut-install/examples/web/jsonp
    +
    +
    +
  6. +
  7. +

    Select the jsonpstreaming folder.

    +
  8. +
  9. +

    Click Open Project.

    +
  10. +
  11. +

    In the Projects tab, right-click the jsonpstreaming project and +select Run.

    +
    +

    This command builds and packages the application into a WAR file +(jsonpstreaming.war) located in the target directory, deploys it to +the server, and opens a web browser window with the following URL:

    +
    +
    +
    +
    http://localhost:8080/jsonpstreaming/
    +
    +
    +
  12. +
  13. +

    Edit the data on the page and click Write a JSON Object to a File to +submit the form and write a JSON object to a text file. The following +page shows the contents of the text file.

    +
  14. +
  15. +

    Click Parse JSON from File. The following page contains a table that +lists the parser events for the JSON data in the text file.

    +
  16. +
+
+
+

19.7.2.2 To Run the jsonpstreaming Example Application Using Maven

+
+
    +
  1. +

    Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

    +
  2. +
  3. +

    In a terminal window, go to:

    +
    +
    +
    tut-install/examples/web/jsonp/jsonpstreaming/
    +
    +
    +
  4. +
  5. +

    Enter the following command to deploy the application:

    +
    +
    +
    mvn install
    +
    +
    +
  6. +
  7. +

    Open a web browser window and enter the following URL:

    +
    +
    +
    http://localhost:8080/jsonpstreaming/
    +
    +
    +
  8. +
  9. +

    Edit the data on the page and click Write a JSON Object to a File to +submit the form and write a JSON object to a text file. The following +page shows the contents of the text file.

    +
  10. +
  11. +

    Click Parse JSON from File. The following page contains a table that +lists the parser events for the JSON data in the text file.

    +
  12. +
+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+
+
+ + + \ No newline at end of file diff --git a/jsonp008.html b/jsonp008.html new file mode 100644 index 0000000..8a693ae --- /dev/null +++ b/jsonp008.html @@ -0,0 +1,90 @@ + + + + + + Further Information about the Java API for JSON Processing + + + + + +
+
+ +++++ + + + + + + + +

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

+
+ +++++ + + + + + + + +

Previous
+Previous
 

Next
+Next

 

+
+
+
+

19.8 Further Information about the Java API for JSON Processing

+
+
+

For more information on JSON processing in Java EE, see the Java API for +JSON Processing specification:

+
+
+

http://www.jcp.org/en/jsr/detail?id=353

+
+
+ ++++++++ + + + + + + + + + + +

Previous
+Previous
 

Next
+Next

Oracle Logo +
+Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

Go To Table Of Contents
+Contents

+
+
+ + + \ No newline at end of file diff --git a/overview.html b/overview.html index 4be97e1..f817c58 100644 --- a/overview.html +++ b/overview.html @@ -5,39 +5,52 @@ Overview - + - - - - - -
Java Platform, Enterprise Edition The Java EE Tutorial
-Release 7 Java Platform, Enterprise Edition
-E39031-02
- + +
+
+
+++++ + - - + + + +
 Go To Table Of Contents
-Contents

Java Platform, Enterprise Edition The Java EE Tutorial
+Release 8 Java Platform, Enterprise Edition
+E63026-01

Go To Table Of Contents
+Contents

-
-
- +
+
+++++ + - - - + + + +
Previous
-Previous
 
Next
-Next
 

Previous
+Previous
 

Next
+Next

 

+ +

1 Overview

-
+

This chapter introduces you to Java EE enterprise application development. Here you will review development basics, learn about the Java EE architecture and APIs, become acquainted with important terms @@ -68,54 +81,47 @@

1 Overview

Web Services Support

  • -

    Java EE Application Assembly and Deployment

    +

    Java EE Application Assembly and +Deployment

  • Java EE 7 APIs

  • -

    Java EE 7 APIs in the Java Platform,Standard Edition 7

    +

    Java EE 7 APIs in the Java Platform, +Standard Edition 7

  • GlassFish Server Tools

  • -
    - ---- - - - + + + + + + +
    - ---+
    +
    ++++++++ + - - - - -
     Previous
    -Previous
     
    Next
    -Next
    -
    Oracle Logo
    -Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

    -
    - - - - - -
     Go To Table Of Contents
    -Contents
    -

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    -

    diff --git a/overview001.html b/overview001.html index 029c129..f9c8d1b 100644 --- a/overview001.html +++ b/overview001.html @@ -3,37 +3,50 @@ - Overview001 + Introduction to Java EE - + - - - - - -
    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 7 Java Platform, Enterprise Edition
    -E39031-02
    - + +
    +
    +
    +++++ + - - + + + +
     Go To Table Of Contents
    -Contents

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    -
    -
    - +
    +
    +++++ + - - - + + + +
    Previous
    -Previous
     
    Next
    -Next
     

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +

    1.1 Introduction to Java EE

    @@ -88,41 +101,32 @@

    1.1 Introduction to Java EE

    and accompanying text a valuable and accessible knowledge base for creating your own solutions.

    -
    - ---+
    +
    ++++++++ + - - - + + + + + + +
    - ---- - - - - -
     Previous
    -Previous
     
    Next
    -Next
    -
    Oracle Logo
    -Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

    -
    - - - - - -
     Go To Table Of Contents
    -Contents
    -

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    -

    diff --git a/overview002.html b/overview002.html index 8aa021a..5e3ea15 100644 --- a/overview002.html +++ b/overview002.html @@ -3,37 +3,50 @@ - Overview002 + Java EE 7 Platform Highlights - + - - - - - -
    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 7 Java Platform, Enterprise Edition
    -E39031-02
    - + +
    +
    +
    +++++ + - - + + + +
     Go To Table Of Contents
    -Contents

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    -
    -
    - +
    +
    +++++ + - - - + + + +
    Previous
    -Previous
     
    Next
    -Next
     

    Previous
    +Previous
     

    Next
    +Next

     

    + +

    1.2 Java EE 7 Platform Highlights

    @@ -85,41 +98,32 @@

    1.2 Java EE 7 Platform Highlights

    -
    - ---+
    +
    ++++++++ + - - - + + + + + + +
    - ---- - - - - -
     Previous
    -Previous
     
    Next
    -Next
    -
    Oracle Logo
    -Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

    -
    - - - - - -
     Go To Table Of Contents
    -Contents
    -

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    -

    diff --git a/overview003.html b/overview003.html index 9e28132..fd2c02f 100644 --- a/overview003.html +++ b/overview003.html @@ -3,37 +3,50 @@ - Overview003 + Java EE Application Model - + - - - - - -
    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 7 Java Platform, Enterprise Edition
    -E39031-02
    - + +
    +
    +
    +++++ + - - + + + +
     Go To Table Of Contents
    -Contents

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    -
    -
    - +
    +
    +++++ + - - - + + + +
    Previous
    -Previous
     
    Next
    -Next
     

    Previous
    +Previous
     

    Next
    +Next

     

    + +

    1.3 Java EE Application Model

    @@ -77,41 +90,32 @@

    1.3 Java EE Application Model

    The developer can rely on the platform to provide solutions for the hard systems-level problems of developing a multitier service.

    -
    - ---+
    +
    ++++++++ + - - - + + + + + + +
    - ---- - - - - -
     Previous
    -Previous
     
    Next
    -Next
    -
    Oracle Logo
    -Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

    -
    - - - - - -
     Go To Table Of Contents
    -Contents
    -

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    -

    diff --git a/overview004.html b/overview004.html index 09bdc86..cebd7b2 100644 --- a/overview004.html +++ b/overview004.html @@ -3,37 +3,50 @@ - Overview004 + Distributed Multitiered Applications - + - - - - - -
    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 7 Java Platform, Enterprise Edition
    -E39031-02
    - + +
    +
    +
    +++++ + - - + + + +
     Go To Table Of Contents
    -Contents

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    -
    -
    - +
    +
    +++++ + - - - + + + +
    Previous
    -Previous
     
    Next
    -Next
     

    Previous
    +Previous
     

    Next
    +Next

     

    + +

    1.4 Distributed Multitiered Applications

    @@ -82,8 +95,8 @@

    1.4 Distributed Multitiered Applic

    Figure 1-1 Multitiered Applications

    @@ -257,8 +270,8 @@

    1.4.3.5 Java EE Server Communications

    Figure 1-2 Server Communication

    @@ -292,8 +305,8 @@

    1.4.4 Web Components

    Figure 1-3 Web Tier and Java EE Applications

    @@ -314,8 +327,8 @@

    1.4.5 Business Components

    Figure 1-4 Business and EIS Tiers

    @@ -330,41 +343,32 @@

    1.4.6 Enterprise Information System might need access to enterprise information systems for database connectivity.

    -
    - ---+
    +
    ++++++++ + - - - + + + + + + +
    - ---- - - - - -
     Previous
    -Previous
     
    Next
    -Next
    -
    Oracle Logo
    -Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

    -
    - - - - - -
     Go To Table Of Contents
    -Contents
    -

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    -

    diff --git a/overview005.html b/overview005.html index 0ad98ef..629b8bd 100644 --- a/overview005.html +++ b/overview005.html @@ -3,37 +3,50 @@ - Overview005 + Java EE Containers - + - - - - - -
    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 7 Java Platform, Enterprise Edition
    -E39031-02
    - + +
    +
    +
    +++++ + - - + + + +
     Go To Table Of Contents
    -Contents

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    -
    -
    - +
    +
    +++++ + - - - + + + +
    Previous
    -Previous
     
    Next
    -Next
     

    Previous
    +Previous
     

    Next
    +Next

     

    + +

    1.5 Java EE Containers

    @@ -115,8 +128,8 @@

    1.5.2 Container Types

    Figure 1-5 Java EE Server and Containers

    @@ -150,41 +163,32 @@

    1.5.2 Container Types

    -
    - ---+
    +
    ++++++++ + - - - + + + + + + +
    - ---- - - - - -
     Previous
    -Previous
     
    Next
    -Next
    -
    Oracle Logo
    -Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

    -
    - - - - - -
     Go To Table Of Contents
    -Contents
    -

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    -

    diff --git a/overview006.html b/overview006.html index 3611813..0cb8f36 100644 --- a/overview006.html +++ b/overview006.html @@ -3,37 +3,50 @@ - Overview006 + Web Services Support - + - - - - - -
    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 7 Java Platform, Enterprise Edition
    -E39031-02
    - + +
    +
    +
    +++++ + - - + + + +
     Go To Table Of Contents
    -Contents

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    -
    -
    - +
    +
    +++++ + - - - + + + +
    Previous
    -Previous
     
    Next
    -Next
     

    Previous
    +Previous
     

    Next
    +Next

     

    + +

    1.6 Web Services Support

    @@ -141,41 +154,32 @@

    1.6.3 WSDL Standard Format

    specification of a web service that uses remote procedure calls to communicate with clients.

    -
    - ---+
    +
    ++++++++ + - - - + + + + + + +
    - ---- - - - - -
     Previous
    -Previous
     
    Next
    -Next
    -
    Oracle Logo
    -Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

    -
    - - - - - -
     Go To Table Of Contents
    -Contents
    -

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    -

    diff --git a/overview007.html b/overview007.html index fd0f436..3bf6030 100644 --- a/overview007.html +++ b/overview007.html @@ -3,37 +3,50 @@ - Overview007 + Java EE Application Assembly and Deployment - + - - - - - -
    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 7 Java Platform, Enterprise Edition
    -E39031-02
    - + +
    +
    +
    +++++ + - - + + + +
     Go To Table Of Contents
    -Contents

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    -
    -
    - +
    +
    +++++ + - - - + + + +
    Previous
    -Previous
     
    Next
    -Next
     

    Previous
    +Previous
     

    Next
    +Next

     

    + +

    1.7 Java EE Application Assembly and Deployment

    @@ -59,41 +72,32 @@

    1.7 Java EE Application Ass can access it and the name of the local database. Once deployed on a local platform, the application is ready to run.

    -
    - ---+
    +
    ++++++++ + - - - + + + + + + +
    - ---- - - - - -
     Previous
    -Previous
     
    Next
    -Next
    -
    Oracle Logo
    -Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

    -
    - - - - - -
     Go To Table Of Contents
    -Contents
    -

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    -

    diff --git a/overview008.html b/overview008.html index 8062f54..955d6fe 100644 --- a/overview008.html +++ b/overview008.html @@ -3,37 +3,50 @@ - Overview008 + Java EE 7 APIs - + - - - - + + + +
    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 7 Java Platform, Enterprise Edition
    -E39031-02
    - + +
    +
    +
    +++++ + - - - -
     Go To Table Of Contents
    -Contents
    -

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    -
    - +
    +
    +++++ + - - - + + + +
    Previous
    -Previous
     
    Next
    -Next
     

    Previous
    +Previous
     

    Next
    +Next

     

    + +

    1.8 Java EE 7 APIs

    @@ -45,8 +58,8 @@

    1.8 Java EE 7 APIs

    Figure 1-6 Java EE Containers

    @@ -58,8 +71,8 @@

    1.8 Java EE 7 APIs

    Figure 1-7 Java EE APIs in the Web Container

    @@ -71,8 +84,8 @@

    1.8 Java EE 7 APIs

    Figure 1-8 Java EE APIs in the EJB Container

    @@ -84,8 +97,8 @@

    1.8 Java EE 7 APIs

    Figure 1-9 Java EE APIs in the Application Client Container

    @@ -148,21 +161,21 @@

    1.8.2 Java Servlet Technology

    extend the applications hosted by web servers.

    -

    In the Java EE 7 platform, new Java Servlet technology features include +

    In the Java EE 8 platform, new Java Servlet technology features include the following:

    • -

      Nonblocking I/O

      +

      HTTP/2 server push

    • -

      HTTP protocol upgrade

      +

      Servlet Mapping API

    -

    The Java EE 7 platform requires Servlet 3.1.

    +

    The Java EE 8 platform requires Servlet 4.0

    @@ -218,26 +231,33 @@

    1.8.3 JavaServer Faces Technology

    XML-based configuration files.

    -

    In the Java EE 7 platform, new features of JavaServer Faces technology +

    In the Java EE 8 platform, new features of JavaServer Faces technology include the following:

    • -

      HTML5-friendly markup

      +

      Direct support for WebSockets via the new <f:websocket> tag

      +
    • +
    • +

      Class-level bean validation via the new <f:validateWholeBean> tag

    • -

      Faces Flows

      +

      A CDI compatible @ManagedProperty annotation

    • -

      Resource library contracts

      +

      Enhanced component search expression framework

    -

    The Java EE 7 platform requires JavaServer Faces 2.2 and Expression +

    The Java EE 8 platform requires JavaServer Faces 2.3 and Expression Language 3.0.

    +
    +

    For an excellent summary of what’s new in JSF 2.3, see Arjan Tijms' +weblog at https://javaserverfaces.github.io/users.html.

    +

    1.8.4 JavaServer Pages Technology

    @@ -259,7 +279,7 @@

    1.8.4 JavaServer Pages Technology

    For information about JSP technology, see the The Java EE 5 Tutorial at -http://docs.oracle.com/javaee/5/tutorial/doc/.

    +http://docs.oracle.com/javaee/5/tutorial/doc/.

    The Java EE 7 platform requires JavaServer Pages 2.3 for compatibility @@ -580,41 +600,32 @@

    1.8.21 Batch Applications for platform. The Java EE 7 platform requires Batch Applications for the Java Platform 1.0.

    -
    - ---- - - - + + + + + + +
    - ---- - - - - -
     Previous
    -Previous
     
    Next
    -Next
    -
    Oracle Logo
    -Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

    -
    - +
    +
    ++++++++ + - - - -
     Go To Table Of Contents
    -Contents
    -

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    -

    diff --git a/overview009.html b/overview009.html index 3f75da2..1a52f68 100644 --- a/overview009.html +++ b/overview009.html @@ -3,37 +3,50 @@ - Overview009 + Java EE 7 APIs in the Java Platform, Standard Edition 7 - + - - - - - -
    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 7 Java Platform, Enterprise Edition
    -E39031-02
    - + +
    +
    +
    +++++ + - - + + + +
     Go To Table Of Contents
    -Contents

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    -
    -
    - +
    +
    +++++ + - - - + + + +
    Previous
    -Previous
     
    Next
    -Next
     

    Previous
    +Previous
     

    Next
    +Next

     

    + +

    1.9 Java EE 7 APIs in the Java Platform, Standard Edition 7

    @@ -137,7 +150,7 @@

    1.9.4 Java API for XML Processing

    JAXP lets you use any XML-compliant parser or XSL processor from within your application and supports the Worldwide Web Consortium (W3C) schema. You can find information on the W3C schema at -http://www.w3.org/XML/Schema.

    +http://www.w3.org/XML/Schema.

    @@ -214,41 +227,32 @@

    1.9.9 Common Annotations for t

    The Java EE 7 platform requires Common Annotations for the Java Platform 1.2.

    -
    - ---+
    +
    ++++++++ + - - - + + + + + + +
    - ---- - - - - -
     Previous
    -Previous
     
    Next
    -Next
    -
    Oracle Logo
    -Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

    -
    - - - - - -
     Go To Table Of Contents
    -Contents
    -

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    -

    diff --git a/overview010.html b/overview010.html index 465e493..bcb30f1 100644 --- a/overview010.html +++ b/overview010.html @@ -3,37 +3,50 @@ - Overview010 + GlassFish Server Tools - + - - - - + + + +
    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 7 Java Platform, Enterprise Edition
    -E39031-02
    - + +
    +
    +
    +++++ + - - - -
     Go To Table Of Contents
    -Contents
    -

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    -
    - +
    +
    +++++ + - - - + + + +
    Previous
    -Previous
     
    Next
    -Next
     

    Previous
    +Previous
     

    Next
    +Next

     

    + +

    1.10 GlassFish Server Tools

    @@ -57,13 +70,16 @@

    1.10 GlassFish Server Tools

    tutorial. For detailed information, see the online help in the GUI tools.

    -
    +
    +

    +
    +

    Table 1-1 GlassFish Server Tools

    --++ @@ -73,7 +89,14 @@

    1.10 GlassFish Server Tools

    - + @@ -129,41 +152,37 @@

    1.10 GlassFish Server Tools

    Administration Console

    +

    Administration Console

    +
    +
    +
    +
    +
    +
    +

    A web-based GUI GlassFish Server administration utility. Used to stop GlassFish Server and to manage users, resources, and applications.

    -
    - ---- - - - + + + + + + +
    - ---- - - - - -
     Previous
    -Previous
     
    Next
    -Next
    -
    Oracle Logo
    -Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

    -
    - +
    +
    +
    +
    +
    +
    +
    +
    ++++++++ + - - - -
     Go To Table Of Contents
    -Contents
    -

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    -

    diff --git a/packaging.html b/packaging.html new file mode 100644 index 0000000..270eafc --- /dev/null +++ b/packaging.html @@ -0,0 +1,109 @@ + + + + + + Packaging + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    5 Packaging

    +
    +
    +

    This chapter describes packaging. A Java EE application is packaged into +one or more standard units for deployment to any Java EE +platform–compliant system. Each unit contains a functional component or +components, such as an enterprise bean, web page, servlet, or applet, +and an optional deployment descriptor that describes its content.

    +
    +
    +

    The following topics are addressed here:

    +
    + +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    + + + \ No newline at end of file diff --git a/packaging001.html b/packaging001.html new file mode 100644 index 0000000..da27f76 --- /dev/null +++ b/packaging001.html @@ -0,0 +1,169 @@ + + + + + + Packaging Applications + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    5.1 Packaging Applications

    +
    +
    +

    A Java EE application is delivered in a Java Archive (JAR) file, a Web +Archive (WAR) file, or an Enterprise Archive (EAR) file. A WAR or EAR +file is a standard JAR (.jar) file with a .war or .ear extension. +Using JAR, WAR, and EAR files and modules makes it possible to assemble +a number of different Java EE applications using some of the same +components. No extra coding is needed; it is only a matter of assembling +(or packaging) various Java EE modules into Java EE JAR, WAR, or EAR +files.

    +
    +
    +

    An EAR file (see Figure 5-1) contains Java EE modules +and, optionally, deployment descriptors. A deployment descriptor, an XML +document with an .xml extension, describes the deployment settings of +an application, a module, or a component. Because deployment descriptor +information is declarative, it can be changed without the need to modify +the source code. At runtime, the Java EE server reads the deployment +descriptor and acts upon the application, module, or component +accordingly.

    +
    +
    +

    Deployment information is most commonly specified in the source code by +annotations. Deployment descriptors, if present, override what is +specified in the source code.

    +
    +
    +

    Figure 5-1 EAR File Structure

    +
    + +
    +

    The two types of deployment descriptors are Java EE and runtime. A Java +EE deployment descriptor is defined by a Java EE specification and can +be used to configure deployment settings on any Java EE-compliant +implementation. A runtime deployment descriptor is used to configure +Java EE implementation-specific parameters. For example, the GlassFish +Server runtime deployment descriptor contains such information as the +context root of a web application as well as GlassFish Server +implementation-specific parameters, such as caching directives. The +GlassFish Server runtime deployment descriptors are named +glassfish-`moduleType.xml` and are located in the same META-INF +directory as the Java EE deployment descriptor.

    +
    +
    +

    A Java EE module consists of one or more Java EE components for the same +container type and, optionally, one component deployment descriptor of +that type. An enterprise bean module deployment descriptor, for example, +declares transaction attributes and security authorizations for an +enterprise bean. A Java EE module can be deployed as a stand-alone +module.

    +
    +
    +

    Java EE modules are of the following types:

    +
    +
    +
      +
    • +

      EJB modules, which contain class files for enterprise beans and, +optionally, an EJB deployment descriptor. EJB modules are packaged as +JAR files with a .jar extension.

      +
    • +
    • +

      Web modules, which contain servlet class files, web files, supporting +class files, GIF and HTML files, and, optionally, a web application +deployment descriptor. Web modules are packaged as JAR files with a +.war (web archive) extension.

      +
    • +
    • +

      Application client modules, which contain class files and, optionally, +an application client deployment descriptor. Application client modules +are packaged as JAR files with a .jar extension.

      +
    • +
    • +

      Resource adapter modules, which contain all Java interfaces, classes, +native libraries, and, optionally, a resource adapter deployment +descriptor. Together, these implement the Connector architecture (see +Java EE Connector Architecture) for a +particular EIS. Resource adapter modules are packaged as JAR files with +an .rar (resource adapter archive) extension.

      +
    • +
    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    + + + \ No newline at end of file diff --git a/packaging002.html b/packaging002.html new file mode 100644 index 0000000..47f0290 --- /dev/null +++ b/packaging002.html @@ -0,0 +1,196 @@ + + + + + + Packaging Enterprise Beans + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    5.2 Packaging Enterprise Beans

    +
    +
    +

    This section explains how enterprise beans can be packaged in EJB JAR or +WAR modules. It includes the following sections:

    +
    + +
    +

    5.2.1 Packaging Enterprise Beans in EJB JAR Modules

    +
    +

    An EJB JAR file is portable and can be used for various applications.

    +
    +
    +

    To assemble a Java EE application, package one or more modules, such as +EJB JAR files, into an EAR file, the archive file that holds the +application. When deploying the EAR file that contains the enterprise +bean’s EJB JAR file, you also deploy the enterprise bean to GlassFish +Server. You can also deploy an EJB JAR that is not contained in an EAR +file. Figure 5-2 shows the contents of an EJB JAR file.

    +
    +
    +

    Figure 5-2 Structure of an Enterprise Bean JAR

    +
    + +
    +
    +

    5.2.2 Packaging Enterprise Beans in WAR Modules

    +
    +

    Enterprise beans often provide the business logic of a web application. +In these cases, packaging the enterprise bean within the web +application’s WAR module simplifies deployment and application +organization. Enterprise beans may be packaged within a WAR module as +Java programming language class files or within a JAR file that is +bundled within the WAR module.

    +
    +
    +

    To include enterprise bean class files in a WAR module, the class files +should be in the WEB-INF/classes directory.

    +
    +
    +

    To include a JAR file that contains enterprise beans in a WAR module, +add the JAR to the WEB-INF/lib directory of the WAR module.

    +
    +
    +

    WAR modules that contain enterprise beans do not require an +ejb-jar.xml deployment descriptor. If the application uses +ejb-jar.xml, it must be located in the WAR module’s WEB-INF +directory.

    +
    +
    +

    JAR files that contain enterprise bean classes packaged within a WAR +module are not considered EJB JAR files, even if the bundled JAR file +conforms to the format of an EJB JAR file. The enterprise beans +contained within the JAR file are semantically equivalent to enterprise +beans located in the WAR module’s WEB-INF/classes directory, and the +environment namespace of all the enterprise beans are scoped to the WAR +module.

    +
    +
    +

    For example, suppose that a web application consists of a shopping cart +enterprise bean, a credit card–processing enterprise bean, and a Java +servlet front end. The shopping cart bean exposes a local, no-interface +view and is defined as follows:

    +
    +
    +
    +
    package com.example.cart;
    +
    +@Stateless
    +public class CartBean { ... }
    +
    +
    +
    +

    The credit card–processing bean is packaged within its own JAR file, +cc.jar, exposes a local, no-interface view, and is defined as follows:

    +
    +
    +
    +
    package com.example.cc;
    +
    +@Stateless
    +public class CreditCardBean { ... }
    +
    +
    +
    +

    The servlet, com.example.web.StoreServlet, handles the web front end +and uses both CartBean and CreditCardBean. The WAR module layout for +this application is as follows:

    +
    +
    +
    +
    WEB-INF/classes/com/example/cart/CartBean.class
    +WEB-INF/classes/com/example/web/StoreServlet
    +WEB-INF/lib/cc.jar
    +WEB-INF/ejb-jar.xml
    +WEB-INF/web.xml
    +
    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    +
    + + + \ No newline at end of file diff --git a/packaging003.html b/packaging003.html new file mode 100644 index 0000000..ff81ac0 --- /dev/null +++ b/packaging003.html @@ -0,0 +1,171 @@ + + + + + + Packaging Web Archives + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    5.3 Packaging Web Archives

    +
    +
    +

    In the Java EE architecture, a web module is the smallest deployable and +usable unit of web resources. A web module contains web components and +static web content files, such as images, which are called web +resources. A Java EE web module corresponds to a web application as +defined in the Java Servlet specification.

    +
    +
    +

    In addition to web components and web resources, a web module can +contain other files:

    +
    +
    +
      +
    • +

      Server-side utility classes, such as shopping carts

      +
    • +
    • +

      Client-side classes, such as utility classes

      +
    • +
    +
    +
    +

    A web module has a specific structure. The top-level directory of a web +module is the document root of the application. The document root is +where XHTML pages, client-side classes and archives, and static web +resources, such as images, are stored.

    +
    +
    +

    The document root contains a subdirectory named WEB-INF, which can +contain the following files and directories:

    +
    +
    +
      +
    • +

      classes, a directory that contains server-side classes: servlets, +enterprise bean class files, utility classes, and JavaBeans components

      +
    • +
    • +

      lib, a directory that contains JAR files that contain enterprise +beans, and JAR archives of libraries called by server-side classes

      +
    • +
    • +

      Deployment descriptors, such as web.xml (the web application +deployment descriptor) and ejb-jar.xml (an EJB deployment descriptor)

      +
    • +
    +
    +
    +

    A web module needs a web.xml file if it uses JavaServer Faces +technology, if it must specify certain kinds of security information, or +if you want to override information specified by web component +annotations.

    +
    +
    +

    You can also create application-specific subdirectories (that is, +package directories) in either the document root or the +WEB-INF/classes/ directory.

    +
    +
    +

    A web module can be deployed as an unpacked file structure or can be +packaged in a JAR file known as a Web Archive (WAR) file. Because the +contents and use of WAR files differ from those of JAR files, WAR file +names use a .war extension. The web module just described is portable; +you can deploy it into any web container that conforms to the Java +Servlet specification.

    +
    +
    +

    You can provide a runtime deployment descriptor (DD) when you deploy a +WAR on GlassFish Server, but it is not required under most +circumstances. The runtime DD is an XML file that may contain such +information as the context root of the web application, the mapping of +the portable names of an application’s resources to GlassFish Server +resources, and the mapping of an application’s security roles to users, +groups, and principals defined in GlassFish Server. The GlassFish Server +web application runtime DD, if used, is named glassfish-web.xml and is +located in the WEB-INF directory. The structure of a web module that +can be deployed on GlassFish Server is shown in Figure +5-3.

    +
    +
    +

    Figure 5-3 Web Module Structure

    +
    + +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    + + + \ No newline at end of file diff --git a/packaging004.html b/packaging004.html new file mode 100644 index 0000000..7f1186a --- /dev/null +++ b/packaging004.html @@ -0,0 +1,110 @@ + + + + + + Packaging Resource Adapter Archives + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    5.4 Packaging Resource Adapter Archives

    +
    +
    +

    A Resource Adapter Archive (RAR) file stores XML files, Java classes, +and other objects for Java EE Connector Architecture (JCA) applications. +A resource adapter can be deployed on any Java EE server, much like a +Java EE application. A RAR file can be contained in an Enterprise +Archive (EAR) file, or it can exist as a separate file.

    +
    +
    +

    The RAR file contains

    +
    +
    +
      +
    • +

      A JAR file with the implementation classes of the resource adapter

      +
    • +
    • +

      An optional META-INF/ directory that can store an ra.xml file +and/or an application server–specific deployment descriptor used for +configuration purposes

      +
    • +
    +
    +
    +

    A RAR file can be deployed on the application server as a standalone +component or as part of a larger application. In both cases, the adapter +is available to all applications using a lookup procedure.

    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    + + + \ No newline at end of file diff --git a/partbeanvalidation.html b/partbeanvalidation.html new file mode 100644 index 0000000..05d2f45 --- /dev/null +++ b/partbeanvalidation.html @@ -0,0 +1,108 @@ + + + + + + Bean Validation + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +

    +
    +
    +
    +
    +

    Part IV

    +
    + +
    +
    +
    +

    Bean Validation

    +
    +
    +

    Part IV explores Java API for JavaBean Validation ("Bean Validation"). +This part contains the following chapters:

    +
    + +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    + + + \ No newline at end of file diff --git a/partcasestudies.html b/partcasestudies.html new file mode 100644 index 0000000..f2f8241 --- /dev/null +++ b/partcasestudies.html @@ -0,0 +1,112 @@ + + + + + + Case Studies + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +

    +
    +
    +
    +
    +

    Part XII

    +
    + +
    +
    +
    +

    Case Studies

    +
    +
    +

    Part XII presents case studies that use a variety of Java EE +technologies. This part contains the following chapters:

    +
    + +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    + + + \ No newline at end of file diff --git a/partcdi.html b/partcdi.html new file mode 100644 index 0000000..a8dfc0f --- /dev/null +++ b/partcdi.html @@ -0,0 +1,116 @@ + + + + + + Contexts and Dependency Injection for Java EE + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +

    +
    +
    +
    +
    +

    Part V

    +
    + +
    +
    + + + + \ No newline at end of file diff --git a/partentbeans.html b/partentbeans.html new file mode 100644 index 0000000..7a6f8bd --- /dev/null +++ b/partentbeans.html @@ -0,0 +1,119 @@ + + + + + + Enterprise Beans + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +

    +
    +
    +
    +
    +

    Part VII

    +
    + +
    +
    + + + + \ No newline at end of file diff --git a/partintro.html b/partintro.html index 0f89756..a55da94 100644 --- a/partintro.html +++ b/partintro.html @@ -5,35 +5,51 @@ Introduction - + - - - - + + + +
    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 7 Java Platform, Enterprise Edition
    -E39031-02
    - + +
    +
    +
    +++++ + - - - -
     Go To Table Of Contents
    -Contents
    -

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    -
    - +
    +
    +++++ + - - - + + + +
    Previous
    -Previous
     
    Next
    -Next
     

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +

    +
    + + diff --git a/partmessaging.html b/partmessaging.html new file mode 100644 index 0000000..8dc1b62 --- /dev/null +++ b/partmessaging.html @@ -0,0 +1,107 @@ + + + + + + Messaging + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +

    +
    +
    +
    +
    +

    Part IX

    +
    + +
    +
    +
    +

    Messaging

    +
    +
    +

    Part IX introduces messaging. This part contains the following chapters:

    +
    + +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    + + + \ No newline at end of file diff --git a/partpersist.html b/partpersist.html new file mode 100644 index 0000000..2b71be2 --- /dev/null +++ b/partpersist.html @@ -0,0 +1,132 @@ + + + + + + Persistence + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +

    +
    +
    +
    +
    +

    Part VIII

    +
    + +
    +
    + + + + \ No newline at end of file diff --git a/partplatform.html b/partplatform.html new file mode 100644 index 0000000..0d96e88 --- /dev/null +++ b/partplatform.html @@ -0,0 +1,109 @@ + + + + + + Platform Basics + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +

    +
    +
    +
    +
    +

    Part II

    +
    + +
    +
    +
    +

    Platform Basics

    +
    +
    +

    Part II introduces platform basics. This part contains the following +chapters:

    +
    + +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    + + + \ No newline at end of file diff --git a/partsecurity.html b/partsecurity.html new file mode 100644 index 0000000..fc92e87 --- /dev/null +++ b/partsecurity.html @@ -0,0 +1,116 @@ + + + + + + Security + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +

    +
    +
    +
    +
    +

    Part X

    +
    + +
    +
    + + + + \ No newline at end of file diff --git a/partsupporttechs.html b/partsupporttechs.html new file mode 100644 index 0000000..b7666dd --- /dev/null +++ b/partsupporttechs.html @@ -0,0 +1,121 @@ + + + + + + Java EE Supporting Technologies + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +

    +
    +
    +
    +
    +

    Part XI

    +
    + +
    +
    +
    +

    Java EE Supporting Technologies

    + +
    + + + \ No newline at end of file diff --git a/partwebsvcs.html b/partwebsvcs.html new file mode 100644 index 0000000..5fc9683 --- /dev/null +++ b/partwebsvcs.html @@ -0,0 +1,119 @@ + + + + + + Web Services + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +

    +
    +
    +
    +
    +

    Part VI

    +
    + +
    +
    + + + + \ No newline at end of file diff --git a/partwebtier.html b/partwebtier.html new file mode 100644 index 0000000..9e96dec --- /dev/null +++ b/partwebtier.html @@ -0,0 +1,154 @@ + + + + + + The Web Tier + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +

    +
    +
    +
    +
    +

    Part III

    +
    + +
    +
    + + + + \ No newline at end of file diff --git a/persistence-basicexamples.html b/persistence-basicexamples.html new file mode 100644 index 0000000..ded1b5e --- /dev/null +++ b/persistence-basicexamples.html @@ -0,0 +1,108 @@ + + + + + + Running the Persistence Examples + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    38 Running the Persistence Examples

    +
    +
    +

    This chapter explains how to use the Java Persistence API. The material +here focuses on the source code and settings of three examples.

    +
    +
    +

    The following topics are addressed here:

    +
    + +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    + + + \ No newline at end of file diff --git a/persistence-basicexamples001.html b/persistence-basicexamples001.html new file mode 100644 index 0000000..08563bf --- /dev/null +++ b/persistence-basicexamples001.html @@ -0,0 +1,92 @@ + + + + + + Overview of the Persistence Examples + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    38.1 Overview of the Persistence Examples

    +
    +
    +

    The first example, order, is an application that uses a stateful +session bean to manage entities related to an ordering system. The +second example, roster, is an application that manages a community +sports system. The third example, address-book, is a web application +that stores contact data. This chapter assumes that you are familiar +with the concepts detailed in Chapter +37, "Introduction to the Java Persistence API."

    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    + + + \ No newline at end of file diff --git a/persistence-basicexamples002.html b/persistence-basicexamples002.html new file mode 100644 index 0000000..5d28b60 --- /dev/null +++ b/persistence-basicexamples002.html @@ -0,0 +1,1015 @@ + + + + + + The order Application + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    38.2 The order Application

    +
    +
    +

    The order application is a simple inventory and ordering application +for maintaining a catalog of parts and placing an itemized order of +those parts. The application has entities that represent parts, vendors, +orders, and line items. These entities are accessed using a stateful +session bean that holds the business logic of the application. A simple +singleton session bean creates the initial entities on application +deployment. A Facelets web application manipulates the data and displays +data from the catalog.

    +
    +
    +

    The information contained in an order can be divided into elements. What +is the order number? What parts are included in the order? What parts +make up that part? Who makes the part? What are the specifications for +the part? Are there any schematics for the part? The order application +is a simplified version of an ordering system that has all these +elements.

    +
    +
    +

    The order application consists of a single WAR module that includes +the enterprise bean classes, the entities, the support classes, and the +Facelets XHTML and class files.

    +
    +
    +

    The database schema in the Java DB database for order is shown in +Figure 38-1.

    +
    +
    +

    Figure 38-1 Database Schema for the order Application

    +
    + +
    +
    +
    +
    +
    +
    + +++ + + + + + +
    +

    Note:

    +
    +
    +

    In this diagram, for simplicity, the PERSISTENCE_ORDER_ prefix is +omitted from the table names.

    +
    +
    +
    +
    +
    +
    +
    +
    +

    38.2.1 Entity Relationships in the order Application

    +
    +

    The order application demonstrates several types of entity +relationships: self-referential, one-to-one, one-to-many, many-to-one, +and unidirectional relationships.

    +
    +
    +

    The following topics are addressed here:

    +
    + +
    +

    38.2.1.1 Self-Referential Relationships

    +
    +

    A self-referential relationship occurs between relationship fields in +the same entity. Part has a field, bomPart, which has a one-to-many +relationship with the field parts, which is also in Part. That is, a +part can be made up of many parts, and each of those parts has exactly +one bill-of-material part.

    +
    +
    +

    The primary key for Part is a compound primary key, a combination of +the partNumber and revision fields. This key is mapped to the +PARTNUMBER and REVISION columns in the PERSISTENCE_ORDER_PART +table:

    +
    +
    +
    +
    ...
    +@ManyToOne
    +@JoinColumns({
    +    @JoinColumn(name="BOMPARTNUMBER", referencedColumnName="PARTNUMBER"),
    +    @JoinColumn(name="BOMREVISION", referencedColumnName="REVISION")
    +})
    +public Part getBomPart() {
    +    return bomPart;
    +}
    +...
    +@OneToMany(mappedBy="bomPart")
    +public Collection<Part> getParts() {
    +    return parts;
    +}
    +...
    +
    +
    +
    +
    +

    38.2.1.2 One-to-One Relationships

    +
    +

    Part has a field, vendorPart, that has a one-to-one relationship +with VendorPart's part field. That is, each part has exactly one +vendor part, and vice versa.

    +
    +
    +

    Here is the relationship mapping in Part:

    +
    +
    +
    +
    @OneToOne(mappedBy="part")
    +public VendorPart getVendorPart() {
    +    return vendorPart;
    +}
    +
    +
    +
    +

    Here is the relationship mapping in VendorPart:

    +
    +
    +
    +
    @OneToOne
    +@JoinColumns({
    +    @JoinColumn(name="PARTNUMBER", referencedColumnName="PARTNUMBER"),
    +    @JoinColumn(name="PARTREVISION", referencedColumnName="REVISION")
    +})
    +public Part getPart() {
    +    return part;
    +}
    +
    +
    +
    +

    Note that, because Part uses a compound primary key, the +@JoinColumns annotation is used to map the columns in the +PERSISTENCE_ORDER_VENDOR_PART table to the columns in +PERSISTENCE_ORDER_PART. The PERSISTENCE_ORDER_VENDOR_PART table’s +PARTREVISION column refers to PERSISTENCE_ORDER_PART's REVISION +column.

    +
    +
    +

    38.2.1.3 One-to-Many Relationship Mapped to Overlapping Primary and +Foreign Keys +^^^^^^^^^^^^^^^^^^^^^^^^^^^^

    +
    +
    +

    CustomerOrder has a field, lineItems, that has a one-to-many +relationship with LineItem's field customerOrder. That is, each +order has one or more line item.

    +
    +
    +

    LineItem uses a compound primary key that is made up of the orderId +and itemId fields. This compound primary key maps to the ORDERID and +ITEMID columns in the PERSISTENCE_ORDER_LINEITEM table. ORDERID is +a foreign key to the ORDERID column in the +PERSISTENCE_ORDER_CUSTOMERORDER table. This means that the ORDERID +column is mapped twice: once as a primary key field, orderId; and +again as a relationship field, order.

    +
    +
    +

    Here is the relationship mapping in CustomerOrder:

    +
    +
    +
    +
    @OneToMany(cascade=ALL, mappedBy="customerOrder")
    +public Collection<LineItem> getLineItems() {
    +    return lineItems;
    +}
    +
    +
    +
    +

    Here is the relationship mapping in LineItem:

    +
    +
    +
    +
    @Id
    +@ManyToOne
    +@JoinColumn(name="ORDERID")
    +public CustomerOrder getCustomerOrder() {
    +    return customerOrder;
    +}
    +
    +
    +
    +
    +

    38.2.1.4 Unidirectional Relationships

    +
    +

    LineItem has a field, vendorPart, that has a unidirectional +many-to-one relationship with VendorPart. That is, there is no field +in the target entity in this relationship:

    +
    +
    +
    +
    @JoinColumn(name="VENDORPARTNUMBER")
    +@ManyToOne
    +public VendorPart getVendorPart() {
    +    return vendorPart;
    +}
    +
    +
    +
    +
    +
    +

    38.2.2 Primary Keys in the order Application

    +
    +

    The order application uses several types of primary keys: +single-valued primary keys, generated primary keys, and compound primary +keys.

    +
    +
    +

    The following topics are addressed here:

    +
    + +
    +

    38.2.2.1 Generated Primary Keys

    +
    +

    VendorPart uses a generated primary key value. That is, the +application does not assign primary key values for the entities but +instead relies on the persistence provider to generate the primary key +values. The @GeneratedValue annotation is used to specify that an +entity will use a generated primary key.

    +
    +
    +

    In VendorPart, the following code specifies the settings for +generating primary key values:

    +
    +
    +
    +
    @TableGenerator(
    +    name="vendorPartGen",
    +    table="PERSISTENCE_ORDER_SEQUENCE_GENERATOR",
    +    pkColumnName="GEN_KEY",
    +    valueColumnName="GEN_VALUE",
    +    pkColumnValue="VENDOR_PART_ID",
    +    allocationSize=10)
    +@Id
    +@GeneratedValue(strategy=GenerationType.TABLE, generator="vendorPartGen")
    +public Long getVendorPartNumber() {
    +    return vendorPartNumber;
    +}
    +
    +
    +
    +

    The @TableGenerator annotation is used in conjunction with +@GeneratedValue's strategy=TABLE element. That is, the strategy used +to generate the primary keys is to use a table in the database. The +@TableGenerator annotation is used to configure the settings for the +generator table. The name element sets the name of the generator, which +is vendorPartGen in VendorPart.

    +
    +
    +

    The PERSISTENCE_ORDER_SEQUENCE_GENERATOR table, whose two columns are +GEN_KEY and GEN_VALUE, will store the generated primary key values. +This table could be used to generate other entities' primary keys, so +the pkColumnValue element is set to VENDOR_PART_ID to distinguish +this entity’s generated primary keys from other entities' generated +primary keys. The allocationSize element specifies the amount to +increment when allocating primary key values. In this case, each +VendorPart's primary key will increment by 10.

    +
    +
    +

    The primary key field vendorPartNumber is of type Long, as the +generated primary key’s field must be an integral type.

    +
    +
    +
    +

    38.2.2.2 Compound Primary Keys

    +
    +

    A compound primary key is made up of multiple fields and follows the +requirements described in Primary +Keys in Entities. To use a compound primary key, you must create a +wrapper class.

    +
    +
    +

    In order, two entities use compound primary keys: Part and +LineItem.

    +
    +
    +
      +
    • +

      Part uses the PartKey wrapper class. Part's primary key is a +combination of the part number and the revision number. PartKey +encapsulates this primary key.

      +
    • +
    • +

      LineItem uses the LineItemKey class. LineItem's primary key is a +combination of the order number and the item number. LineItemKey +encapsulates this primary key.

      +
    • +
    +
    +
    +

    This is the LineItemKey compound primary key wrapper class:

    +
    +
    +
    +
    package javaeetutorial.order.entity;
    +
    +import java.io.Serializable;
    +
    +public final class LineItemKey implements Serializable {
    +
    +    private Integer customerOrder;
    +    private int itemId;
    +
    +    public LineItemKey() {}
    +
    +    public LineItemKey(Integer order, int itemId) {
    +        this.setCustomerOrder(order);
    +        this.setItemId(itemId);
    +    }
    +
    +    @Override
    +    public int hashCode() {
    +        return ((this.getCustomerOrder() == null
    +                ? 0 : this.getCustomerOrder().hashCode())
    +                ^ ((int) this.getItemId()));
    +    }
    +
    +    @Override
    +    public boolean equals(Object otherOb) {
    +        if (this == otherOb) {
    +            return true;
    +        }
    +        if (!(otherOb instanceof LineItemKey)) {
    +            return false;
    +        }
    +        LineItemKey other = (LineItemKey) otherOb;
    +        return ((this.getCustomerOrder() == null
    +                ? other.getCustomerOrder == null : this.getOrderId()
    +                .equals(other.getCustomerOrder()))
    +                && (this.getItemId == oother.getItemId()));
    +    }
    +
    +    @Override
    +    public String toString() {
    +        return "" + getCustomerOrder() + "-" + getItemId();
    +    }
    +
    +    public Integer getCustomerOrder() {
    +        return customerOrder;
    +    }
    +
    +    public void setCustomerOrder(Integer order) {
    +        this.customerOrder = order;
    +    }
    +
    +    public int getItemId() {
    +        return itemId;
    +    }
    +
    +    public void setItemId(int itemId) {
    +        this.itemId = itemId;
    +    }
    +}
    +
    +
    +
    +

    The @IdClass annotation is used to specify the primary key class in +the entity class. In LineItem, @IdClass is used as follows:

    +
    +
    +
    +
    @IdClass(LineItemKey.class)
    +@Entity
    +...
    +public class LineItem implements Serializable {
    +    ...
    +}
    +
    +
    +
    +

    The two fields in LineItem are tagged with the @Id annotation to +mark those fields as part of the compound primary key:

    +
    +
    +
    +
    @Id
    +public int getItemId() {
    +    return itemId;
    +}
    +...
    +@Id
    +@ManyToOne
    +@JoinColumn(name="ORDERID")
    +public CustomerOrder getCustomerOrder() {
    +    return customerOrder;
    +}
    +
    +
    +
    +

    For customerOrder, you also use the @JoinColumn annotation to +specify the column name in the table and that this column is an +overlapping foreign key pointing at the +PERSISTENCE_ORDER_CUSTOMERORDER table’s ORDERID column (see +One-to-Many Relationship Mapped to Overlapping Primary and +Foreign Keys). That is, customerOrder will be set by the +CustomerOrder entity.

    +
    +
    +

    In LineItem's constructor, the line item number (LineItem.itemId) is +set using the CustomerOrder.getNextId method:

    +
    +
    +
    +
    public LineItem(CustomerOrder order, int quantity, VendorPart vendorPart) {
    +    this.customerOrder = order;
    +    this.itemId = order.getNextId();
    +    this.quantity = quantity;
    +    this.vendorPart = vendorPart;
    +}
    +
    +
    +
    +

    CustomerOrder.getNextId counts the number of current line items, adds +1, and returns that number:

    +
    +
    +
    +
    @Transient
    +public int getNextId() {
    +    return this.lineItems.size() + 1;
    +}
    +
    +
    +
    +

    Part requires the @Column annotation on the two fields that comprise +Part's compound primary key, because Part's compound primary key is +an overlapping primary key/foreign key:

    +
    +
    +
    +
    @IdClass(PartKey.class)
    +@Entity
    +...
    +public class Part implements Serializable {
    +    ...
    +    @Id
    +    @Column(nullable=false)
    +    public String getPartNumber() {
    +        return partNumber;
    +    }
    +    ...
    +    @Id
    +    @Column(nullable=false)
    +    public int getRevision() {
    +        return revision;
    +    }
    +    ...
    +}
    +
    +
    +
    +
    +
    +

    38.2.3 Entity Mapped to More Than One Database Table

    +
    +

    Part's fields map to more than one database table: +PERSISTENCE_ORDER_PART and PERSISTENCE_ORDER_PART_DETAIL. The +PERSISTENCE_ORDER_PART_DETAIL table holds the specification and +schematics for the part. The @SecondaryTable annotation is used to +specify the secondary table:

    +
    +
    +
    +
    ...
    +@Entity
    +@Table(name="PERSISTENCE_ORDER_PART")
    +@SecondaryTable(name="PERSISTENCE_ORDER_PART_DETAIL", pkJoinColumns={
    +    @PrimaryKeyJoinColumn(name="PARTNUMBER",
    +        referencedColumnName="PARTNUMBER"),
    +    @PrimaryKeyJoinColumn(name="REVISION",
    +        referencedColumnName="REVISION")
    +})
    +public class Part implements Serializable {
    +    ...
    +}
    +
    +
    +
    +

    PERSISTENCE_ORDER_PART_DETAIL and PERSISTENCE_ORDER_PART share the +same primary key values. The pkJoinColumns element of +@SecondaryTable is used to specify that +PERSISTENCE_ORDER_PART_DETAIL's primary key columns are foreign keys +to PERSISTENCE_ORDER_PART. The @PrimaryKeyJoinColumn annotation sets +the primary key column names and specifies which column in the primary +table the column refers to. In this case, the primary key column names +for both PERSISTENCE_ORDER_PART_DETAIL and PERSISTENCE_ORDER_PART +are the same: PARTNUMBER and REVISION, respectively.

    +
    +
    +
    +

    38.2.4 Cascade Operations in the order Application

    +
    +

    Entities that have relationships to other entities often have +dependencies on the existence of the other entity in the relationship. +For example, a line item is part of an order; if the order is deleted, +then the line item also should be deleted. This is called a cascade +delete relationship.

    +
    +
    +

    In order, there are two cascade delete dependencies in the entity +relationships. If the CustomerOrder to which a LineItem is related +is deleted, the LineItem also should be deleted. If the Vendor to +which a VendorPart is related is deleted, the VendorPart also should +be deleted.

    +
    +
    +

    You specify the cascade operations for entity relationships by setting +the cascade element in the inverse (nonowning) side of the +relationship. The cascade element is set to ALL in the case of +CustomerOrder.lineItems. This means that all persistence operations +(deletes, updates, and so on) are cascaded from orders to line items.

    +
    +
    +

    Here is the relationship mapping in CustomerOrder:

    +
    +
    +
    +
    @OneToMany(cascade=ALL, mappedBy="customerOrder")
    +public Collection<LineItem> getLineItems() {
    +    return lineItems;
    +}
    +
    +
    +
    +

    Here is the relationship mapping in LineItem:

    +
    +
    +
    +
    @Id
    +@ManyToOne
    +@JoinColumn(name="ORDERID")
    +public CustomerOrder getCustomerOrder() {
    +    return customerOrder;
    +}
    +
    +
    +
    +
    +

    38.2.5 BLOB and CLOB Database Types in the order Application

    +
    +

    The PARTDETAIL table in the database has a column, DRAWING, of type +BLOB. BLOB stands for binary large objects, which are used for +storing binary data, such as an image. The DRAWING column is mapped to +the field Part.drawing of type java.io.Serializable. The @Lob +annotation is used to denote that the field is a large object:

    +
    +
    +
    +
    @Column(table="PERSISTENCE_ORDER_PART_DETAIL")
    +@Lob
    +public Serializable getDrawing() {
    +    return drawing;
    +}
    +
    +
    +
    +

    PERSISTENCE_ORDER_PART_DETAIL also has a column, SPECIFICATION, of +type CLOB. CLOB stands for character large objects, which are used +to store string data too large to be stored in a VARCHAR column. +SPECIFICATION is mapped to the field Part.specification of type +java.lang.String. The @Lob annotation is also used here to denote +that the field is a large object:

    +
    +
    +
    +
    @Column(table="PERSISTENCE_ORDER_PART_DETAIL")
    +@Lob
    +public String getSpecification() {
    +    return specification;
    +}
    +
    +
    +
    +

    Both of these fields use the @Column annotation and set the table +element to the secondary table.

    +
    +
    +
    +

    38.2.6 Temporal Types in the order Application

    +
    +

    The CustomerOrder.lastUpdate persistent property, which is of type +java.util.Date, is mapped to the +PERSISTENCE_ORDER_CUSTOMERORDER.LASTUPDATE database field, which is of +the SQL type TIMESTAMP. To ensure the proper mapping between these +types, you must use the @Temporal annotation with the proper temporal +type specified in @Temporal's element. @Temporal's elements are of +type javax.persistence.TemporalType. The possible values are

    +
    +
    +
      +
    • +

      DATE, which maps to java.sql.Date

      +
    • +
    • +

      TIME, which maps to java.sql.Time

      +
    • +
    • +

      TIMESTAMP, which maps to java.sql.Timestamp

      +
    • +
    +
    +
    +

    Here is the relevant section of CustomerOrder:

    +
    +
    +
    +
    @Temporal(TIMESTAMP)
    +public Date getLastUpdate() {
    +    return lastUpdate;
    +}
    +
    +
    +
    +
    +

    38.2.7 Managing the order Application’s Entities

    +
    +

    The RequestBean stateful session bean contains the business logic and +manages the entities of order. RequestBean uses the +@PersistenceContext annotation to retrieve an entity manager instance, +which is used to manage order's entities in RequestBean's business +methods:

    +
    +
    +
    +
    @PersistenceContext
    +private EntityManager em;
    +
    +
    +
    +

    This EntityManager instance is a container-managed entity manager, so +the container takes care of all the transactions involved in managing +order's entities.

    +
    +
    +

    38.2.7.1 Creating Entities

    +
    +

    The RequestBean.createPart business method creates a new Part +entity. The EntityManager.persist method is used to persist the newly +created entity to the database:

    +
    +
    +
    +
    Part part = new Part(partNumber,
    +        revision,
    +        description,
    +        revisionDate,
    +        specification,
    +        drawing);
    +em.persist(part);
    +
    +
    +
    +

    The ConfigBean singleton session bean is used to initialize the data +in order. ConfigBean is annotated with @Startup, which indicates +that the EJB container should create ConfigBean when order is +deployed. The createData method is annotated with @PostConstruct and +creates the initial entities used by order by calling RequestBean's +business methods.

    +
    +
    +
    +

    38.2.7.2 Finding Entities

    +
    +

    The RequestBean.getOrderPrice business method returns the price of a +given order based on the orderId. The EntityManager.find method is +used to retrieve the entity from the database:

    +
    +
    +
    +
    CustomerOrder order = em.find(CustomerOrder.class, orderId);
    +
    +
    +
    +

    The first argument of EntityManager.find is the entity class, and the +second is the primary key.

    +
    +
    +
    +

    38.2.7.3 Setting Entity Relationships

    +
    +

    The RequestBean.createVendorPart business method creates a +VendorPart associated with a particular Vendor. The +EntityManager.persist method is used to persist the newly created +VendorPart entity to the database, and the VendorPart.setVendor and +Vendor.setVendorPart methods are used to associate the VendorPart +with the Vendor:

    +
    +
    +
    +
    PartKey pkey = new PartKey();
    +pkey.setPartNumber(partNumber);
    +pkey.setRevision(revision);
    +
    +Part part = em.find(Part.class, pkey);
    +
    +VendorPart vendorPart = new VendorPart(description, price, part);
    +em.persist(vendorPart);
    +
    +Vendor vendor = em.find(Vendor.class, vendorId);
    +vendor.addVendorPart(vendorPart);
    +vendorPart.setVendor(vendor);
    +
    +
    +
    +
    +

    38.2.7.4 Using Queries

    +
    +

    The RequestBean.adjustOrderDiscount business method updates the +discount applied to all orders. This method uses the findAllOrders +named query, defined in CustomerOrder:

    +
    +
    +
    +
    @NamedQuery(
    +    name="findAllOrders",
    +    query="SELECT co FROM CustomerOrder co " +
    +          "ORDER BY co.orderId"
    +)
    +
    +
    +
    +

    The EntityManager.createNamedQuery method is used to run the query. +Because the query returns a List of all the orders, the +Query.getResultList method is used:

    +
    +
    +
    +
    List orders = em.createNamedQuery(
    +        "findAllOrders")
    +        .getResultList();
    +
    +
    +
    +

    The RequestBean.getTotalPricePerVendor business method returns the +total price of all the parts for a particular vendor. This method uses a +named parameter, id, defined in the named query +findTotalVendorPartPricePerVendor defined in VendorPart:

    +
    +
    +
    +
    @NamedQuery(
    +    name="findTotalVendorPartPricePerVendor",
    +    query="SELECT SUM(vp.price) " +
    +    "FROM VendorPart vp " +
    +    "WHERE vp.vendor.vendorId = :id"
    +)
    +
    +
    +
    +

    When running the query, the Query.setParameter method is used to set +the named parameter id to the value of vendorId, the parameter to +RequestBean.getTotalPricePerVendor:

    +
    +
    +
    +
    return (Double) em.createNamedQuery(
    +    "findTotalVendorPartPricePerVendor")
    +    .setParameter("id", vendorId)
    +    .getSingleResult();
    +
    +
    +
    +

    The Query.getSingleResult method is used for this query because the +query returns a single value.

    +
    +
    +
    +

    38.2.7.5 Removing Entities

    +
    +

    The RequestBean.removeOrder business method deletes a given order from +the database. This method uses the EntityManager.remove method to +delete the entity from the database:

    +
    +
    +
    +
    CustomerOrder order = em.find(CustomerOrder.class, orderId);
    +em.remove(order);
    +
    +
    +
    +
    +
    +

    38.2.8 Running the order Example

    +
    +

    You can use either NetBeans IDE or Maven to build, package, deploy, and +run the order application. First, you will create the database tables +in the Java DB server.

    +
    +
    +

    The following topics are addressed here:

    +
    + +
    +

    38.2.8.1 To Run the order Example Using NetBeans IDE

    +
    +
      +
    1. +

      Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

      +
    2. +
    3. +

      If the database server is not already running, start it by following +the instructions in Starting and +Stopping the Java DB Server.

      +
    4. +
    5. +

      From the File menu, choose Open Project.

      +
    6. +
    7. +

      In the Open Project dialog box, navigate to:

      +
      +
      +
      tut-install/examples/persistence
      +
      +
      +
    8. +
    9. +

      Select the order folder.

      +
    10. +
    11. +

      Click Open Project.

      +
    12. +
    13. +

      In the Projects tab, right-click the order project and select Run.

      +
      +

      NetBeans IDE opens a web browser to the following URL:

      +
      +
      +
      +
      http://localhost:8080/order/
      +
      +
      +
    14. +
    +
    +
    +
    +

    38.2.8.2 To Run the order Example Using Maven

    +
    +
      +
    1. +

      Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

      +
    2. +
    3. +

      If the database server is not already running, start it by following +the instructions in Starting and +Stopping the Java DB Server.

      +
    4. +
    5. +

      In a terminal window, go to:

      +
      +
      +
      tut-install/examples/persistence/order/
      +
      +
      +
    6. +
    7. +

      Enter the following command:

      +
      +
      +
      mvn install
      +
      +
      +
      +

      This compiles the source files and packages the application into a WAR +file located at +tut-install`/examples/persistence/order/target/order.war`. Then the WAR +file is deployed to your GlassFish Server instance.

      +
      +
    8. +
    9. +

      To create and update the order data, open a web browser to the +following URL:

      +
      +
      +
      http://localhost:8080/order/
      +
      +
      +
    10. +
    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    +
    +
    + + + \ No newline at end of file diff --git a/persistence-basicexamples003.html b/persistence-basicexamples003.html new file mode 100644 index 0000000..4f3f57e --- /dev/null +++ b/persistence-basicexamples003.html @@ -0,0 +1,645 @@ + + + + + + The roster Application + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    38.3 The roster Application

    +
    +
    +

    The roster application maintains the team rosters for players in +recreational sports leagues. The application has four components: Java +Persistence API entities (Player, Team, and League), a stateful +session bean (RequestBean), an application client (RosterClient), +and three helper classes (PlayerDetails, TeamDetails, and +LeagueDetails).

    +
    +
    +

    Functionally, roster is similar to the order application, with three +new features that order does not have: many-to-many relationships, +entity inheritance, and automatic table creation at deployment time.

    +
    +
    +

    The database schema in the Java DB database for the roster application +is shown in Figure 38-2.

    +
    +
    +

    Figure 38-2 Database Schema for the roster Application

    +
    + +
    +
    +
    +
    +
    +
    + +++ + + + + + +
    +

    Note:

    +
    +
    +

    In this diagram, for simplicity, the PERSISTENCE_ROSTER_ prefix is +omitted from the table names.

    +
    +
    +
    +
    +
    +
    +
    +
    +

    38.3.1 Relationships in the roster Application

    +
    +

    A recreational sports system has the following relationships.

    +
    +
    +
      +
    • +

      A player can be on many teams.

      +
    • +
    • +

      A team can have many players.

      +
    • +
    • +

      A team is in exactly one league.

      +
    • +
    • +

      A league has many teams.

      +
    • +
    +
    +
    +

    In roster this system is reflected by the following relationships +between the Player, Team, and League entities.

    +
    +
    +
      +
    • +

      There is a many-to-many relationship between Player and Team.

      +
    • +
    • +

      There is a many-to-one relationship between Team and League.

      +
    • +
    +
    +
    +

    38.3.1.1 The Many-To-Many Relationship in roster

    +
    +

    The many-to-many relationship between Player and Team is specified +by using the @ManyToMany annotation. In Team.java, the @ManyToMany +annotation decorates the getPlayers method:

    +
    +
    +
    +
    @ManyToMany
    +@JoinTable(
    +    name="PERSISTENCE_ROSTER_TEAM_PLAYER",
    +    joinColumns=
    +        @JoinColumn(name="TEAM_ID", referencedColumnName="ID"),
    +    inverseJoinColumns=
    +        @JoinColumn(name="PLAYER_ID", referencedColumnName="ID")
    +)
    +public Collection<Player> getPlayers() {
    +    return players;
    +}
    +
    +
    +
    +

    The @JoinTable annotation is used to specify a database table that +will associate player IDs with team IDs. The entity that specifies the +@JoinTable is the owner of the relationship, so the Team entity is +the owner of the relationship with the Player entity. Because roster +uses automatic table creation at deployment time, the container will +create a join table named PERSISTENCE_ROSTER_TEAM_PLAYER.

    +
    +
    +

    Player is the inverse, or nonowning, side of the relationship with +Team. As one-to-one and many-to-one relationships, the nonowning side +is marked by the mappedBy element in the relationship annotation. +Because the relationship between Player and Team is bidirectional, +the choice of which entity is the owner of the relationship is +arbitrary.

    +
    +
    +

    In Player.java, the @ManyToMany annotation decorates the getTeams +method:

    +
    +
    +
    +
    @ManyToMany(mappedBy="players")
    +public Collection<Team> getTeams() {
    +    return teams;
    +}
    +
    +
    +
    +
    +
    +

    38.3.2 Entity Inheritance in the roster Application

    +
    +

    The roster application shows how to use entity inheritance, as +described in Entity Inheritance.

    +
    +
    +

    The League entity in roster is an abstract entity with two concrete +subclasses: SummerLeague and WinterLeague. Because League is an +abstract class, it cannot be instantiated:

    +
    +
    +
    +
    @Entity
    +@Table(name = "PERSISTENCE_ROSTER_LEAGUE")
    +public abstract class League implements Serializable { ... }
    +
    +
    +
    +

    Instead, when creating a league, clients use SummerLeague or +WinterLeague. SummerLeague and WinterLeague inherit the persistent +properties defined in League and add only a constructor that verifies +that the sport parameter matches the type of sport allowed in that +seasonal league. For example, here is the SummerLeague entity:

    +
    +
    +
    +
    ...
    +@Entity
    +public class SummerLeague extends League implements Serializable {
    +
    +    /** Creates a new instance of SummerLeague */
    +    public SummerLeague() {
    +    }
    +
    +    public SummerLeague(String id, String name, String sport)
    +            throws IncorrectSportException {
    +        this.id = id;
    +        this.name = name;
    +        if (sport.equalsIgnoreCase("swimming") ||
    +                sport.equalsIgnoreCase("soccer") ||
    +                sport.equalsIgnoreCase("basketball") ||
    +                sport.equalsIgnoreCase("baseball")) {
    +            this.sport = sport;
    +        } else {
    +            throw new IncorrectSportException("Sport is not a summer sport.");
    +        }
    +    }
    +}
    +
    +
    +
    +

    The roster application uses the default mapping strategy of +InheritanceType.SINGLE_TABLE, so the @Inheritance annotation is not +required. If you want to use a different mapping strategy, decorate +League with @Inheritance and specify the mapping strategy in the +strategy element:

    +
    +
    +
    +
    @Entity
    +@Inheritance(strategy=JOINED)
    +@Table(name="PERSISTENCE_ROSTER_LEAGUE")
    +public abstract class League implements Serializable { ... }
    +
    +
    +
    +

    The roster application uses the default discriminator column name, so +the @DiscriminatorColumn annotation is not required. Because you are +using automatic table generation in roster, the Persistence provider +will create a discriminator column called DTYPE in the +PERSISTENCE_ROSTER_LEAGUE table, which will store the name of the +inherited entity used to create the league. If you want to use a +different name for the discriminator column, decorate League with +@DiscriminatorColumn and set the name element:

    +
    +
    +
    +
    @Entity
    +@DiscriminatorColumn(name="DISCRIMINATOR")
    +@Table(name="PERSISTENCE_ROSTER_LEAGUE")
    +public abstract class League implements Serializable { ... }
    +
    +
    +
    +
    +

    38.3.3 Criteria Queries in the roster Application

    +
    +

    The roster application uses Criteria API queries, as opposed to the +JPQL queries used in order. Criteria queries are Java programming +language, typesafe queries defined in the business tier of roster, in +the RequestBean stateful session bean.

    +
    +
    +

    The following topics are addressed here:

    +
    + +
    +

    38.3.3.1 Metamodel Classes in the roster Application

    +
    +

    Metamodel classes model an entity’s attributes and are used by Criteria +queries to navigate to an entity’s attributes. Each entity class in +roster has a corresponding metamodel class, generated at compile time, +with the same package name as the entity and appended with an underscore +character (_). For example, the roster.entity.Player entity has a +corresponding metamodel class, roster.entity.Player_.

    +
    +
    +

    Each persistent field or property in the entity class has a +corresponding attribute in the entity’s metamodel class. For the +Player entity, the corresponding metamodel class is as follows:

    +
    +
    +
    +
    @StaticMetamodel(Player.class)
    +public class Player_ {
    +    public static volatile SingularAttribute<Player, String> id;
    +    public static volatile SingularAttribute<Player, String> name;
    +    public static volatile SingularAttribute<Player, String> position;
    +    public static volatile SingularAttribute<Player, Double> salary;
    +    public static volatile CollectionAttribute<Player, Team> teams;
    +}
    +
    +
    +
    +
    +

    38.3.3.2 Obtaining a CriteriaBuilder Instance in RequestBean

    +
    +

    The CriteriaBuilder interface defines methods to create criteria query +objects and create expressions for modifying those query objects. +RequestBean creates an instance of CriteriaBuilder by using a +@PostConstruct method, init:

    +
    +
    +
    +
    @PersistenceContext
    +private EntityManager em;
    +private CriteriaBuilder cb;
    +
    +@PostConstruct
    +private void init() {
    +    cb = em.getCriteriaBuilder();
    +}
    +
    +
    +
    +

    The EntityManager instance is injected at runtime, and then that +EntityManager object is used to create the CriteriaBuilder instance +by calling getCriteriaBuilder. The CriteriaBuilder instance is +created in a @PostConstruct method to ensure that the EntityManager +instance has been injected by the enterprise bean container.

    +
    +
    +
    +

    38.3.3.3 Creating Criteria Queries in RequestBean’s Business Methods

    +
    +

    Many of the business methods in RequestBean define Criteria queries. +One business method, getPlayersByPosition, returns a list of players +who play a particular position on a team:

    +
    +
    +
    +
    public List<PlayerDetails> getPlayersByPosition(String position) {
    +    logger.info("getPlayersByPosition");
    +    List<Player> players = null;
    +
    +    try {
    +        CriteriaQuery<Player> cq = cb.createQuery(Player.class);
    +        if (cq != null) {
    +            Root<Player> player = cq.from(Player.class);
    +
    +            // set the where clause
    +            cq.where(cb.equal(player.get(Player_.position), position));
    +            cq.select(player);
    +            TypedQuery<Player> q = em.createQuery(cq);
    +            players = q.getResultList();
    +        }
    +        return copyPlayersToDetails(players);
    +    } catch (Exception ex) {
    +        throw new EJBException(ex);
    +    }
    +}
    +
    +
    +
    +

    A query object is created by calling the CriteriaBuilder object’s +createQuery method, with the type set to Player because the query +will return a list of players.

    +
    +
    +

    The query root, the base entity from which the query will navigate to +find the entity’s attributes and related entities, is created by calling +the from method of the query object. This sets the FROM clause of +the query.

    +
    +
    +

    The WHERE clause, set by calling the where method on the query +object, restricts the results of the query according to the conditions +of an expression. The CriteriaBuilder.equal method compares the two +expressions. In getPlayersByPosition, the position attribute of the +Player_ metamodel class, accessed by calling the get method of the +query root, is compared to the position parameter passed to +getPlayersByPosition.

    +
    +
    +

    The SELECT clause of the query is set by calling the select method +of the query object. The query will return Player entities, so the +query root object is passed as a parameter to select.

    +
    +
    +

    The query object is prepared for execution by calling +EntityManager.createQuery, which returns a TypedQuery<T> object with +the type of the query, in this case Player. This typed query object is +used to execute the query, which occurs when the getResultList method +is called, and a List<Player> collection is returned.

    +
    +
    +
    +
    +

    38.3.4 Automatic Table Generation in the roster Application

    +
    +

    At deployment time, GlassFish Server will automatically drop and create +the database tables used by roster. This is done by setting the +javax.persistence.schema-generation.database.action property to +drop-and-create in persistence.xml:

    +
    +
    +
    +
    <?xml version="1.0" encoding="UTF-8"?>
    +<persistence version="2.1"
    +    xmlns="http://xmlns.jcp.org/xml/ns/persistence"
    +    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    +    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
    +        http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
    +  <persistence-unit name="em" transaction-type="JTA">
    +    <jta-data-source>java:comp/DefaultDataSource</jta-data-source>
    +    <properties>
    +      <property name="javax.persistence.schema-generation.database.action"
    +                value="drop-and-create"/>
    +    </properties>
    +  </persistence-unit>
    +</persistence>
    +
    +
    +
    +
    +

    38.3.5 Running the roster Example

    +
    +

    You can use either NetBeans IDE or Maven to build, package, deploy, and +run the roster application.

    +
    +
    +

    The following topics are addressed here:

    +
    + +
    +

    38.3.5.1 To Run the roster Example Using NetBeans IDE

    +
    +
      +
    1. +

      Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

      +
    2. +
    3. +

      If the database server is not already running, start it by following +the instructions in Starting and +Stopping the Java DB Server.

      +
    4. +
    5. +

      From the File menu, choose Open Project.

      +
    6. +
    7. +

      In the Open Project dialog box, navigate to:

      +
      +
      +
      tut-install/examples/persistence
      +
      +
      +
    8. +
    9. +

      Select the roster folder.

      +
    10. +
    11. +

      Select the Open Required Projects check box.

      +
    12. +
    13. +

      Click Open Project.

      +
    14. +
    15. +

      In the Projects tab, right-click the roster project and select +Build.

      +
      +

      This will compile, package, and deploy the EAR to GlassFish Server.

      +
      +
      +

      You will see the following partial output from the application client in +the Output tab:

      +
      +
      +
      +
      List all players in team T2:
      +P6 Ian Carlyle goalkeeper 555.0
      +P7 Rebecca Struthers midfielder 777.0
      +P8 Anne Anderson forward 65.0
      +P9 Jan Wesley defender 100.0
      +P10 Terry Smithson midfielder 100.0
      +
      +List all teams in league L1:
      +T1 Honey Bees Visalia
      +T2 Gophers Manteca
      +T5 Crows Orland
      +
      +List all defenders:
      +P2 Alice Smith defender 505.0
      +P5 Barney Bold defender 100.0
      +P9 Jan Wesley defender 100.0
      +P22 Janice Walker defender 857.0
      +P25 Frank Fletcher defender 399.0
      +
      +
      +
    16. +
    +
    +
    +
    +

    38.3.5.2 To Run the roster Example Using Maven

    +
    +
      +
    1. +

      Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

      +
    2. +
    3. +

      If the database server is not already running, start it by following +the instructions in Starting and +Stopping the Java DB Server.

      +
    4. +
    5. +

      In a terminal window, go to:

      +
      +
      +
      tut-install/examples/persistence/roster/roster-ear/
      +
      +
      +
    6. +
    7. +

      Enter the following command:

      +
      +
      +
      mvn install
      +
      +
      +
      +

      This compiles the source files and packages the application into an EAR +file located at +tut-install`/examples/persistence/roster/target/roster.ear`. The EAR +file is then deployed to GlassFish Server. GlassFish Server will then +drop and create the database tables during deployment, as specified in +persistence.xml.

      +
      +
      +

      After successfully deploying the EAR, the client stubs are retrieved and +the application client is run using the appclient application included +with GlassFish Server.

      +
      +
      +

      You will see the output, which begins as follows:

      +
      +
      +
      +
      [echo] running application client container.
      +[exec] List all players in team T2:
      +[exec] P6 Ian Carlyle goalkeeper 555.0
      +[exec] P7 Rebecca Struthers midfielder 777.0
      +[exec] P8 Anne Anderson forward 65.0
      +[exec] P9 Jan Wesley defender 100.0
      +[exec] P10 Terry Smithson midfielder 100.0
      +
      +[exec] List all teams in league L1:
      +[exec] T1 Honey Bees Visalia
      +[exec] T2 Gophers Manteca
      +[exec] T5 Crows Orland
      +
      +[exec] List all defenders:
      +[exec] P2 Alice Smith defender 505.0
      +[exec] P5 Barney Bold defender 100.0
      +[exec] P9 Jan Wesley defender 100.0
      +[exec] P22 Janice Walker defender 857.0
      +[exec] P25 Frank Fletcher defender 399.0
      +
      +
      +
    8. +
    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    +
    +
    + + + \ No newline at end of file diff --git a/persistence-basicexamples004.html b/persistence-basicexamples004.html new file mode 100644 index 0000000..2ca15ac --- /dev/null +++ b/persistence-basicexamples004.html @@ -0,0 +1,406 @@ + + + + + + The address-book Application + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    38.4 The address-book Application

    +
    +
    +

    The address-book example application is a simple web application that +stores contact data. It uses a single entity class, Contact, that uses +the Java API for JavaBeans Validation (Bean Validation) to validate the +data stored in the persistent attributes of the entity, as described in +Validating Persistent Fields and +Properties.

    +
    +
    +

    The following topics are addressed here:

    +
    + +
    +

    38.4.1 Bean Validation Constraints in address-book

    +
    +

    The Contact entity uses the @NotNull, @Pattern, and @Past +constraints on the persistent attributes.

    +
    +
    +

    The @NotNull constraint marks the attribute as a required field. The +attribute must be set to a non-null value before the entity can be +persisted or modified. Bean Validation will throw a validation error if +the attribute is null when the entity is persisted or modified.

    +
    +
    +

    The @Pattern constraint defines a regular expression that the value of +the attribute must match before the entity can be persisted or modified. +This constraint has two different uses in address-book.

    +
    +
    +
      +
    • +

      The regular expression declared in the @Pattern annotation on the +email field matches email addresses of the form name`@domain +name.top level domain, allowing only valid characters for email +addresses. For example, `username@example.com will pass validation, as +will firstname.lastname@mail.example.com. However, +firstname,lastname@example.com, which contains an illegal comma +character in the local name, will fail validation.

      +
    • +
    • +

      The mobilePhone and homePhone fields are annotated with a +@Pattern constraint that defines a regular expression to match phone +numbers of the form (`xxx)` xxx`-`xxxx.

      +
    • +
    +
    +
    +

    The @Past constraint is applied to the birthday field, which must be a +java.util.Date in the past.

    +
    +
    +

    Here are the relevant parts of the Contact entity class:

    +
    +
    +
    +
    @Entity
    +public class Contact implements Serializable {
    +    @Id
    +    @GeneratedValue(strategy = GenerationType.AUTO)
    +    private Long id;
    +    @NotNull
    +    protected String firstName;
    +    @NotNull
    +    protected String lastName;
    +    @Pattern(regexp = "[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\."
    +            + "[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@"
    +            + "(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9]"
    +            + "(?:[a-z0-9-]*[a-z0-9])?",
    +            message = "{invalid.email}")
    +    protected String email;
    +    @Pattern(regexp = "^\\(?(\\d{3})\\)?[- ]?(\\d{3})[- ]?(\\d{4})$",
    +            message = "{invalid.phonenumber}")
    +    protected String mobilePhone;
    +    @Pattern(regexp = "^\\(?(\\d{3})\\)?[- ]?(\\d{3})[- ]?(\\d{4})$",
    +            message = "{invalid.phonenumber}")
    +    protected String homePhone;
    +    @Temporal(javax.persistence.TemporalType.DATE)
    +    @Past
    +    protected Date birthday;
    +    ...
    +}
    +
    +
    +
    +
    +

    38.4.2 Specifying Error Messages for Constraints in address-book

    +
    +

    Some of the constraints in the Contact entity specify an optional +message:

    +
    +
    +
    +
    @Pattern(regexp = "^\\(?(\\d{3})\\)?[- ]?(\\d{3})[- ]?(\\d{4})$",
    +        message = "{invalid.phonenumber}")
    +protected String homePhone;
    +
    +
    +
    +

    The optional message element in the @Pattern constraint overrides the +default validation message. The message can be specified directly:

    +
    +
    +
    +
    @Pattern(regexp = "^\\(?(\\d{3})\\)?[- ]?(\\d{3})[- ]?(\\d{4})$",
    +        message = "Invalid phone number!")
    +protected String homePhone;
    +
    +
    +
    +

    The constraints in Contact, however, are strings in the resource +bundle ValidationMessages.properties, under +tut-install`/examples/persistence/address-book/src/java/. This allows +the validation messages to be located in one single properties file and +the messages to be easily localized. Overridden Bean Validation messages +must be placed in a resource bundle properties file named +`ValidationMessages.properties in the default package, with localized +resource bundles taking the form +ValidationMessages_`locale-prefix.properties`. For example, +ValidationMessages_es.properties is the resource bundle used in +Spanish-speaking locales.

    +
    +
    +
    +

    38.4.3 Validating Contact Input from a JavaServer Faces Application

    +
    +

    The address-book application uses a JavaServer Faces web front end to +allow users to enter contacts. While JavaServer Faces has a form input +validation mechanism using tags in Facelets XHTML files, address-book +doesn’t use these validation tags. Bean Validation constraints in +JavaServer Faces managed beans, in this case in the Contact entity, +automatically trigger validation when the forms are submitted.

    +
    +
    +

    The following code snippet from the Create.xhtml Facelets file shows +some of the input form for creating new Contact instances:

    +
    +
    +
    +
    <h:form>
    +    <table columns="3" role="presentation">
    +        <tr>
    +            <td><h:outputLabel value="#{bundle.CreateContactLabel_firstName}"
    +                               for="firstName" /></td>
    +            <td><h:inputText id="firstName"
    +                             value="#{contactController.selected.firstName}"
    +                             title="#{bundle.CreateContactTitle_firstName}"/>
    +            </td>
    +            <td><h:message for="firstName" /></td>
    +        </tr>
    +        <tr>
    +            <td><h:outputLabel value="#{bundle.CreateContactLabel_lastName}"
    +                               for="lastName" /></td>
    +            <td><h:inputText id="lastName"
    +                             value="#{contactController.selected.lastName}"
    +                             title="#{bundle.CreateContactTitle_lastName}" />
    +            </td>
    +            <td><h:message for="lastName" /></td>
    +        </tr>
    +        ...
    +    </table>
    +</h:form>
    +
    +
    +
    +

    The <h:inputText> tags firstName and lastName are bound to the +attributes in the Contact entity instance selected in the +ContactController stateless session bean. Each <h:inputText> tag has +an associated <h:message> tag that will display validation error +messages. The form doesn’t require any JavaServer Faces validation tags, +however.

    +
    +
    +
    +

    38.4.4 Running the address-book Example

    +
    +

    You can use either NetBeans IDE or Maven to build, package, deploy, and +run the address-book application.

    +
    +
    +

    The following topics are addressed here:

    +
    + +
    +

    38.4.4.1 To Run the address-book Example Using NetBeans IDE

    +
    +
      +
    1. +

      Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

      +
    2. +
    3. +

      If the database server is not already running, start it by following +the instructions in Starting and +Stopping the Java DB Server.

      +
    4. +
    5. +

      From the File menu, choose Open Project.

      +
    6. +
    7. +

      In the Open Project dialog box, navigate to:

      +
      +
      +
      tut-install/examples/persistence
      +
      +
      +
    8. +
    9. +

      Select the address-book folder.

      +
    10. +
    11. +

      Click Open Project.

      +
    12. +
    13. +

      In the Projects tab, right-click the address-book project and +select Run.

      +
      +

      After the application has been deployed, a web browser window appears at +the following URL:

      +
      +
      +
      +
      http://localhost:8080/address-book/
      +
      +
      +
    14. +
    15. +

      Click Show All Contact Items, then Create New Contact. Enter values +in the fields; then click Save.

      +
      +

      If any of the values entered violate the constraints in Contact, an +error message will appear in red beside the field with the incorrect +values.

      +
      +
    16. +
    +
    +
    +
    +

    38.4.4.2 To Run the address-book Example Using Maven

    +
    +
      +
    1. +

      Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

      +
    2. +
    3. +

      If the database server is not already running, start it by following +the instructions in Starting and +Stopping the Java DB Server.

      +
    4. +
    5. +

      In a terminal window, go to:

      +
      +
      +
      tut-install/examples/persistence/address-book/
      +
      +
      +
    6. +
    7. +

      Enter the following command:

      +
      +
      +
      mvn install
      +
      +
      +
      +

      This will compile and assemble the address-book application into a +WAR. The WAR file is then deployed to GlassFish Server.

      +
      +
    8. +
    9. +

      Open a web browser window and enter the following URL:

      +
      +
      +
      http://localhost:8080/address-book/
      +
      +
      +
    10. +
    11. +

      Click Show All Contact Items, then Create New Contact. Enter values +in the fields; then click Save.

      +
      +

      If any of the values entered violate the constraints in Contact, an +error message will appear in red beside the field with the incorrect +values.

      +
      +
    12. +
    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    +
    +
    + + + \ No newline at end of file diff --git a/persistence-cache.html b/persistence-cache.html new file mode 100644 index 0000000..497ae37 --- /dev/null +++ b/persistence-cache.html @@ -0,0 +1,103 @@ + + + + + + Using a Second-Level Cache with Java Persistence API Applications + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    44 Using a Second-Level Cache with Java Persistence API Applications

    +
    +
    +

    This chapter explains how to modify the second-level cache mode settings +to improve the performance of applications that use the Java Persistence +API.

    +
    +
    +

    The following topics are addressed here:

    +
    + +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    + + + \ No newline at end of file diff --git a/persistence-cache001.html b/persistence-cache001.html new file mode 100644 index 0000000..b77fa3c --- /dev/null +++ b/persistence-cache001.html @@ -0,0 +1,268 @@ + + + + + + Overview of the Second-Level Cache + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    44.1 Overview of the Second-Level Cache

    +
    +
    +

    A second-level cache is a local store of entity data managed by the +persistence provider to improve application performance. A second-level +cache helps improve performance by avoiding expensive database calls, +keeping the entity data local to the application. A second-level cache +is typically transparent to the application, as it is managed by the +persistence provider and underlies the persistence context of an +application. That is, the application reads and commits data through the +normal entity manager operations without knowing about the cache.

    +
    +
    +
    +
    +
    +
    +
    + +++ + + + + + +
    +

    Note:

    +
    +
    +

    Persistence providers are not required to support a second-level cache. +Portable applications should not rely on support by persistence +providers for a second-level cache.

    +
    +
    +
    +
    +
    +
    +
    +
    +

    The second-level cache for a persistence unit may be configured to one +of several second-level cache modes. The following cache mode settings +are defined by the Java Persistence API.

    +
    +
    +

    +
    +
    +

    Table 44-1 Cache Mode Settings for the Second-Level Cache

    +
    + ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Cache Mode SettingDescription

    ALL

    All entity data is stored in the second-level cache for this +persistence unit.

    NONE

    No data is cached in the persistence unit. The persistence +provider must not cache any data.

    ENABLE_SELECTIVE

    Enable caching for entities that have been +explicitly set with the @Cacheable annotation.

    DISABLE_SELECTIVE

    Enable caching for all entities except those that +have been explicitly set with the @Cacheable(false) annotation.

    UNSPECIFIED

    The caching behavior for the persistence unit is +undefined. The persistence provider’s default caching behavior will be +used.

    +
    +
    +
    +
    +
    +
    +
    +

    One consequence of using a second-level cache in an application is that +the underlying data may have changed in the database tables, while the +value in the cache has not, a circumstance called a stale read. To avoid +stale reads, use any of these strategies:

    +
    +
    + +
    +
    +

    Which of these strategies works best to avoid stale reads depends upon +the application.

    +
    +
    +

    44.1.1 Controlling whether Entities May Be Cached

    +
    +

    The javax.persistence.Cacheable annotation is used to specify that an +entity class, and any subclasses, may be cached when using the +ENABLE_SELECTIVE or DISABLE_SELECTIVE cache modes. Subclasses may +override the @Cacheable setting by adding a @Cacheable annotation +and changing the value.

    +
    +
    +

    To specify that an entity may be cached, add a @Cacheable annotation +at the class level:

    +
    +
    +
    +
    @Cacheable
    +@Entity
    +public class Person { ... }
    +
    +
    +
    +

    By default, the @Cacheable annotation is true. The following example +is equivalent:

    +
    +
    +
    +
    @Cacheable(true)
    +@Entity
    +public class Person{ ... }
    +
    +
    +
    +

    To specify that an entity must not be cached, add a @Cacheable +annotation and set it to false:

    +
    +
    +
    +
    @Cacheable(false)
    +@Entity
    +public class OrderStatus { ... }
    +
    +
    +
    +

    When the ENABLE_SELECTIVE cache mode is set, the persistence provider +will cache any entities that have the @Cacheable(true) annotation and +any subclasses of that entity that have not been overridden. The +persistence provider will not cache entities that have +@Cacheable(false) or have no @Cacheable annotation. That is, the +ENABLE_SELECTIVE mode will cache only entities that have been +explicitly marked for the cache using the @Cacheable annotation.

    +
    +
    +

    When the DISABLE_SELECTIVE cache mode is set, the persistence provider +will cache any entities that do not have the @Cacheable(false) +annotation. Entities that do not have @Cacheable annotations, and +entities with the @Cacheable(true) annotation, will be cached. That +is, the DISABLE_SELECTIVE mode will cache all entities that have not +been explicitly prevented from being cached.

    +
    +
    +

    If the cache mode is set to UNDEFINED, or is left unset, the behavior +of entities annotated with @Cacheable is undefined. If the cache mode +is set to ALL or NONE, the value of the @Cacheable annotation is +ignored by the persistence provider.

    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    +
    + + + \ No newline at end of file diff --git a/persistence-cache002.html b/persistence-cache002.html new file mode 100644 index 0000000..6139278 --- /dev/null +++ b/persistence-cache002.html @@ -0,0 +1,445 @@ + + + + + + Specifying the Cache Mode Settings to Improve Performance + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    44.2 Specifying the Cache Mode Settings to Improve Performance

    +
    +
    +

    To adjust the cache mode settings for a persistence unit, specify one of +the cache modes as the value of the shared-cache-mode element in the +persistence.xml deployment descriptor (shown in bold):

    +
    +
    +
    +
    <persistence-unit name="examplePU" transaction-type="JTA">
    +    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    +    <jta-data-source>java:comp/DefaultDataSource</jta-data-source>
    +    <shared-cache-mode>DISABLE_SELECTIVE</shared-cache-mode>
    +</persistence-unit>
    +
    +
    +
    +
    +
    +
    +
    +
    + +++ + + + + + +
    +

    Note:

    +
    +
    +

    Because support for a second-level cache is not required by the Java +Persistence API specification, setting the second-level cache mode in +persistence.xml will have no effect when you use a persistence +provider that does not implement a second-level cache.

    +
    +
    +
    +
    +
    +
    +
    +
    +

    Alternatively, you can specify the shared cache mode by setting the +javax.persistence.sharedCache.mode property to one of the shared cache +mode settings:

    +
    +
    +
    +
    EntityManagerFactory emf =
    +    Persistence.createEntityManagerFactory(
    +        "myExamplePU", new Properties().add(
    +            "javax.persistence.sharedCache.mode", "ENABLE_SELECTIVE"));
    +
    +
    +
    +

    44.2.1 Setting the Cache Retrieval and Store Modes

    +
    +

    If you have enabled the second-level cache for a persistence unit by +setting the shared cache mode, you can further modify the behavior of +the second-level cache by setting the +javax.persistence.cache.retrieveMode and +javax.persistence.cache.storeMode properties. You can set these +properties at the persistence context level by passing the property name +and value to the EntityManager.setProperty method, or you can set them +on a per-EntityManager operation (EntityManager.find or +EntityManager.refresh) or on a per-query level.

    +
    +
    +

    44.2.1.1 Cache Retrieval Mode

    +
    +

    The cache retrieval mode, set by the javax.persistence.retrieveMode +property, controls how data is read from the cache for calls to the +EntityManager.find method and from queries.

    +
    +
    +

    You can set the retrieveMode property to one of the constants defined +by the javax.persistence.CacheRetrieveMode enumerated type, either +USE (the default) or BYPASS.

    +
    +
    +

    When the property is set to USE, data is retrieved from the +second-level cache, if available. If the data is not in the cache, the +persistence provider will read it from the database.

    +
    +
    +

    When the property is set to BYPASS, the second-level cache is bypassed +and a call to the database is made to retrieve the data.

    +
    +
    +
    +

    44.2.1.2 Cache Store Mode

    +
    +

    The cache store mode, set by the javax.persistence.storeMode property, +controls how data is stored in the cache.

    +
    +
    +

    The storeMode property can be set to one of the constants defined by +the javax.persistence.CacheStoreMode enumerated type: either USE +(the default), BYPASS, or REFRESH.

    +
    +
    +

    When the property is set to USE, the cache data is created or updated +when data is read from or committed to the database. If data is already +in the cache, setting the store mode to USE will not force a refresh +when data is read from the database.

    +
    +
    +

    When the property is set to BYPASS, data read from or committed to the +database is not inserted or updated in the cache. That is, the cache is +unchanged.

    +
    +
    +

    When the property is set to REFRESH, the cache data is created or +updated when data is read from or committed to the database, and a +refresh is forced on data in the cache upon database reads.

    +
    +
    +
    +

    44.2.1.3 Setting the Cache Retrieval or Store Mode

    +
    +

    To set the cache retrieval or store mode for the persistence context, +call the EntityManager.setProperty method with the property name and +value pair:

    +
    +
    +
    +
    EntityManager em = ...;
    +em.setProperty("javax.persistence.cache.storeMode", "BYPASS");
    +
    +
    +
    +

    To set the cache retrieval or store mode when calling the +EntityManager.find or EntityManager.refresh methods, first create a +Map<String, Object> instance and add a name/value pair as follows:

    +
    +
    +
    +
    EntityManager em = ...;
    +Map<String, Object> props = new HashMap<String, Object>();
    +props.put("javax.persistence.cache.retrieveMode", "BYPASS");
    +String personPK = ...;
    +Person person = em.find(Person.class, personPK, props);
    +
    +
    +
    +
    +
    +
    +
    +
    + +++ + + + + + +
    +

    Note:

    +
    +
    +

    The cache retrieval mode is ignored when calling the +EntityManager.refresh method, as calls to refresh always result in +data being read from the database, not the cache.

    +
    +
    +
    +
    +
    +
    +
    +
    +

    To set the retrieval or store mode when using queries, call the +Query.setHint or TypedQuery.setHint methods, depending on the type +of query:

    +
    +
    +
    +
    EntityManager em = ...;
    +CriteriaQuery<Person> cq = ...;
    +TypedQuery<Person> q = em.createQuery(cq);
    +q.setHint("javax.persistence.cache.storeMode", "REFRESH");
    +...
    +
    +
    +
    +

    Setting the store or retrieve mode in a query or when calling the +EntityManager.find or EntityManager.refresh method overrides the +setting of the entity manager.

    +
    +
    +
    +
    +

    44.2.2 Controlling the Second-Level Cache Programmatically

    +
    +

    The javax.persistence.Cache interface defines methods for interacting +with the second-level cache programmatically.

    +
    +
    +

    The following topics are addressed here:

    +
    + +
    +

    44.2.2.1 Overview of the javax.persistence.Cache Interface

    +
    +

    The Cache interface defines methods to do the following:

    +
    +
    +
      +
    • +

      Check whether a particular entity has cached data

      +
    • +
    • +

      Remove a particular entity from the cache

      +
    • +
    • +

      Remove all instances (and instances of subclasses) of an entity class +from the cache

      +
    • +
    • +

      Clear the cache of all entity data

      +
      +
      +
      +
      +
      +
      +
    • +
    +
    + +++ + + + + + +
    +

    Note:

    +
    +
    +

    If the second-level cache has been disabled, calls to the Cache +interface’s methods have no effect, except for contains, which will +always return false.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +

    44.2.2.2 Checking whether an Entity’s Data Is Cached

    +
    +

    To find out whether a given entity is currently in the second-level +cache:

    +
    +
    +
      +
    1. +

      Call the Cache.contains method . The contains method returns +true if the entity’s data is cached, and false if the data is not in +the cache:

      +
      +
      +
      EntityManager em = ...;
      +Cache cache = em.getEntityManagerFactory().getCache();
      +String personPK = ...;
      +if (cache.contains(Person.class, personPK)) {
      +  // the data is cached
      +} else {
      +  // the data is NOT cached
      +}
      +
      +
      +
    2. +
    +
    +
    +
    +

    44.2.2.3 Removing an Entity from the Cache

    +
    +

    To remove a particular entity or all entities of a given type from the +second-level cache:

    +
    +
    +
      +
    1. +

      Call one of the Cache.evict methods .

      +
    2. +
    3. +

      To remove a particular entity from the cache, call the evict +method and pass in the entity class and the primary key of the entity:

      +
      +
      +
      EntityManager em = ...;
      +Cache cache = em.getEntityManagerFactory().getCache();
      +String personPK = ...;
      +cache.evict(Person.class, personPK);
      +
      +
      +
    4. +
    5. +

      To remove all instances of a particular entity class, including +subclasses, call the evict method and specify the entity class:

      +
      +
      +
      EntityManager em = ...;
      +Cache cache = em.getEntityManagerFactory().getCache();
      +cache.evict(Person.class);
      +
      +
      +
    6. +
    +
    +
    +

    All instances of the Person entity class will be removed from the +cache. If the Person entity has a subclass, Student, calls to the +above method will remove all instances of Student from the cache as +well.

    +
    +
    +
    +

    44.2.2.4 Removing All Data from the Cache

    +
    +

    To completely clear the second-level cache:

    +
    +
    +
      +
    1. +

      Call the Cache.evictAll method.

      +
      +
      +
      EntityManager em = ...;
      +Cache cache = em.getEntityManagerFactory().getCache();
      +cache.evictAll();
      +
      +
      +
    2. +
    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    +
    +
    + + + \ No newline at end of file diff --git a/persistence-criteria.html b/persistence-criteria.html new file mode 100644 index 0000000..0b097bb --- /dev/null +++ b/persistence-criteria.html @@ -0,0 +1,108 @@ + + + + + + Using the Criteria API to Create Queries + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    40 Using the Criteria API to Create Queries

    +
    +
    +

    The Criteria API is used to define queries for entities and their +persistent state by creating query-defining objects. Criteria queries +are written using Java programming language APIs, are typesafe, and are +portable. Such queries work regardless of the underlying data store.

    +
    +
    +

    The following topics are addressed here:

    +
    + +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    + + + \ No newline at end of file diff --git a/persistence-criteria001.html b/persistence-criteria001.html new file mode 100644 index 0000000..3c118db --- /dev/null +++ b/persistence-criteria001.html @@ -0,0 +1,218 @@ + + + + + + Overview of the Criteria and Metamodel APIs + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    40.1 Overview of the Criteria and Metamodel APIs

    +
    +
    +

    Similar to JPQL, the Criteria API is based on the abstract schema of +persistent entities, their relationships, and embedded objects. The +Criteria API operates on this abstract schema to allow developers to +find, modify, and delete persistent entities by invoking Java +Persistence API entity operations. The Metamodel API works in concert +with the Criteria API to model persistent entity classes for Criteria +queries.

    +
    +
    +

    The Criteria API and JPQL are closely related and are designed to allow +similar operations in their queries. Developers familiar with JPQL +syntax will find equivalent object-level operations in the Criteria API.

    +
    +
    +

    The following simple Criteria query returns all instances of the Pet +entity in the data source:

    +
    +
    +
    +
    EntityManager em = ...;
    +CriteriaBuilder cb = em.getCriteriaBuilder();
    +CriteriaQuery<Pet> cq = cb.createQuery(Pet.class);
    +Root<Pet> pet = cq.from(Pet.class);
    +cq.select(pet);
    +TypedQuery<Pet> q = em.createQuery(cq);
    +List<Pet> allPets = q.getResultList();
    +
    +
    +
    +

    The equivalent JPQL query is

    +
    +
    +
    +
    SELECT p
    +FROM Pet p
    +
    +
    +
    +

    This query demonstrates the basic steps to create a Criteria query.

    +
    +
    +
      +
    1. +

      Use an EntityManager instance to create a CriteriaBuilder +object.

      +
    2. +
    3. +

      Create a query object by creating an instance of the CriteriaQuery +interface. This query object’s attributes will be modified with the +details of the query.

      +
    4. +
    5. +

      Set the query root by calling the from method on the +CriteriaQuery object.

      +
    6. +
    7. +

      Specify what the type of the query result will be by calling the +select method of the CriteriaQuery object.

      +
    8. +
    9. +

      Prepare the query for execution by creating a TypedQuery<T> +instance, specifying the type of the query result.

      +
    10. +
    11. +

      Execute the query by calling the getResultList method on the +TypedQuery<T> object. Because this query returns a collection of +entities, the result is stored in a List.

      +
    12. +
    +
    +
    +

    The tasks associated with each step are discussed in detail in this +chapter.

    +
    +
    +

    To create a CriteriaBuilder instance, call the getCriteriaBuilder +method on the EntityManager instance:

    +
    +
    +
    +
    CriteriaBuilder cb = em.getCriteriaBuilder();
    +
    +
    +
    +

    Use the CriteriaBuilder instance to create a query object:

    +
    +
    +
    +
    CriteriaQuery<Pet> cq = cb.createQuery(Pet.class);
    +
    +
    +
    +

    The query will return instances of the Pet entity. To create a +typesafe query, specify the type of the query when you create the +CriteriaQuery object.

    +
    +
    +

    Call the from method of the query object to set the FROM clause of +the query and to specify the root of the query:

    +
    +
    +
    +
    Root<Pet> pet = cq.from(Pet.class);
    +
    +
    +
    +

    Call the select method of the query object, passing in the query root, +to set the SELECT clause of the query:

    +
    +
    +
    +
    cq.select(pet);
    +
    +
    +
    +

    Now, use the query object to create a TypedQuery<T> object that can be +executed against the data source. The modifications to the query object +are captured to create a ready-to-execute query:

    +
    +
    +
    +
    TypedQuery<Pet> q = em.createQuery(cq);
    +
    +
    +
    +

    Execute this typed query object by calling its getResultList method, +because this query will return multiple entity instances. The following +statement stores the results in a List<Pet> collection-valued object:

    +
    +
    +
    +
    List<Pet> allPets = q.getResultList();
    +
    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    + + + \ No newline at end of file diff --git a/persistence-criteria002.html b/persistence-criteria002.html new file mode 100644 index 0000000..74de366 --- /dev/null +++ b/persistence-criteria002.html @@ -0,0 +1,226 @@ + + + + + + Using the Metamodel API to Model Entity Classes + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    40.2 Using the Metamodel API to Model Entity Classes

    +
    +
    +

    Use the Metamodel API to create a metamodel of the managed entities in a +particular persistence unit. For each entity class in a particular +package, a metamodel class is created with a trailing underscore and +with attributes that correspond to the persistent fields or properties +of the entity class.

    +
    +
    +

    The following entity class, com.example.Pet, has four persistent +fields: id, name, color, and owners:

    +
    +
    +
    +
    package com.example;
    +...
    +@Entity
    +public class Pet {
    +    @Id
    +    protected Long id;
    +    protected String name;
    +    protected String color;
    +    @ManyToOne
    +    protected Set<Person> owners;
    +    ...
    +}
    +
    +
    +
    +

    The corresponding Metamodel class is as follows:

    +
    +
    +
    +
    package com.example;
    +...
    +@Static Metamodel(Pet.class)
    +public class Pet_ {
    +
    +    public static volatile SingularAttribute<Pet, Long> id;
    +    public static volatile SingularAttribute<Pet, String> name;
    +    public static volatile SingularAttribute<Pet, String> color;
    +    public static volatile SetAttribute<Pet, Person> owners;
    +}
    +
    +
    +
    +

    Criteria queries use the metamodel class and its attributes to refer to +the managed entity classes and their persistent state and relationships.

    +
    +
    +

    40.2.1 Using Metamodel Classes

    +
    +

    Metamodel classes that correspond to entity classes are of the following +type:

    +
    +
    +
    +
    javax.persistence.metamodel.EntityType<T>
    +
    +
    +
    +

    Annotation processors typically generate metamodel classes either at +development time or at runtime. Developers of applications that use +Criteria queries may do either of the following:

    +
    +
    +
      +
    • +

      Generate static metamodel classes by using the persistence provider’s +annotation processor

      +
    • +
    • +

      Obtain the metamodel class by doing one of the following:

      +
      +
        +
      • +

        Call the getModel method on the query root object

        +
      • +
      • +

        Obtain an instance of the Metamodel interface and then pass the +entity type to the instance’s entity method

        +
      • +
      +
      +
    • +
    +
    +
    +

    The following code snippet shows how to obtain the Pet entity’s +metamodel class by calling Root<T>.getModel:

    +
    +
    +
    +
    EntityManager em = ...;
    +CriteriaBuilder cb = em.getCriteriaBuilder();
    +CriteriaQuery cq = cb.createQuery(Pet.class);
    +Root<Pet> pet = cq.from(Pet.class);
    +EntityType<Pet> Pet_ = pet.getModel();
    +
    +
    +
    +

    The following code snippet shows how to obtain the Pet entity’s +metamodel class by first obtaining a metamodel instance by using +EntityManager.getMetamodel and then calling entity on the metamodel +instance:

    +
    +
    +
    +
    EntityManager em = ...;
    +Metamodel m = em.getMetamodel();
    +EntityType<Pet> Pet_ = m.entity(Pet.class);
    +
    +
    +
    +
    +
    +
    +
    +
    + +++ + + + + + +
    +

    Note:

    +
    +
    +

    The most common use case is to generate typesafe static metamodel +classes at development time. Obtaining the metamodel classes +dynamically, by calling Root<T>.getModel or +EntityManager.getMetamodel and then the entity method, doesn’t allow +for type safety and doesn’t allow the application to call persistent +field or property names on the metamodel class.

    +
    +
    +
    +
    +
    +
    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    +
    + + + \ No newline at end of file diff --git a/persistence-criteria003.html b/persistence-criteria003.html new file mode 100644 index 0000000..56f3eb1 --- /dev/null +++ b/persistence-criteria003.html @@ -0,0 +1,743 @@ + + + + + + Using the Criteria API and Metamodel API to Create Basic Typesafe Queries + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    40.3 Using the Criteria API and Metamodel API to Create Basic TypesafeQueries

    +
    +
    +

    The basic semantics of a Criteria query consists of a SELECT clause, a +FROM clause, and an optional WHERE clause, similar to a JPQL query. +Criteria queries set these clauses by using Java programming language +objects, so the query can be created in a typesafe manner.

    +
    +
    +

    The following topics are addressed here:

    +
    + +
    +

    40.3.1 Creating a Criteria Query

    +
    +

    The javax.persistence.criteria.CriteriaBuilder interface is used to +construct

    +
    +
    +
      +
    • +

      Criteria queries

      +
    • +
    • +

      Selections

      +
    • +
    • +

      Expressions

      +
    • +
    • +

      Predicates

      +
    • +
    • +

      Ordering

      +
    • +
    +
    +
    +

    To obtain an instance of the CriteriaBuilder interface, call the +getCriteriaBuilder method on either an EntityManager or an +EntityManagerFactory instance.

    +
    +
    +

    The following code shows how to obtain a CriteriaBuilder instance by +using the EntityManager.getCriteriaBuilder method:

    +
    +
    +
    +
    EntityManager em = ...;
    +CriteriaBuilder cb = em.getCriteriaBuilder();
    +
    +
    +
    +

    Criteria queries are constructed by obtaining an instance of the +following interface:

    +
    +
    +
    +
    javax.persistence.criteria.CriteriaQuery
    +
    +
    +
    +

    CriteriaQuery objects define a particular query that will navigate +over one or more entities. Obtain CriteriaQuery instances by calling +one of the CriteriaBuilder.createQuery methods. To create typesafe +queries, call the CriteriaBuilder.createQuery method as follows:

    +
    +
    +
    +
    CriteriaQuery<Pet> cq = cb.createQuery(Pet.class);
    +
    +
    +
    +

    The CriteriaQuery object’s type should be set to the expected result +type of the query. In the preceding code, the object’s type is set to +CriteriaQuery<Pet> for a query that will find instances of the Pet +entity.

    +
    +
    +

    The following code snippet creates a CriteriaQuery object for a query +that returns a String:

    +
    +
    +
    +
    CriteriaQuery<String> cq = cb.createQuery(String.class);
    +
    +
    +
    +
    +

    40.3.2 Query Roots

    +
    +

    For a particular CriteriaQuery object, the root entity of the query, +from which all navigation originates, is called the query root. It is +similar to the FROM clause in a JPQL query.

    +
    +
    +

    Create the query root by calling the from method on the +CriteriaQuery instance. The argument to the from method is either +the entity class or an EntityType<T> instance for the entity.

    +
    +
    +

    The following code sets the query root to the Pet entity:

    +
    +
    +
    +
    CriteriaQuery<Pet> cq = cb.createQuery(Pet.class);
    +Root<Pet> pet = cq.from(Pet.class);
    +
    +
    +
    +

    The following code sets the query root to the Pet class by using an +EntityType<T> instance:

    +
    +
    +
    +
    EntityManager em = ...;
    +Metamodel m = em.getMetamodel();
    +EntityType<Pet> Pet_ = m.entity(Pet.class);
    +Root<Pet> pet = cq.from(Pet_);
    +
    +
    +
    +

    Criteria queries may have more than one query root. This usually occurs +when the query navigates from several entities.

    +
    +
    +

    The following code has two Root instances:

    +
    +
    +
    +
    CriteriaQuery<Pet> cq = cb.createQuery(Pet.class);
    +Root<Pet> pet1 = cq.from(Pet.class);
    +Root<Pet> pet2 = cq.from(Pet.class);
    +
    +
    +
    +
    +

    40.3.3 Querying Relationships Using Joins

    +
    +

    For queries that navigate to related entity classes, the query must +define a join to the related entity by calling one of the From.join +methods on the query root object or another join object. The join +methods are similar to the JOIN keyword in JPQL.

    +
    +
    +

    The target of the join uses the Metamodel class of type EntityType<T> +to specify the persistent field or property of the joined entity.

    +
    +
    +

    The join methods return an object of type Join<X, Y>, where X is +the source entity and Y is the target of the join. In the following +code snippet, Pet is the source entity, Owner is the target, and +Pet_ is a statically generated metamodel class:

    +
    +
    +
    +
    CriteriaQuery<Pet> cq = cb.createQuery(Pet.class);
    +
    +Root<Pet> pet = cq.from(Pet.class);
    +Join<Pet, Owner> owner = pet.join(Pet_.owners);
    +
    +
    +
    +

    You can chain joins together to navigate to related entities of the +target entity without having to create a Join<X, Y> instance for each +join:

    +
    +
    +
    +
    CriteriaQuery<Pet> cq = cb.createQuery(Pet.class);
    +
    +Root<Pet> pet = cq.from(Pet.class);
    +Join<Owner, Address> address = pet.join(Pet_.owners).join(Owner_.addresses);
    +
    +
    +
    +
    +

    40.3.4 Path Navigation in Criteria Queries

    +
    +

    Path objects, which are used in the SELECT and WHERE clauses of a +Criteria query, can be query root entities, join entities, or other +Path objects. Use the Path.get method to navigate to attributes of +the entities of a query.

    +
    +
    +

    The argument to the get method is the corresponding attribute of the +entity’s Metamodel class. The attribute can be either a single-valued +attribute, specified by @SingularAttribute in the Metamodel class, or +a collection-valued attribute, specified by one of +@CollectionAttribute, @SetAttribute, @ListAttribute, or +@MapAttribute.

    +
    +
    +

    The following query returns the names of all the pets in the data store. +The get method is called on the query root, pet, with the name +attribute of the Pet entity’s Metamodel class, Pet_, as the +argument:

    +
    +
    +
    +
    CriteriaQuery<String> cq = cb.createQuery(String.class);
    +
    +Root<Pet> pet = cq.from(Pet.class);
    +cq.select(pet.get(Pet_.name));
    +
    +
    +
    +
    +

    40.3.5 Restricting Criteria Query Results

    +
    +

    Conditions that are set by calling the CriteriaQuery.where method can +restrict the results of a query on the CriteriaQuery object. Calling +the where method is analogous to setting the WHERE clause in a JPQL +query.

    +
    +
    +

    The where method evaluates instances of the Expression interface to +restrict the results according to the conditions of the expressions. To +create Expression instances, use methods defined in the Expression +and CriteriaBuilder interfaces.

    +
    +
    +

    40.3.5.1 The Expression Interface Methods

    +
    +

    An Expression object is used in a query’s SELECT, WHERE, or +HAVING clause. Table 40-1 shows conditional methods you +can use with Expression objects.

    +
    +
    +

    +
    +
    +

    Table 40-1 Conditional Methods in the Expression Interface

    +
    + ++++ + + + + + + + + + + + + + + + + + + + + +
    MethodDescription

    isNull

    Tests whether an expression is null

    isNotNull

    Tests whether an expression is not null

    in

    Tests whether an expression is within a list of values

    +
    +
    +
    +
    +
    +
    +
    +

    The following query uses the Expression.isNull method to find all pets +where the color attribute is null:

    +
    +
    +
    +
    CriteriaQuery<Pet> cq = cb.createQuery(Pet.class);
    +Root<Pet> pet = cq.from(Pet.class);
    +cq.where(pet.get(Pet_.color).isNull());
    +
    +
    +
    +

    The following query uses the Expression.in method to find all brown +and black pets:

    +
    +
    +
    +
    CriteriaQuery<Pet> cq = cb.createQuery(Pet.class);
    +Root<Pet> pet = cq.from(Pet.class);
    +cq.where(pet.get(Pet_.color).in("brown", "black"));
    +
    +
    +
    +

    The in method can also check whether an attribute is a member of a +collection.

    +
    +
    +
    +

    40.3.5.2 Expression Methods in the CriteriaBuilder Interface

    +
    +

    The CriteriaBuilder interface defines additional methods for creating +expressions. These methods correspond to the arithmetic, string, date, +time, and case operators and functions of JPQL. Table 40-2 +shows conditional methods you can use with CriteriaBuilder objects.

    +
    +
    +

    +
    +
    +

    Table 40-2 Conditional Methods in the CriteriaBuilder Interface

    +
    + ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Conditional MethodDescription

    equal

    Tests whether two expressions are equal

    notEqual

    Tests whether two expressions are not equal

    gt

    Tests whether the first numeric expression is greater than the +second numeric expression

    ge

    Tests whether the first numeric expression is greater than or +equal to the second numeric expression

    lt

    Tests whether the first numeric expression is less than the +second numeric expression

    le

    Tests whether the first numeric expression is less than or equal +to the second numeric expression

    between

    Tests whether the first expression is between the second and +third expression in value

    like

    Tests whether the expression matches a given pattern

    +
    +
    +
    +
    +
    +
    +
    +

    The following code uses the CriteriaBuilder.equal method:

    +
    +
    +
    +
    CriteriaQuery<Pet> cq = cb.createQuery(Pet.class);
    +Root<Pet> pet = cq.from(Pet.class);
    +cq.where(cb.equal(pet.get(Pet_.name), "Fido"));
    +
    +
    +
    +

    The following code uses the CriteriaBuilder.gt method:

    +
    +
    +
    +
    CriteriaQuery<Pet> cq = cb.createQuery(Pet.class);
    +Root<Pet> pet = cq.from(Pet.class);
    +Date someDate = new Date(...);
    +cq.where(cb.gt(pet.get(Pet_.birthday), date));
    +
    +
    +
    +

    The following code uses the CriteriaBuilder.between method:

    +
    +
    +
    +
    CriteriaQuery<Pet> cq = cb.createQuery(Pet.class);
    +Root<Pet> pet = cq.from(Pet.class);
    +Date firstDate = new Date(...);
    +Date secondDate = new Date(...);
    +cq.where(cb.between(pet.get(Pet_.birthday), firstDate, secondDate));
    +
    +
    +
    +

    The following code uses the CriteriaBuilder.like method:

    +
    +
    +
    +
    CriteriaQuery<Pet> cq = cb.createQuery(Pet.class);
    +Root<Pet> pet = cq.from(Pet.class);
    +cq.where(cb.like(pet.get(Pet_.name), "*do"));
    +
    +
    +
    +

    To specify multiple conditional predicates, use the compound predicate +methods of the CriteriaBuilder interface, as shown in +Table 40-3.

    +
    +
    +

    +
    +
    +

    Table 40-3 Compound Predicate Methods in the CriteriaBuilder Interface

    +
    + ++++ + + + + + + + + + + + + + + + + + + + + +
    MethodDescription

    and

    A logical conjunction of two Boolean expressions

    or

    A logical disjunction of two Boolean expressions

    not

    A logical negation of the given Boolean expression

    +
    +
    +
    +
    +
    +
    +
    +

    The following code shows the use of compound predicates in queries:

    +
    +
    +
    +
    CriteriaQuery<Pet> cq = cb.createQuery(Pet.class);
    +Root<Pet> pet = cq.from(Pet.class);
    +cq.where(cb.equal(pet.get(Pet_.name), "Fido")
    +        .and(cb.equal(pet.get(Pet_.color), "brown")));
    +
    +
    +
    +
    +
    +

    40.3.6 Managing Criteria Query Results

    +
    +

    For queries that return more than one result, it is often helpful to +organize those results. The CriteriaQuery interface defines the +following ordering and grouping methods:

    +
    +
    +
      +
    • +

      The orderBy method orders query results according to attributes of +an entity

      +
    • +
    • +

      The groupBy method groups the results of a query together according +to attributes of an entity, and the having method restricts those +groups according to a condition

      +
    • +
    +
    +
    +

    The following topics are addressed here:

    +
    + +
    +

    40.3.6.1 Ordering Results

    +
    +

    To order the results of a query, call the CriteriaQuery.orderBy +method, passing in an Order object. To create an Order object, call +either the CriteriaBuilder.asc or the CriteriaBuilder.desc method. +The asc method is used to order the results by ascending value of the +passed expression parameter. The desc method is used to order the +results by descending value of the passed expression parameter. The +following query shows the use of the desc method:

    +
    +
    +
    +
    CriteriaQuery<Pet> cq = cb.createQuery(Pet.class);
    +Root<Pet> pet = cq.from(Pet.class);
    +cq.select(pet);
    +cq.orderBy(cb.desc(pet.get(Pet_.birthday)));
    +
    +
    +
    +

    In this query, the results will be ordered by the pet’s birthday from +highest to lowest. That is, pets born in December will appear before +pets born in May.

    +
    +
    +

    The following query shows the use of the asc method:

    +
    +
    +
    +
    CriteriaQuery<Pet> cq = cb.createQuery(Pet.class);
    +Root<Pet> pet = cq.from(Pet.class);
    +Join<Owner, Address> address = pet.join(Pet_.owners).join(Owner_.address);
    +cq.select(pet);
    +cq.orderBy(cb.asc(address.get(Address_.postalCode)));
    +
    +
    +
    +

    In this query, the results will be ordered by the pet owner’s postal +code from lowest to highest. That is, pets whose owner lives in the +10001 zip code will appear before pets whose owner lives in the 91000 +zip code.

    +
    +
    +

    If more than one Order object is passed to orderBy, the precedence +is determined by the order in which they appear in the argument list of +orderBy. The first Order object has precedence.

    +
    +
    +

    The following code orders results by multiple criteria:

    +
    +
    +
    +
    CriteriaQuery<Pet> cq = cb.createQuery(Pet.class);
    +Root<Pet> pet = cq.from(Pet.class);
    +Join<Pet, Owner> owner = pet.join(Pet_.owners);
    +cq.select(pet);
    +cq.orderBy(cb.asc(owner.get(Owner_.lastName)), owner.get(Owner_.firstName)));
    +
    +
    +
    +

    The results of this query will be ordered alphabetically by the pet +owner’s last name, then first name.

    +
    +
    +
    +

    40.3.6.2 Grouping Results

    +
    +

    The CriteriaQuery.groupBy method partitions the query results into +groups. To set these groups, pass an expression to groupBy:

    +
    +
    +
    +
    CriteriaQuery<Pet> cq = cb.createQuery(Pet.class);
    +Root<Pet> pet = cq.from(Pet.class);
    +cq.groupBy(pet.get(Pet_.color));
    +
    +
    +
    +

    This query returns all Pet entities and groups the results by the +pet’s color.

    +
    +
    +

    Use the CriteriaQuery.having method in conjunction with groupBy to +filter over the groups. The having method, which takes a conditional +expression as a parameter, restricts the query result according to the +conditional expression:

    +
    +
    +
    +
    CriteriaQuery<Pet> cq = cb.createQuery(Pet.class);
    +Root<Pet> pet = cq.from(Pet.class);
    +cq.groupBy(pet.get(Pet_.color));
    +cq.having(cb.in(pet.get(Pet_.color)).value("brown").value("blonde"));
    +
    +
    +
    +

    In this example, the query groups the returned Pet entities by color, +as in the preceding example. However, the only returned groups will be +Pet entities where the color attribute is set to brown or +blonde. That is, no gray-colored pets will be returned in this query.

    +
    +
    +
    +
    +

    40.3.7 Executing Queries

    +
    +

    To prepare a query for execution, create a TypedQuery<T> object with +the type of the query result, passing the CriteriaQuery object to +EntityManager.createQuery.

    +
    +
    +

    To execute a query, call either getSingleResult or getResultList on +the TypedQuery<T> object.

    +
    +
    +

    40.3.7.1 Single-Valued Query Results

    +
    +

    Use the TypedQuery<T>.getSingleResult method to execute queries that +return a single result:

    +
    +
    +
    +
    CriteriaQuery<Pet> cq = cb.createQuery(Pet.class);
    +...
    +TypedQuery<Pet> q = em.createQuery(cq);
    +Pet result = q.getSingleResult();
    +
    +
    +
    +
    +

    40.3.7.2 Collection-Valued Query Results

    +
    +

    Use the TypedQuery<T>.getResultList method to execute queries that +return a collection of objects:

    +
    +
    +
    +
    CriteriaQuery<Pet> cq = cb.createQuery(Pet.class);
    +...
    +TypedQuery<Pet> q = em.createQuery(cq);
    +List<Pet> results = q.getResultList();
    +
    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    +
    +
    + + + \ No newline at end of file diff --git a/persistence-entitygraphs.html b/persistence-entitygraphs.html new file mode 100644 index 0000000..213bc91 --- /dev/null +++ b/persistence-entitygraphs.html @@ -0,0 +1,109 @@ + + + + + + Creating Fetch Plans with Entity Graphs + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    43 Creating Fetch Plans with Entity Graphs

    +
    +
    +

    This chapter explains how to use entity graphs to create fetch plans for +Java Persistence API operations and queries.

    +
    +
    +

    The following topics are addressed here:

    +
    + +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    + + + \ No newline at end of file diff --git a/persistence-entitygraphs001.html b/persistence-entitygraphs001.html new file mode 100644 index 0000000..2087405 --- /dev/null +++ b/persistence-entitygraphs001.html @@ -0,0 +1,107 @@ + + + + + + Overview of Using Fetch Plans and Entity Graphs + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    43.1 Overview of Using Fetch Plans and Entity Graphs

    +
    +
    +

    Entity graphs are templates for a particular Persistence query or +operation. They are used when creating fetch plans, or groups of +persistent fields that are retrieved at the same time. Application +developers use fetch plans to group together related persistent fields +to improve runtime performance.

    +
    +
    +

    By default, entity fields or properties are fetched lazily. Developers +specify fields or properties as part of a fetch plan, and the +persistence provider will fetch them eagerly.

    +
    +
    +

    For example, an email application that stores messages as EmailMessage +entities prioritizes fetching some fields over others. The sender, +subject, and date will be viewed the most often, in mailbox views and +when the message is displayed. The EmailMessage entity has a +collection of related EmailAttachment entities. For performance +reasons the attachments should not be fetched until they are needed, but +the file names of the attachment are important. A developer working on +this application might make a fetch plan that eagerly fetches the +important fields from EmailMessage and EmailAttachment while +fetching the lower priority data lazily.

    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    + + + \ No newline at end of file diff --git a/persistence-entitygraphs002.html b/persistence-entitygraphs002.html new file mode 100644 index 0000000..7c90b23 --- /dev/null +++ b/persistence-entitygraphs002.html @@ -0,0 +1,213 @@ + + + + + + Entity Graph Basics + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    43.2 Entity Graph Basics

    +
    +
    +

    You can create entity graphs statically by using annotations or a +deployment descriptor, or dynamically by using standard interfaces.

    +
    +
    +

    You can use an entity graph with the EntityManager.find method or as +part of a JPQL or Criteria API query by specifying the entity graph as a +hint to the operation or query.

    +
    +
    +

    Entity graphs have attributes that correspond to the fields that will be +eagerly fetched during a find or query operation. The primary key and +version fields of the entity class are always fetched and do not need to +be explicitly added to an entity graph.

    +
    +
    +

    43.2.1 The Default Entity Graph

    +
    +

    By default, all fields in an entity are fetched lazily unless the +fetch attribute of the entity metadata is set to +javax.persistence.FetchType.EAGER. The default entity graph consists +of all the fields of an entity whose fields are set to be eagerly +fetched.

    +
    +
    +

    For example, the following EmailMessage entity specifies that some +fields will be fetched eagerly:

    +
    +
    +
    +
    @Entity
    +public class EmailMessage implements Serializable {
    +    @Id
    +    String messageId;
    +    @Basic(fetch=EAGER)
    +    String subject;
    +    String body;
    +    @Basic(fetch=EAGER)
    +    String sender;
    +    @OneToMany(mappedBy="message", fetch=LAZY)
    +    Set<EmailAttachment> attachments;
    +    ...
    +}
    +
    +
    +
    +

    The default entity graph for this entity would contain the messageId, +subject, and sender fields, but not the body or attachments +fields.

    +
    +
    +
    +

    43.2.2 Using Entity Graphs in Persistence Operations

    +
    +

    Entity graphs are used by creating an instance of the +javax.persistence.EntityGraph interface by calling either +EntityManager.getEntityGraph for named entity graphs or +EntityManager.createEntityGraph for creating dynamic entity graphs.

    +
    +
    +

    A named entity graph is an entity graph specified by the +@NamedEntityGraph annotation applied to entity classes, or the +named-entity-graph element in the application’s deployment +descriptors. Named entity graphs defined within the deployment +descriptor override any annotation-based entity graphs with the same +name.

    +
    +
    +

    The created entity graph can be either a fetch graph or a load graph.

    +
    +
    +

    The following topics are addressed here:

    +
    + +
    +

    43.2.2.1 Fetch Graphs

    +
    +

    To specify a fetch graph, set the javax.persistence.fetchgraph +property when you execute an EntityManager.find or query operation. A +fetch graph consists of only the fields explicitly specified in the +EntityGraph instance, and ignores the default entity graph settings.

    +
    +
    +

    In the following example, the default entity graph is ignored, and only +the body field is included in the dynamically created fetch graph:

    +
    +
    +
    +
    EntityGraph<EmailMessage> eg = em.createEntityGraph(EmailMessage.class);
    +eg.addAttributeNodes("body");
    +...
    +Properties props = new Properties();
    +props.put("javax.persistence.fetchgraph", eg);
    +EmailMessage message = em.find(EmailMessage.class, id, props);
    +
    +
    +
    +
    +

    43.2.2.2 Load Graphs

    +
    +

    To specify a load graph, set the javax.persistence.loadgraph property +when you execute an EntityManager.find or query operation. A load +graph consists of the fields explicitly specified in the EntityGraph +instance plus any fields in the default entity graph.

    +
    +
    +

    In the following example, the dynamically created load graph contains +all the fields in the default entity graph plus the body field:

    +
    +
    +
    +
    EntityGraph<EmailMessage> eg = em.createEntityGraph(EmailMessage.class);
    +eg.addAttributeNodes("body");
    +...
    +Properties props = new Properties();
    +props.put("javax.persistence.loadgraph", eg);
    +EmailMessage message = em.find(EmailMessage.class, id, props);
    +
    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    +
    +
    + + + \ No newline at end of file diff --git a/persistence-entitygraphs003.html b/persistence-entitygraphs003.html new file mode 100644 index 0000000..8790615 --- /dev/null +++ b/persistence-entitygraphs003.html @@ -0,0 +1,193 @@ + + + + + + Using Named Entity Graphs + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    43.3 Using Named Entity Graphs

    +
    +
    +

    Named entity graphs are created using annotations applied to entity +classes or the named-entity-graph element and its sub-elements in the +application’s deployment descriptor. The persistence provider will scan +for all named entity graphs, defined in both annotations and in XML, +within an application. A named entity graph set using an annotation may +be overridden using named-entity-graph.

    +
    +
    +

    43.3.1 Applying Named Entity Graph Annotations to Entity Classes

    +
    +

    The javax.persistence.NamedEntityGraph annotation defines a single +named entity graph and is applied at the class level. Multiple +@NamedEntityGraph annotations may be defined for a class by adding +them within a javax.persistence.NamedEntityGraphs class-level +annotation.

    +
    +
    +

    The @NamedEntityGraph annotation must be applied on the root of the +graph of entities. That is, if the EntityManager.find or query +operation has as its root entity the EmailMessage class, the named +entity graph used in the operation must be defined in the EmailMessage +class:

    +
    +
    +
    +
    @NamedEntityGraph
    +@Entity
    +public class EmailMessage {
    +    @Id
    +    String messageId;
    +    String subject;
    +    String body;
    +    String sender;
    +}
    +
    +
    +
    +

    In this example, the EmailMessage class has a @NamedEntityGraph +annotation to define a named entity graph that defaults to the name of +the class, EmailMessage. No fields are included in the +@NamedEntityGraph annotation as attribute nodes, and the fields are +not annotated with metadata to set the fetch type, so the only field +that will be eagerly fetched in either a load graph or fetch graph is +messageId.

    +
    +
    +

    The attributes of a named entity graph are the fields of the entity that +should be included in the entity graph. Add the fields to the entity +graph by specifying them in the attributeNodes element of +@NamedEntityGraph with a javax.persistence.NamedAttributeNode +annotation:

    +
    +
    +
    +
    @NamedEntityGraph(name="emailEntityGraph", attributeNodes={
    +    @NamedAttributeNode("subject"),
    +    @NamedAttributeNode("sender")
    +})
    +@Entity
    +public class EmailMessage { ... }
    +
    +
    +
    +

    In this example, the name of the named entity graph is +emailEntityGraph and includes the subject and sender fields.

    +
    +
    +

    Multiple @NamedEntityGraph definitions may be applied to a class by +grouping them within a @NamedEntityGraphs annotation.

    +
    +
    +

    In the following example, two entity graphs are defined on the +EmailMessage class. One is for a preview pane, which fetches only the +sender, subject, and body of the message. The other is for a full view +of the message, including any message attachments:

    +
    +
    +
    +
    @NamedEntityGraphs({
    +    @NamedEntityGraph(name="previewEmailEntityGraph", attributeNodes={
    +        @NamedAttributeNode("subject"),
    +        @NamedAttributeNode("sender"),
    +        @NamedAttributeNode("body")
    +    }),
    +    @NamedEntityGraph(name="fullEmailEntityGraph", attributeNodes={
    +        @NamedAttributeNode("sender"),
    +        @NamedAttributeNode("subject"),
    +        @NamedAttributeNode("body"),
    +        @NamedAttributeNode("attachments")
    +    })
    +})
    +@Entity
    +public class EmailMessage { ... }
    +
    +
    +
    +
    +

    43.3.2 Obtaining EntityGraph Instances from Named Entity Graphs

    +
    +

    Use the EntityManager.getEntityGraph method, passing in the named +entity graph name, to obtain EntityGraph instances for a named entity +graph:

    +
    +
    +
    +
    EntityGraph<EmailMessage> eg = em.getEntityGraph("emailEntityGraph");
    +
    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    +
    + + + \ No newline at end of file diff --git a/persistence-entitygraphs004.html b/persistence-entitygraphs004.html new file mode 100644 index 0000000..dfca1e2 --- /dev/null +++ b/persistence-entitygraphs004.html @@ -0,0 +1,116 @@ + + + + + + Using Entity Graphs in Query Operations + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    43.4 Using Entity Graphs in Query Operations

    +
    +
    +

    To specify entity graphs for both typed and untyped queries, call the +setHint method on the query object and specify either +javax.persistence.loadgraph or javax.persistence.fetchgraph as the +property name and an EntityGraph instance as the value:

    +
    +
    +
    +
    EntityGraph<EmailMessage> eg = em.getEntityGraph("previewEmailEntityGraph");
    +List<EmailMessage> messages = em.createNamedQuery("findAllEmailMessages")
    +        .setParameter("mailbox", "inbox")
    +        .setHint("javax.persistence.loadgraph", eg)
    +        .getResultList();
    +
    +
    +
    +

    In this example, the previewEmailEntityGraph is used for the +findAllEmailMessages named query.

    +
    +
    +

    Typed queries use the same technique:

    +
    +
    +
    +
    EntityGraph<EmailMessage> eg = em.getEntityGraph("previewEmailEntityGraph");
    +
    +CriteriaQuery<EmailMessage> cq = cb.createQuery(EmailMessage.class);
    +Root<EmailMessage> message = cq.from(EmailMessage.class);
    +TypedQuery<EmailMessage> q = em.createQuery(cq);
    +q.setHint("javax.persistence.loadgraph", eg);
    +List<EmailMessage> messages = q.getResultList();
    +
    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    + + + \ No newline at end of file diff --git a/persistence-intro.html b/persistence-intro.html new file mode 100644 index 0000000..de2ef2e --- /dev/null +++ b/persistence-intro.html @@ -0,0 +1,116 @@ + + + + + + Introduction to the Java Persistence API + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    37 Introduction to the Java Persistence API

    +
    +
    +

    This chapter provides a description of the Java Persistence API.

    +
    +
    +

    The following topics are addressed here:

    +
    + +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    + + + \ No newline at end of file diff --git a/persistence-intro001.html b/persistence-intro001.html new file mode 100644 index 0000000..faaee1b --- /dev/null +++ b/persistence-intro001.html @@ -0,0 +1,104 @@ + + + + + + Overview of the Java Persistence API + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    37.1 Overview of the Java Persistence API

    +
    +
    +

    The Java Persistence API provides Java developers with an +object/relational mapping facility for managing relational data in Java +applications. Java Persistence consists of four areas:

    +
    +
    +
      +
    • +

      The Java Persistence API

      +
    • +
    • +

      The query language

      +
    • +
    • +

      The Java Persistence Criteria API

      +
    • +
    • +

      Object/relational mapping metadata

      +
    • +
    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    + + + \ No newline at end of file diff --git a/persistence-intro002.html b/persistence-intro002.html new file mode 100644 index 0000000..39b20d5 --- /dev/null +++ b/persistence-intro002.html @@ -0,0 +1,942 @@ + + + + + + Entities + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    37.2 Entities

    +
    +
    +

    An entity is a lightweight persistence domain object. Typically, an +entity represents a table in a relational database, and each entity +instance corresponds to a row in that table. The primary programming +artifact of an entity is the entity class, although entities can use +helper classes.

    +
    +
    +

    The persistent state of an entity is represented through either +persistent fields or persistent properties. These fields or properties +use object/relational mapping annotations to map the entities and entity +relationships to the relational data in the underlying data store.

    +
    +
    +

    37.2.1 Requirements for Entity Classes

    +
    +

    An entity class must follow these requirements.

    +
    +
    +
      +
    • +

      The class must be annotated with the javax.persistence.Entity +annotation.

      +
    • +
    • +

      The class must have a public or protected, no-argument constructor. +The class may have other constructors.

      +
    • +
    • +

      The class must not be declared final. No methods or persistent +instance variables must be declared final.

      +
    • +
    • +

      If an entity instance is passed by value as a detached object, such as +through a session bean’s remote business interface, the class must +implement the Serializable interface.

      +
    • +
    • +

      Entities may extend both entity and non-entity classes, and non-entity +classes may extend entity classes.

      +
    • +
    • +

      Persistent instance variables must be declared private, protected, or +package-private and can be accessed directly only by the entity class’s +methods. Clients must access the entity’s state through accessor or +business methods.

      +
    • +
    +
    +
    +
    +

    37.2.2 Persistent Fields and Properties in Entity Classes

    +
    +

    The persistent state of an entity can be accessed through either the +entity’s instance variables or properties. The fields or properties must +be of the following Java language types:

    +
    +
    +
      +
    • +

      Java primitive types

      +
    • +
    • +

      java.lang.String

      +
    • +
    • +

      Other serializable types, including:

      +
      +
        +
      • +

        Wrappers of Java primitive types

        +
      • +
      • +

        java.math.BigInteger

        +
      • +
      • +

        java.math.BigDecimal

        +
      • +
      • +

        java.util.Date

        +
      • +
      • +

        java.util.Calendar

        +
      • +
      • +

        java.sql.Date

        +
      • +
      • +

        java.sql.Time

        +
      • +
      • +

        java.sql.TimeStamp

        +
      • +
      • +

        User-defined serializable types

        +
      • +
      • +

        byte[]

        +
      • +
      • +

        Byte[]

        +
      • +
      • +

        char[]

        +
      • +
      • +

        Character[]

        +
      • +
      +
      +
    • +
    • +

      Enumerated types

      +
    • +
    • +

      Other entities and/or collections of entities

      +
    • +
    • +

      Embeddable classes

      +
    • +
    +
    +
    +

    Entities may use persistent fields, persistent properties, or a +combination of both. If the mapping annotations are applied to the +entity’s instance variables, the entity uses persistent fields. If the +mapping annotations are applied to the entity’s getter methods for +JavaBeans-style properties, the entity uses persistent properties.

    +
    +
    +

    37.2.2.1 Persistent Fields

    +
    +

    If the entity class uses persistent fields, the Persistence runtime +accesses entity-class instance variables directly. All fields not +annotated javax.persistence.Transient or not marked as Java +transient will be persisted to the data store. The object/relational +mapping annotations must be applied to the instance variables.

    +
    +
    +
    +

    37.2.2.2 Persistent Properties

    +
    +

    If the entity uses persistent properties, the entity must follow the +method conventions of JavaBeans components. JavaBeans-style properties +use getter and setter methods that are typically named after the entity +class’s instance variable names. For every persistent property property +of type Type of the entity, there is a getter method get`Property and +setter method `set`Property. If the property is a Boolean, you may use +`is`Property instead of `get`Property. For example, if a `Customer +entity uses persistent properties and has a private instance variable +called firstName, the class defines a getFirstName and +setFirstName method for retrieving and setting the state of the +firstName instance variable.

    +
    +
    +

    The method signatures for single-valued persistent properties are as +follows:

    +
    +
    +
    +
    Type getProperty()
    +void setProperty(Type type)
    +
    +
    +
    +

    The object/relational mapping annotations for persistent properties must +be applied to the getter methods. Mapping annotations cannot be applied +to fields or properties annotated @Transient or marked transient.

    +
    +
    +
    +

    37.2.2.3 Using Collections in Entity Fields and Properties

    +
    +

    Collection-valued persistent fields and properties must use the +supported Java collection interfaces regardless of whether the entity +uses persistent fields or properties. The following collection +interfaces may be used:

    +
    +
    +
      +
    • +

      java.util.Collection

      +
    • +
    • +

      java.util.Set

      +
    • +
    • +

      java.util.List

      +
    • +
    • +

      java.util.Map

      +
    • +
    +
    +
    +

    If the entity class uses persistent fields, the type in the preceding +method signatures must be one of these collection types. Generic +variants of these collection types may also be used. For example, if it +has a persistent property that contains a set of phone numbers, the +Customer entity would have the following methods:

    +
    +
    +
    +
    Set<PhoneNumber> getPhoneNumbers() { ... }
    +void setPhoneNumbers(Set<PhoneNumber>) { ... }
    +
    +
    +
    +

    If a field or property of an entity consists of a collection of basic +types or embeddable classes, use the +javax.persistence.ElementCollection annotation on the field or +property.

    +
    +
    +

    The two attributes of @ElementCollection are targetClass and +fetch. The targetClass attribute specifies the class name of the +basic or embeddable class and is optional if the field or property is +defined using Java programming language generics. The optional fetch +attribute is used to specify whether the collection should be retrieved +lazily or eagerly, using the javax.persistence.FetchType constants of +either LAZY or EAGER, respectively. By default, the collection will +be fetched lazily.

    +
    +
    +

    The following entity, Person, has a persistent field, nicknames, +which is a collection of String classes that will be fetched eagerly. +The targetClass element is not required, because it uses generics to +define the field:

    +
    +
    +
    +
    @Entity
    +public class Person {
    +    ...
    +    @ElementCollection(fetch=EAGER)
    +    protected Set<String> nickname = new HashSet();
    +    ...
    +}
    +
    +
    +
    +

    Collections of entity elements and relationships may be represented by +java.util.Map collections. A Map consists of a key and a value.

    +
    +
    +

    When using Map elements or relationships, the following rules apply.

    +
    +
    +
      +
    • +

      The Map key or value may be a basic Java programming language type, +an embeddable class, or an entity.

      +
    • +
    • +

      When the Map value is an embeddable class or basic type, use the +@ElementCollection annotation.

      +
    • +
    • +

      When the Map value is an entity, use the @OneToMany or +@ManyToMany annotation.

      +
    • +
    • +

      Use the Map type on only one side of a bidirectional relationship.

      +
    • +
    +
    +
    +

    If the key type of a Map is a Java programming language basic type, +use the annotation javax.persistence.MapKeyColumn to set the column +mapping for the key. By default, the name attribute of @MapKeyColumn +is of the form RELATIONSHIP-FIELD/PROPERTY-NAME`_KEY`. For example, if +the referencing relationship field name is image, the default name +attribute is IMAGE_KEY.

    +
    +
    +

    If the key type of a Map is an entity, use the +javax.persistence.MapKeyJoinColumn annotation. If the multiple columns +are needed to set the mapping, use the annotation +javax.persistence.MapKeyJoinColumns to include multiple +@MapKeyJoinColumn annotations. If no @MapKeyJoinColumn is present, +the mapping column name is by default set to +RELATIONSHIP-FIELD/PROPERTY-NAME`_KEY`. For example, if the relationship +field name is employee, the default name attribute is +EMPLOYEE_KEY.

    +
    +
    +

    If Java programming language generic types are not used in the +relationship field or property, the key class must be explicitly set +using the javax.persistence.MapKeyClass annotation.

    +
    +
    +

    If the Map key is the primary key or a persistent field or property of +the entity that is the Map value, use the javax.persistence.MapKey +annotation. The @MapKeyClass and @MapKey annotations cannot be used +on the same field or property.

    +
    +
    +

    If the Map value is a Java programming language basic type or an +embeddable class, it will be mapped as a collection table in the +underlying database. If generic types are not used, the +@ElementCollection annotation’s targetClass attribute must be set to +the type of the Map value.

    +
    +
    +

    If the Map value is an entity and part of a many-to-many or +one-to-many unidirectional relationship, it will be mapped as a join +table in the underlying database. A unidirectional one-to-many +relationship that uses a Map may also be mapped using the +@JoinColumn annotation.

    +
    +
    +

    If the entity is part of a one-to-many/many-to-one bidirectional +relationship, it will be mapped in the table of the entity that +represents the value of the Map. If generic types are not used, the +targetEntity attribute of the @OneToMany and @ManyToMany +annotations must be set to the type of the Map value.

    +
    +
    +
    +

    37.2.2.4 Validating Persistent Fields and Properties

    +
    +

    The Java API for JavaBeans Validation (Bean Validation) provides a +mechanism for validating application data. Bean Validation is integrated +into the Java EE containers, allowing the same validation logic to be +used in any of the tiers of an enterprise application.

    +
    +
    +

    Bean Validation constraints may be applied to persistent entity classes, +embeddable classes, and mapped superclasses. By default, the Persistence +provider will automatically perform validation on entities with +persistent fields or properties annotated with Bean Validation +constraints immediately after the PrePersist, PreUpdate, and +PreRemove lifecycle events.

    +
    +
    +

    Bean Validation constraints are annotations applied to the fields or +properties of Java programming language classes. Bean Validation +provides a set of constraints as well as an API for defining custom +constraints. Custom constraints can be specific combinations of the +default constraints, or new constraints that don’t use the default +constraints. Each constraint is associated with at least one validator +class that validates the value of the constrained field or property. +Custom constraint developers must also provide a validator class for the +constraint.

    +
    +
    +

    Bean Validation constraints are applied to the persistent fields or +properties of persistent classes. When adding Bean Validation +constraints, use the same access strategy as the persistent class. That +is, if the persistent class uses field access, apply the Bean Validation +constraint annotations on the class’s fields. If the class uses property +access, apply the constraints on the getter methods.

    +
    +
    +

    Table 21-1 lists Bean Validation’s +built-in constraints, defined in the javax.validation.constraints +package.

    +
    +
    +

    All the built-in constraints listed in +Table 21-1 have a corresponding +annotation, ConstraintName`.List`, for grouping multiple constraints of +the same type on the same field or property. For example, the following +persistent field has two @Pattern constraints:

    +
    +
    +
    +
    @Pattern.List({
    +    @Pattern(regexp="..."),
    +    @Pattern(regexp="...")
    +})
    +
    +
    +
    +

    The following entity class, Contact, has Bean Validation constraints +applied to its persistent fields:

    +
    +
    +
    +
    @Entity
    +public class Contact implements Serializable {
    +    @Id
    +    @GeneratedValue(strategy = GenerationType.AUTO)
    +    private Long id;
    +    @NotNull
    +    protected String firstName;
    +    @NotNull
    +    protected String lastName;
    +    @Pattern(regexp = "[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\."
    +            + "[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@"
    +            + "(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9]"
    +            + "(?:[a-z0-9-]*[a-z0-9])?",
    +            message = "{invalid.email}")
    +    protected String email;
    +    @Pattern(regexp = "^\\(?(\\d{3})\\)?[- ]?(\\d{3})[- ]?(\\d{4})$",
    +            message = "{invalid.phonenumber}")
    +    protected String mobilePhone;
    +    @Pattern(regexp = "^\\(?(\\d{3})\\)?[- ]?(\\d{3})[- ]?(\\d{4})$",
    +            message = "{invalid.phonenumber}")
    +    protected String homePhone;
    +    @Temporal(javax.persistence.TemporalType.DATE)
    +    @Past
    +    protected Date birthday;
    +    ...
    +}
    +
    +
    +
    +

    The @NotNull annotation on the firstName and lastName fields +specifies that those fields are now required. If a new Contact +instance is created where firstName or lastName have not been +initialized, Bean Validation will throw a validation error. Similarly, +if a previously created instance of Contact has been modified so that +firstName or lastName are null, a validation error will be thrown.

    +
    +
    +

    The email field has a @Pattern constraint applied to it, with a +complicated regular expression that matches most valid email addresses. +If the value of email doesn’t match this regular expression, a +validation error will be thrown.

    +
    +
    +

    The homePhone and mobilePhone fields have the same @Pattern +constraints. The regular expression matches 10 digit telephone numbers +in the United States and Canada of the form (`xxx)` xxx`-`xxxx.

    +
    +
    +

    The birthday field is annotated with the @Past constraint, which +ensures that the value of birthday must be in the past.

    +
    +
    +
    +
    +

    37.2.3 Primary Keys in Entities

    +
    +

    Each entity has a unique object identifier. A customer entity, for +example, might be identified by a customer number. The unique +identifier, or primary key, enables clients to locate a particular +entity instance. Every entity must have a primary key. An entity may +have either a simple or a composite primary key.

    +
    +
    +

    Simple primary keys use the javax.persistence.Id annotation to denote +the primary key property or field.

    +
    +
    +

    Composite primary keys are used when a primary key consists of more than +one attribute, which corresponds to a set of single persistent +properties or fields. Composite primary keys must be defined in a +primary key class. Composite primary keys are denoted using the +javax.persistence.EmbeddedId and javax.persistence.IdClass +annotations.

    +
    +
    +

    The primary key, or the property or field of a composite primary key, +must be one of the following Java language types:

    +
    +
    +
      +
    • +

      Java primitive types

      +
    • +
    • +

      Java primitive wrapper types

      +
    • +
    • +

      java.lang.String

      +
    • +
    • +

      java.util.Date (the temporal type should be DATE)

      +
    • +
    • +

      java.sql.Date

      +
    • +
    • +

      java.math.BigDecimal

      +
    • +
    • +

      java.math.BigInteger

      +
    • +
    +
    +
    +

    Floating-point types should never be used in primary keys. If you use a +generated primary key, only integral types will be portable.

    +
    +
    +

    A primary key class must meet these requirements.

    +
    +
    +
      +
    • +

      The access control modifier of the class must be public.

      +
    • +
    • +

      The properties of the primary key class must be public or +protected if property-based access is used.

      +
    • +
    • +

      The class must have a public default constructor.

      +
    • +
    • +

      The class must implement the hashCode() and equals(Object other) +methods.

      +
    • +
    • +

      The class must be serializable.

      +
    • +
    • +

      A composite primary key must be represented and mapped to multiple +fields or properties of the entity class or must be represented and +mapped as an embeddable class.

      +
    • +
    • +

      If the class is mapped to multiple fields or properties of the entity +class, the names and types of the primary key fields or properties in +the primary key class must match those of the entity class.

      +
    • +
    +
    +
    +

    The following primary key class is a composite key, and the +customerOrder and itemId fields together uniquely identify an +entity:

    +
    +
    +
    +
    public final class LineItemKey implements Serializable {
    +    private Integer customerOrder;
    +    private int itemId;
    +
    +    public LineItemKey() {}
    +
    +    public LineItemKey(Integer order, int itemId) {
    +        this.setCustomerOrder(order);
    +        this.setItemId(itemId);
    +    }
    +
    +    @Override
    +    public int hashCode() {
    +        return ((this.getCustomerOrder() == null
    +                ? 0 : this.getCustomerOrder().hashCode())
    +                ^ ((int) this.getItemId()));
    +    }
    +
    +    @Override
    +    public boolean equals(Object otherOb) {
    +        if (this == otherOb) {
    +            return true;
    +        }
    +        if (!(otherOb instanceof LineItemKey)) {
    +            return false;
    +        }
    +        LineItemKey other = (LineItemKey) otherOb;
    +        return ((this.getCustomerOrder() == null
    +                ? other.getCustomerOrder() == null : this.getCustomerOrder()
    +                .equals(other.getCustomerOrder()))
    +                && (this.getItemId() == other.getItemId()));
    +    }
    +
    +    @Override
    +    public String toString() {
    +        return "" + getCustomerOrder() + "-" + getItemId();
    +    }
    +    /* Getters and setters */
    +}
    +
    +
    +
    +
    +

    37.2.4 Multiplicity in Entity Relationships

    +
    +

    Multiplicities are of the following types.

    +
    +
    +
      +
    • +

      One-to-one: Each entity instance is related to a single instance of +another entity. For example, to model a physical warehouse in which each +storage bin contains a single widget, StorageBin and Widget would +have a one-to-one relationship. One-to-one relationships use the +javax.persistence.OneToOne annotation on the corresponding persistent +property or field.

      +
    • +
    • +

      One-to-many: An entity instance can be related to multiple instances +of the other entities. A sales order, for example, can have multiple +line items. In the order application, CustomerOrder would have a +one-to-many relationship with LineItem. One-to-many relationships use +the javax.persistence.OneToMany annotation on the corresponding +persistent property or field.

      +
    • +
    • +

      Many-to-one: Multiple instances of an entity can be related to a +single instance of the other entity. This multiplicity is the opposite +of a one-to-many relationship. In the example just mentioned, the +relationship to CustomerOrder from the perspective of LineItem is +many-to-one. Many-to-one relationships use the +javax.persistence.ManyToOne annotation on the corresponding persistent +property or field.

      +
    • +
    • +

      Many-to-many: The entity instances can be related to multiple +instances of each other. For example, each college course has many +students, and every student may take several courses. Therefore, in an +enrollment application, Course and Student would have a many-to-many +relationship. Many-to-many relationships use the +javax.persistence.ManyToMany annotation on the corresponding +persistent property or field.

      +
    • +
    +
    +
    +
    +

    37.2.5 Direction in Entity Relationships

    +
    +

    The direction of a relationship can be either bidirectional or +unidirectional. A bidirectional relationship has both an owning side and +an inverse side. A unidirectional relationship has only an owning side. +The owning side of a relationship determines how the Persistence runtime +makes updates to the relationship in the database.

    +
    +
    +

    37.2.5.1 Bidirectional Relationships

    +
    +

    In a bidirectional relationship, each entity has a relationship field or +property that refers to the other entity. Through the relationship field +or property, an entity class’s code can access its related object. If an +entity has a related field, the entity is said to "know" about its +related object. For example, if CustomerOrder knows what LineItem +instances it has and if LineItem knows what CustomerOrder it belongs +to, they have a bidirectional relationship.

    +
    +
    +

    Bidirectional relationships must follow these rules.

    +
    +
    +
      +
    • +

      The inverse side of a bidirectional relationship must refer to its +owning side by using the mappedBy element of the @OneToOne, +@OneToMany, or @ManyToMany annotation. The mappedBy element +designates the property or field in the entity that is the owner of the +relationship.

      +
    • +
    • +

      The many side of many-to-one bidirectional relationships must not +define the mappedBy element. The many side is always the owning side +of the relationship.

      +
    • +
    • +

      For one-to-one bidirectional relationships, the owning side +corresponds to the side that contains the corresponding foreign key.

      +
    • +
    • +

      For many-to-many bidirectional relationships, either side may be the +owning side.

      +
    • +
    +
    +
    +
    +

    37.2.5.2 Unidirectional Relationships

    +
    +

    In a unidirectional relationship, only one entity has a relationship +field or property that refers to the other. For example, LineItem +would have a relationship field that identifies Product, but Product +would not have a relationship field or property for LineItem. In other +words, LineItem knows about Product, but Product doesn’t know +which LineItem instances refer to it.

    +
    +
    +
    +

    37.2.5.3 Queries and Relationship Direction

    +
    +

    Java Persistence query language and Criteria API queries often navigate +across relationships. The direction of a relationship determines whether +a query can navigate from one entity to another. For example, a query +can navigate from LineItem to Product but cannot navigate in the +opposite direction. For CustomerOrder and LineItem, a query could +navigate in both directions because these two entities have a +bidirectional relationship.

    +
    +
    +
    +

    37.2.5.4 Cascade Operations and Relationships

    +
    +

    Entities that use relationships often have dependencies on the existence +of the other entity in the relationship. For example, a line item is +part of an order; if the order is deleted, the line item also should be +deleted. This is called a cascade delete relationship.

    +
    +
    +

    The javax.persistence.CascadeType enumerated type defines the cascade +operations that are applied in the cascade element of the relationship +annotations. Table 37-1 lists the cascade operations for +entities.

    +
    +
    +

    +
    +
    +

    Table 37-1 Cascade Operations for Entities

    +
    + ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Cascade OperationDescription

    ALL

    All cascade operations will be applied to the parent entity’s +related entity. All is equivalent to specifying +cascade={DETACH, MERGE, PERSIST, REFRESH, REMOVE}

    DETACH

    If the parent entity is detached from the persistence +context, the related entity will also be detached.

    MERGE

    If the parent entity is merged into the persistence context, +the related entity will also be merged.

    PERSIST

    If the parent entity is persisted into the persistence +context, the related entity will also be persisted.

    REFRESH

    If the parent entity is refreshed in the current persistence +context, the related entity will also be refreshed.

    REMOVE

    If the parent entity is removed from the current persistence +context, the related entity will also be removed.

    +
    +
    +
    +
    +
    +
    +
    +

    Cascade delete relationships are specified using the cascade=REMOVE +element specification for @OneToOne and @OneToMany relationships. +For example:

    +
    +
    +
    +
    @OneToMany(cascade=REMOVE, mappedBy="customer")
    +public Set<CustomerOrder> getOrders() { return orders; }
    +
    +
    +
    +
    +

    37.2.5.5 Orphan Removal in Relationships

    +
    +

    When a target entity in a one-to-one or one-to-many relationship is +removed from the relationship, it is often desirable to cascade the +remove operation to the target entity. Such target entities are +considered "orphans," and the orphanRemoval attribute can be used to +specify that orphaned entities should be removed. For example, if an +order has many line items and one of them is removed from the order, the +removed line item is considered an orphan. If orphanRemoval is set to +true, the line item entity will be deleted when the line item is +removed from the order.

    +
    +
    +

    The orphanRemoval attribute in @OneToMany and @oneToOne takes a +Boolean value and is by default false.

    +
    +
    +

    The following example will cascade the remove operation to the orphaned +order entity when the customer entity is deleted:

    +
    +
    +
    +
    @OneToMany(mappedBy="customer", orphanRemoval="true")
    +public List<CustomerOrder> getOrders() { ... }
    +
    +
    +
    +
    +
    +

    37.2.6 Embeddable Classes in Entities

    +
    +

    Embeddable classes are used to represent the state of an entity but +don’t have a persistent identity of their own, unlike entity classes. +Instances of an embeddable class share the identity of the entity that +owns it. Embeddable classes exist only as the state of another entity. +An entity may have single-valued or collection-valued embeddable class +attributes.

    +
    +
    +

    Embeddable classes have the same rules as entity classes but are +annotated with the javax.persistence.Embeddable annotation instead of +@Entity.

    +
    +
    +

    The following embeddable class, ZipCode, has the fields zip and +plusFour:

    +
    +
    +
    +
    @Embeddable
    +public class ZipCode {
    +    String zip;
    +    String plusFour;
    +    ...
    +}
    +
    +
    +
    +

    This embeddable class is used by the Address entity:

    +
    +
    +
    +
    @Entity
    +public class Address {
    +    @Id
    +    protected long id
    +    String street1;
    +    String street2;
    +    String city;
    +    String province;
    +    @Embedded
    +    ZipCode zipCode;
    +    String country;
    +    ...
    +}
    +
    +
    +
    +

    Entities that own embeddable classes as part of their persistent state +may annotate the field or property with the javax.persistence.Embedded +annotation but are not required to do so.

    +
    +
    +

    Embeddable classes may themselves use other embeddable classes to +represent their state. They may also contain collections of basic Java +programming language types or other embeddable classes. Embeddable +classes may also contain relationships to other entities or collections +of entities. If the embeddable class has such a relationship, the +relationship is from the target entity or collection of entities to the +entity that owns the embeddable class.

    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    +
    + + + \ No newline at end of file diff --git a/persistence-intro003.html b/persistence-intro003.html new file mode 100644 index 0000000..321926a --- /dev/null +++ b/persistence-intro003.html @@ -0,0 +1,409 @@ + + + + + + Entity Inheritance + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    37.3 Entity Inheritance

    +
    +
    +

    Entities support class inheritance, polymorphic associations, and +polymorphic queries. Entity classes can extend non-entity classes, and +non-entity classes can extend entity classes. Entity classes can be both +abstract and concrete.

    +
    +
    +

    The roster example application demonstrates entity inheritance, as +described in Entity +Inheritance in the roster Application.

    +
    +
    +

    The following topics are addressed here:

    +
    + +
    +

    37.3.1 Abstract Entities

    +
    +

    An abstract class may be declared an entity by decorating the class with +@Entity. Abstract entities are like concrete entities but cannot be +instantiated.

    +
    +
    +

    Abstract entities can be queried just like concrete entities. If an +abstract entity is the target of a query, the query operates on all the +concrete subclasses of the abstract entity:

    +
    +
    +
    +
    @Entity
    +public abstract class Employee {
    +    @Id
    +    protected Integer employeeId;
    +    ...
    +}
    +@Entity
    +public class FullTimeEmployee extends Employee {
    +    protected Integer salary;
    +    ...
    +}
    +@Entity
    +public class PartTimeEmployee extends Employee {
    +    protected Float hourlyWage;
    +}
    +
    +
    +
    +
    +

    37.3.2 Mapped Superclasses

    +
    +

    Entities may inherit from superclasses that contain persistent state and +mapping information but are not entities. That is, the superclass is not +decorated with the @Entity annotation and is not mapped as an entity +by the Java Persistence provider. These superclasses are most often used +when you have state and mapping information common to multiple entity +classes.

    +
    +
    +

    Mapped superclasses are specified by decorating the class with the +annotation javax.persistence.MappedSuperclass:

    +
    +
    +
    +
    @MappedSuperclass
    +public class Employee {
    +    @Id
    +    protected Integer employeeId;
    +    ...
    +}
    +@Entity
    +public class FullTimeEmployee extends Employee {
    +    protected Integer salary;
    +    ...
    +}
    +@Entity
    +public class PartTimeEmployee extends Employee {
    +    protected Float hourlyWage;
    +    ...
    +}
    +
    +
    +
    +

    Mapped superclasses cannot be queried and cannot be used in +EntityManager or Query operations. You must use entity subclasses of +the mapped superclass in EntityManager or Query operations. Mapped +superclasses can’t be targets of entity relationships. Mapped +superclasses can be abstract or concrete.

    +
    +
    +

    Mapped superclasses do not have any corresponding tables in the +underlying datastore. Entities that inherit from the mapped superclass +define the table mappings. For instance, in the preceding code sample, +the underlying tables would be FULLTIMEEMPLOYEE and +PARTTIMEEMPLOYEE, but there is no EMPLOYEE table.

    +
    +
    +
    +

    37.3.3 Non-Entity Superclasses

    +
    +

    Entities may have non-entity superclasses, and these superclasses can be +either abstract or concrete. The state of non-entity superclasses is +nonpersistent, and any state inherited from the non-entity superclass by +an entity class is nonpersistent. Non-entity superclasses may not be +used in EntityManager or Query operations. Any mapping or +relationship annotations in non-entity superclasses are ignored.

    +
    +
    +
    +

    37.3.4 Entity Inheritance Mapping Strategies

    +
    +

    You can configure how the Java Persistence provider maps inherited +entities to the underlying datastore by decorating the root class of the +hierarchy with the annotation javax.persistence.Inheritance. The +following mapping strategies are used to map the entity data to the +underlying database:

    +
    +
    +
      +
    • +

      A single table per class hierarchy

      +
    • +
    • +

      A table per concrete entity class

      +
    • +
    • +

      A "join" strategy, whereby fields or properties that are specific to a +subclass are mapped to a different table than the fields or properties +that are common to the parent class

      +
    • +
    +
    +
    +

    The strategy is configured by setting the strategy element of +@Inheritance to one of the options defined in the +javax.persistence.InheritanceType enumerated type:

    +
    +
    +
    +
    public enum InheritanceType {
    +    SINGLE_TABLE,
    +    JOINED,
    +    TABLE_PER_CLASS
    +};
    +
    +
    +
    +

    The default strategy, InheritanceType.SINGLE_TABLE, is used if the +@Inheritance annotation is not specified on the root class of the +entity hierarchy.

    +
    +
    +

    37.3.4.1 The Single Table per Class Hierarchy Strategy

    +
    +

    With this strategy, which corresponds to the default +InheritanceType.SINGLE_TABLE, all classes in the hierarchy are mapped +to a single table in the database. This table has a discriminator column +containing a value that identifies the subclass to which the instance +represented by the row belongs.

    +
    +
    +

    The discriminator column, whose elements are shown in Table +37-2, can be specified by using the +javax.persistence.DiscriminatorColumn annotation on the root of the +entity class hierarchy.

    +
    +
    +

    +
    +
    +

    Table 37-2 @DiscriminatorColumn Elements

    +
    + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription

    String

    name

    The name of the column to be used as the +discriminator column. The default is DTYPE. This element is optional.

    DiscriminatorType

    discriminatorType

    The type of the column to be +used as a discriminator column. The default is +DiscriminatorType.STRING. This element is optional.

    String

    columnDefinition

    The SQL fragment to use when creating the +discriminator column. The default is generated by the Persistence +provider and is implementation-specific. This element is optional.

    String

    length

    The column length for String-based discriminator +types. This element is ignored for non-String discriminator types. The +default is 31. This element is optional.

    +
    +
    +
    +
    +
    +
    +
    +

    The javax.persistence.DiscriminatorType enumerated type is used to set +the type of the discriminator column in the database by setting the +discriminatorType element of @DiscriminatorColumn to one of the +defined types. DiscriminatorType is defined as follows:

    +
    +
    +
    +
    public enum DiscriminatorType {
    +    STRING,
    +    CHAR,
    +    INTEGER
    +};
    +
    +
    +
    +

    If @DiscriminatorColumn is not specified on the root of the entity +hierarchy and a discriminator column is required, the Persistence +provider assumes a default column name of DTYPE and column type of +DiscriminatorType.STRING.

    +
    +
    +

    The javax.persistence.DiscriminatorValue annotation may be used to set +the value entered into the discriminator column for each entity in a +class hierarchy. You may decorate only concrete entity classes with +@DiscriminatorValue.

    +
    +
    +

    If @DiscriminatorValue is not specified on an entity in a class +hierarchy that uses a discriminator column, the Persistence provider +will provide a default, implementation-specific value. If the +discriminatorType element of @DiscriminatorColumn is +DiscriminatorType.STRING, the default value is the name of the entity.

    +
    +
    +

    This strategy provides good support for polymorphic relationships +between entities and queries that cover the entire entity class +hierarchy. However, this strategy requires the columns that contain the +state of subclasses to be nullable.

    +
    +
    +
    +

    37.3.4.2 The Table per Concrete Class Strategy

    +
    +

    In this strategy, which corresponds to +InheritanceType.TABLE_PER_CLASS, each concrete class is mapped to a +separate table in the database. All fields or properties in the class, +including inherited fields or properties, are mapped to columns in the +class’s table in the database.

    +
    +
    +

    This strategy provides poor support for polymorphic relationships and +usually requires either SQL UNION queries or separate SQL queries for +each subclass for queries that cover the entire entity class hierarchy.

    +
    +
    +

    Support for this strategy is optional and may not be supported by all +Java Persistence API providers. The default Java Persistence API +provider in GlassFish Server does not support this strategy.

    +
    +
    +
    +

    37.3.4.3 The Joined Subclass Strategy

    +
    +

    In this strategy, which corresponds to InheritanceType.JOINED, the +root of the class hierarchy is represented by a single table, and each +subclass has a separate table that contains only those fields specific +to that subclass. That is, the subclass table does not contain columns +for inherited fields or properties. The subclass table also has a column +or columns that represent its primary key, which is a foreign key to the +primary key of the superclass table.

    +
    +
    +

    This strategy provides good support for polymorphic relationships but +requires one or more join operations to be performed when instantiating +entity subclasses. This may result in poor performance for extensive +class hierarchies. Similarly, queries that cover the entire class +hierarchy require join operations between the subclass tables, resulting +in decreased performance.

    +
    +
    +

    Some Java Persistence API providers, including the default provider in +GlassFish Server, require a discriminator column that corresponds to the +root entity when using the joined subclass strategy. If you are not +using automatic table creation in your application, make sure that the +database table is set up correctly for the discriminator column +defaults, or use the @DiscriminatorColumn annotation to match your +database schema. For information on discriminator columns, see +The Single Table per Class Hierarchy Strategy.

    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    +
    +
    + + + \ No newline at end of file diff --git a/persistence-intro004.html b/persistence-intro004.html new file mode 100644 index 0000000..a6a58a6 --- /dev/null +++ b/persistence-intro004.html @@ -0,0 +1,518 @@ + + + + + + Managing Entities + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    37.4 Managing Entities

    +
    +
    +

    Entities are managed by the entity manager, which is represented by +javax.persistence.EntityManager instances. Each EntityManager +instance is associated with a persistence context: a set of managed +entity instances that exist in a particular data store. A persistence +context defines the scope under which particular entity instances are +created, persisted, and removed. The EntityManager interface defines +the methods that are used to interact with the persistence context.

    +
    +
    +

    The following topics are addressed here:

    +
    + +
    +

    37.4.1 The EntityManager Interface

    +
    +

    The EntityManager API creates and removes persistent entity instances, +finds entities by the entity’s primary key, and allows queries to be run +on entities.

    +
    +
    +

    The following topics are addressed here:

    +
    + +
    +

    37.4.1.1 Container-Managed Entity Managers

    +
    +

    With a container-managed entity manager, an EntityManager instance’s +persistence context is automatically propagated by the container to all +application components that use the EntityManager instance within a +single Java Transaction API (JTA) transaction.

    +
    +
    +

    JTA transactions usually involve calls across application components. To +complete a JTA transaction, these components usually need access to a +single persistence context. This occurs when an EntityManager is +injected into the application components by means of the +javax.persistence.PersistenceContext annotation. The persistence +context is automatically propagated with the current JTA transaction, +and EntityManager references that are mapped to the same persistence +unit provide access to the persistence context within that transaction. +By automatically propagating the persistence context, application +components don’t need to pass references to EntityManager instances to +each other in order to make changes within a single transaction. The +Java EE container manages the lifecycle of container-managed entity +managers.

    +
    +
    +

    To obtain an EntityManager instance, inject the entity manager into +the application component:

    +
    +
    +
    +
    @PersistenceContext
    +EntityManager em;
    +
    +
    +
    +
    +

    37.4.1.2 Application-Managed Entity Managers

    +
    +

    With an application-managed entity manager, on the other hand, the +persistence context is not propagated to application components, and the +lifecycle of EntityManager instances is managed by the application.

    +
    +
    +

    Application-managed entity managers are used when applications need to +access a persistence context that is not propagated with the JTA +transaction across EntityManager instances in a particular persistence +unit. In this case, each EntityManager creates a new, isolated +persistence context. The EntityManager and its associated persistence +context are created and destroyed explicitly by the application. They +are also used when directly injecting EntityManager instances can’t be +done because EntityManager instances are not thread-safe. +EntityManagerFactory instances are thread-safe.

    +
    +
    +

    Applications create EntityManager instances in this case by using the +createEntityManager method of +javax.persistence.EntityManagerFactory.

    +
    +
    +

    To obtain an EntityManager instance, you first must obtain an +EntityManagerFactory instance by injecting it into the application +component by means of the javax.persistence.PersistenceUnit +annotation:

    +
    +
    +
    +
    @PersistenceUnit
    +EntityManagerFactory emf;
    +
    +
    +
    +

    Then obtain an EntityManager from the EntityManagerFactory instance:

    +
    +
    +
    +
    EntityManager em = emf.createEntityManager();
    +
    +
    +
    +

    Application-managed entity managers don’t automatically propagate the +JTA transaction context. Such applications need to manually gain access +to the JTA transaction manager and add transaction demarcation +information when performing entity operations. The +javax.transaction.UserTransaction interface defines methods to begin, +commit, and roll back transactions. Inject an instance of +UserTransaction by creating an instance variable annotated with +@Resource:

    +
    +
    +
    +
    @Resource
    +UserTransaction utx;
    +
    +
    +
    +

    To begin a transaction, call the UserTransaction.begin method. When +all the entity operations are complete, call the +UserTransaction.commit method to commit the transaction. The +UserTransaction.rollback method is used to roll back the current +transaction.

    +
    +
    +

    The following example shows how to manage transactions in an application +that uses an application-managed entity manager:

    +
    +
    +
    +
    @PersistenceUnit
    +EntityManagerFactory emf;
    +EntityManager em;
    +@Resource
    +UserTransaction utx;
    +...
    +em = emf.createEntityManager();
    +try {
    +    utx.begin();
    +    em.persist(SomeEntity);
    +    em.merge(AnotherEntity);
    +    em.remove(ThirdEntity);
    +    utx.commit();
    +} catch (Exception e) {
    +    utx.rollback();
    +}
    +
    +
    +
    +
    +

    37.4.1.3 Finding Entities Using the EntityManager

    +
    +

    The EntityManager.find method is used to look up entities in the data +store by the entity’s primary key:

    +
    +
    +
    +
    @PersistenceContext
    +EntityManager em;
    +public void enterOrder(int custID, CustomerOrder newOrder) {
    +    Customer cust = em.find(Customer.class, custID);
    +    cust.getOrders().add(newOrder);
    +    newOrder.setCustomer(cust);
    +}
    +
    +
    +
    +
    +

    37.4.1.4 Managing an Entity Instance’s Lifecycle

    +
    +

    You manage entity instances by invoking operations on the entity by +means of an EntityManager instance. Entity instances are in one of +four states: new, managed, detached, or removed.

    +
    +
    +
      +
    • +

      New entity instances have no persistent identity and are not yet +associated with a persistence context.

      +
    • +
    • +

      Managed entity instances have a persistent identity and are associated +with a persistence context.

      +
    • +
    • +

      Detached entity instances have a persistent identity and are not +currently associated with a persistence context.

      +
    • +
    • +

      Removed entity instances have a persistent identity, are associated +with a persistent context, and are scheduled for removal from the data +store.

      +
    • +
    +
    +
    +
    +

    37.4.1.5 Persisting Entity Instances

    +
    +

    New entity instances become managed and persistent either by invoking +the persist method or by a cascading persist operation invoked from +related entities that have the cascade=PERSIST or cascade=ALL +elements set in the relationship annotation. This means that the +entity’s data is stored to the database when the transaction associated +with the persist operation is completed. If the entity is already +managed, the persist operation is ignored, although the persist +operation will cascade to related entities that have the cascade +element set to PERSIST or ALL in the relationship annotation. If +persist is called on a removed entity instance, the entity becomes +managed. If the entity is detached, either persist will throw an +IllegalArgumentException, or the transaction commit will fail. The +following method performs a persist operation:

    +
    +
    +
    +
    @PersistenceContext
    +EntityManager em;
    +...
    +public LineItem createLineItem(CustomerOrder order, Product product,
    +        int quantity) {
    +    LineItem li = new LineItem(order, product, quantity);
    +    order.getLineItems().add(li);
    +    em.persist(li);
    +    return li;
    +}
    +
    +
    +
    +

    The persist operation is propagated to all entities related to the +calling entity that have the cascade element set to ALL or PERSIST +in the relationship annotation:

    +
    +
    +
    +
    @OneToMany(cascade=ALL, mappedBy="order")
    +public Collection<LineItem> getLineItems() {
    +    return lineItems;
    +}
    +
    +
    +
    +
    +

    37.4.1.6 Removing Entity Instances

    +
    +

    Managed entity instances are removed by invoking the remove method or +by a cascading remove operation invoked from related entities that +have the cascade=REMOVE or cascade=ALL elements set in the +relationship annotation. If the remove method is invoked on a new +entity, the remove operation is ignored, although remove will +cascade to related entities that have the cascade element set to +REMOVE or ALL in the relationship annotation. If remove is invoked +on a detached entity, either remove will throw an +IllegalArgumentException, or the transaction commit will fail. If +invoked on an already removed entity, remove will be ignored. The +entity’s data will be removed from the data store when the transaction +is completed or as a result of the flush operation.

    +
    +
    +

    In the following example, all LineItem entities associated with the +order are also removed, as CustomerOrder.getLineItems has +cascade=ALL set in the relationship annotation:

    +
    +
    +
    +
    public void removeOrder(Integer orderId) {
    +    try {
    +        CustomerOrder order = em.find(CustomerOrder.class, orderId);
    +        em.remove(order);
    +    }...
    +
    +
    +
    +
    +

    37.4.1.7 Synchronizing Entity Data to the Database

    +
    +

    The state of persistent entities is synchronized to the database when +the transaction with which the entity is associated commits. If a +managed entity is in a bidirectional relationship with another managed +entity, the data will be persisted, based on the owning side of the +relationship.

    +
    +
    +

    To force synchronization of the managed entity to the data store, invoke +the flush method of the EntityManager instance. If the entity is +related to another entity and the relationship annotation has the +cascade element set to PERSIST or ALL, the related entity’s data +will be synchronized with the data store when flush is called.

    +
    +
    +

    If the entity is removed, calling flush will remove the entity data +from the data store.

    +
    +
    +
    +
    +

    37.4.2 Persistence Units

    +
    +

    A persistence unit defines a set of all entity classes that are managed +by EntityManager instances in an application. This set of entity +classes represents the data contained within a single data store.

    +
    +
    +

    Persistence units are defined by the persistence.xml configuration +file. The following is an example persistence.xml file:

    +
    +
    +
    +
    <persistence>
    +    <persistence-unit name="OrderManagement">
    +        <description>This unit manages orders and customers.
    +            It does not rely on any vendor-specific features and can
    +            therefore be deployed to any persistence provider.
    +        </description>
    +        <jta-data-source>jdbc/MyOrderDB</jta-data-source>
    +        <jar-file>MyOrderApp.jar</jar-file>
    +        <class>com.widgets.CustomerOrder</class>
    +        <class>com.widgets.Customer</class>
    +    </persistence-unit>
    +</persistence>
    +
    +
    +
    +

    This file defines a persistence unit named OrderManagement, which uses +a JTA-aware data source, jdbc/MyOrderDB. The jar-file and class +elements specify managed persistence classes: entity classes, embeddable +classes, and mapped superclasses. The jar-file element specifies JAR +files that are visible to the packaged persistence unit that contain +managed persistence classes, whereas the class element explicitly +names managed persistence classes.

    +
    +
    +

    The jta-data-source (for JTA-aware data sources) and +non-jta-data-source (for non-JTA-aware data sources) elements specify +the global JNDI name of the data source to be used by the container.

    +
    +
    +

    The JAR file or directory whose META-INF directory contains +persistence.xml is called the root of the persistence unit. The scope +of the persistence unit is determined by the persistence unit’s root. +Each persistence unit must be identified with a name that is unique to +the persistence unit’s scope.

    +
    +
    +

    Persistent units can be packaged as part of a WAR or EJB JAR file or can +be packaged as a JAR file that can then be included in an WAR or EAR +file.

    +
    +
    +
      +
    • +

      If you package the persistent unit as a set of classes in an EJB JAR +file, persistence.xml should be put in the EJB JAR’s META-INF +directory.

      +
    • +
    • +

      If you package the persistence unit as a set of classes in a WAR file, +persistence.xml should be located in the WAR file’s +WEB-INF/classes/META-INF directory.

      +
    • +
    • +

      If you package the persistence unit in a JAR file that will be +included in a WAR or EAR file, the JAR file should be located in either

      +
      +
        +
      • +

        The WEB-INF/lib directory of a WAR

        +
      • +
      • +

        Or the EAR file’s library directory

        + +++ + + + + + +
        +

        Note:

        +
        +
        +

        In the Java Persistence API 1.0, JAR files could be located at the root +of an EAR file as the root of the persistence unit. This is no longer +supported. Portable applications should use the EAR file’s library +directory as the root of the persistence unit.

        +
        +
        +
        +
        +
        +
        +
        +
      • +
      +
      +
    • +
    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    +
    + + + \ No newline at end of file diff --git a/persistence-intro005.html b/persistence-intro005.html new file mode 100644 index 0000000..0c5d929 --- /dev/null +++ b/persistence-intro005.html @@ -0,0 +1,129 @@ + + + + + + Querying Entities + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    37.5 Querying Entities

    +
    +
    +

    The Java Persistence API provides the following methods for querying +entities.

    +
    +
    + +
    +
    +

    Both JPQL and the Criteria API have advantages and disadvantages.

    +
    +
    +

    Just a few lines long, JPQL queries are typically more concise and more +readable than Criteria queries. Developers familiar with SQL will find +it easy to learn the syntax of JPQL. JPQL named queries can be defined +in the entity class using a Java programming language annotation or in +the application’s deployment descriptor. JPQL queries are not typesafe, +however, and require a cast when retrieving the query result from the +entity manager. This means that type-casting errors may not be caught at +compile time. JPQL queries don’t support open-ended parameters.

    +
    +
    +

    Criteria queries allow you to define the query in the business tier of +the application. Although this is also possible using JPQL dynamic +queries, Criteria queries provide better performance because JPQL +dynamic queries must be parsed each time they are called. Criteria +queries are typesafe and therefore don’t require casting, as JPQL +queries do. The Criteria API is just another Java programming language +API and doesn’t require developers to learn the syntax of another query +language. Criteria queries are typically more verbose than JPQL queries +and require the developer to create several objects and perform +operations on those objects before submitting the query to the entity +manager.

    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    + + + \ No newline at end of file diff --git a/persistence-intro006.html b/persistence-intro006.html new file mode 100644 index 0000000..c3daea3 --- /dev/null +++ b/persistence-intro006.html @@ -0,0 +1,291 @@ + + + + + + Database Schema Creation + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    37.6 Database Schema Creation

    +
    +
    +

    The persistence provider can be configured to automatically create the +database tables, load data into the tables, and remove the tables during +application deployment using standard properties in the application’s +deployment descriptor. These tasks are typically used during the +development phase of a release, not against a production database.

    +
    +
    +

    The following is an example of a persistence.xml deployment descriptor +that specifies that the provider should drop all database artifacts +using a provided script, create the artifacts with a provided script, +and load data from a provided script when the application is deployed:

    +
    +
    +
    +
    <?xml version="1.0" encoding="UTF-8"?>
    +<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence"
    + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    + xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
    + http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
    +  <persistence-unit name="examplePU" transaction-type="JTA">
    +    <jta-data-source>java:global/ExampleDataSource</jta-data-source>
    +    <properties>
    +        <property name="javax.persistence.schema-generation.database.action"
    +                  value="drop-and-create"/>
    +        <property name="javax.persistence.schema-generation.create-source"
    +                  value="script"/>
    +        <property name="javax.persistence.schema-generation.create-script-source"
    +                  value="META-INF/sql/create.sql" />
    +        <property name="javax.persistence.sql-load-script-source"
    +                  value="META-INF/sql/data.sql" />
    +        <property name="javax.persistence.schema-generation.drop-source"
    +                  value="script" />
    +        <property name="javax.persistence.schema-generation.drop-script-source"
    +                  value="META-INF/sql/drop.sql" />
    +    </properties>
    +  </persistence-unit>
    +</persistence>
    +
    +
    +
    +

    37.6.1 Configuring an Application to Create or Drop Database Tables

    +
    +

    The javax.persistence.schema-generation.database.action property is +used to specify the action taken by the persistence provider when an +application is deployed. If the property is not set, the persistence +provider will not create or drop any database artifacts.

    +
    +
    +

    +
    +
    +

    Table 37-3 Schema Creation Actions

    +
    + ++++ + + + + + + + + + + + + + + + + + + + + + + + + +
    SettingDescription

    none

    No schema creation or deletion will take place.

    create

    The provider will create the database artifacts on +application deployment. The artifacts will remain unchanged after +application redeployment.

    drop-and-create

    Any artifacts in the database will be deleted, and +the provider will create the database artifacts on deployment.

    drop

    Any artifacts in the database will be deleted on application +deployment.

    +
    +
    +
    +
    +
    +
    +
    +

    In this example, the persistence provider will delete any remaining +database artifacts and then create the artifacts when the application is +deployed:

    +
    +
    +
    +
    <property name="javax.persistence.schema-generation.database.action"
    +           value="drop-and-create"/>
    +
    +
    +
    +

    By default, the object/relational metadata in the persistence unit is +used to create the database artifacts. You may also supply scripts used +by the provider to create and delete the database artifacts. The +javax.persistence.schema-generation.create-source and +javax.persistence.schema-generation.drop-source properties control how +the provider will create or delete the database artifacts.

    +
    +
    +

    +
    +
    +

    Table 37-4 Settings for Create and Delete Source Properties

    +
    + ++++ + + + + + + + + + + + + + + + + + + + + + + + + +
    SettingDescription

    metadata

    Use the object/relational metadata in the application to +create or delete the database artifacts.

    script

    Use a provided script for creating or deleting the database +artifacts.

    metadata-then-script

    Use a combination of object/relational +metadata, then a user-provided script to create or delete the database +artifacts.

    script-then-metadata

    Use a combination of a user-provided script, +then the object/relational metadata to create and delete the database +artifacts.

    +
    +
    +
    +
    +
    +
    +
    +

    In this example, the persistence provider will use a script packaged +within the application to create the database artifacts:

    +
    +
    +
    +
    <property name="javax.persistence.schema-generation.create-source"
    +           value="script"/>
    +
    +
    +
    +

    If you specify a script in create-source or drop-source, specify the +location of the script using the +javax.persistence.schema-generation.create-script-source or +javax.persistence.schema-generation.drop-script-source property. The +location of the script is relative to the root of the persistence unit:

    +
    +
    +
    +
    <property name="javax.persistence.schema-generation.create-script-source"
    +           value="META-INF/sql/create.sql" />
    +
    +
    +
    +

    In the above example, the create-script-source is set to a SQL file +called create.sql in the META-INF/sql directory relative to root of +the persistence unit.

    +
    +
    +
    +

    37.6.2 Loading Data Using SQL Scripts

    +
    +

    If you want to populate the database tables with data before the +application loads, specify the location of a load script in the +javax.persistence.sql-load-script-source property. The location +specified in this property is relative to the root of the persistence +unit.

    +
    +
    +

    In this example, the load script is a file called data.sql in the +META-INF/sql directory relative to the root of the persistence unit:

    +
    +
    +
    +
    <property name="javax.persistence.sql-load-script-source"
    +          value="META-INF/sql/data.sql" />
    +
    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    +
    + + + \ No newline at end of file diff --git a/persistence-intro007.html b/persistence-intro007.html new file mode 100644 index 0000000..30fa6ff --- /dev/null +++ b/persistence-intro007.html @@ -0,0 +1,115 @@ + + + + + + Further Information about Persistence + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    37.7 Further Information about Persistence

    +
    +
    +

    For more information about the Java Persistence API, see

    +
    +
    +
      +
    • +

      Java Persistence 2.1 API specification:

      +
      +

      http://jcp.org/en/jsr/detail?id=338

      +
      +
    • +
    • +

      EclipseLink, the Java Persistence API implementation in GlassFish +Server:

      +
      +

      http://www.eclipse.org/eclipselink/jpa.php

      +
      +
    • +
    • +

      EclipseLink team blog:

      +
      +

      http://eclipselink.blogspot.com/

      +
      +
    • +
    • +

      EclipseLink wiki documentation:

      +
      +

      http://wiki.eclipse.org/EclipseLink

      +
      +
    • +
    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    + + + \ No newline at end of file diff --git a/persistence-locking.html b/persistence-locking.html new file mode 100644 index 0000000..5cfc3d5 --- /dev/null +++ b/persistence-locking.html @@ -0,0 +1,102 @@ + + + + + + Controlling Concurrent Access to Entity Data with Locking + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    42 Controlling Concurrent Access to Entity Data with Locking

    +
    +
    +

    This chapter details how to handle concurrent access to entity data, and +the locking strategies available to Java Persistence API application +developers.

    +
    +
    +

    The following topics are addressed here:

    +
    + +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    + + + \ No newline at end of file diff --git a/persistence-locking001.html b/persistence-locking001.html new file mode 100644 index 0000000..ab76de6 --- /dev/null +++ b/persistence-locking001.html @@ -0,0 +1,228 @@ + + + + + + Overview of Entity Locking and Concurrency + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    42.1 Overview of Entity Locking and Concurrency

    +
    +
    +

    Entity data is concurrently accessed if the data in a data source is +accessed at the same time by multiple applications. Ensure that the +underlying data’s integrity is preserved when it is accessed +concurrently.

    +
    +
    +

    When data is updated in the database tables in a transaction, the +persistence provider assumes the database management system will hold +short-term read locks and long-term write locks to maintain data +integrity. Most persistence providers will delay database writes until +the end of the transaction, except when the application explicitly calls +for a flush (that is, the application calls the EntityManager.flush +method or executes queries with the flush mode set to AUTO).

    +
    +
    +

    By default, persistence providers use optimistic locking, where, before +committing changes to the data, the persistence provider checks that no +other transaction has modified or deleted the data since the data was +read. This is accomplished by a version column in the database table, +with a corresponding version attribute in the entity class. When a row +is modified, the version value is incremented. The original transaction +checks the version attribute, and if the data has been modified by +another transaction, a javax.persistence.OptimisticLockException will +be thrown, and the original transaction will be rolled back. When the +application specifies optimistic lock modes, the persistence provider +verifies that a particular entity has not changed since it was read from +the database even if the entity data was not modified.

    +
    +
    +

    Pessimistic locking goes further than optimistic locking. With +pessimistic locking, the persistence provider creates a transaction that +obtains a long-term lock on the data until the transaction is completed, +which prevents other transactions from modifying or deleting the data +until the lock has ended. Pessimistic locking is a better strategy than +optimistic locking when the underlying data is frequently accessed and +modified by many transactions.

    +
    +
    +
    +
    +
    +
    +
    + +++ + + + + + +
    +

    Note:

    +
    +
    +

    Using pessimistic locks on entities that are not subject to frequent +modification may result in decreased application performance.

    +
    +
    +
    +
    +
    +
    +
    +
    +

    42.1.1 Using Optimistic Locking

    +
    +

    Use the javax.persistence.Version annotation to mark a persistent +field or property as a version attribute of an entity. The version +attribute enables the entity for optimistic concurrency control. The +persistence provider reads and updates the version attribute when an +entity instance is modified during a transaction. The application may +read the version attribute, but must not modify the value.

    +
    +
    +
    +
    +
    +
    +
    + +++ + + + + + +
    +

    Note:

    +
    +
    +

    Although some persistence providers may support optimistic locking for +entities that do not have version attributes, portable applications +should always use entities with version attributes when using optimistic +locking. If the application attempts to lock an entity that does not +have a version attribute, and the persistence provider does not support +optimistic locking for non-versioned entities, a PersistenceException +will be thrown.

    +
    +
    +
    +
    +
    +
    +
    +
    +

    The @Version annotation has the following requirements.

    +
    +
    +
      +
    • +

      Only a single @Version attribute may be defined per entity.

      +
    • +
    • +

      The @Version attribute must be in the primary table for an entity +mapped to multiple tables.

      +
    • +
    • +

      The type of the @Version attribute must be one of the following: +int, Integer, long, Long, short, Short, or +java.sql.Timestamp.

      +
    • +
    +
    +
    +

    The following code snippet shows how to define a version attribute in an +entity with persistent fields:

    +
    +
    +
    +
    @Version
    +protected int version;
    +
    +
    +
    +

    The following code snippet shows how to define a version attribute in an +entity with persistent properties:

    +
    +
    +
    +
    @Version
    +protected Short getVersion() { ... }
    +
    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    +
    + + + \ No newline at end of file diff --git a/persistence-locking002.html b/persistence-locking002.html new file mode 100644 index 0000000..2263ac0 --- /dev/null +++ b/persistence-locking002.html @@ -0,0 +1,346 @@ + + + + + + Lock Modes + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    42.2 Lock Modes

    +
    +
    +

    The application may increase the level of locking for an entity by +specifying the use of lock modes. Lock modes may be specified to +increase the level of optimistic locking or to request the use of +pessimistic locks.

    +
    +
    +

    The use of optimistic lock modes causes the persistence provider to +check the version attributes for entities that were read (but not +modified) during a transaction as well as for entities that were +updated.

    +
    +
    +

    The use of pessimistic lock modes specifies that the persistence +provider is to immediately acquire long-term read or write locks for the +database data corresponding to entity state.

    +
    +
    +

    You can set the lock mode for an entity operation by specifying one of +the lock modes defined in the javax.persistence.LockModeType +enumerated type, listed in Table 42-1.

    +
    +
    +

    +
    +
    +

    Table 42-1 Lock Modes for Concurrent Entity Access

    +
    + ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Lock ModeDescription

    OPTIMISTIC

    Obtain an optimistic read lock for all entities with +version attributes.

    OPTIMISTIC_FORCE_INCREMENT

    Obtain an optimistic read lock for all +entities with version attributes, and increment the version attribute +value.

    PESSIMISTIC_READ

    +

    Immediately obtain a long-term read lock on the data to prevent the data +from being modified or deleted. Other transactions may read the data +while the lock is maintained, but may not modify or delete the data.

    +
    +
    +

    The persistence provider is permitted to obtain a database write lock +when a read lock was requested, but not vice versa.

    +

    PESSIMISTIC_WRITE

    Immediately obtain a long-term write lock on the +data to prevent the data from being read, modified, or deleted.

    PESSIMISTIC_FORCE_INCREMENT

    Immediately obtain a long-term lock on +the data to prevent the data from being modified or deleted, and +increment the version attribute of versioned entities.

    READ

    A synonym for OPTIMISTIC. Use of LockModeType.OPTIMISTIC is +to be preferred for new applications.

    WRITE

    A synonym for OPTIMISTIC_FORCE_INCREMENT. Use of +LockModeType.OPTIMISTIC_FORCE_INCREMENT is to be preferred for new +applications.

    NONE

    No additional locking will occur on the data in the database.

    +
    +
    +
    +
    +
    +
    +
    +

    42.2.1 Setting the Lock Mode

    +
    +

    To specify the lock mode, use one of the following techniques:

    +
    +
    +
      +
    1. +

      Call the EntityManager.lock method, passing in one of the lock +modes:

      +
      +
      +
      EntityManager em = ...;
      +Person person = ...;
      +em.lock(person, LockModeType.OPTIMISTIC);
      +
      +
      +
    2. +
    3. +

      Call one of the EntityManager.find methods that take the lock mode +as a parameter:

      +
      +
      +
      EntityManager em = ...;
      +String personPK = ...;
      +Person person = em.find(Person.class, personPK,
      +    LockModeType.PESSIMISTIC_WRITE);
      +
      +
      +
    4. +
    5. +

      Call one of the EntityManager.refresh methods that take the lock +mode as a parameter:

      +
      +
      +
      EntityManager em = ...;
      +String personPK = ...;
      +Person person = em.find(Person.class, personPK);
      +...
      +em.refresh(person, LockModeType.OPTIMISTIC_FORCE_INCREMENT);
      +
      +
      +
    6. +
    7. +

      Call the Query.setLockMode or TypedQuery.setLockMode method, +passing the lock mode as the parameter:

      +
      +
      +
      Query q = em.createQuery(...);
      +q.setLockMode(LockModeType.PESSIMISTIC_FORCE_INCREMENT);
      +
      +
      +
    8. +
    9. +

      Add a lockMode element to the @NamedQuery annotation:

      +
      +
      +
      @NamedQuery(name="lockPersonQuery",
      +  query="SELECT p FROM Person p WHERE p.name LIKE :name",
      +  lockMode=PESSIMISTIC_READ)
      +
      +
      +
    10. +
    +
    +
    +
    +

    42.2.2 Using Pessimistic Locking

    +
    +

    Versioned entities, as well as entities that do not have version +attributes, can be locked pessimistically.

    +
    +
    +

    To lock entities pessimistically, set the lock mode to +PESSIMISTIC_READ, PESSIMISTIC_WRITE, or +PESSIMISTIC_FORCE_INCREMENT.

    +
    +
    +

    If a pessimistic lock cannot be obtained on the database rows, and the +failure to lock the data results in a transaction rollback, a +PessimisticLockException is thrown. If a pessimistic lock cannot be +obtained, but the locking failure doesn’t result in a transaction +rollback, a LockTimeoutException is thrown.

    +
    +
    +

    Pessimistically locking a versioned entity with +PESSIMISTIC_FORCE_INCREMENT results in the version attribute being +incremented even if the entity data is unmodified. When pessimistically +locking a versioned entity, the persistence provider will perform the +version checks that occur during optimistic locking, and if the version +check fails, an OptimisticLockException will be thrown. An attempt to +lock a non-versioned entity with PESSIMISTIC_FORCE_INCREMENT is not +portable and may result in a PersistenceException if the persistence +provider does not support optimistic locks for non-versioned entities. +Locking a versioned entity with PESSIMISTIC_WRITE results in the +version attribute being incremented if the transaction was successfully +committed.

    +
    +
    +

    42.2.2.1 Pessimistic Locking Timeouts

    +
    +

    Use the javax.persistence.lock.timeout property to specify the length +of time in milliseconds the persistence provider should wait to obtain a +lock on the database tables. If the time it takes to obtain a lock +exceeds the value of this property, a LockTimeoutException will be +thrown, but the current transaction will not be marked for rollback. If +you set this property to 0, the persistence provider should throw a +LockTimeoutException if it cannot immediately obtain a lock.

    +
    +
    +
    +
    +
    +
    +
    + +++ + + + + + +
    +

    Note:

    +
    +
    +

    Portable applications should not rely on the setting of +javax.persistence.lock.timeout, because the locking strategy and +underlying database may mean that the timeout value cannot be used. The +value of javax.persistence.lock.timeout is a hint, not a contract.

    +
    +
    +
    +
    +
    +
    +
    +
    +

    This property may be set programmatically by passing it to the +EntityManager methods that allow lock modes to be specified, the +Query.setLockMode and TypedQuery.setLockMode methods, the +@NamedQuery annotation, and the +Persistence.createEntityManagerFactory method. It may also be set as a +property in the persistence.xml deployment descriptor.

    +
    +
    +

    If javax.persistence.lock.timeout is set in multiple places, the value +will be determined in the following order:

    +
    +
    +
      +
    1. +

      The argument to one of the EntityManager or Query methods

      +
    2. +
    3. +

      The setting in the @NamedQuery annotation

      +
    4. +
    5. +

      The argument to the Persistence.createEntityManagerFactory method

      +
    6. +
    7. +

      The value in the persistence.xml deployment descriptor

      +
    8. +
    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    +
    +
    + + + \ No newline at end of file diff --git a/persistence-querylanguage.html b/persistence-querylanguage.html new file mode 100644 index 0000000..b6afc17 --- /dev/null +++ b/persistence-querylanguage.html @@ -0,0 +1,119 @@ + + + + + + The Java Persistence Query Language + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    39 The Java Persistence Query Language

    +
    +
    +

    This chapter describes the Java Persistence query language that defines +queries for entities and their persistent state. The query language +allows you to write portable queries that work regardless of the +underlying data store.

    +
    +
    +

    The following topics are addressed here:

    +
    + +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    + + + \ No newline at end of file diff --git a/persistence-querylanguage001.html b/persistence-querylanguage001.html new file mode 100644 index 0000000..34104be --- /dev/null +++ b/persistence-querylanguage001.html @@ -0,0 +1,99 @@ + + + + + + Overview of the Java Persistence Query Language + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    39.1 Overview of the Java Persistence Query Language

    +
    +
    +

    The query language uses the abstract persistence schemas of entities, +including their relationships, for its data model and defines operators +and expressions based on this data model. The scope of a query spans the +abstract schemas of related entities that are packaged in the same +persistence unit. The query language uses an SQL-like syntax to select +objects or values based on entity abstract schema types and +relationships among them.

    +
    +
    +

    This chapter relies on the material presented in earlier chapters. For +conceptual information, see Chapter 37, +"Introduction to the Java Persistence API". For code examples, see +Chapter 38, "Running the +Persistence Examples."

    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    + + + \ No newline at end of file diff --git a/persistence-querylanguage002.html b/persistence-querylanguage002.html new file mode 100644 index 0000000..9b883b5 --- /dev/null +++ b/persistence-querylanguage002.html @@ -0,0 +1,126 @@ + + + + + + Query Language Terminology + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    39.2 Query Language Terminology

    +
    +
    +

    The following list defines some of the terms referred to in this +chapter.

    +
    +
    +
      +
    • +

      Abstract schema: The persistent schema abstraction (persistent +entities, their state, and their relationships) over which queries +operate. The query language translates queries over this persistent +schema abstraction into queries that are executed over the database +schema to which entities are mapped.

      +
    • +
    • +

      Abstract schema type: The type to which the persistent property of an +entity evaluates in the abstract schema. That is, each persistent field +or property in an entity has a corresponding state field of the same +type in the abstract schema. The abstract schema type of an entity is +derived from the entity class and the metadata information provided by +Java language annotations.

      +
    • +
    • +

      Backus-Naur Form (BNF): A notation that describes the syntax of +high-level languages. The syntax diagrams in this chapter are in BNF +notation.

      +
    • +
    • +

      Navigation: The traversal of relationships in a query language +expression. The navigation operator is a period.

      +
    • +
    • +

      Path expression: An expression that navigates to an entity’s state or +relationship field.

      +
    • +
    • +

      State field: A persistent field of an entity.

      +
    • +
    • +

      Relationship field: A persistent field of an entity whose type is the +abstract schema type of the related entity.

      +
    • +
    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    + + + \ No newline at end of file diff --git a/persistence-querylanguage003.html b/persistence-querylanguage003.html new file mode 100644 index 0000000..0322614 --- /dev/null +++ b/persistence-querylanguage003.html @@ -0,0 +1,192 @@ + + + + + + Creating Queries Using the Java Persistence Query Language + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    39.3 Creating Queries Using the Java Persistence Query Language

    +
    +
    +

    The EntityManager.createQuery and EntityManager.createNamedQuery +methods are used to query the datastore by using Java Persistence query +language queries.

    +
    +
    +

    The createQuery method is used to create dynamic queries, which are +queries defined directly within an application’s business logic:

    +
    +
    +
    +
    public List findWithName(String name) {
    +return em.createQuery(
    +    "SELECT c FROM Customer c WHERE c.name LIKE :custName")
    +    .setParameter("custName", name)
    +    .setMaxResults(10)
    +    .getResultList();
    +}
    +
    +
    +
    +

    The createNamedQuery method is used to create static queries, or +queries that are defined in metadata by using the +javax.persistence.NamedQuery annotation. The name element of +@NamedQuery specifies the name of the query that will be used with the +createNamedQuery method. The query element of @NamedQuery is the +query:

    +
    +
    +
    +
    @NamedQuery(
    +    name="findAllCustomersWithName",
    +    query="SELECT c FROM Customer c WHERE c.name LIKE :custName"
    +)
    +
    +
    +
    +

    Here’s an example of createNamedQuery, which uses the @NamedQuery:

    +
    +
    +
    +
    @PersistenceContext
    +public EntityManager em;
    +...
    +customers = em.createNamedQuery("findAllCustomersWithName")
    +    .setParameter("custName", "Smith")
    +    .getResultList();
    +
    +
    +
    +

    39.3.1 Named Parameters in Queries

    +
    +

    Named parameters are query parameters that are prefixed with a colon +(:). Named parameters in a query are bound to an argument by the +following method:

    +
    +
    +
    +
    javax.persistence.Query.setParameter(String name, Object value)
    +
    +
    +
    +

    In the following example, the name argument to the findWithName +business method is bound to the :custName named parameter in the query +by calling Query.setParameter:

    +
    +
    +
    +
    public List findWithName(String name) {
    +    return em.createQuery(
    +        "SELECT c FROM Customer c WHERE c.name LIKE :custName")
    +        .setParameter("custName", name)
    +        .getResultList();
    +}
    +
    +
    +
    +

    Named parameters are case-sensitive and may be used by both dynamic and +static queries.

    +
    +
    +
    +

    39.3.2 Positional Parameters in Queries

    +
    +

    You may use positional parameters instead of named parameters in +queries. Positional parameters are prefixed with a question mark (?) +followed by the numeric position of the parameter in the query. The +method Query.setParameter(integer position, Object value) is used to +set the parameter values.

    +
    +
    +

    In the following example, the findWithName business method is +rewritten to use input parameters:

    +
    +
    +
    +
    public List findWithName(String name) {
    +    return em.createQuery(
    +        "SELECT c FROM Customer c WHERE c.name LIKE ?1")
    +        .setParameter(1, name)
    +        .getResultList();
    +}
    +
    +
    +
    +

    Input parameters are numbered starting from 1. Input parameters are +case-sensitive, and may be used by both dynamic and static queries.

    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    +
    + + + \ No newline at end of file diff --git a/persistence-querylanguage004.html b/persistence-querylanguage004.html new file mode 100644 index 0000000..3fca3c4 --- /dev/null +++ b/persistence-querylanguage004.html @@ -0,0 +1,188 @@ + + + + + + Simplified Query Language Syntax + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    39.4 Simplified Query Language Syntax

    +
    +
    +

    This section briefly describes the syntax of the query language so that +you can quickly move on to +Example Queries. When you +are ready to learn about the syntax in more detail, see +Full Query Language Syntax.

    +
    +
    +

    The following topics are addressed here:

    +
    + +
    +

    39.4.1 Select Statements

    +
    +

    A select query has six clauses: SELECT, FROM, WHERE, GROUP BY, +HAVING, and ORDER BY. The SELECT and FROM clauses are required, +but the WHERE, GROUP BY, HAVING, and ORDER BY clauses are +optional. Here is the high-level BNF syntax of a query language select +query:

    +
    +
    +
    +
    QL_statement ::= select_clause from_clause
    +  [where_clause][groupby_clause][having_clause][orderby_clause]
    +
    +
    +
    +

    The BNF syntax defines the following clauses.

    +
    +
    +
      +
    • +

      The SELECT clause defines the types of the objects or values +returned by the query.

      +
    • +
    • +

      The FROM clause defines the scope of the query by declaring one or +more identification variables, which can be referenced in the SELECT +and WHERE clauses. An identification variable represents one of the +following elements:

      +
      +
        +
      • +

        The abstract schema name of an entity

        +
      • +
      • +

        An element of a collection relationship

        +
      • +
      • +

        An element of a single-valued relationship

        +
      • +
      • +

        A member of a collection that is the multiple side of a one-to-many +relationship

        +
      • +
      +
      +
    • +
    • +

      The WHERE clause is a conditional expression that restricts the +objects or values retrieved by the query. Although the clause is +optional, most queries have a WHERE clause.

      +
    • +
    • +

      The GROUP BY clause groups query results according to a set of +properties.

      +
    • +
    • +

      The HAVING clause is used with the GROUP BY clause to further +restrict the query results according to a conditional expression.

      +
    • +
    • +

      The ORDER BY clause sorts the objects or values returned by the +query into a specified order.

      +
    • +
    +
    +
    +
    +

    39.4.2 Update and Delete Statements

    +
    +

    Update and delete statements provide bulk operations over sets of +entities. These statements have the following syntax:

    +
    +
    +
    +
    update_statement :: = update_clause [where_clause]
    +delete_statement :: = delete_clause [where_clause]
    +
    +
    +
    +

    The update and delete clauses determine the type of the entities to be +updated or deleted. The WHERE clause may be used to restrict the scope +of the update or delete operation.

    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    +
    + + + \ No newline at end of file diff --git a/persistence-querylanguage005.html b/persistence-querylanguage005.html new file mode 100644 index 0000000..72a3685 --- /dev/null +++ b/persistence-querylanguage005.html @@ -0,0 +1,645 @@ + + + + + + Example Queries + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    39.5 Example Queries

    +
    +
    +

    The following queries are from the Player entity of the roster +application, which is documented in +The roster Application.

    +
    +
    +

    The following topics are addressed here:

    +
    + +
    +

    39.5.1 Simple Queries

    +
    +

    If you are unfamiliar with the query language, these simple queries are +a good place to start.

    +
    +
    +

    The following topics are addressed here:

    +
    + +
    +

    39.5.1.1 A Basic Select Query

    +
    +
    +
    SELECT p
    +FROM Player p
    +
    +
    +
    +
      +
    • +

      Data retrieved: All players.

      +
    • +
    • +

      Description: The FROM clause declares an identification variable +named p, omitting the optional keyword AS. If the AS keyword were +included, the clause would be written as follows:

      +
      +
      +
      FROM Player AS p
      +
      +
      +
      +

      The Player element is the abstract schema name of the Player entity.

      +
      +
    • +
    • +

      See also: Identification +Variables.

      +
    • +
    +
    +
    +
    +

    39.5.1.2 Eliminating Duplicate Values

    +
    +
    +
    SELECT DISTINCT p
    +FROM Player p
    +WHERE p.position = ?1
    +
    +
    +
    +
      +
    • +

      Data retrieved: The players with the position specified by the query’s +parameter.

      +
    • +
    • +

      Description: The DISTINCT keyword eliminates duplicate values.

      +
      +

      The WHERE clause restricts the players retrieved by checking their +position, a persistent field of the Player entity. The ?1 element +denotes the input parameter of the query.

      +
      +
    • +
    • +

      See also: Input +Parameters and The DISTINCT +Keyword.

      +
    • +
    +
    +
    +
    +

    39.5.1.3 Using Named Parameters

    +
    +
    +
    SELECT DISTINCT p
    +FROM Player p
    +WHERE p.position = :position AND p.name = :name
    +
    +
    +
    +
      +
    • +

      Data retrieved: The players having the specified positions and names.

      +
    • +
    • +

      Description: The position and name elements are persistent fields +of the Player entity. The WHERE clause compares the values of these +fields with the named parameters of the query, set using the +Query.setNamedParameter method. The query language denotes a named +input parameter using a colon (:) followed by an identifier. The first +input parameter is :position, the second is :name.

      +
    • +
    +
    +
    +
    +
    + +
    +

    In the query language, an expression can traverse, or navigate, to +related entities. These expressions are the primary difference between +the Java Persistence query language and SQL. Queries navigates to +related entities, whereas SQL joins tables.

    +
    +
    +

    The following topics are addressed here:

    +
    + +
    +

    39.5.2.1 A Simple Query with Relationships

    +
    +
    +
    SELECT DISTINCT p
    +FROM Player p, IN (p.teams) t
    +
    +
    +
    +
      +
    • +

      Data retrieved: All players who belong to a team.

      +
    • +
    • +

      Description: The FROM clause declares two identification variables: +p and t. The p variable represents the Player entity, and the +t variable represents the related Team entity. The declaration for +t references the previously declared p variable. The IN keyword +signifies that teams is a collection of related entities. The +p.teams expression navigates from a Player to its related Team. +The period in the p.teams expression is the navigation operator.

      +
      +

      You may also use the JOIN statement to write the same query:

      +
      +
      +
      +
      SELECT DISTINCT p
      +FROM Player p JOIN p.teams t
      +
      +
      +
      +

      This query could also be rewritten as:

      +
      +
      +
      +
      SELECT DISTINCT p
      +FROM Player p
      +WHERE p.team IS NOT EMPTY
      +
      +
      +
    • +
    +
    +
    +
    + +
    +

    Use the JOIN clause statement to navigate to a single-valued +relationship field:

    +
    +
    +
    +
    SELECT t
    +FROM Team t JOIN t.league l
    +WHERE l.sport = 'soccer' OR l.sport ='football'
    +
    +
    +
    +

    In this example, the query will return all teams that are in either +soccer or football leagues.

    +
    +
    +
    +

    39.5.2.3 Traversing Relationships with an Input Parameter

    +
    +
    +
    SELECT DISTINCT p
    +FROM Player p, IN (p.teams) AS t
    +WHERE t.city = :city
    +
    +
    +
    +
      +
    • +

      Data retrieved: The players whose teams belong to the specified city.

      +
    • +
    • +

      Description: This query is similar to the previous example but adds an +input parameter. The AS keyword in the FROM clause is optional. In +the WHERE clause, the period preceding the persistent variable city +is a delimiter, not a navigation operator. Strictly speaking, +expressions can navigate to relationship fields (related entities) but +not to persistent fields. To access a persistent field, an expression +uses the period as a delimiter.

      +
      +

      Expressions cannot navigate beyond (or further qualify) relationship +fields that are collections. In the syntax of an expression, a +collection-valued field is a terminal symbol. Because the teams field +is a collection, the WHERE clause cannot specify p.teams.city (an +illegal expression).

      +
      +
    • +
    • +

      See also: Path +Expressions.

      +
    • +
    +
    +
    +
    +

    39.5.2.4 Traversing Multiple Relationships

    +
    +
    +
    SELECT DISTINCT p
    +FROM Player p, IN (p.teams) t
    +WHERE t.league = :league
    +
    +
    +
    +
      +
    • +

      Data retrieved: The players who belong to the specified league.

      +
    • +
    • +

      Description: The expressions in this query navigate over two +relationships. The p.teams expression navigates the Player-Team +relationship, and the t.league expression navigates the +Team-League relationship.

      +
    • +
    +
    +
    +

    In the other examples, the input parameters are String objects; in +this example, the parameter is an object whose type is a League. This +type matches the league relationship field in the comparison +expression of the WHERE clause.

    +
    +
    +
    + +
    +
    +
    SELECT DISTINCT p
    +FROM Player p, IN (p.teams) t
    +WHERE t.league.sport = :sport
    +
    +
    +
    +
      +
    • +

      Data retrieved: The players who participate in the specified sport.

      +
    • +
    • +

      Description: The sport persistent field belongs to the League +entity. To reach the sport field, the query must first navigate from +the Player entity to Team (p.teams) and then from Team to the +League entity (t.league). Because it is not a collection, the +league relationship field can be followed by the sport persistent +field.

      +
    • +
    +
    +
    +
    +
    +

    39.5.3 Queries with Other Conditional Expressions

    +
    +

    Every WHERE clause must specify a conditional expression, of which +there are several kinds. In the previous examples, the conditional +expressions are comparison expressions that test for equality. The +following examples demonstrate some of the other kinds of conditional +expressions. For descriptions of all conditional expressions, see +WHERE Clause.

    +
    +
    +

    The following topics are addressed here:

    +
    + +
    +

    39.5.3.1 The LIKE Expression

    +
    +
    +
    SELECT p
    +FROM Player p
    +WHERE p.name LIKE 'Mich%'
    +
    +
    +
    +
      +
    • +

      Data retrieved: All players whose names begin with "Mich."

      +
    • +
    • +

      Description: The LIKE expression uses wildcard characters to search +for strings that match the wildcard pattern. In this case, the query +uses the LIKE expression and the % wildcard to find all players +whose names begin with the string "Mich." For example, "Michael" and +"Michelle" both match the wildcard pattern.

      +
    • +
    • +

      See also: LIKE +Expressions.

      +
    • +
    +
    +
    +
    +

    39.5.3.2 The IS NULL Expression

    +
    +
    +
    SELECT t
    +FROM Team t
    +WHERE t.league IS NULL
    +
    +
    +
    +
      +
    • +

      Data retrieved: All teams not associated with a league.

      +
    • +
    • +

      Description: The IS NULL expression can be used to check whether a +relationship has been set between two entities. In this case, the query +checks whether the teams are associated with any leagues and returns the +teams that do not have a league.

      +
    • +
    • +

      See also: NULL Comparison +Expressions and NULL +Values.

      +
    • +
    +
    +
    +
    +

    39.5.3.3 The IS EMPTY Expression

    +
    +
    +
    SELECT p
    +FROM Player p
    +WHERE p.teams IS EMPTY
    +
    +
    +
    +
      +
    • +

      Data retrieved: All players who do not belong to a team.

      +
    • +
    • +

      Description: The teams relationship field of the Player entity is +a collection. If a player does not belong to a team, the teams +collection is empty, and the conditional expression is TRUE.

      +
    • +
    • +

      See also: Empty Collection +Comparison Expressions.

      +
    • +
    +
    +
    +
    +

    39.5.3.4 The BETWEEN Expression

    +
    +
    +
    SELECT DISTINCT p
    +FROM Player p
    +WHERE p.salary BETWEEN :lowerSalary AND :higherSalary
    +
    +
    +
    +
      +
    • +

      Data retrieved: The players whose salaries fall within the range of +the specified salaries.

      +
    • +
    • +

      Description: This BETWEEN expression has three arithmetic +expressions: a persistent field (p.salary) and the two input +parameters (:lowerSalary and :higherSalary). The following +expression is equivalent to the BETWEEN expression:

      +
      +
      +
      p.salary >= :lowerSalary AND p.salary <= :higherSalary
      +
      +
      +
    • +
    • +

      See also: BETWEEN +Expressions.

      +
    • +
    +
    +
    +
    +

    39.5.3.5 Comparison Operators

    +
    +
    +
    SELECT DISTINCT p1
    +FROM Player p1, Player p2
    +WHERE p1.salary > p2.salary AND p2.name = :name
    +
    +
    +
    +
      +
    • +

      Data retrieved: All players whose salaries are higher than the salary +of the player with the specified name.

      +
    • +
    • +

      Description: The FROM clause declares two identification variables +(p1 and p2) of the same type (Player). Two identification +variables are needed because the WHERE clause compares the salary of +one player (p2) with that of the other players (p1).

      +
    • +
    • +

      See also: Identification +Variables.

      +
    • +
    +
    +
    +
    +
    +

    39.5.4 Bulk Updates and Deletes

    +
    +

    The following examples show how to use the UPDATE and DELETE +expressions in queries. UPDATE and DELETE operate on multiple +entities according to the condition or conditions set in the WHERE +clause. The WHERE clause in UPDATE and DELETE queries follows the +same rules as SELECT queries.

    +
    +
    +

    The following topics are addressed here:

    +
    + +
    +

    39.5.4.1 Update Queries

    +
    +
    +
    UPDATE Player p
    +SET p.status = 'inactive'
    +WHERE p.lastPlayed < :inactiveThresholdDate
    +
    +
    +
    +
      +
    • +

      Description: This query sets the status of a set of players to +inactive if the player’s last game was longer ago than the date +specified in inactiveThresholdDate.

      +
    • +
    +
    +
    +
    +

    39.5.4.2 Delete Queries

    +
    +
    +
    DELETE
    +FROM Player p
    +WHERE p.status = 'inactive'
    +AND p.teams IS EMPTY
    +
    +
    +
    +
      +
    • +

      Description: This query deletes all inactive players who are not on a +team.

      +
    • +
    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    +
    +
    + + + \ No newline at end of file diff --git a/persistence-querylanguage006.html b/persistence-querylanguage006.html new file mode 100644 index 0000000..8ce8289 --- /dev/null +++ b/persistence-querylanguage006.html @@ -0,0 +1,2257 @@ + + + + + + Full Query Language Syntax + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    39.6 Full Query Language Syntax

    +
    +
    +

    This section discusses the query language syntax, as defined in the Java +Persistence API 2.0 specification available at +http://jcp.org/en/jsr/detail?id=317. Much of the following material +paraphrases or directly quotes the specification.

    +
    +
    +

    The following topics are addressed here:

    +
    + +
    +

    39.6.1 BNF Symbols

    +
    +

    Table 39-1 describes the BNF symbols used in this chapter.

    +
    +
    +

    +
    +
    +

    Table 39-1 BNF Symbol Summary

    +
    + ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    SymbolDescription

    ::=

    The element to the left of the symbol is defined by the +constructs on the right.

    +

    *

    +
    +
    +
    +
    +
    +
    +

    The preceding construct may occur zero or more times.

    {...}

    The constructs within the braces are grouped together.

    [...]

    The constructs within the brackets are optional.

    +

    `

    +

    ` +


    An exclusive OR.

    BOLDFACE

    A keyword; although capitalized in the BNF diagram, +keywords are not case-sensitive.

    White space

    +
    +
    +
    +
    +
    +
    +
    +
    +

    39.6.2 BNF Grammar of the Java Persistence Query Language

    +
    +

    Here is the entire BNF diagram for the query language:

    +
    +
    +
    +
    QL_statement ::= select_statement | update_statement | delete_statement
    +select_statement ::= select_clause from_clause [where_clause] [groupby_clause]
    +    [having_clause] [orderby_clause]
    +update_statement ::= update_clause [where_clause]
    +delete_statement ::= delete_clause [where_clause]
    +from_clause ::=
    +    FROM identification_variable_declaration
    +        {, {identification_variable_declaration |
    +            collection_member_declaration}}*
    +identification_variable_declaration ::=
    +        range_variable_declaration { join | fetch_join }*
    +range_variable_declaration ::= abstract_schema_name [AS]
    +        identification_variable
    +join ::= join_spec join_association_path_expression [AS]
    +        identification_variable
    +fetch_join ::= join_specFETCH join_association_path_expression
    +association_path_expression ::=
    +        collection_valued_path_expression |
    +        single_valued_association_path_expression
    +join_spec::= [LEFT [OUTER] |INNER] JOIN
    +join_association_path_expression ::=
    +        join_collection_valued_path_expression |
    +        join_single_valued_association_path_expression
    +join_collection_valued_path_expression::=
    +    identification_variable.collection_valued_association_field
    +join_single_valued_association_path_expression::=
    +        identification_variable.single_valued_association_field
    +collection_member_declaration ::=
    +        IN (collection_valued_path_expression) [AS]
    +        identification_variable
    +single_valued_path_expression ::=
    +        state_field_path_expression |
    +        single_valued_association_path_expression
    +state_field_path_expression ::=
    +    {identification_variable |
    +    single_valued_association_path_expression}.state_field
    +single_valued_association_path_expression ::=
    +    identification_variable.{single_valued_association_field.}*
    +    single_valued_association_field
    +collection_valued_path_expression ::=
    +    identification_variable.{single_valued_association_field.}*
    +    collection_valued_association_field
    +state_field ::=
    +    {embedded_class_state_field.}*simple_state_field
    +update_clause ::=UPDATE abstract_schema_name [[AS]
    +    identification_variable] SET update_item {, update_item}*
    +update_item ::= [identification_variable.]{state_field |
    +    single_valued_association_field} = new_value
    +new_value ::=
    +     simple_arithmetic_expression |
    +    string_primary |
    +    datetime_primary |
    +    boolean_primary |
    +    enum_primary simple_entity_expression |
    +    NULL
    +delete_clause ::= DELETE FROM abstract_schema_name [[AS]
    +    identification_variable]
    +select_clause ::= SELECT [DISTINCT] select_expression {,
    +    select_expression}*
    +select_expression ::=
    +    single_valued_path_expression |
    +    aggregate_expression |
    +    identification_variable |
    +    OBJECT(identification_variable) |
    +    constructor_expression
    +constructor_expression ::=
    +    NEW constructor_name(constructor_item {,
    +    constructor_item}*)
    +constructor_item ::= single_valued_path_expression |
    +    aggregate_expression
    +aggregate_expression ::=
    +    {AVG |MAX |MIN |SUM} ([DISTINCT]
    +        state_field_path_expression) |
    +    COUNT ([DISTINCT] identification_variable |
    +        state_field_path_expression |
    +        single_valued_association_path_expression)
    +where_clause ::= WHERE conditional_expression
    +groupby_clause ::= GROUP BY groupby_item {, groupby_item}*
    +groupby_item ::= single_valued_path_expression
    +having_clause ::= HAVING conditional_expression
    +orderby_clause ::= ORDER BY orderby_item {, orderby_item}*
    +orderby_item ::= state_field_path_expression [ASC |DESC]
    +subquery ::= simple_select_clause subquery_from_clause
    +    [where_clause] [groupby_clause] [having_clause]
    +subquery_from_clause ::=
    +    FROM subselect_identification_variable_declaration
    +        {, subselect_identification_variable_declaration}*
    +subselect_identification_variable_declaration ::=
    +    identification_variable_declaration |
    +    association_path_expression [AS] identification_variable |
    +    collection_member_declaration
    +simple_select_clause ::= SELECT [DISTINCT]
    +    simple_select_expression
    +simple_select_expression::=
    +    single_valued_path_expression |
    +    aggregate_expression |
    +    identification_variable
    +conditional_expression ::= conditional_term |
    +    conditional_expression OR conditional_term
    +conditional_term ::= conditional_factor | conditional_term AND
    +    conditional_factor
    +conditional_factor ::= [NOT] conditional_primary
    +conditional_primary ::= simple_cond_expression |(
    +    conditional_expression)
    +simple_cond_expression ::=
    +    comparison_expression |
    +    between_expression |
    +    like_expression |
    +    in_expression |
    +    null_comparison_expression |
    +    empty_collection_comparison_expression |
    +    collection_member_expression |
    +    exists_expression
    +between_expression ::=
    +    arithmetic_expression [NOT] BETWEEN
    +        arithmetic_expressionAND arithmetic_expression |
    +    string_expression [NOT] BETWEEN string_expression AND
    +        string_expression |
    +    datetime_expression [NOT] BETWEEN
    +        datetime_expression AND datetime_expression
    +in_expression ::=
    +    state_field_path_expression [NOT] IN (in_item {, in_item}*
    +    | subquery)
    +in_item ::= literal | input_parameter
    +like_expression ::=
    +    string_expression [NOT] LIKE pattern_value [ESCAPE
    +        escape_character]
    +null_comparison_expression ::=
    +    {single_valued_path_expression | input_parameter} IS [NOT]
    +        NULL
    +empty_collection_comparison_expression ::=
    +    collection_valued_path_expression IS [NOT] EMPTY
    +collection_member_expression ::= entity_expression
    +    [NOT] MEMBER [OF] collection_valued_path_expression
    +exists_expression::= [NOT] EXISTS (subquery)
    +all_or_any_expression ::= {ALL |ANY |SOME} (subquery)
    +comparison_expression ::=
    +    string_expression comparison_operator {string_expression |
    +    all_or_any_expression} |
    +    boolean_expression {= |<> } {boolean_expression |
    +    all_or_any_expression} |
    +    enum_expression {= |<> } {enum_expression |
    +    all_or_any_expression} |
    +    datetime_expression comparison_operator
    +        {datetime_expression | all_or_any_expression} |
    +    entity_expression {= |<> } {entity_expression |
    +    all_or_any_expression} |
    +    arithmetic_expression comparison_operator
    +        {arithmetic_expression | all_or_any_expression}
    +comparison_operator ::= = |> |>= |< |<= |<>
    +arithmetic_expression ::= simple_arithmetic_expression |
    +    (subquery)
    +simple_arithmetic_expression ::=
    +    arithmetic_term | simple_arithmetic_expression {+ |- }
    +        arithmetic_term
    +arithmetic_term ::= arithmetic_factor | arithmetic_term {* |/ }
    +    arithmetic_factor
    +arithmetic_factor ::= [{+ |- }] arithmetic_primary
    +arithmetic_primary ::=
    +    state_field_path_expression |
    +    numeric_literal |
    +    (simple_arithmetic_expression) |
    +    input_parameter |
    +    functions_returning_numerics |
    +    aggregate_expression
    +string_expression ::= string_primary | (subquery)
    +string_primary ::=
    +    state_field_path_expression |
    +    string_literal |
    +    input_parameter |
    +    functions_returning_strings |
    +    aggregate_expression
    +datetime_expression ::= datetime_primary | (subquery)
    +datetime_primary ::=
    +    state_field_path_expression |
    +    input_parameter |
    +    functions_returning_datetime |
    +    aggregate_expression
    +boolean_expression ::= boolean_primary | (subquery)
    +boolean_primary ::=
    +    state_field_path_expression |
    +    boolean_literal |
    +    input_parameter
    + enum_expression ::= enum_primary | (subquery)
    +enum_primary ::=
    +    state_field_path_expression |
    +    enum_literal |
    +    input_parameter
    +entity_expression ::=
    +    single_valued_association_path_expression |
    +        simple_entity_expression
    +simple_entity_expression ::=
    +    identification_variable |
    +    input_parameter
    +functions_returning_numerics::=
    +    LENGTH(string_primary) |
    +    LOCATE(string_primary, string_primary[,
    +        simple_arithmetic_expression]) |
    +    ABS(simple_arithmetic_expression) |
    +    SQRT(simple_arithmetic_expression) |
    +    MOD(simple_arithmetic_expression,
    +        simple_arithmetic_expression) |
    +    SIZE(collection_valued_path_expression)
    +functions_returning_datetime ::=
    +    CURRENT_DATE |
    +    CURRENT_TIME |
    +    CURRENT_TIMESTAMP
    +functions_returning_strings ::=
    +    CONCAT(string_primary, string_primary) |
    +    SUBSTRING(string_primary,
    +        simple_arithmetic_expression,
    +        simple_arithmetic_expression)|
    +    TRIM([[trim_specification] [trim_character] FROM]
    +        string_primary) |
    +    LOWER(string_primary) |
    +    UPPER(string_primary)
    +trim_specification ::= LEADING | TRAILING | BOTH
    +
    +
    +
    +
    +

    39.6.3 FROM Clause

    +
    +

    The FROM clause defines the domain of the query by declaring +identification variables.

    +
    +
    +

    The following topics are addressed here:

    +
    + +
    +

    39.6.3.1 Identifiers

    +
    +

    An identifier is a sequence of one or more characters. The first +character must be a valid first character (letter, $, _) in an +identifier of the Java programming language, hereafter in this chapter +called simply "Java." Each subsequent character in the sequence must be +a valid nonfirst character (letter, digit, $, _) in a Java +identifier. (For details, see the Java SE API documentation of the +isJavaIdentifierStart and isJavaIdentifierPart methods of the +Character class.) The question mark (?) is a reserved character in +the query language and cannot be used in an identifier.

    +
    +
    +

    A query language identifier is case-sensitive, with two exceptions:

    +
    +
    +
      +
    • +

      Keywords

      +
    • +
    • +

      Identification variables

      +
    • +
    +
    +
    +

    An identifier cannot be the same as a query language keyword. Here is a +list of query language keywords:

    +
    +
    +
    +
     +
    +`ABS` +
    +`ALL` +
    +`AND` +
    +`ANY` +
    +`AS` +
    +`ASC` +
    +`AVG` +
    +`BETWEEN` +
    +`BIT_LENGTH` +
    +`BOTH` +
    +`BY` +
    +`CASE` +
    +`CHAR_LENGTH` +
    +`CHARACTER_LENGTH` +
    +`CLASS` +
    +`COALESCE` +
    +`CONCAT` +
    +`COUNT` +
    +`CURRENT_DATE` +
    +`CURRENT_TIMESTAMP` +
    +`DELETE` +
    +`DESC` +
    +`DISTINCT` +
    +`ELSE` +
    +`EMPTY` +
    +`END` +
    +`ENTRY` +
    +`ESCAPE` +
    +`EXISTS` +
    +`FALSE` +
    +`FETCH` +
    +`FROM` +
    +`GROUP` +
    +`HAVING` +
    +`IN` +
    +`INDEX` +
    +`INNER` +
    +`IS` +
    +`JOIN` +
    +`KEY` +
    +`LEADING` +
    +`LEFT` +
    +`LENGTH` +
    +`LIKE` +
    +`LOCATE` +
    +`LOWER` +
    +`MAX` +
    +`MEMBER` +
    +`MIN` +
    +`MOD` +
    +`NEW` +
    +`NOT` +
    +`NULL` +
    +`NULLIF` +
    +`OBJECT` +
    +`OF` +
    +`OR` +
    +`ORDER` +
    +`OUTER` +
    +`POSITION` +
    +`SELECT` +
    +`SET` +
    +`SIZE` +
    +`SOME` +
    +`SQRT` +
    +`SUBSTRING` +
    +`SUM` +
    +`THEN` +
    +`TRAILING` +
    +`TRIM` +
    +`TRUE` +
    +`TYPE` +
    +`UNKNOWN` +
    +`UPDATE` +
    +`UPPER` +
    +`VALUE` +
    +`WHEN` +
    +`WHERE` +
    +
    +
    +
    +

    It is not recommended that you use an SQL keyword as an identifier, +because the list of keywords may expand to include other reserved SQL +words in the future.

    +
    +
    +
    +

    39.6.3.2 Identification Variables

    +
    +

    An identification variable is an identifier declared in the FROM +clause. Although they can reference identification variables, the +SELECT and WHERE clauses cannot declare them. All identification +variables must be declared in the FROM clause.

    +
    +
    +

    Because it is an identifier, an identification variable has the same +naming conventions and restrictions as an identifier, with the exception +that an identification variable is case-insensitive. For example, an +identification variable cannot be the same as a query language keyword. +(See Identifiers for more naming rules.) Also, within a +given persistence unit, an identification variable name must not match +the name of any entity or abstract schema.

    +
    +
    +

    The FROM clause can contain multiple declarations, separated by +commas. A declaration can reference another identification variable that +has been previously declared (to the left). In the following FROM +clause, the variable t references the previously declared variable +p:

    +
    +
    +
    +
    FROM Player p, IN (p.teams) AS t
    +
    +
    +
    +

    Even if it is not used in the WHERE clause, an identification +variable’s declaration can affect the results of the query. For example, +compare the next two queries. The following query returns all players, +whether or not they belong to a team:

    +
    +
    +
    +
    SELECT p
    +FROM Player p
    +
    +
    +
    +

    In contrast, because it declares the t identification variable, the +next query fetches all players who belong to a team:

    +
    +
    +
    +
    SELECT p
    +FROM Player p, IN (p.teams) AS t
    +
    +
    +
    +

    The following query returns the same results as the preceding query, but +the WHERE clause makes it easier to read:

    +
    +
    +
    +
    SELECT p
    +FROM Player p
    +WHERE p.teams IS NOT EMPTY
    +
    +
    +
    +

    An identification variable always designates a reference to a single +value whose type is that of the expression used in the declaration. +There are two kinds of declarations: range variable and collection +member.

    +
    +
    +
    +

    39.6.3.3 Range Variable Declarations

    +
    +

    To declare an identification variable as an abstract schema type, you +specify a range variable declaration. In other words, an identification +variable can range over the abstract schema type of an entity. In the +following example, an identification variable named p represents the +abstract schema named Player:

    +
    +
    +
    +
    FROM Player p
    +
    +
    +
    +

    A range variable declaration can include the optional AS operator:

    +
    +
    +
    +
    FROM Player AS p
    +
    +
    +
    +

    To obtain objects, a query usually uses path expressions to navigate +through the relationships. But for those objects that cannot be obtained +by navigation, you can use a range variable declaration to designate a +starting point, or query root.

    +
    +
    +

    If the query compares multiple values of the same abstract schema type, +the FROM clause must declare multiple identification variables for the +abstract schema:

    +
    +
    +
    +
    FROM Player p1, Player p2
    +
    +
    +
    +

    For an example of such a query, see +Comparison Operators.

    +
    +
    +
    +

    39.6.3.4 Collection Member Declarations

    +
    +

    In a one-to-many relationship, the multiple side consists of a +collection of entities. An identification variable can represent a +member of this collection. To access a collection member, the path +expression in the variable’s declaration navigates through the +relationships in the abstract schema. (For more information on path +expressions, see Path Expressions.) Because a path +expression can be based on another path expression, the navigation can +traverse several relationships. See +Traversing Multiple +Relationships.

    +
    +
    +

    A collection member declaration must include the IN operator but can +omit the optional AS operator.

    +
    +
    +

    In the following example, the entity represented by the abstract schema +named Player has a relationship field called teams. The +identification variable called t represents a single member of the +teams collection:

    +
    +
    +
    +
    FROM Player p, IN (p.teams) t
    +
    +
    +
    +
    +

    39.6.3.5 Joins

    +
    +

    The JOIN operator is used to traverse over relationships between +entities and is functionally similar to the IN operator.

    +
    +
    +

    In the following example, the query joins over the relationship between +customers and orders:

    +
    +
    +
    +
    SELECT c
    +FROM Customer c JOIN c.orders o
    +WHERE c.status = 1 AND o.totalPrice > 10000
    +
    +
    +
    +

    The INNER keyword is optional:

    +
    +
    +
    +
    SELECT c
    +FROM Customer c INNER JOIN c.orders o
    +WHERE c.status = 1 AND o.totalPrice > 10000
    +
    +
    +
    +

    These examples are equivalent to the following query, which uses the +IN operator:

    +
    +
    +
    +
    SELECT c
    +FROM Customer c, IN (c.orders) o
    +WHERE c.status = 1 AND o.totalPrice > 10000
    +
    +
    +
    +

    You can also join a single-valued relationship:

    +
    +
    +
    +
    SELECT t
    +FROM Team t JOIN t.league l
    +WHERE l.sport = :sport
    +
    +
    +
    +

    A LEFT JOIN or LEFT OUTER JOIN retrieves a set of entities where +matching values in the join condition may be absent. The OUTER keyword +is optional:

    +
    +
    +
    +
    SELECT c.name, o.totalPrice
    +FROM CustomerOrder o LEFT JOIN o.customer c
    +
    +
    +
    +

    A FETCH JOIN is a join operation that returns associated entities as a +side effect of running the query. In the following example, the query +returns a set of departments and, as a side effect, the associated +employees of the departments, even though the employees were not +explicitly retrieved by the SELECT clause:

    +
    +
    +
    +
    SELECT d
    +FROM Department d LEFT JOIN FETCH d.employees
    +WHERE d.deptno = 1
    +
    +
    +
    +
    +
    +

    39.6.4 Path Expressions

    +
    +

    Path expressions are important constructs in the syntax of the query +language for several reasons. First, path expressions define navigation +paths through the relationships in the abstract schema. These path +definitions affect both the scope and the results of a query. Second, +path expressions can appear in any of the main clauses of a query +(SELECT, DELETE, HAVING, UPDATE, WHERE, FROM, GROUP BY, +ORDER BY). Finally, although much of the query language is a subset of +SQL, path expressions are extensions not found in SQL.

    +
    +
    +

    The following topics are addressed here:

    +
    + +
    +

    39.6.4.1 Examples of Path Expressions

    +
    +

    Here, the WHERE clause contains a single_valued_path_expression; the +p is an identification variable, and salary is a persistent field of +Player:

    +
    +
    +
    +
    SELECT DISTINCT p
    +FROM Player p
    +WHERE p.salary BETWEEN :lowerSalary AND :higherSalary
    +
    +
    +
    +

    Here, the WHERE clause also contains a +single_valued_path_expression; t is an identification variable, +league is a single-valued relationship field, and sport is a +persistent field of league:

    +
    +
    +
    +
    SELECT DISTINCT p
    +FROM Player p, IN (p.teams) t
    +WHERE t.league.sport = :sport
    +
    +
    +
    +

    Here, the WHERE clause contains a collection_valued_path_expression; +p is an identification variable, and teams designates a +collection-valued relationship field:

    +
    +
    +
    +
    SELECT DISTINCT p
    +FROM Player p
    +WHERE p.teams IS EMPTY
    +
    +
    +
    +
    +

    39.6.4.2 Expression Types

    +
    +

    The type of a path expression is the type of the object represented by +the ending element, which can be one of the following:

    +
    +
    +
      +
    • +

      Persistent field

      +
    • +
    • +

      Single-valued relationship field

      +
    • +
    • +

      Collection-valued relationship field

      +
    • +
    +
    +
    +

    For example, the type of the expression p.salary is double because +the terminating persistent field (salary) is a double.

    +
    +
    +

    In the expression p.teams, the terminating element is a +collection-valued relationship field (teams). This expression’s type +is a collection of the abstract schema type named Team. Because Team +is the abstract schema name for the Team entity, this type maps to the +entity. For more information on the type mapping of abstract schemas, +see Return Types.

    +
    +
    +
    + +
    +

    A path expression enables the query to navigate to related entities. The +terminating elements of an expression determine whether navigation is +allowed. If an expression contains a single-valued relationship field, +the navigation can continue to an object that is related to the field. +However, an expression cannot navigate beyond a persistent field or a +collection-valued relationship field. For example, the expression +p.teams.league.sport is illegal because teams is a collection-valued +relationship field. To reach the sport field, the FROM clause could +define an identification variable named t for the teams field:

    +
    +
    +
    +
    FROM Player AS p, IN (p.teams) t
    +WHERE t.league.sport = 'soccer'
    +
    +
    +
    +
    +
    +

    39.6.5 WHERE Clause

    +
    +

    The WHERE clause specifies a conditional expression that limits the +values returned by the query. The query returns all corresponding values +in the data store for which the conditional expression is TRUE. +Although usually specified, the WHERE clause is optional. If the +WHERE clause is omitted, the query returns all values. The high-level +syntax for the WHERE clause is as follows:

    +
    +
    +
    +
    where_clause ::= WHERE conditional_expression
    +
    +
    +
    +

    The following topics are addressed here:

    +
    + +
    +

    39.6.5.1 Literals

    +
    +

    There are four kinds of literals: string, numeric, Boolean, and enum.

    +
    +
    +
      +
    • +

      String literals: A string literal is enclosed in single quotes:

      +
      +
      +
      'Duke'
      +
      +
      +
      +

      If a string literal contains a single quote, you indicate the quote by +using two single quotes:

      +
      +
      +
      +
      'Duke''s'
      +
      +
      +
      +

      Like a Java String, a string literal in the query language uses the +Unicode character encoding.

      +
      +
    • +
    • +

      Numeric literals: There are two types of numeric literals: exact and +approximate.

      +
      +
        +
      • +

        An exact numeric literal is a numeric value without a decimal point, +such as 65, –233, and +12. Using the Java integer syntax, exact numeric +literals support numbers in the range of a Java long.

        +
      • +
      • +

        An approximate numeric literal is a numeric value in scientific +notation, such as 57., –85.7, and +2.1. Using the syntax of the Java +floating-point literal, approximate numeric literals support numbers in +the range of a Java double.

        +
      • +
      +
      +
    • +
    • +

      Boolean literals: A Boolean literal is either TRUE or FALSE. These +keywords are not case-sensitive.

      +
    • +
    • +

      Enum literals: The Java Persistence query language supports the use of +enum literals using the Java enum literal syntax. The enum class name +must be specified as a fully qualified class name:

      +
      +
      +
      SELECT e
      +FROM Employee e
      +WHERE e.status = com.example.EmployeeStatus.FULL_TIME
      +
      +
      +
    • +
    +
    +
    +
    +

    39.6.5.2 Input Parameters

    +
    +

    An input parameter can be either a named parameter or a positional +parameter.

    +
    +
    +
      +
    • +

      A named input parameter is designated by a colon (:) followed by a +string; for example, :name.

      +
    • +
    • +

      A positional input parameter is designated by a question mark (?) +followed by an integer. For example, the first input parameter is ?1, +the second is ?2, and so forth.

      +
    • +
    +
    +
    +

    The following rules apply to input parameters.

    +
    +
    +
      +
    • +

      They can be used only in a WHERE or HAVING clause.

      +
    • +
    • +

      Positional parameters must be numbered, starting with the integer 1.

      +
    • +
    • +

      Named parameters and positional parameters may not be mixed in a +single query.

      +
    • +
    • +

      Named parameters are case-sensitive.

      +
    • +
    +
    +
    +
    +

    39.6.5.3 Conditional Expressions

    +
    +

    A WHERE clause consists of a conditional expression, which is +evaluated from left to right within a precedence level. You can change +the order of evaluation by using parentheses.

    +
    +
    +
    +

    39.6.5.4 Operators and Their Precedence

    +
    +

    Table 39-2 lists the query language operators in order of +decreasing precedence.

    +
    +
    +

    +
    +
    +

    Table 39-2 Query Language Order Precedence

    +
    + ++++ + + + + + + + + + + + + + + + + + + + + + + + + +
    TypePrecedence Order

    Navigation

    . (a period)

    Arithmetic

    +

    + – (unary)

    +
    +
    +

    * / (multiplication and division)

    +
    +
    +

    + – (addition and subtraction)

    +

    Comparison

    +

    =

    +
    +
    +

    >

    +
    +
    +

    >=

    +
    +
    +

    <

    +
    +
    +

    +
    +
    +

    <> (not equal)

    +
    +
    +

    [NOT] BETWEEN

    +
    +
    +

    [NOT] LIKE

    +
    +
    +

    [NOT] IN

    +
    +
    +

    IS [NOT] NULL

    +
    +
    +

    IS [NOT] EMPTY

    +
    +
    +

    [NOT] MEMBER OF

    +

    Logical

    +

    NOT

    +
    +
    +

    AND

    +
    +
    +

    OR

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +

    39.6.5.5 BETWEEN Expressions

    +
    +

    A BETWEEN expression determines whether an arithmetic expression falls +within a range of values.

    +
    +
    +

    These two expressions are equivalent:

    +
    +
    +
    +
    p.age BETWEEN 15 AND 19
    +p.age >= 15 AND p.age <= 19
    +
    +
    +
    +

    The following two expressions also are equivalent:

    +
    +
    +
    +
    p.age NOT BETWEEN 15 AND 19
    +p.age < 15 OR p.age > 19
    +
    +
    +
    +

    If an arithmetic expression has a NULL value, the value of the +BETWEEN expression is unknown.

    +
    +
    +
    +

    39.6.5.6 IN Expressions

    +
    +

    An IN expression determines whether a string belongs to a set of +string literals or whether a number belongs to a set of number values.

    +
    +
    +

    The path expression must have a string or numeric value. If the path +expression has a NULL value, the value of the IN expression is +unknown.

    +
    +
    +

    In the following example, the expression is TRUE if the country is +UK , but FALSE if the country is Peru:

    +
    +
    +
    +
    o.country IN ('UK', 'US', 'France')
    +
    +
    +
    +

    You may also use input parameters:

    +
    +
    +
    +
    o.country IN ('UK', 'US', 'France', :country)
    +
    +
    +
    +
    +

    39.6.5.7 LIKE Expressions

    +
    +

    A LIKE expression determines whether a wildcard pattern matches a +string.

    +
    +
    +

    The path expression must have a string or numeric value. If this value +is NULL, the value of the LIKE expression is unknown. The pattern +value is a string literal that can contain wildcard characters. The +underscore (_) wildcard character represents any single character. The +percent (%) wildcard character represents zero or more characters. The +ESCAPE clause specifies an escape character for the wildcard +characters in the pattern value. Table 39-3 shows some +sample LIKE expressions.

    +
    +
    +

    +
    +
    +

    Table 39-3 LIKE Expression Examples

    +
    + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ExpressionTRUEFALSE

    address.phone LIKE '12%3'

    +

    '123'

    +
    +
    +

    '12993'

    +

    '1234'

    asentence.word LIKE 'l_se'

    'lose'

    'loose'

    aword.underscored LIKE '\_%' ESCAPE '\'

    '_foo'

    'bar'

    address.phone NOT LIKE '12%3'

    '1234'

    +

    '123'

    +
    +
    +

    '12993'

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +

    39.6.5.8 NULL Comparison Expressions

    +
    +

    A NULL comparison expression tests whether a single-valued path +expression or an input parameter has a NULL value. Usually, the NULL +comparison expression is used to test whether a single-valued +relationship has been set:

    +
    +
    +
    +
    SELECT t
    +FROM Team t
    +WHERE t.league IS NULL
    +
    +
    +
    +

    This query selects all teams where the league relationship is not set. +Note that the following query is not equivalent:

    +
    +
    +
    +
    SELECT t
    +FROM Team t
    +WHERE t.league = NULL
    +
    +
    +
    +

    The comparison with NULL using the equals operator (=) always +returns an unknown value, even if the relationship is not set. The +second query will always return an empty result.

    +
    +
    +
    +

    39.6.5.9 Empty Collection Comparison Expressions

    +
    +

    The IS [NOT] EMPTY comparison expression tests whether a +collection-valued path expression has no elements. In other words, it +tests whether a collection-valued relationship has been set.

    +
    +
    +

    If the collection-valued path expression is NULL, the empty collection +comparison expression has a NULL value.

    +
    +
    +

    Here is an example that finds all orders that do not have any line +items:

    +
    +
    +
    +
    SELECT o
    +FROM CustomerOrder o
    +WHERE o.lineItems IS EMPTY
    +
    +
    +
    +
    +

    39.6.5.10 Collection Member Expressions

    +
    +

    The [NOT] MEMBER [OF] collection member expression determines +whether a value is a member of a collection. The value and the +collection members must have the same type.

    +
    +
    +

    If either the collection-valued or single-valued path expression is +unknown, the collection member expression is unknown. If the +collection-valued path expression designates an empty collection, the +collection member expression is FALSE.

    +
    +
    +

    The OF keyword is optional.

    +
    +
    +

    The following example tests whether a line item is part of an order:

    +
    +
    +
    +
    SELECT o
    +FROM CustomerOrder o
    +WHERE :lineItem MEMBER OF o.lineItems
    +
    +
    +
    +
    +

    39.6.5.11 Subqueries

    +
    +

    Subqueries may be used in the WHERE or HAVING clause of a query. +Subqueries must be surrounded by parentheses.

    +
    +
    +

    The following example finds all customers who have placed more than ten +orders:

    +
    +
    +
    +
    SELECT c
    +FROM Customer c
    +WHERE (SELECT COUNT(o) FROM c.orders o)> 10
    +
    +
    +
    +

    Subqueries may contain EXISTS, ALL, and ANY expressions.

    +
    +
    +
      +
    • +

      EXISTS expressions: The [NOT] EXISTS expression is used with a +subquery and is true only if the result of the subquery consists of one +or more values; otherwise, it is false.

      +
      +

      The following example finds all employees whose spouses are also +employees:

      +
      +
      +
      +
      SELECT DISTINCT emp
      +FROM Employee emp
      +WHERE EXISTS (
      +    SELECT spouseEmp
      +    FROM Employee spouseEmp
      +    WHERE spouseEmp = emp.spouse)
      +
      +
      +
    • +
    • +

      ALL and ANY expressions: The ALL expression is used with a subquery +and is true if all the values returned by the subquery are true or if +the subquery is empty.

      +
      +

      The ANY expression is used with a subquery and is true if some of the +values returned by the subquery are true. An ANY expression is false +if the subquery result is empty or if all the values returned are false. +The SOME keyword is synonymous with ANY.

      +
      +
      +

      The ALL and ANY expressions are used with the =, <, <=, >, +>=, and <> comparison operators.

      +
      +
      +

      The following example finds all employees whose salaries are higher than +the salaries of the managers in the employee’s department:

      +
      +
      +
      +
      SELECT emp
      +FROM Employee emp
      +WHERE emp.salary > ALL (
      +    SELECT m.salary
      +    FROM Manager m
      +    WHERE m.department = emp.department)
      +
      +
      +
    • +
    +
    +
    +
    +

    39.6.5.12 Functional Expressions

    +
    +

    The query language includes several string, arithmetic, and date/time +functions that may be used in the SELECT, WHERE, or HAVING clause +of a query. The functions are listed in Table 39-4, +Table 39-5, and Table 39-6.

    +
    +
    +

    In Table 39-4, the start and length arguments are of +type int and designate positions in the String argument. The first +position in a string is designated by 1.

    +
    +
    +

    +
    +
    +

    Table 39-4 String Expressions

    +
    + ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Function SyntaxReturn Type

    CONCAT(String, String)

    String

    LENGTH(String)

    int

    LOCATE(String, String [, start])

    int

    SUBSTRING(String, start, length)

    String

    `TRIM([[LEADING

    TRAILING

    BOTH] char) FROM] (String)`

    String

    LOWER(String)

    String

    UPPER(String)

    String

    +
    +
    +
    +
    +
    +
    +
    +

    The CONCAT function concatenates two strings into one string.

    +
    +
    +

    The LENGTH function returns the length of a string in characters as an +integer.

    +
    +
    +

    The LOCATE function returns the position of a given string within a +string. This function returns the first position at which the string was +found as an integer. The first argument is the string to be located. The +second argument is the string to be searched. The optional third +argument is an integer that represents the starting string position. By +default, LOCATE starts at the beginning of the string. The starting +position of a string is 1. If the string cannot be located, LOCATE +returns 0.

    +
    +
    +

    The SUBSTRING function returns a string that is a substring of the +first argument based on the starting position and length.

    +
    +
    +

    The TRIM function trims the specified character from the beginning +and/or end of a string. If no character is specified, TRIM removes +spaces or blanks from the string. If the optional LEADING +specification is used, TRIM removes only the leading characters from +the string. If the optional TRAILING specification is used, TRIM +removes only the trailing characters from the string. The default is +BOTH, which removes the leading and trailing characters from the +string.

    +
    +
    +

    The LOWER and UPPER functions convert a string to lowercase or +uppercase, respectively.

    +
    +
    +

    In Table 39-5, the number argument can be an int, a +float, or a double.

    +
    +
    +

    +
    +
    +

    Table 39-5 Arithmetic Expressions

    +
    + ++++ + + + + + + + + + + + + + + + + + + + + + + + + +
    Function SyntaxReturn Type

    ABS(number)

    int, float, or double

    MOD(int, int)

    int

    SQRT(double)

    double

    SIZE(Collection)

    int

    +
    +
    +
    +
    +
    +
    +
    +

    The ABS function takes a numeric expression and returns a number of +the same type as the argument.

    +
    +
    +

    The MOD function returns the remainder of the first argument divided +by the second.

    +
    +
    +

    The SQRT function returns the square root of a number.

    +
    +
    +

    The SIZE function returns an integer of the number of elements in the +given collection.

    +
    +
    +

    In Table 39-6, the date/time functions return the date, +time, or timestamp on the database server.

    +
    +
    +

    +
    +
    +

    Table 39-6 Date/Time Expressions

    +
    + ++++ + + + + + + + + + + + + + + + + + + + + +
    Function SyntaxReturn Type

    CURRENT_DATE

    java.sql.Date

    CURRENT_TIME

    java.sql.Time

    CURRENT_TIMESTAMP

    java.sql.Timestamp

    +
    +
    +
    +
    +
    +
    +
    +
    +

    39.6.5.13 Case Expressions

    +
    +

    Case expressions change based on a condition, similar to the case +keyword of the Java programming language. The CASE keyword indicates +the start of a case expression, and the expression is terminated by the +END keyword. The WHEN and THEN keywords define individual +conditions, and the ELSE keyword defines the default condition should +none of the other conditions be satisfied.

    +
    +
    +

    The following query selects the name of a person and a conditional +string, depending on the subtype of the Person entity. If the subtype +is Student, the string kid is returned. If the subtype is Guardian +or Staff, the string adult is returned. If the entity is some other +subtype of Person, the string unknown is returned:

    +
    +
    +
    +
    SELECT p.name
    +CASE TYPE(p)
    +    WHEN Student THEN 'kid'
    +    WHEN Guardian THEN 'adult'
    +    WHEN Staff THEN 'adult'
    +    ELSE 'unknown'
    +END
    +FROM Person p
    +
    +
    +
    +

    The following query sets a discount for various types of customers. +Gold-level customers get a 20% discount, silver-level customers get a +15% discount, bronze-level customers get a 10% discount, and everyone +else gets a 5% discount:

    +
    +
    +
    +
    UPDATE Customer c
    +SET c.discount =
    +    CASE c.level
    +        WHEN 'Gold' THEN 20
    +        WHEN 'SILVER' THEN 15
    +        WHEN 'Bronze' THEN 10
    +        ELSE 5
    +    END
    +
    +
    +
    +
    +

    39.6.5.14 NULL Values

    +
    +

    If the target of a reference is not in the persistent store, the target +is NULL. For conditional expressions containing NULL, the query +language uses the semantics defined by SQL92. Briefly, these semantics +are as follows.

    +
    +
    +
      +
    • +

      If a comparison or arithmetic operation has an unknown value, it +yields a NULL value.

      +
    • +
    • +

      Two NULL values are not equal. Comparing two NULL values yields an +unknown value.

      +
    • +
    • +

      The IS NULL test converts a NULL persistent field or a +single-valued relationship field to TRUE. The IS NOT NULL test +converts them to FALSE.

      +
    • +
    • +

      Boolean operators and conditional tests use the three-valued logic +defined by Table 39-7 and Table 39-8. (In +these tables, T stands for TRUE, F for FALSE, and U for unknown.)

      +
    • +
    +
    +
    +

    +
    +
    +

    Table 39-7 AND Operator Logic

    +
    + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ANDTFU

    T

    T

    F

    U

    F

    F

    F

    F

    U

    U

    F

    U

    +
    +
    +
    +
    +
    +
    +
    +

    +
    +
    +

    Table 39-8 OR Operator Logic

    +
    + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ORTFU

    T

    T

    T

    T

    F

    T

    F

    U

    U

    T

    U

    U

    +
    +
    +
    +
    +
    +
    +
    +
    +

    39.6.5.15 Equality Semantics

    +
    +

    In the query language, only values of the same type can be compared. +However, this rule has one exception: Exact and approximate numeric +values can be compared. In such a comparison, the required type +conversion adheres to the rules of Java numeric promotion.

    +
    +
    +

    The query language treats compared values as if they were Java types and +not as if they represented types in the underlying data store. For +example, a persistent field that could be either an integer or a NULL +must be designated as an Integer object and not as an int primitive. +This designation is required because a Java object can be NULL, but a +primitive cannot.

    +
    +
    +

    Two strings are equal only if they contain the same sequence of +characters. Trailing blanks are significant; for example, the strings +'abc' and 'abc ' are not equal.

    +
    +
    +

    Two entities of the same abstract schema type are equal only if their +primary keys have the same value. Table 39-9 shows the +operator logic of a negation, and Table 39-10 shows the +truth values of conditional tests.

    +
    +
    +

    +
    +
    +

    Table 39-9 NOT Operator Logic

    +
    + ++++ + + + + + + + + + + + + + + + + + + + + +
    NOT ValueValue

    T

    F

    F

    T

    U

    U

    +
    +
    +
    +
    +
    +
    +
    +

    +
    +
    +

    Table 39-10 Conditional Test

    +
    + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Conditional TestTFU

    Expression IS TRUE

    T

    F

    F

    Expression IS FALSE

    F

    T

    F

    Expression is unknown

    F

    F

    T

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +

    39.6.6 SELECT Clause

    +
    +

    The SELECT clause defines the types of the objects or values returned +by the query.

    +
    +
    +

    The following topics are addressed here:

    +
    + +
    +

    39.6.6.1 Return Types

    +
    +

    The return type of the SELECT clause is defined by the result types of +the select expressions contained within it. If multiple expressions are +used, the result of the query is an Object[], and the elements in the +array correspond to the order of the expressions in the SELECT clause +and in type to the result types of each expression.

    +
    +
    +

    A SELECT clause cannot specify a collection-valued expression. For +example, the SELECT clause p.teams is invalid because teams is a +collection. However, the clause in the following query is valid because +t is a single element of the teams collection:

    +
    +
    +
    +
    SELECT t
    +FROM Player p, IN (p.teams) t
    +
    +
    +
    +

    The following query is an example of a query with multiple expressions +in the SELECT clause:

    +
    +
    +
    +
    SELECT c.name, c.country.name
    +FROM customer c
    +WHERE c.lastname = 'Coss' AND c.firstname = 'Roxane'
    +
    +
    +
    +

    This query returns a list of Object[] elements; the first array +element is a string denoting the customer name, and the second array +element is a string denoting the name of the customer’s country.

    +
    +
    +

    The result of a query may be the result of an aggregate function, listed +in Table 39-11.

    +
    +
    +

    +
    +
    +

    Table 39-11 Aggregate Functions in Select Statements

    +
    + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameReturn TypeDescription

    AVG

    Double

    Returns the mean average of the fields

    COUNT

    Long

    Returns the total number of results

    MAX

    The type of the field

    Returns the highest value in the result +set

    MIN

    The type of the field

    Returns the lowest value in the result +set

    SUM

    +

    Long (for integral fields)

    +
    +
    +

    Double (for floating-point fields)

    +
    +
    +

    BigInteger (for BigInteger fields)

    +
    +
    +

    BigDecimal (for BigDecimal fields)

    +

    Returns the sum of all the values in the result set

    +
    +
    +
    +
    +
    +
    +
    +

    For select method queries with an aggregate function (AVG, COUNT, +MAX, MIN, or SUM) in the SELECT clause, the following rules +apply.

    +
    +
    +
      +
    • +

      The AVG, MAX, MIN, and SUM functions return null if there +are no values to which the function can be applied.

      +
    • +
    • +

      The COUNT function returns 0 if there are no values to which the +function can be applied.

      +
    • +
    +
    +
    +

    The following example returns the average order quantity:

    +
    +
    +
    +
    SELECT AVG(o.quantity)
    +FROM CustomerOrder o
    +
    +
    +
    +

    The following example returns the total cost of the items ordered by +Roxane Coss:

    +
    +
    +
    +
    SELECT SUM(l.price)
    +FROM CustomerOrder o JOIN o.lineItems l JOIN o.customer c
    +WHERE c.lastname = 'Coss' AND c.firstname = 'Roxane'
    +
    +
    +
    +

    The following example returns the total number of orders:

    +
    +
    +
    +
    SELECT COUNT(o)
    +FROM CustomerOrder o
    +
    +
    +
    +

    The following example returns the total number of items that have prices +in Hal Incandenza’s order:

    +
    +
    +
    +
    SELECT COUNT(l.price)
    +FROM CustomerOrder o JOIN o.lineItems l JOIN o.customer c
    +WHERE c.lastname = 'Incandenza' AND c.firstname = 'Hal'
    +
    +
    +
    +
    +

    39.6.6.2 The DISTINCT Keyword

    +
    +

    The DISTINCT keyword eliminates duplicate return values. If a query +returns a java.util.Collection, which allows duplicates, you must +specify the DISTINCT keyword to eliminate duplicates.

    +
    +
    +
    +

    39.6.6.3 Constructor Expressions

    +
    +

    Constructor expressions allow you to return Java instances that store a +query result element instead of an Object[].

    +
    +
    +

    The following query creates a CustomerDetail instance per Customer +matching the WHERE clause. A CustomerDetail stores the customer name +and customer’s country name. So the query returns a List of +CustomerDetail instances:

    +
    +
    +
    +
    SELECT NEW com.example.CustomerDetail(c.name, c.country.name)
    +FROM customer c
    +WHERE c.lastname = 'Coss' AND c.firstname = 'Roxane'
    +
    +
    +
    +
    +
    +

    39.6.7 ORDER BY Clause

    +
    +

    As its name suggests, the ORDER BY clause orders the values or objects +returned by the query.

    +
    +
    +

    If the ORDER BY clause contains multiple elements, the left-to-right +sequence of the elements determines the high-to-low precedence.

    +
    +
    +

    The ASC keyword specifies ascending order, the default, and the DESC +keyword indicates descending order.

    +
    +
    +

    When using the ORDER BY clause, the SELECT clause must return an +orderable set of objects or values. You cannot order the values or +objects for values or objects not returned by the SELECT clause. For +example, the following query is valid because the ORDER BY clause uses +the objects returned by the SELECT clause:

    +
    +
    +
    +
    SELECT o
    +FROM Customer c JOIN c.orders o JOIN c.address a
    +WHERE a.state = 'CA'
    +ORDER BY o.quantity, o.totalcost
    +
    +
    +
    +

    The following example is not valid, because the ORDER BY clause uses a +value not returned by the SELECT clause:

    +
    +
    +
    +
    SELECT p.product_name
    +FROM CustomerOrder o, IN(o.lineItems) l JOIN o.customer c
    +WHERE c.lastname = 'Faehmel' AND c.firstname = 'Robert'
    +ORDER BY o.quantity
    +
    +
    +
    +
    +

    39.6.8 GROUP BY and HAVING Clauses

    +
    +

    The GROUP BY clause allows you to group values according to a set of +properties.

    +
    +
    +

    The following query groups the customers by their country and returns +the number of customers per country:

    +
    +
    +
    +
    SELECT c.country, COUNT(c)
    +FROM Customer c GROUP BY c.country
    +
    +
    +
    +

    The HAVING clause is used with the GROUP BY clause to further +restrict the returned result of a query.

    +
    +
    +

    The following query groups orders by the status of their customer and +returns the customer status plus the average totalPrice for all orders +where the corresponding customers have the same status. In addition, it +considers only customers with status 1, 2, or 3, so orders of +other customers are not taken into account:

    +
    +
    +
    +
    SELECT c.status, AVG(o.totalPrice)
    +FROM CustomerOrder o JOIN o.customer c
    +GROUP BY c.status HAVING c.status IN (1, 2, 3)
    +
    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    +
    + + + \ No newline at end of file diff --git a/persistence-string-queries.html b/persistence-string-queries.html new file mode 100644 index 0000000..2c88bc8 --- /dev/null +++ b/persistence-string-queries.html @@ -0,0 +1,106 @@ + + + + + + Creating and Using String-Based Criteria Queries + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    41 Creating and Using String-Based Criteria Queries

    +
    +
    +

    This chapter describes how to create weakly typed string-based Criteria +API queries.

    +
    +
    +

    The following topics are addressed here:

    +
    + +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    + + + \ No newline at end of file diff --git a/persistence-string-queries001.html b/persistence-string-queries001.html new file mode 100644 index 0000000..7f0cbc6 --- /dev/null +++ b/persistence-string-queries001.html @@ -0,0 +1,112 @@ + + + + + + Overview of String-Based Criteria API Queries + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    41.1 Overview of String-Based Criteria API Queries

    +
    +
    +

    String-based Criteria API queries ("string-based queries") are Java +programming language queries that use strings rather than strongly typed +metamodel objects to specify entity attributes when traversing a data +hierarchy. String-based queries are constructed similarly to metamodel +queries, can be static or dynamic, and can express the same kind of +queries and operations as strongly typed metamodel queries.

    +
    +
    +

    Strongly typed metamodel queries are the preferred method of +constructing Criteria API queries.

    +
    +
    +

    The main advantage of string-based queries over metamodel queries is the +ability to construct Criteria queries at development time without the +need to generate static metamodel classes or otherwise access +dynamically generated metamodel classes.

    +
    +
    +

    The main disadvantage to string-based queries is their lack of type +safety; this problem may lead to runtime errors due to type mismatches +that would be caught at development time if you used strongly typed +metamodel queries.

    +
    +
    +

    For information on constructing criteria queries, see +Chapter 40, "Using the Criteria API +to Create Queries".

    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    + + + \ No newline at end of file diff --git a/persistence-string-queries002.html b/persistence-string-queries002.html new file mode 100644 index 0000000..d1b01cc --- /dev/null +++ b/persistence-string-queries002.html @@ -0,0 +1,172 @@ + + + + + + Creating String-Based Queries + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    41.2 Creating String-Based Queries

    +
    +
    +

    To create a string-based query, specify the attribute names of entity +classes directly as strings, instead of specifying the attributes of the +metamodel class. For example, this query finds all Pet entities where +the value of the name attribute is Fido:

    +
    +
    +
    +
    CriteriaQuery<Pet> cq = cb.createQuery(Pet.class);
    +Root<Pet> pet = cq.from(Pet.class);
    +cq.where(cb.equal(pet.get("name"), "Fido"));
    +
    +
    +
    +

    The name of the attribute is specified as a string. This query is the +equivalent of the following metamodel query:

    +
    +
    +
    +
    CriteriaQuery<Pet> cq = cb.createQuery(Pet.class);
    +Metamodel m = em.getMetamodel();
    +EntityType<Pet> Pet_ = m.entity(Pet.class);
    +Root<Pet> pet = cq.from(Pet.class);
    +cq.where(cb.equal(pet.get(Pet_.name), "Fido"));
    +
    +
    +
    +
    +
    +
    +
    +
    + +++ + + + + + +
    +

    Note:

    +
    +
    +

    Type mismatch errors in string-based queries will not appear until the +code is executed at runtime, unlike in the above metamodel query, where +type mismatches will be caught at compile time.

    +
    +
    +
    +
    +
    +
    +
    +
    +

    Joins are specified in the same way:

    +
    +
    +
    +
    CriteriaQuery<Pet> cq = cb.createQuery(Pet.class);
    +Root<Pet> pet = cq.from(Pet.class);
    +Join<Owner, Address> address = pet.join("owners").join("addresses");
    +
    +
    +
    +

    All the conditional expressions, method expressions, path navigation +methods, and result restriction methods used in metamodel queries can +also be used in string-based queries. In each case, the attributes are +specified using strings. For example, here is a string-based query that +uses the in expression:

    +
    +
    +
    +
    CriteriaQuery<Pet> cq = cb.createQuery(Pet.class);
    +Root<Pet> pet = cq.from(Pet.class);
    +cq.where(pet.get("color").in("brown", "black"));
    +
    +
    +
    +

    Here is a string-based query that orders the results in descending order +by date:

    +
    +
    +
    +
    CriteriaQuery<Pet> cq = cb.createQuery(Pet.class);
    +Root<Pet> pet = cq.from(Pet.class);
    +cq.select(pet);
    +cq.orderBy(cb.desc(pet.get("birthday")));
    +
    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    + + + \ No newline at end of file diff --git a/persistence-string-queries003.html b/persistence-string-queries003.html new file mode 100644 index 0000000..06eda77 --- /dev/null +++ b/persistence-string-queries003.html @@ -0,0 +1,99 @@ + + + + + + Executing String-Based Queries + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    41.3 Executing String-Based Queries

    +
    +
    +

    String-based queries are executed similarly to strongly typed Criteria +queries. First create a javax.persistence.TypedQuery object by passing +the criteria query object to the EntityManager.createQuery method, +then call either getSingleResult or getResultList on the query +object to execute the query:

    +
    +
    +
    +
    CriteriaQuery<Pet> cq = cb.createQuery(Pet.class);
    +Root<Pet> pet = cq.from(Pet.class);
    +cq.where(cb.equal(pet.get("name"), "Fido"));
    +TypedQuery<Pet> q = em.createQuery(cq);
    +List<Pet> results = q.getResultList();
    +
    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    + + + \ No newline at end of file diff --git a/preface.html b/preface.html index 4dc64b4..079bd52 100644 --- a/preface.html +++ b/preface.html @@ -5,35 +5,48 @@ Preface - + - - - - + + + +
    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 7 Java Platform, Enterprise Edition
    -E39031-02
    - + +
    +
    +
    +++++ + - - - -
     Go To Table Of Contents
    -Contents
    -

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    -
    - +
    +
    +++++ + - - - + + + +
    Previous
    -Previous
     
    Next
    -Next
     

    Previous
    +Previous
     

    Next
    +Next

     

    + +

    Preface

    @@ -47,7 +60,7 @@

    Preface

    open-community platform for building and deploying next-generation applications and services. GlassFish Server Open Source Edition, developed by the GlassFish project open-source community at -https://glassfish.java.net/, is the first compatible implementation of +https://glassfish.java.net/, is the first compatible implementation of the Java EE 7 platform specification. This lightweight, flexible, and open-source application server enables organizations not only to leverage the new capabilities introduced within the Java EE 7 @@ -94,7 +107,7 @@

    Documentation Accessibility

    For information about Oracle’s commitment to accessibility, visit the Oracle Accessibility Program website at -http://www.oracle.com/pls/topic/lookup?ctx=acc&id=docacc.

    +http://www.oracle.com/pls/topic/lookup?ctx=acc&id=docacc.

    Access to Oracle Support

    @@ -102,8 +115,8 @@

    Documentation Accessibility

    Oracle customers that have purchased support have access to electronic support through My Oracle Support. For information, visit -http://www.oracle.com/pls/topic/lookup?ctx=acc&id=info or visit -http://www.oracle.com/pls/topic/lookup?ctx=acc&id=trs if you are +http://www.oracle.com/pls/topic/lookup?ctx=acc&id=info or visit +http://www.oracle.com/pls/topic/lookup?ctx=acc&id=trs if you are hearing impaired.

    @@ -113,7 +126,7 @@

    Before You Read This Book

    Before proceeding with this tutorial, you should have a good knowledge of the Java programming language. A good way to get to that point is to work through the Java Tutorials -(http://docs.oracle.com/javase/tutorial/index.html).

    +(http://docs.oracle.com/javase/tutorial/index.html).

    @@ -121,34 +134,34 @@

    The GlassFish Server documentation set describes deployment planning and system installation. To obtain documentation for GlassFish Server Open -Source Edition, go to https://glassfish.java.net/docs/.

    +Source Edition, go to https://glassfish.java.net/docs/.

    The Java EE 7 API specification can be viewed at -http://docs.oracle.com/javaee/7/api/ and is also provided in the Java +http://docs.oracle.com/javaee/7/api/ and is also provided in the Java EE 7 SDK.

    Additionally, the Java EE Specifications at -http://www.oracle.com/technetwork/java/javaee/tech/index.html might be +http://www.oracle.com/technetwork/java/javaee/tech/index.html might be useful.

    For information about creating enterprise applications in the NetBeans Integrated Development Environment (IDE), see -https://netbeans.org/kb/.

    +https://netbeans.org/kb/.

    For information about the Java DB database for use with GlassFish Server, see -http://www.oracle.com/technetwork/java/javadb/overview/index.html.

    +http://www.oracle.com/technetwork/java/javadb/overview/index.html.

    The GlassFish Samples project is a collection of sample applications that demonstrate a broad range of Java EE technologies. The GlassFish Samples are bundled with the Java EE Software Development Kit (SDK) and are also available from the GlassFish Samples project page at -https://glassfish-samples.java.net/.

    +https://glassfish-samples.java.net/.

    @@ -159,9 +172,9 @@

    Conventions

    ---+++ @@ -213,6 +226,11 @@

    Conventions

    +
    +
    +
    +
    +
    +

    Default Paths and File Names

    @@ -220,11 +238,11 @@

    Default Paths and File Names

    The following table describes the default paths and file names that are used in this book.

    - +
    ---+++ @@ -285,41 +303,37 @@

    Default Paths and File Names

    -
    - ---- - - - + + + + + + +
    - ---- - - - - -
     Previous
    -Previous
     
    Next
    -Next
    -
    Oracle Logo
    -Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

    -
    - +
    +
    +
    +
    +
    +
    +
    +
    ++++++++ + - - - -
     Go To Table Of Contents
    -Contents
    -

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    -

    diff --git a/resource-creation.html b/resource-creation.html new file mode 100644 index 0000000..b8c0204 --- /dev/null +++ b/resource-creation.html @@ -0,0 +1,110 @@ + + + + + + Resource Creation + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    3 Resource Creation

    +
    +
    +

    A resource is a program object that provides connections to such systems +as database servers and messaging systems. Java EE components can access +a wide variety of resources, including databases, mail sessions, Java +Message Service objects, and URLs. The Java EE 7 platform provides +mechanisms that allow you to access all these resources in a similar +manner. This chapter examines several types of resources and explains +how to create them.

    +
    +
    +

    The following topics are addressed here:

    +
    + +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    + + + \ No newline at end of file diff --git a/resource-creation001.html b/resource-creation001.html new file mode 100644 index 0000000..b7676fd --- /dev/null +++ b/resource-creation001.html @@ -0,0 +1,122 @@ + + + + + + Resources and JNDI Naming + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    3.1 Resources and JNDI Naming

    +
    +
    +

    In a distributed application, components need to access other components +and resources, such as databases. For example, a servlet might invoke +remote methods on an enterprise bean that retrieves information from a +database. In the Java EE platform, the Java Naming and Directory +Interface (JNDI) naming service enables components to locate other +components and resources.

    +
    +
    +

    A resource is a program object that provides connections to systems, +such as database servers and messaging systems. (A Java Database +Connectivity resource is sometimes referred to as a data source.) Each +resource object is identified by a unique, people-friendly name, called +the JNDI name. For example, the JNDI name of the preconfigured JDBC +resource for the Java DB database that is shipped with GlassFish Server +is java:comp/DefaultDataSource.

    +
    +
    +

    An administrator creates resources in a JNDI namespace. In GlassFish +Server, you can use either the Administration Console or the asadmin +command to create resources. Applications then use annotations to inject +the resources. If an application uses resource injection, GlassFish +Server invokes the JNDI API, and the application is not required to do +so. However, it is also possible for an application to locate resources +by making direct calls to the JNDI API.

    +
    +
    +

    A resource object and its JNDI name are bound together by the naming and +directory service. To create a new resource, a new name/object binding +is entered into the JNDI namespace. You inject resources by using the +@Resource annotation in an application.

    +
    +
    +

    You can use a deployment descriptor to override the resource mapping +that you specify in an annotation. Using a deployment descriptor allows +you to change an application by repackaging it rather than by both +recompiling the source files and repackaging. However, for most +applications a deployment descriptor is not necessary.

    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    + + + \ No newline at end of file diff --git a/resource-creation002.html b/resource-creation002.html new file mode 100644 index 0000000..e0142ea --- /dev/null +++ b/resource-creation002.html @@ -0,0 +1,148 @@ + + + + + + DataSource Objects and Connection Pools + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    3.2 DataSource Objects and Connection Pools

    +
    +
    +

    To store, organize, and retrieve data, most applications use a +relational database. Java EE 7 components may access relational +databases through the JDBC API. For information on this API, see +http://docs.oracle.com/javase/7/docs/technotes/guides/jdbc/.

    +
    +
    +

    In the JDBC API, databases are accessed by using DataSource objects. A +DataSource has a set of properties that identify and describe the +real-world data source that it represents. These properties include such +information as the location of the database server, the name of the +database, the network protocol to use to communicate with the server, +and so on. In GlassFish Server, a data source is called a JDBC resource.

    +
    +
    +

    Applications access a data source by using a connection, and a +DataSource object can be thought of as a factory for connections to +the particular data source that the DataSource instance represents. In +a basic DataSource implementation, a call to the getConnection +method returns a connection object that is a physical connection to the +data source.

    +
    +
    +

    A DataSource object may be registered with a JNDI naming service. If +so, an application can use the JNDI API to access that DataSource +object, which can then be used to connect to the data source it +represents.

    +
    +
    +

    DataSource objects that implement connection pooling also produce a +connection to the particular data source that the DataSource class +represents. The connection object that the getConnection method +returns is a handle to a PooledConnection object rather than a +physical connection. An application uses the connection object in the +same way that it uses a connection. Connection pooling has no effect on +application code except that a pooled connection, like all connections, +should always be explicitly closed. When an application closes a +connection that is pooled, the connection is returned to a pool of +reusable connections. The next time getConnection is called, a handle +to one of these pooled connections will be returned if one is available. +Because connection pooling avoids creating a new physical connection +every time one is requested, applications can run significantly faster.

    +
    +
    +

    A JDBC connection pool is a group of reusable connections for a +particular database. Because creating each new physical connection is +time consuming, the server maintains a pool of available connections to +increase performance. When it requests a connection, an application +obtains one from the pool. When an application closes a connection, the +connection is returned to the pool.

    +
    +
    +

    Applications that use the Persistence API specify the DataSource +object they are using in the jta-data-source element of the +persistence.xml file:

    +
    +
    +
    +
    <jta-data-source>jdbc/MyOrderDB</jta-data-source>
    +
    +
    +
    +

    This is typically the only reference to a JDBC object for a persistence +unit. The application code does not refer to any JDBC objects.

    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    + + + \ No newline at end of file diff --git a/resource-creation003.html b/resource-creation003.html new file mode 100644 index 0000000..dad83ed --- /dev/null +++ b/resource-creation003.html @@ -0,0 +1,110 @@ + + + + + + Creating Resources Administratively + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    3.3 Creating Resources Administratively

    +
    +
    +

    Before you deploy or run many applications, you may need to create +resources for them. An application can include a +glassfish-resources.xml file that can be used to define resources for +that application and others. You can then use the asadmin command, +specifying as the argument a file named glassfish-resources.xml, to +create the resources administratively, as shown.

    +
    +
    +
    +
    asadmin add-resources glassfish-resources.xml
    +
    +
    +
    +

    The glassfish-resources.xml file can be created in any project using +NetBeans IDE or by hand. Some of the JMS examples use this approach to +resource creation. A file for creating the resources needed for the JMS +simple producer example can be found in the +jms/simple/producer/src/main/setup directory.

    +
    +
    +

    You could also use the asadmin create-jms-resource command to create +the resources for this example. When you are done using the resources, +you would use the asadmin list-jms-resources command to display their +names, and the asadmin delete-jms-resource command to remove them, +regardless of the way you created the resources.

    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    + + + \ No newline at end of file diff --git a/resources.html b/resources.html new file mode 100644 index 0000000..d611080 --- /dev/null +++ b/resources.html @@ -0,0 +1,111 @@ + + + + + + Resource Adapters and Contracts + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    52 Resource Adapters and Contracts

    +
    +
    +

    This chapter examines resource adapters and explains how communications +between Java EE servers and EIS systems are mediated by them.

    +
    +
    +

    The following topics are addressed here:

    +
    + +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    + + + \ No newline at end of file diff --git a/resources001.html b/resources001.html new file mode 100644 index 0000000..480aad2 --- /dev/null +++ b/resources001.html @@ -0,0 +1,279 @@ + + + + + + What Is a Resource Adapter? + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    52.1 What Is a Resource Adapter?

    +
    +
    +

    A resource adapter is a Java EE component that implements the Java EE +Connector Architecture for a specific EIS. Examples of EISs include +enterprise resource planning, mainframe transaction processing, and +database systems. In a Java EE server, the Java Message Server and +JavaMail also act as EISs that you access using resource adapters. As +illustrated in Figure 52-1, the resource adapter +facilitates communication between a Java EE application and an EIS.

    +
    +
    +

    Figure 52-1 Resource Adapters

    +
    + +
    +

    Stored in a Resource Adapter Archive (RAR) file, a resource adapter can +be deployed on any Java EE server, much like a Java EE application. A +RAR file may be contained in an Enterprise Archive (EAR) file, or it may +exist as a separate file.

    +
    +
    +

    A resource adapter is analogous to a JDBC driver. Both provide a +standard API through which an application can access a resource that is +outside the Java EE server. For a resource adapter, the target system is +an EIS; for a JDBC driver, it is a DBMS. Resource adapters and JDBC +drivers are rarely created by application developers. In most cases, +both types of software are built by vendors that sell tools, servers, or +integration software.

    +
    +
    +

    The resource adapter mediates communication between the Java EE server +and the EIS by means of contracts. The application contract defines the +API through which a Java EE component, such as an enterprise bean, +accesses the EIS. This API is the only view that the component has of +the EIS. The system contracts link the resource adapter to important +services that are managed by the Java EE server. The resource adapter +itself and its system contracts are transparent to the Java EE +component.

    +
    +
    +

    52.1.1 Management Contracts

    +
    +

    The Java EE Connector Architecture defines system contracts that enable +resource adapter lifecycle and thread management.

    +
    +
    +

    52.1.1.1 Lifecycle Management

    +
    +

    The Connector Architecture specifies a lifecycle management contract +that allows an application server to manage the lifecycle of a resource +adapter. This contract provides a mechanism for the application server +to bootstrap a resource adapter instance during the deployment or +application server startup. This contract also provides a means for the +application server to notify the resource adapter instance when it is +undeployed or when an orderly shutdown of the application server takes +place.

    +
    +
    +
    +

    52.1.1.2 Work Management Contract

    +
    +

    The Connector Architecture work management contract ensures that +resource adapters use threads in the proper, recommended manner. This +contract also enables an application server to manage threads for +resource adapters.

    +
    +
    +

    Resource adapters that improperly use threads can jeopardize the entire +application server environment. For example, a resource adapter might +create too many threads or might not properly release threads it has +created. Poor thread handling inhibits application server shutdown and +impacts the application server’s performance because creating and +destroying threads are expensive operations.

    +
    +
    +

    The work management contract establishes a means for the application +server to pool and reuse threads, similar to pooling and reusing +connections. By adhering to this contract, the resource adapter does not +have to manage threads itself. Instead, the resource adapter has the +application server create and provide needed threads. When it is +finished with a given thread, the resource adapter returns the thread to +the application server. The application server manages the thread, +either returning it to a pool for later reuse or destroying it. Handling +threads in this manner results in increased application server +performance and more efficient use of resources.

    +
    +
    +

    In addition to moving thread management to the application server, the +Connector Architecture provides a flexible model for a resource adapter +that uses threads.

    +
    +
    +
      +
    • +

      The requesting thread can choose to block (stop its own execution) +until the work thread completes.

      +
    • +
    • +

      The requesting thread can block while it waits to get the work thread. +When the application server provides a work thread, the requesting +thread and the work thread execute in parallel.

      +
    • +
    • +

      The resource adapter can opt to submit the work for the thread to a +queue. The thread executes the work from the queue at some later point. +The resource adapter continues its own execution from the point it +submitted the work to the queue, no matter when the thread executes it.

      +
    • +
    +
    +
    +

    With the latter two approaches, the submitting thread and the work +thread may execute simultaneously or independently. For these +approaches, the contract specifies a listener mechanism to notify the +resource adapter that the thread has completed its operation. The +resource adapter can also specify the execution context for the thread, +and the work management contract controls the context in which the +thread executes.

    +
    +
    +
    +
    +

    52.1.2 Generic Work Context Contract

    +
    +

    The work management contract between the application server and a +resource adapter enables a resource adapter to do a task, such as +communicating with the EIS or delivering messages, by delivering Work +instances for execution.

    +
    +
    +

    A generic work context contract enables a resource adapter to control +the contexts in which the Work instances that it submits are executed +by the application server’s WorkManager. A generic work context +mechanism also enables an application server to support message inflow +and delivery schemes. It also provides a richer contextual Work +execution environment to the resource adapter while still maintaining +control over concurrent behavior in a managed environment.

    +
    +
    +

    The generic work context contract standardizes the transaction context +and the security context.

    +
    +
    +
    +

    52.1.3 Outbound and Inbound Contracts

    +
    +

    The Connector Architecture defines the following outbound contracts, +system-level contracts between an application server and an EIS that +enable outbound connectivity to an EIS.

    +
    +
    +
      +
    • +

      The connection management contract supports connection pooling, a +technique that enhances application performance and scalability. +Connection pooling is transparent to the application, which simply +obtains a connection to the EIS.

      +
    • +
    • +

      The transaction management contract extends the connection management +contract and provides support for management of both local and XA +transactions.

      +
      +

      A local transaction is limited in scope to a single EIS system, and the +EIS resource manager itself manages such a transaction. An XA +transaction or global transaction can span multiple resource managers. +This form of transaction requires transaction coordination by an +external transaction manager, typically bundled with an application +server. A transaction manager uses a two-phase commit protocol to manage +a transaction that spans multiple resource managers or EISs, and uses +one-phase commit optimization if only one resource manager is +participating in an XA transaction.

      +
      +
    • +
    • +

      The security management contract provides mechanisms for +authentication, authorization, and secure communication between a Java +EE server and an EIS to protect the information in the EIS.

      +
      +

      A work security map matches EIS identities to the application server +domain’s identities.

      +
      +
    • +
    +
    +
    +

    Inbound contracts are system contracts between a Java EE server and an +EIS that enable inbound connectivity from the EIS: pluggability +contracts for message providers and contracts for importing +transactions.

    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    +
    + + + \ No newline at end of file diff --git a/resources002.html b/resources002.html new file mode 100644 index 0000000..5b14683 --- /dev/null +++ b/resources002.html @@ -0,0 +1,217 @@ + + + + + + Metadata Annotations + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    52.2 Metadata Annotations

    +
    +
    +

    Java EE Connector Architecture provides a set of annotations to minimize +the need for deployment descriptors.

    +
    +
    +
      +
    • +

      The @Connector annotation can be used by the resource adapter +developer to specify that the JavaBeans component is a resource adapter +JavaBeans component. This annotation is used for providing metadata +about the capabilities of the resource adapter. Optionally, you can +provide a JavaBeans component implementing the ResourceAdapter +interface, as in the following example:

      +
      +
      +
      @Connector(
      +    displayName = "TrafficResourceAdapter",
      +    vendorName = "Java EE Tutorial",
      +    version = "7.0"
      +)
      +public class TrafficResourceAdapter implements ResourceAdapter,
      +                                               Serializable {
      +    ...
      +}
      +
      +
      +
    • +
    • +

      The @ConnectionDefinition annotation defines a set of connection +interfaces and classes pertaining to a particular connection type, as in +the following example:

      +
      +
      +
      @ConnectionDefinition(
      +    connectionFactory = ConnectionFactory.class,
      +    connectionFactoryImpl = TradeConnectionFactory.class,
      +    connection = Connection.class,
      +    connectionImpl = TradeConnection.class
      +)
      +public class TradeManagedConnectionFactory ... {
      +    ...
      +}
      +
      +
      +
    • +
    • +

      The @AdministeredObject annotation designates a JavaBeans component +as an administered object.

      +
    • +
    • +

      The @Activation annotation contains configuration information +pertaining to inbound connectivity from an EIS instance, as in the +following example:

      +
      +
      +
      @Activation(
      +        messageListeners = { TrafficListener.class }
      +)
      +public class TrafficActivationSpec implements ActivationSpec,
      +                                              Serializable {
      +    ...
      +    @ConfigProperty()
      +    /* port to listen to requests from the EIS */
      +    private String port;
      +    ...
      +}
      +
      +
      +
    • +
    • +

      The @ConfigProperty annotation can be used on JavaBeans components +to provide additional configuration information that may be used by the +deployer and resource adapter provider. The preceding example code shows +several @ConfigProperty annotations.

      +
    • +
    • +

      The @ConnectionFactoryDefinition annotation is a resource definition +annotation that is used to define a connector connection factory and +register it in JNDI under the name specified in the mandatory name +annotation element. The mandatory interfaceName annotation element +specifies the fully qualified name of the connection factory interface +class. The transactionSupport annotation element specifies the level +of transaction support the connection factory needs to support. The +minPoolSize and maxPoolSize annotation elements specify the minimum +or maximum number of connections that should be allocated for a +connection pool that backs this connection factory resource. Additional +properties associated with the connection factory being defined can be +specified through the properties element.

      +
      +

      Since repeated annotations are not allowed, the +@ConnectionFactoryDefinitions annotation acts as a container for +multiple connector connection factory definitions. The value +annotation element contains the multiple connector connection factory +definitions.

      +
      +
    • +
    • +

      The @AdministeredObjectDefinition annotation is a resource +definition annotation that is used to define an administered object and +register it in JNDI under the name specified in the mandatory name +annotation element. The mandatory fully qualified name of the +administered object’s class must be indicated by the className +element. Additional properties that must be configured in the +administered object can be specified through the properties element.

      +
      +

      Since repeated annotations are not allowed, the +@AdministeredObjectDefinitions annotation acts as a container for +multiple administered object definitions. The value annotation element +contains the multiple administered object definitions.

      +
      +
    • +
    +
    +
    +

    The specification allows a resource adapter to be developed in +mixed-mode form, that is the ability for a resource adapter developer to +use both metadata annotations and deployment descriptors in +applications. An application assembler or deployer may use the +deployment descriptor to override the metadata annotations specified by +the resource adapter developer.

    +
    +
    +

    The deployment descriptor for a resource adapter, if present, is named +ra.xml. The metadata-complete attribute defines whether the +deployment descriptor for the resource adapter module is complete or +whether the class files available to the module and packaged with the +resource adapter need to be examined for annotations that specify +deployment information.

    +
    +
    +

    For the complete list of annotations and JavaBeans components provided +in the Java EE 7 platform, see the Java EE Connector Architecture 1.7 +specification.

    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    + + + \ No newline at end of file diff --git a/resources003.html b/resources003.html new file mode 100644 index 0000000..77e4e15 --- /dev/null +++ b/resources003.html @@ -0,0 +1,149 @@ + + + + + + Common Client Interface + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    52.3 Common Client Interface

    +
    +
    +

    This section explains how components use the Connector Architecture +Common Client Interface (CCI) API and a resource adapter to access data +from an EIS. The CCI API defines a set of interfaces and classes whose +methods allow a client to perform typical data access operations. The +CCI interfaces and classes are as follows.

    +
    +
    +
      +
    • +

      ConnectionFactory: Provides an application component with a +Connection instance to an EIS.

      +
    • +
    • +

      Connection: Represents the connection to the underlying EIS.

      +
    • +
    • +

      ConnectionSpec: Provides a means for an application component to +pass connection-request-specific properties to the ConnectionFactory +when making a connection request.

      +
    • +
    • +

      Interaction: Provides a means for an application component to +execute EIS functions, such as database stored procedures.

      +
    • +
    • +

      InteractionSpec: Holds properties pertaining to an application +component’s interaction with an EIS.

      +
    • +
    • +

      Record: The superinterface for the various kinds of record +instances. Record instances can be MappedRecord, IndexedRecord, or +ResultSet instances, all of which inherit from the Record interface.

      +
    • +
    • +

      RecordFactory: Provides an application component with a Record +instance.

      +
    • +
    • +

      IndexedRecord: Represents an ordered collection of Record +instances based on the java.util.List interface.

      +
    • +
    +
    +
    +

    A client or application component that uses the CCI to interact with an +underlying EIS does so in a prescribed manner. The component must +establish a connection to the EIS’s resource manager, and it does so +using the ConnectionFactory. The Connection object represents the +connection to the EIS and is used for subsequent interactions with the +EIS.

    +
    +
    +

    The component performs its interactions with the EIS, such as accessing +data from a specific table, using an Interaction object. The +application component defines the Interaction object by using an +InteractionSpec object. When it reads data from the EIS, such as from +database tables, or writes to those tables, the application component +does so by using a particular type of Record instance: a +MappedRecord, an IndexedRecord, or a ResultSet instance.

    +
    +
    +

    Note, too, that a client application that relies on a CCI resource +adapter is very much like any other Java EE client that uses enterprise +bean methods.

    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    + + + \ No newline at end of file diff --git a/resources004.html b/resources004.html new file mode 100644 index 0000000..2c98299 --- /dev/null +++ b/resources004.html @@ -0,0 +1,124 @@ + + + + + + Using Resource Adapters with Contexts and Dependency Injection for Java EE (CDI) + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    52.4 Using Resource Adapters with Contexts and Dependency Injection forJava EE (CDI)

    +
    + +
    +

    Do not specify the following classes in the resource adapter as CDI +managed beans (that is, do not inject them), because the behavior of +these classes as CDI managed beans has not been portably defined.

    +
    +
    +
      +
    • +

      Resource adapter beans: These beans are classes that are annotated +with the javax.resource.spi.Connector annotation or are declared as +corresponding elements in the resource adapter deployment descriptor, +ra.xml.

      +
    • +
    • +

      Managed connection factory beans: These beans are classes that are +annotated with the javax.resource.spi.ConnectorDefinition annotation +or the javax.resource.spi.ConnectorDefinitions annotation or are +declared as corresponding elements in ra.xml.

      +
    • +
    • +

      Activation specification beans: These beans are classes that are +annotated with the javax.resource.spi.Activation annotation or are +declared as corresponding elements in ra.xml.

      +
    • +
    • +

      Administered object beans: These beans are classes that are annotated +with the javax.resource.spi.AdministeredObject annotation or are +declared as corresponding elements in ra.xml.

      +
    • +
    +
    +
    +

    Other types of classes in the resource adapter can be CDI managed beans +and will behave in a portable manner.

    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    + + + \ No newline at end of file diff --git a/resources005.html b/resources005.html new file mode 100644 index 0000000..27cc825 --- /dev/null +++ b/resources005.html @@ -0,0 +1,114 @@ + + + + + + Further Information about Resource Adapters + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    52.5 Further Information about Resource Adapters

    +
    +
    +

    For more information about resource adapters and annotations, see

    +
    +
    +
      +
    • +

      Java EE 7 Platform Specification (JSR 342):

      +
      +

      http://jcp.org/en/jsr/detail?id=342

      +
      +
    • +
    • +

      Java EE Connector Architecture 1.7 specification:

      +
      +

      http://jcp.org/en/jsr/detail?id=322

      +
      +
    • +
    • +

      EJB 3.2 specification:

      +
      +

      http://jcp.org/en/jsr/detail?id=345

      +
      +
    • +
    • +

      Common Annotations for the Java Platform:

      +
      +

      http://www.jcp.org/en/jsr/detail?id=250

      +
      +
    • +
    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    + + + \ No newline at end of file diff --git a/security-advanced.html b/security-advanced.html new file mode 100644 index 0000000..3bb825e --- /dev/null +++ b/security-advanced.html @@ -0,0 +1,122 @@ + + + + + + Java EE Security: Advanced Topics + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    + + + + \ No newline at end of file diff --git a/security-advanced001.html b/security-advanced001.html new file mode 100644 index 0000000..a28de98 --- /dev/null +++ b/security-advanced001.html @@ -0,0 +1,420 @@ + + + + + + Working with Digital Certificates + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    50.1 Working with Digital Certificates

    +
    +
    +

    Digital certificates for GlassFish Server have already been generated +and can be found in the directory domain-dir`/config/`. These digital +certificates are self-signed and are intended for use in a development +environment; they are not intended for production purposes. For +production purposes, generate your own certificates and have them signed +by a Certificate Authority (CA).

    +
    +
    +

    To use the Secure Sockets Layer (SSL), an application or web server must +have an associated certificate for each external interface, or IP +address, that accepts secure connections. The theory behind this design +is that a server should provide some kind of reasonable assurance that +its owner is who you think it is, particularly before receiving any +sensitive information. It may be useful to think of a certificate as a +"digital driver’s license" for an Internet address. The certificate +states with which company the site is associated, along with some basic +contact information about the site owner or administrator.

    +
    +
    +

    The digital certificate is cryptographically signed by its owner and is +difficult for anyone else to forge. For sites involved in e-commerce or +in any other business transaction in which authentication of identity is +important, a certificate can be purchased from a well-known CA such as +VeriSign or Thawte. If your server certificate is self-signed, you must +install it in the GlassFish Server keystore file (keystore.jks). If +your client certificate is self-signed, you should install it in the +GlassFish Server truststore file (cacerts.jks).

    +
    +
    +

    Sometimes, authentication is not really a concern. For example, an +administrator might simply want to ensure that data being transmitted +and received by the server is private and cannot be snooped by anyone +eavesdropping on the connection. In such cases, you can save the time +and expense involved in obtaining a CA certificate and simply use a +self-signed certificate.

    +
    +
    +

    SSL uses public-key cryptography, which is based on key pairs. Key pairs +contain one public key and one private key. Data encrypted with one key +can be decrypted only with the other key of the pair. This property is +fundamental to establishing trust and privacy in transactions. For +example, using SSL, the server computes a value and encrypts it by using +its private key. The encrypted value is called a digital signature. The +client decrypts the encrypted value by using the server’s public key and +compares the value to its own computed value. If the two values match, +the client can trust that the signature is authentic, because only the +private key could have been used to produce such a signature.

    +
    +
    +

    Digital certificates are used with HTTPS to authenticate web clients. +The HTTPS service of most web servers will not run unless a digital +certificate has been installed. Use the procedure outlined in the next +section, Creating a Server Certificate, to set up a digital +certificate that can be used by your application or web server to enable +SSL.

    +
    +
    +

    One tool that can be used to set up a digital certificate is keytool, +a key and certificate management utility that ships with the JDK. This +tool enables users to administer their own public/private key pairs and +associated certificates for use in self-authentication, whereby the user +authenticates himself or herself to other users or services, or data +integrity and authentication services, using digital signatures. The +tool also allows users to cache the public keys, in the form of +certificates, of their communicating peers.

    +
    +
    +

    For a better understanding of keytool and public-key cryptography, see +Further Information about +Advanced Security Topics for a link to the keytool documentation.

    +
    +
    +

    50.1.1 Creating a Server Certificate

    +
    +

    A server certificate has already been created for GlassFish Server and +can be found in the domain-dir`/config/` directory. The server +certificate is in keystore.jks. The cacerts.jks file contains all +the trusted certificates, including client certificates.

    +
    +
    +

    If necessary, you can use keytool to generate certificates. The +keytool utility stores the keys and certificates in a file termed a +keystore, a repository of certificates used for identifying a client or +a server. Typically, a keystore is a file that contains one client’s or +one server’s identity. The keystore protects private keys by using a +password.

    +
    +
    +

    If you don’t specify a directory when specifying the keystore file name, +the keystores are created in the directory from which the keytool +command is run. This can be the directory where the application resides, +or it can be a directory common to many applications.

    +
    +
    +

    The general steps for creating a server certificate are as follows.

    +
    +
    +
      +
    1. +

      Create the keystore.

      +
    2. +
    3. +

      Export the certificate from the keystore.

      +
    4. +
    5. +

      Sign the certificate.

      +
    6. +
    7. +

      Import the certificate into a truststore: a repository of +certificates used for verifying the certificates. A truststore typically +contains more than one certificate.

      +
    8. +
    +
    +
    +

    The next section provides specific information on using the keytool +utility to perform these steps.

    +
    +
    +

    50.1.1.1 To Use keytool to Create a Server Certificate

    +
    +

    Run keytool to generate a new key pair in the default development +keystore file, keystore.jks. This example uses the alias +server-alias to generate a new public/private key pair and wrap the +public key into a self-signed certificate inside keystore.jks. The key +pair is generated by using an algorithm of type RSA, with a default +password of changeit. For more information and other examples of +creating and managing keystore files, read the keytool documentation.

    +
    +
    +
    +
    +
    +
    +
    + +++ + + + + + +
    +

    Note:

    +
    +
    +

    RSA is public-key encryption technology developed by RSA Data Security, +Inc.

    +
    +
    +
    +
    +
    +
    +
    +
    +

    From the directory in which you want to create the key pair, run +keytool as shown in the following steps.

    +
    +
    +
      +
    1. +

      Generate the server certificate.

      +
      +

      Enter the keytool command all on one line:

      +
      +
      +
      +
      java-home/bin/keytool -genkey -alias server-alias -keyalg RSA
      +-keypass changeit -storepass changeit -keystore keystore.jks
      +
      +
      +
      +

      When you press Enter, keytool prompts you to enter the server name, +organizational unit, organization, locality, state, and country code.

      +
      +
      +

      You must enter the server name in response to keytool's first prompt, +in which it asks for first and last names. For testing purposes, this +can be localhost.

      +
      +
    2. +
    3. +

      Export the generated server certificate in keystore.jks into the +file server.cer.

      +
      +

      Enter the keytool command all on one line:

      +
      +
      +
      +
      java-home/bin/keytool -export -alias server-alias -storepass changeit
      +-file server.cer -keystore keystore.jks
      +
      +
      +
    4. +
    5. +

      If you want to have the certificate signed by a CA, read the example +in the keytool documentation.

      +
    6. +
    7. +

      To add the server certificate to the truststore file, cacerts.jks, +run keytool from the directory where you created the keystore and +server certificate.

      +
      +

      Use the following parameters:

      +
      +
      +
      +
      java-home/bin/keytool -import -v -trustcacerts -alias server-alias
      +-file server.cer -keystore cacerts.jks -keypass changeit
      +-storepass changeit
      +
      +
      +
      +

      Information on the certificate, such as that shown next, will appear:

      +
      +
      +
      +
      Owner: CN=localhost, OU=My Company, O=Software, L=Santa Clara, ST=CA, C=US
      +Issuer: CN=localhost, OU=My Company, O=Software, L=Santa Clara, ST=CA, C=US
      +Serial number: 3e932169
      +Valid from: Mon Nov 26 18:15:47 EST 2012 until: Sun Feb 24 18:15:47 EST 2013
      +Certificate fingerprints:
      +         MD5: 52:9F:49:68:ED:78:6F:39:87:F3:98:B3:6A:6B:0F:90
      +         SHA1: EE:2E:2A:A6:9E:03:9A:3A:1C:17:4A:28:5E:97:20:78:3F:
      +         SHA256: 80:05:EC:7E:50:50:5D:AA:A3:53:F1:11:9B:19:EB:0D:20:67:C1:12:
      +AF:42:EC:CD:66:8C:BD:99:AD:D9:76:95
      +         Signature algorithm name: SHA256withRSA         Version: 3
      +         ...
      +Trust this certificate? [no]:
      +
      +
      +
    8. +
    9. +

      Enter yes, then press the Enter or Return key.

      +
      +

      The following information appears:

      +
      +
      +
      +
      Certificate was added to keystore
      +[Storing cacerts.jks]
      +
      +
      +
    10. +
    +
    +
    +
    +
    +

    50.1.2 Adding Users to the Certificate Realm

    +
    +

    In the certificate realm, user identity is set up in the GlassFish +Server security context and populated with user data obtained from +cryptographically verified client certificates. For step-by-step +instructions for creating this type of certificate, see +Working with Digital Certificates.

    +
    +
    +
    +

    50.1.3 Using a Different Server Certificate with GlassFish Server

    +
    +

    Follow the steps in Creating a Server Certificate to create +your own server certificate, have it signed by a CA, and import the +certificate into keystore.jks.

    +
    +
    +

    Make sure that when you create the certificate, you follow these rules.

    +
    +
    +
      +
    • +

      When you create the server certificate, keytool prompts you to enter +your first and last name. In response to this prompt, you must enter the +name of your server. For testing purposes, this can be localhost.

      +
    • +
    • +

      If you want to replace the existing keystore.jks, you must either +change your keystore’s password to the default password (changeit) or +change the default password to your keystore’s password.

      +
    • +
    +
    +
    +

    50.1.3.1 To Specify a Different Server Certificate

    +
    +

    To specify that GlassFish Server should use the new keystore for +authentication and authorization decisions, you must set the JVM options +for GlassFish Server so that they recognize the new keystore. To use a +different keystore from the one provided for development purposes, +follow these steps.

    +
    +
    +
      +
    1. +

      Start GlassFish Server if you haven’t already done so. Information +on starting the GlassFish Server can be found in +Starting and Stopping GlassFish Server.

      +
    2. +
    3. +

      Open the GlassFish Server Administration Console in a web browser at +http://localhost:4848.

      +
    4. +
    5. +

      Expand Configurations, then expand server-config, then click JVM +Settings.

      +
    6. +
    7. +

      Click the JVM Options tab.

      +
    8. +
    9. +

      Change the following JVM options so that they point to the location +and name of the new keystore. The current settings are shown below:

      +
      +
      +
      -Djavax.net.ssl.keyStore=${com.sun.aas.instanceRoot}/config/keystore.jks
      +-Djavax.net.ssl.trustStore=${com.sun.aas.instanceRoot}/config/cacerts.jks
      +
      +
      +
    10. +
    11. +

      If you’ve changed the keystore password from its default value, you +need to add the password option as well:

      +
      +
      +
      -Djavax.net.ssl.keyStorePassword=your-new-password
      +
      +
      +
    12. +
    13. +

      Click Save, then restart GlassFish Server.

      +
    14. +
    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    +
    +
    + + + \ No newline at end of file diff --git a/security-advanced002.html b/security-advanced002.html new file mode 100644 index 0000000..6cd377e --- /dev/null +++ b/security-advanced002.html @@ -0,0 +1,384 @@ + + + + + + Authentication Mechanisms + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    50.2 Authentication Mechanisms

    +
    +
    +

    This section discusses the client authentication and mutual +authentication mechanisms.

    +
    +
    +

    The following topics are addressed here:

    +
    + +
    +

    50.2.1 Client Authentication

    +
    +

    With client authentication, the web server authenticates the client by +using the client’s public key certificate. Client authentication is a +more secure method of authentication than either basic or form-based +authentication. It uses HTTP over SSL (HTTPS), in which the server +authenticates the client using the client’s public key certificate. SSL +technology provides data encryption, server authentication, message +integrity, and optional client authentication for a TCP/IP connection. +You can think of a public key certificate as the digital equivalent of a +passport. The certificate is issued by a trusted organization, a +certificate authority (CA), and provides identification for the bearer.

    +
    +
    +

    Before using client authentication, make sure that the client has a +valid public key certificate. For more information on creating and using +public key certificates, read +Working with Digital Certificates.

    +
    +
    +

    The following example shows how to declare client authentication in your +deployment descriptor:

    +
    +
    +
    +
    <login-config>
    +    <auth-method>CLIENT-CERT</auth-method>
    +</login-config>
    +
    +
    +
    +
    +

    50.2.2 Mutual Authentication

    +
    +

    With mutual authentication, the server and the client authenticate each +other. Mutual authentication is of two types:

    +
    +
    + +
    +
    +

    When using certificate-based mutual authentication, the following +actions occur.

    +
    +
    +
      +
    1. +

      A client requests access to a protected resource.

      +
    2. +
    3. +

      The web server presents its certificate to the client.

      +
    4. +
    5. +

      The client verifies the server’s certificate.

      +
    6. +
    7. +

      If successful, the client sends its certificate to the server.

      +
    8. +
    9. +

      The server verifies the client’s credentials.

      +
    10. +
    11. +

      If successful, the server grants access to the protected resource +requested by the client.

      +
    12. +
    +
    +
    +

    Figure 50-1 shows what occurs during certificate-based +mutual authentication.

    +
    +
    +

    Figure 50-1 Certificate-Based Mutual Authentication

    +
    + +
    +

    In user name/password-based mutual authentication, the following actions +occur.

    +
    +
    +
      +
    1. +

      A client requests access to a protected resource.

      +
    2. +
    3. +

      The web server presents its certificate to the client.

      +
    4. +
    5. +

      The client verifies the server’s certificate.

      +
    6. +
    7. +

      If successful, the client sends its user name and password to the +server.

      +
    8. +
    9. +

      The server verifies the client’s credentials

      +
    10. +
    11. +

      If the verification is successful, the server grants access to the +protected resource requested by the client.

      +
    12. +
    +
    +
    +

    Figure 50-2 shows what occurs during user +name/password-based mutual authentication.

    +
    +
    +

    Figure 50-2 User Name/Password-Based Mutual Authentication

    +
    + +
    +

    50.2.2.1 Enabling Mutual Authentication over SSL

    +
    +

    This section discusses setting up client-side authentication. Enabling +both server-side and client-side authentication is called mutual, or +two-way, authentication. In client authentication, clients are required +to submit certificates issued by a certificate authority that you choose +to accept.

    +
    +
    +

    There are at least two ways to enable mutual authentication over SSL.

    +
    +
    +
      +
    • +

      The preferred method is to set the method of authentication in the +web.xml application deployment descriptor to CLIENT-CERT. This +enforces mutual authentication by modifying the deployment descriptor of +the given application. In this way, client authentication is enabled +only for a specific resource controlled by the security constraint, and +the check is performed only when the application requires client +authentication.

      +
    • +
    • +

      A less commonly used method is to set the clientAuth property in the +certificate realm to true if you want the SSL stack to require a +valid certificate chain from the client before accepting a connection. A +false value (which is the default) will not require a certificate +chain unless the client requests a resource protected by a security +constraint that uses CLIENT-CERT authentication. When you enable +client authentication by setting the clientAuth property to true, +client authentication will be required for all the requests going +through the specified SSL port. If you turn clientAuth on, it is on +all of the time, which can severely degrade performance.

      +
    • +
    +
    +
    +

    When client authentication is enabled in both of these ways, client +authentication will be performed twice.

    +
    +
    +
    +

    50.2.2.2 Creating a Client Certificate for Mutual Authentication

    +
    +

    If you have a certificate signed by a trusted Certificate Authority (CA) +such as Verisign, and the GlassFish Server cacerts.jks file already +contains a certificate verified by that CA, you do not need to complete +this step. You need to install your certificate in the GlassFish Server +certificate file only when your certificate is self-signed.

    +
    +
    +

    From the directory where you want to create the client certificate, run +keytool as outlined here. When you press Enter, keytool prompts you +to enter the server name, organizational unit, organization, locality, +state, and country code.

    +
    +
    +

    You must enter the server name in response to keytool's first prompt, +in which it asks for first and last names. For testing purposes, this +can be localhost. If this example is to verify mutual authentication +and you receive a runtime error stating that the HTTPS host name is +wrong, re-create the client certificate, being sure to use the same host +name you will use when running the example. For example, if your machine +name is duke, then enter duke as the certificate CN or when prompted +for first and last names. When accessing the application, enter a URL +that points to the same location (for example, +https://duke:8181/mutualauth/hello). This is necessary because during +SSL handshake, the server verifies the client certificate by comparing +the certificate name to the host name from which it originates.

    +
    +
    +

    To create a keystore named client_keystore.jks that contains a client +certificate named client.cer, follow these steps.

    +
    +
    +
      +
    1. +

      Create a backup copy of the server truststore file. To do this,

      +
    2. +
    3. +

      Change to the directory containing the server’s keystore and +truststore files, domain-dir`\config`.

      +
    4. +
    5. +

      Copy cacerts.jks to cacerts.backup.jks.

      +
    6. +
    7. +

      Copy keystore.jks to keystore.backup.jks.

      +
      +

      Do not put client certificates in the cacerts.jks file. Any +certificate you add to the cacerts file effectively can be a trusted +root for any and all certificate chains. After you have completed +development, delete the development version of the cacerts file and +replace it with the original copy.

      +
      +
    8. +
    9. +

      Generate the client certificate. Enter the following command from +the directory where you want to generate the client certificate:

      +
      +
      +
      java-home\bin\keytool -genkey -alias client-alias -keyalg RSA
      +-keypass changeit -storepass changeit -keystore client_keystore.jks
      +
      +
      +
    10. +
    11. +

      Export the generated client certificate into the file client.cer:

      +
      +
      +
      java-home\bin\keytool -export -alias client-alias -storepass changeit
      +-file client.cer -keystore client_keystore.jks
      +
      +
      +
    12. +
    13. +

      Add the certificate to the truststore file +domain-dir`/config/cacerts.jks`. Run keytool from the directory where +you created the keystore and client certificate. Use the following +parameters:

      +
      +
      +
      java-home\bin\keytool -import -v -trustcacerts -alias client-alias
      +-file client.cer -keystore domain-dir/config/cacerts.jks
      +-keypass changeit -storepass changeit
      +
      +
      +
      +

      The keytool utility returns a message like this one:

      +
      +
      +
      +
      Owner: CN=localhost, OU=My Company, O=Software, L=Santa Clara, ST=CA, C=US
      +Issuer: CN=localhost, OU=My Company, O=Software, L=Santa Clara, ST=CA, C=US
      +Serial number: 3e39e66a
      +Valid from: Tue Nov 27 12:22:47 EST 2012 until: Mon Feb 25 12:22:47 EST 2013
      +Certificate fingerprints:
      +    MD5: 5A:B0:4C:88:4E:F8:EF:E9:E5:8B:53:BD:D0:AA:8E:5A
      +    SHA1:90:00:36:5B:E0:A7:A2:BD:67:DB:EA:37:B9:61:3E:26:B3:89:46:32
      +    Signature algorithm name: SHA1withRSA
      +    Version: 3
      +Trust this certificate? [no]: yes
      +Certificate was added to keystore
      +[Storing cacerts.jks]
      +
      +
      +
    14. +
    15. +

      Restart GlassFish Server.

      +
    16. +
    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    +
    +
    + + + \ No newline at end of file diff --git a/security-advanced003.html b/security-advanced003.html new file mode 100644 index 0000000..7dd132c --- /dev/null +++ b/security-advanced003.html @@ -0,0 +1,241 @@ + + + + + + Using the JDBC Realm for User Authentication + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    50.3 Using the JDBC Realm for User Authentication

    +
    +
    +

    An authentication realm, sometimes called a security policy domain or +security domain, is a scope over which an application server defines and +enforces a common security policy. A realm contains a collection of +users, who may or may not be assigned to a group. GlassFish Server comes +preconfigured with the file, certificate, and administration realms. An +administrator can also set up LDAP, JDBC, digest, or custom realms.

    +
    +
    +

    An application can specify in its deployment descriptor which realm to +use. If the application does not specify a realm, GlassFish Server uses +its default realm, the file realm. If an application specifies that a +JDBC realm is to be used for user authentication, GlassFish Server will +retrieve user credentials from a database. The application server uses +the database information and the enabled JDBC realm option in the +configuration file.

    +
    +
    +

    A database provides an easy way to add, edit, or delete users at runtime +and enables users to create their own accounts without any +administrative assistance. Using a database has an additional benefit: +providing a place to securely store any extra user information. A realm +can be thought of as a database of user names and passwords that +identify valid users of a web application or set of web applications +with an enumeration of the list of roles associated with each valid +user. Access to specific web application resources is granted to all +users in a particular role, instead of enumerating a list of associated +users. A user name can have any number of roles associated with it.

    +
    +
    +

    Two of the tutorial case studies, Chapter +58, "Duke’s Tutoring Case Study Example," and +Chapter 59, "Duke’s Forest Case Study +Example," use a JDBC realm for user authentication.

    +
    +
    +

    50.3.1 To Configure a JDBC Authentication Realm

    +
    +

    GlassFish Server enables administrators to specify a user’s credentials +(user name and password) in the JDBC realm instead of in the connection +pool. This prevents other applications from browsing the database tables +for user credentials. By default, storing passwords as clear text is not +supported in the JDBC realm. Under normal circumstances, passwords +should not be stored as clear text.

    +
    +
    +
      +
    1. +

      Create the database tables in which user credentials for the realm +will be stored.

      +
    2. +
    3. +

      Add user credentials to the database tables you created.

      +
    4. +
    5. +

      Create a JDBC connection pool for the database.

      +
      +

      You can use the Administration Console or the command line to create a +connection pool.

      +
      +
    6. +
    7. +

      Create a JDBC resource for the database.

      +
      +

      You can use the Administration Console or the command line to create a +JDBC resource.

      +
      +
    8. +
    9. +

      Create a realm.

      +
      +

      This step needs to associate the resource with the realm, define the +tables and columns for users and groups used for authentication, and +define the digest algorithm that will be used for storing passwords in +the database.

      +
      +
      +

      You can use the Administration Console or the command line to create a +realm.

      +
      +
    10. +
    11. +

      Modify the deployment descriptor for your application to specify the +JDBC realm.

      +
      +
        +
      • +

        For an enterprise application in an EAR file, modify the +glassfish-application.xml file.

        +
      • +
      • +

        For a web application in a WAR file, modify the web.xml file.

        +
      • +
      • +

        For an enterprise bean in an EJB JAR file, modify the +glassfish-ejb-jar.xml file.

        +
        +

        For example, for a hypothetical application, the web.xml file could +specify the jdbcRealm realm, as follows:

        +
        +
        +
        +
        <login-config>
        +    <auth-method>FORM</auth-method>
        +    <realm-name>jdbcRealm</realm-name>
        +    <form-login-config>
        +        <form-login-page>/login.xhtml</form-login-page>
        +        <form-error-page>/login.xhtml</form-error-page>
        +    </form-login-config>
        +</login-config>
        +<security-constraint>
        +    <web-resource-collection>
        +        <web-resource-name>Secure Pages</web-resource-name>
        +        <description/>
        +        <url-pattern>/admin/*</url-pattern>
        +    </web-resource-collection>
        +    <auth-constraint>
        +        <role-name>ADMINS</role-name>
        +    </auth-constraint>
        +</security-constraint>
        +
        +
        +
        +

        Form-based login is specified for all web pages under /admin. Access +to those pages will be allowed only to users in the ADMINS role.

        +
        +
      • +
      +
      +
    12. +
    13. +

      Assign security roles to users or groups of users in the realm.

      +
      +

      To assign a security role to a group or to a user, add a +security-role-mapping element to the application server-specific +deployment descriptor, in this case glassfish-web.xml:

      +
      +
      +
      +
      <security-role-mapping>
      +    <role-name>USERS</role-name>
      +    <group-name>USERS</group-name>
      +</security-role-mapping>
      +<security-role-mapping>
      +    <role-name>ADMINS</role-name>
      +    <group-name>ADMINS</group-name>
      +</security-role-mapping>
      +
      +
      +
      +

      Since GlassFish Server users are assigned to groups during the user +creation process, this is more efficient than mapping security roles to +individual users.

      +
      +
    14. +
    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    +
    + + + \ No newline at end of file diff --git a/security-advanced004.html b/security-advanced004.html new file mode 100644 index 0000000..11516d7 --- /dev/null +++ b/security-advanced004.html @@ -0,0 +1,269 @@ + + + + + + Securing HTTP Resources + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    50.4 Securing HTTP Resources

    +
    +
    +

    When a request URI is matched by multiple constrained URL patterns, the +constraints that apply to the request are those that are associated with +the best matching URL pattern. The servlet matching rules defined in +Chapter 12, "Mapping Requests To Servlets," in the Java Servlet 4.0 +Specification, are used to determine the best matching URL pattern to +the request URI. No protection requirements apply to a request URI that +is not matched by a constrained URL pattern. The HTTP method of the +request plays no role in selecting the best matching URL pattern for a +request.

    +
    +
    +

    When HTTP methods are listed within a constraint definition, the +protections defined by the constraint are applied to the listed methods +only.

    +
    +
    +

    When HTTP methods are not listed within a constraint definition, the +protections defined by the constraint apply to the complete set of HTTP +methods, including HTTP extension methods.

    +
    +
    +

    When constraints with different protection requirements apply to the +same combination of URL patterns and HTTP methods, the rules for +combining the protection requirements are as defined in Section 13.8.1, +"Combining Constraints," in the Java Servlet 4.0 Specification.

    +
    +
    +

    Follow these guidelines to properly secure a web application.

    +
    +
    +
      +
    • +

      Do not list HTTP methods within constraint definitions. This is the +simplest way to ensure that you are not leaving HTTP methods +unprotected. For example:

      +
      +
      +
      <!-- SECURITY CONSTRAINT #1 -->
      +<security-constraint>
      +    <display-name>Do not enumerate Http Methods</display-name>
      +    <web-resource-collection>
      +        <url-pattern>/company/*</url-pattern>
      +    </web-resource-collection>
      +    <auth-constraint>
      +        <role-name>sales</role-name>
      +    </auth-constraint>
      +</security-constraint>
      +
      +
      +
      +

      If you list methods in a constraint, all non-listed methods of the +effectively infinite set of possible HTTP methods, including extension +methods, will be unprotected. Use such a constraint only if you are +certain that this is the protection scheme you intend to define. The +following example shows a constraint that lists the GET method and thus +defines no protection on any of the other possible HTTP methods:

      +
      +
      +
      +
      <!-- SECURITY CONSTRAINT #2 -->
      +<security-constraint>
      +    <display-name>
      +        Protect GET only, leave all other methods unprotected
      +    </display-name>
      +    <web-resource-collection>
      +        <url-pattern>/company/*</url-pattern>
      +        <http-method>GET</http-method>
      +    </web-resource-collection>
      +    <auth-constraint>
      +        <role-name>sales</role-name>
      +    </auth-constraint>
      +</security-constraint>
      +
      +
      +
    • +
    • +

      If you need to apply specific types of protection to specific HTTP +methods, make sure that you define constraints to cover every method +that you want to permit, with or without constraint, at the +corresponding URL patterns. If there are any methods that you do not +want to permit, you must also create a constraint that denies access to +those methods at the same patterns; for an example, see security +constraint #5 in the next bullet.

      +
      +

      For example, to permit GET and POST, where POST requires authentication +and GET is permitted without constraint, you could define the following +constraints:

      +
      +
      +
      +
      <!-- SECURITY CONSTRAINT #3 -->
      +<security-constraint>
      +    <display-name>Allow unprotected GET</display-name>
      +    <web-resource-collection>
      +        <url-pattern>/company/*</url-pattern>
      +        <http-method>GET</http-method>
      +    </web-resource-collection>
      +</security-constraint>
      +
      +<!-- SECURITY CONSTRAINT #4 -->
      +<security-constraint>
      +    <display-name>Require authentication for POST</display-name>
      +    <web-resource-collection>
      +        <url-pattern>/company/*</url-pattern>
      +        <http-method>POST</http-method>
      +    </web-resource-collection>
      +    <auth-constraint>
      +        <role-name>sales</role-name>
      +    </auth-constraint>
      +</security-constraint>
      +
      +
      +
    • +
    • +

      The simplest way to ensure that you deny all HTTP methods except those +that you want to be permitted is to use http-method-omission elements +to omit those HTTP methods from the security constraint, and also to +define an auth-constraint that names no roles. The security constraint +will apply to all methods except those that were named in the omissions, +and the constraint will apply only to the resources matched by the +patterns in the constraint.

      +
      +

      For example, the following constraint excludes access to all methods +except GET and POST at the resources matched by the pattern +/company/*:

      +
      +
      +
      +
      <!-- SECURITY CONSTRAINT #5 -->
      +<security-constraint>
      +    <display-name>Deny all HTTP methods except GET and POST</display-name>
      +    <web-resource-collection>
      +        <url-pattern>/company/*</url-pattern>
      +        <http-method-omission>GET</http-method-omission>
      +        <http-method-omission>POST</http-method-omission>
      +    </web-resource-collection>
      +    <auth-constraint/>
      +</security-constraint>
      +
      +
      +
      +

      If you want to extend these exclusions to the unconstrained parts of +your application, also include the URL pattern / (forward slash):

      +
      +
      +
      +
      <!-- SECURITY CONSTRAINT #6 -->
      +<security-constraint>
      +    <display-name>Deny all HTTP methods except GET and POST</display-name>
      +    <web-resource-collection>
      +        <url-pattern>/company/*</url-pattern>
      +        <url-pattern>/</url-pattern>
      +        <http-method-omission>GET</http-method-omission>
      +        <http-method-omission>POST</http-method-omission>
      +    </web-resource-collection>
      +    <auth-constraint/>
      +</security-constraint>
      +
      +
      +
    • +
    • +

      If, for your web application, you do not want any resource to be +accessible unless you explicitly define a constraint that permits access +to it, you can define an auth-constraint that names no roles and +associate it with the URL pattern /. The URL pattern / is the +weakest matching pattern. Do not list any HTTP methods in this +constraint:

      +
      +
      +
      <!-- SECURITY CONSTRAINT #7 -->
      +<security-constraint>
      +    <display-name>
      +        Switch from Constraint to Permission model
      +        (where everything is denied by default)
      +    </display-name>
      +    <web-resource-collection>
      +        <url-pattern>/</url-pattern>
      +    </web-resource-collection>
      +    <auth-constraint/>
      +</security-constraint>
      +
      +
      +
    • +
    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    + + + \ No newline at end of file diff --git a/security-advanced005.html b/security-advanced005.html new file mode 100644 index 0000000..3562356 --- /dev/null +++ b/security-advanced005.html @@ -0,0 +1,174 @@ + + + + + + Securing Application Clients + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    50.5 Securing Application Clients

    +
    +
    +

    The Java EE authentication requirements for application clients are the +same as for other Java EE components, and the same authentication +techniques can be used as for other Java EE application components. No +authentication is necessary when accessing unprotected web resources.

    +
    +
    +

    When accessing protected web resources, the usual varieties of +authentication can be used: HTTP basic authentication, HTTP login-form +authentication, or SSL client authentication. +Specifying an Authentication +Mechanism in the Deployment Descriptor describes how to specify HTTP +basic authentication and HTTP login-form authentication. +Client Authentication describes how +to specify SSL client authentication.

    +
    +
    +

    Authentication is required when accessing protected enterprise beans. +The authentication mechanisms for enterprise beans are discussed in +Securing Enterprise Beans.

    +
    +
    +

    An application client makes use of an authentication service provided by +the application client container for authenticating its users. The +container’s service can be integrated with the native platform’s +authentication system so that a single sign-on capability is used. The +container can authenticate the user either when the application is +started or when a protected resource is accessed.

    +
    +
    +

    An application client can provide a class, called a login module, to +gather authentication data. If so, the +javax.security.auth.callback.CallbackHandler interface must be +implemented, and the class name must be specified in its deployment +descriptor. The application’s callback handler must fully support +Callback objects specified in the javax.security.auth.callback +package.

    +
    +
    +

    50.5.1 Using Login Modules

    +
    +

    An application client can use the Java Authentication and Authorization +Service (JAAS) to create login modules for authentication. A JAAS-based +application implements the +javax.security.auth.callback.CallbackHandler interface so that it can +interact with users to enter specific authentication data, such as user +names or passwords, or to display error and warning messages.

    +
    +
    +

    Applications implement the CallbackHandler interface and pass it to +the login context, which forwards it directly to the underlying login +modules. A login module uses the callback handler both to gather input, +such as a password or smart card PIN, from users and to supply +information, such as status information, to users. Because the +application specifies the callback handler, an underlying login module +can remain independent of the various ways applications interact with +users.

    +
    +
    +

    For example, the implementation of a callback handler for a GUI +application might display a window to solicit user input, or the +implementation of a callback handler for a command-line tool might +simply prompt the user for input directly from the command line.

    +
    +
    +

    The login module passes an array of appropriate callbacks to the +callback handler’s handle method, such as a NameCallback for the +user name and a PasswordCallback for the password; the callback +handler performs the requested user interaction and sets appropriate +values in the callbacks. For example, to process a NameCallback, the +CallbackHandler might prompt for a name, retrieve the value from the +user, and call the setName method of the NameCallback to store the +name.

    +
    +
    +

    For more information on using JAAS for authentication in login modules, +refer to the documentation listed in +Further Information about +Advanced Security Topics.

    +
    +
    +
    +

    50.5.2 Using Programmatic Login

    +
    +

    Programmatic login enables the client code to supply user credentials. +If you are using an EJB client, you can use the +com.sun.appserv.security.ProgrammaticLogin class with its convenient +login and logout methods. Programmatic login is specific to a +server.

    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    +
    + + + \ No newline at end of file diff --git a/security-advanced006.html b/security-advanced006.html new file mode 100644 index 0000000..ee3f1d9 --- /dev/null +++ b/security-advanced006.html @@ -0,0 +1,352 @@ + + + + + + Securing Enterprise Information Systems Applications + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    50.6 Securing Enterprise Information Systems Applications

    +
    +
    +

    In Enterprise Information Systems (EIS) applications, components request +a connection to an EIS resource.

    +
    +
    +

    The following topics are addressed here:

    +
    + +
    +

    50.6.1 Overview of Securing Enterprise Information Systems Applications

    +
    +

    As part of this connection, the EIS can require a sign-on for the +requester to access the resource. The application component provider has +two choices for the design of the EIS sign-on.

    +
    +
    +
      +
    • +

      Container-managed sign-on: The application component lets the +container take the responsibility of configuring and managing the EIS +sign-on. The container determines the user name and password for +establishing a connection to an EIS instance.

      +
    • +
    • +

      Component-managed sign-on: The application component code manages EIS +sign-on by including code that performs the sign-on process to an EIS.

      +
    • +
    +
    +
    +

    You can also configure security for resource adapters. See +Configuring Resource Adapter Security.

    +
    +
    +
    +

    50.6.2 Container-Managed Sign-On

    +
    +

    In container-managed sign-on, an application component does not have to +pass any sign-on security information to the getConnection() method. +The security information is supplied by the container, as shown in the +following example (the method call is highlighted in bold):

    +
    +
    +
    +
    // Business method in an application component
    +Context initctx = new InitialContext();
    +// Perform JNDI lookup to obtain a connection factory
    +javax.resource.cci.ConnectionFactory cxf =
    +    (javax.resource.cci.ConnectionFactory)initctx.lookup(
    +    "java:comp/env/eis/MainframeCxFactory");
    +// Invoke factory to obtain a connection. The security
    +// information is not passed in the getConnection method
    +javax.resource.cci.Connection cx = cxf.getConnection();
    +...
    +
    +
    +
    +
    +

    50.6.3 Component-Managed Sign-On

    +
    +

    In component-managed sign-on, an application component is responsible +for passing the needed sign-on security information for the resource to +the getConnection method. For example, security information might be a +user name and password, as shown here (the method call is highlighted in +bold):

    +
    +
    +
    +
    // Method in an application component
    +Context initctx = new InitialContext();
    +
    +// Perform JNDI lookup to obtain a connection factory
    +javax.resource.cci.ConnectionFactory cxf =
    +    (javax.resource.cci.ConnectionFactory)initctx.lookup(
    +    "java:comp/env/eis/MainframeCxFactory");
    +
    +// Get a new ConnectionSpec
    +com.myeis.ConnectionSpecImpl properties = //..
    +
    +// Invoke factory to obtain a connection
    +properties.setUserName("...");
    +properties.setPassword("...");
    +javax.resource.cci.Connection cx =
    +    cxf.getConnection(properties);
    +...
    +
    +
    +
    +
    +

    50.6.4 Configuring Resource Adapter Security

    +
    +

    A resource adapter is a system-level software component that typically +implements network connectivity to an external resource manager. A +resource adapter can extend the functionality of the Java EE platform +either by implementing one of the Java EE standard service APIs, such as +a JDBC driver, or by defining and implementing a resource adapter for a +connector to an external application system. Resource adapters can also +provide services that are entirely local, perhaps interacting with +native resources. Resource adapters interface with the Java EE platform +through the Java EE service provider interfaces (Java EE SPI). A +resource adapter that uses the Java EE SPIs to attach to the Java EE +platform will be able to work with all Java EE products.

    +
    +
    +

    To configure the security settings for a resource adapter, you need to +edit the resource adapter descriptor file, ra.xml. Here is an example +of the part of an ra.xml file that configures security properties for +a resource adapter:

    +
    +
    +
    +
    <authentication-mechanism>
    +    <authentication-mechanism-type>
    +        BasicPassword
    +    </authentication-mechanism-type>
    +    <credential-interface>
    +        javax.resource.spi.security.PasswordCredential
    +    </credential-interface>
    +</authentication-mechanism>
    +<reauthentication-support>false</reauthentication-support>
    +
    +
    +
    +

    You can find out more about the options for configuring resource adapter +security by reviewing as-install`/lib/schemas/connector_1_7.xsd`. You +can configure the following elements in the resource adapter deployment +descriptor file.

    +
    +
    +
      +
    • +

      Authentication mechanisms: Use the authentication-mechanism element +to specify an authentication mechanism supported by the resource +adapter. This support is for the resource adapter, not for the +underlying EIS instance.

      +
      +

      There are two supported mechanism types:

      +
      +
      +
        +
      • +

        BasicPassword, which supports the following interface:

        +
        +
        +
        javax.resource.spi.security.PasswordCredential
        +
        +
        +
      • +
      • +

        Kerbv5, which supports the following interface:

        +
        +
        +
        javax.resource.spi.security.GenericCredential
        +
        +
        +
        +

        GlassFish Server does not currently support this mechanism type.

        +
        +
      • +
      +
      +
    • +
    • +

      Reauthentication support: Use the reauthentication-support element +to specify whether the resource adapter implementation supports +reauthentication of existing Managed-Connection instances. Options are +true or false.

      +
    • +
    • +

      Security permissions: Use the security-permission element to specify +a security permission that is required by the resource adapter code. +Support for security permissions is optional and is not supported in the +current release of GlassFish Server. You can, however, manually update +the server.policy file to add the relevant permissions for the +resource adapter.

      +
      +

      The security permissions listed in the deployment descriptor are +different from those required by the default permission set as specified +in the connector specification.

      +
      +
      +

      For more information on the implementation of the security permission +specification, see the security policy file documentation listed in +Further Information about +Advanced Security Topics.

      +
      +
    • +
    +
    +
    +

    In addition to specifying resource adapter security in the ra.xml +file, you can create a security map for a connector connection pool to +map an application principal or a user group to a back-end EIS +principal. The security map is usually used if one or more EIS back-end +principals are used to execute operations (on the EIS) initiated by +various principals or user groups in the application.

    +
    +
    +
    +

    50.6.5 Mapping an Application Principal to EIS Principals

    +
    +

    When using GlassFish Server, you can use security maps to map the caller +identity of the application (principal or user group) to a suitable EIS +principal in container-managed transaction-based scenarios. When an +application principal initiates a request to an EIS, GlassFish Server +first checks for an exact principal by using the security map defined +for the connector connection pool to determine the mapped back-end EIS +principal. If there is no exact match, GlassFish Server uses the +wildcard character specification, if any, to determine the mapped +back-end EIS principal. Security maps are used when an application user +needs to execute an EIS operation that requires execution as a specific +identity in the EIS.

    +
    +
    +

    To work with security maps, use the Administration Console. From the +Administration Console, follow these steps to get to the security maps +page.

    +
    +
    +
      +
    1. +

      In the navigation tree, expand the Resources node.

      +
    2. +
    3. +

      Expand the Connectors node.

      +
    4. +
    5. +

      Select the Connector Connection Pools node.

      +
    6. +
    7. +

      On the Connector Connection Pools page, click the name of the +connection pool for which you want to create a security map.

      +
    8. +
    9. +

      Click the Security Maps tab.

      +
    10. +
    11. +

      Click New to create a new security map for the connection pool.

      +
    12. +
    13. +

      Enter a name by which you will refer to the security map, as well as +the other required information.

      +
      +

      Click Help for more information on the individual options.

      +
      +
    14. +
    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    +
    + + + \ No newline at end of file diff --git a/security-advanced007.html b/security-advanced007.html new file mode 100644 index 0000000..e111c9f --- /dev/null +++ b/security-advanced007.html @@ -0,0 +1,201 @@ + + + + + + Configuring Security Using Deployment Descriptors + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    50.7 Configuring Security Using Deployment Descriptors

    +
    +
    +

    The recommended way to configure security in the Java EE 7 platform is +with annotations. If you wish to override the security settings at +deployment time, you can use security elements in the web.xml +deployment descriptor to do so. This section describes how to use the +deployment descriptor to specify basic authentication and to override +default principal-to-role mapping.

    +
    +
    +

    The following topics are addressed here:

    +
    + +
    +

    50.7.1 Specifying Security for Basic Authentication in the DeploymentDescriptor

    +
    +

    The elements of the deployment descriptor that add basic authentication +to an example tell the server or browser to perform the following tasks.

    +
    +
    +
      +
    • +

      Send a standard login dialog box to collect user name and password +data.

      +
    • +
    • +

      Verify that the user is authorized to access the application.

      +
    • +
    • +

      If authorized, display the servlet to the user.

      +
    • +
    +
    +
    +

    The following sample code shows the security elements for a deployment +descriptor that could be used in the example of basic authentication +found in the tut-install`/examples/security/hello2_basicauth/` +directory:

    +
    +
    +
    +
        <security-constraint>
    +        <display-name>SecurityConstraint</display-name>
    +        <web-resource-collection>
    +             <web-resource-name>WRCollection</web-resource-name>
    +            <url-pattern>/greeting</url-pattern>
    +        </web-resource-collection>
    +        <auth-constraint>
    +            <role-name>TutorialUser</role-name>
    +        </auth-constraint>
    +        <user-data-constraint>
    +             <transport-guarantee>CONFIDENTIAL</transport-guarantee>
    +        </user-data-constraint>
    +    </security-constraint>
    +    <login-config>
    +        <auth-method>BASIC</auth-method>
    +        <realm-name>file</realm-name>
    +    </login-config>
    +    <security-role>
    +        <role-name>TutorialUser</role-name>
    +    </security-role>
    +
    +
    +
    +

    This deployment descriptor specifies that the request URI /greeting +can be accessed only by users who have entered their user names and +passwords and have been authorized to access this URL because they have +been verified to be in the role TutorialUser. The user name and +password data will be sent over a protected transport in order to keep +it from being read in transit.

    +
    +
    +
    +

    50.7.2 Specifying Non-Default Principal-to-Role Mapping in theDeployment Descriptor

    +
    +

    To map a role name permitted by the application or module to principals +(users) and groups defined on the server, use the +security-role-mapping element in the runtime deployment descriptor +file (glassfish-application.xml, glassfish-web.xml, or +glassfish-ejb-jar.xml). The entry needs to declare a mapping between a +security role used in the application and one or more groups or +principals defined for the applicable realm of GlassFish Server. An +example for the glassfish-web.xml file is shown below:

    +
    +
    +
    +
    <glassfish-web-app>
    +    <security-role-mapping>
    +        <role-name>DIRECTOR</role-name>
    +        <principal-name>schwartz</principal-name>
    +    </security-role-mapping>
    +    <security-role-mapping>
    +        <role-name>DEPT-ADMIN</role-name>
    +        <group-name>dept-admins</group-name>
    +    </security-role-mapping>
    +</glassfish-web-app>
    +
    +
    +
    +

    The role name can be mapped to either a specific principal (user), a +group, or both. The principal or group names referenced must be valid +principals or groups in the current default realm of GlassFish Server. +The role-name in this example must exactly match the role-name in +the security-role element of the corresponding web.xml file or the +role name defined in the @DeclareRoles and/or @RolesAllowed +annotations.

    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    +
    + + + \ No newline at end of file diff --git a/security-advanced008.html b/security-advanced008.html new file mode 100644 index 0000000..236a1cf --- /dev/null +++ b/security-advanced008.html @@ -0,0 +1,116 @@ + + + + + + Further Information about Advanced Security Topics + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    50.8 Further Information about Advanced Security Topics

    +
    +
    +

    For more information about the security topics covered in this chapter, +see

    +
    +
    +
      +
    • +

      Documentation on the keytool command:

      +
      +

      http://docs.oracle.com/javase/7/docs/technotes/tools/solaris/keytool.html

      +
      +
    • +
    • +

      Java Authentication and Authorization Service (JAAS) Reference Guide:

      +
      +

      http://docs.oracle.com/javase/7/docs/technotes/guides/security/jaas/JAASRefGuide.html

      +
      +
    • +
    • +

      Java Authentication and Authorization Service (JAAS): LoginModule +Developer’s Guide:

      +
      +

      http://docs.oracle.com/javase/7/docs/technotes/guides/security/jaas/JAASLMDevGuide.html

      +
      +
    • +
    • +

      Documentation on security policy file syntax:

      +
      +

      http://docs.oracle.com/javase/7/docs/technotes/guides/security/PolicyFiles.html#FileSyntax

      +
      +
    • +
    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    + + + \ No newline at end of file diff --git a/security-intro.html b/security-intro.html new file mode 100644 index 0000000..abec220 --- /dev/null +++ b/security-intro.html @@ -0,0 +1,118 @@ + + + + + + Introduction to Security in the Java EE Platform + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    47 Introduction to Security in the Java EE Platform

    +
    +
    +

    This chapter introduces basic security concepts and security mechanisms. +More information on these concepts and mechanisms can be found in the +chapter on security in the Java EE 7 specification.

    +
    +
    +

    The following topics are addressed here:

    +
    + +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    + + + \ No newline at end of file diff --git a/security-intro001.html b/security-intro001.html new file mode 100644 index 0000000..6d2bd21 --- /dev/null +++ b/security-intro001.html @@ -0,0 +1,412 @@ + + + + + + Overview of Java EE Security + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    47.1 Overview of Java EE Security

    +
    +
    +

    Every enterprise that has either sensitive resources that can be +accessed by many users or resources that traverse unprotected, open +networks, such as the Internet, needs to be protected.

    +
    +
    +

    Enterprise tier and web tier applications are made up of components that +are deployed into various containers. These components are combined to +build a multitier enterprise application. Security for components is +provided by their containers. A container provides two kinds of +security: declarative and programmatic.

    +
    +
    +
      +
    • +

      Declarative security expresses an application component’s security +requirements by using either deployment descriptors or annotations.

      +
      +

      A deployment descriptor is an XML file that is external to the +application and that expresses an application’s security structure, +including security roles, access control, and authentication +requirements. For more information about deployment descriptors, read +Using Deployment Descriptors for +Declarative Security.

      +
      +
      +

      Annotations, also called metadata, are used to specify information about +security within a class file. When the application is deployed, this +information can be either used by or overridden by the application +deployment descriptor. Annotations save you from having to write +declarative information inside XML descriptors. Instead, you simply put +annotations on the code, and the required information gets generated. +For this tutorial, annotations are used for securing applications +wherever possible. For more information about annotations, see +Using Annotations to Specify Security +Information.

      +
      +
    • +
    • +

      Programmatic security is embedded in an application and is used to +make security decisions. Programmatic security is useful when +declarative security alone is not sufficient to express the security +model of an application. For more information about programmatic +security, read Using Programmatic +Security.

      +
    • +
    +
    +
    +

    More information on these concepts and mechanisms can be found in the +chapter on security in the Java EE 7 specification.

    +
    +
    +

    Other chapters in this Part discuss security requirements in web tier +and enterprise tier applications.

    +
    +
    + +
    +
    +

    47.1.1 A Simple Application Security Walkthrough

    +
    +

    The security behavior of a Java EE environment may be better understood +by examining what happens in a simple application with a web client, a +user interface, and enterprise bean business logic.

    +
    +
    +

    In the following example, which is taken from the Java EE 7 +Specification, the web client relies on the web server to act as its +authentication proxy by collecting user authentication data from the +client and using it to establish an authenticated session.

    +
    +
    +

    47.1.1.1 Step 1: Initial Request

    +
    +

    In the first step of this example, the web client requests the main +application URL. This action is shown in Figure 47-1.

    +
    +
    +

    Figure 47-1 Initial Request

    +
    + +
    +

    Since the client has not yet authenticated itself to the application +environment, the server responsible for delivering the web portion of +the application, hereafter referred to as the web server, detects this +and invokes the appropriate authentication mechanism for this resource. +For more information on these mechanisms, see +Security Mechanisms.

    +
    +
    +
    +

    47.1.1.2 Step 2: Initial Authentication

    +
    +

    The web server returns a form that the web client uses to collect +authentication data, such as user name and password, from the user. The +web client forwards the authentication data to the web server, where it +is validated by the web server, as shown in Figure 47-2. +The validation mechanism may be local to a server or may leverage the +underlying security services. On the basis of the validation, the web +server sets a credential for the user.

    +
    +
    +

    Figure 47-2 Initial Authentication

    +
    + +
    +
    +

    47.1.1.3 Step 3: URL Authorization

    +
    +

    The credential is used for future determinations of whether the user is +authorized to access restricted resources it may request. The web server +consults the security policy associated with the web resource to +determine the security roles that are permitted access to the resource. +The security policy is derived from annotations or from the deployment +descriptor. The web container then tests the user’s credential against +each role to determine whether it can map the user to the role. +Figure 47-3 shows this process.

    +
    +
    +

    Figure 47-3 URL Authorization

    +
    + +
    +

    The web server’s evaluation stops with an "is authorized" outcome when +the web server is able to map the user to a role. A "not authorized" +outcome is reached if the web server is unable to map the user to any of +the permitted roles.

    +
    +
    +
    +

    47.1.1.4 Step 4: Fulfilling the Original Request

    +
    +

    If the user is authorized, the web server returns the result of the +original URL request, as shown in Figure 47-4.

    +
    +
    +

    Figure 47-4 Fulfilling the Original Request

    +
    + +
    +

    In our example, the response URL of a web page is returned, enabling the +user to post form data that needs to be handled by the business-logic +component of the application. See +Chapter 48, "Getting Started Securing +Web Applications" for more information on protecting web applications.

    +
    +
    +
    +

    47.1.1.5 Step 5: Invoking Enterprise Bean Business Methods

    +
    +

    The web page performs the remote method call to the enterprise bean, +using the user’s credential to establish a secure association between +the web page and the enterprise bean, as shown in Figure +47-5. The association is implemented as two related security contexts: +one in the web server and one in the EJB container.

    +
    +
    +

    Figure 47-5 Invoking an Enterprise Bean Business Method

    +
    + +
    +

    The EJB container is responsible for enforcing access control on the +enterprise bean method. The container consults the security policy +associated with the enterprise bean to determine the security roles that +are permitted access to the method. The security policy is derived from +annotations or from the deployment descriptor. For each role, the EJB +container determines whether it can map the caller to the role by using +the security context associated with the call.

    +
    +
    +

    The container’s evaluation stops with an "is authorized" outcome when +the container is able to map the caller’s credential to a role. A "not +authorized" outcome is reached if the container is unable to map the +caller to any of the permitted roles. A "not authorized" result causes +an exception to be thrown by the container and propagated back to the +calling web page.

    +
    +
    +

    If the call is authorized, the container dispatches control to the +enterprise bean method. The result of the bean’s execution of the call +is returned to the web page and ultimately to the user by the web server +and the web client.

    +
    +
    +
    +
    +

    47.1.2 Features of a Security Mechanism

    +
    +

    A properly implemented security mechanism will provide the following +functionality:

    +
    +
    +
      +
    • +

      Prevent unauthorized access to application functions and business or +personal data (authentication)

      +
    • +
    • +

      Hold system users accountable for operations they perform +(non-repudiation)

      +
    • +
    • +

      Protect a system from service interruptions and other breaches that +affect quality of service

      +
    • +
    +
    +
    +

    Ideally, properly implemented security mechanisms will also be

    +
    +
    +
      +
    • +

      Easy to administer

      +
    • +
    • +

      Transparent to system users

      +
    • +
    • +

      Interoperable across application and enterprise boundaries

      +
    • +
    +
    +
    +
    +

    47.1.3 Characteristics of Application Security

    +
    +

    Java EE applications consist of components that can contain both +protected and unprotected resources. Often, you need to protect +resources to ensure that only authorized users have access. +Authorization provides controlled access to protected resources. +Authorization is based on identification and authentication. +Identification is a process that enables recognition of an entity by a +system, and authentication is a process that verifies the identity of a +user, device, or other entity in a computer system, usually as a +prerequisite to allowing access to resources in a system.

    +
    +
    +

    Authorization and authentication are not required for an entity to +access unprotected resources. Accessing a resource without +authentication is referred to as unauthenticated, or anonymous, access.

    +
    +
    +

    The characteristics of application security that, when properly +addressed, help to minimize the security threats faced by an enterprise +include the following.

    +
    +
    +
      +
    • +

      Authentication: The means by which communicating entities, such as +client and server, prove to each other that they are acting on behalf of +specific identities that are authorized for access. This ensures that +users are who they say they are.

      +
    • +
    • +

      Authorization, or access control: The means by which interactions with +resources are limited to collections of users or programs for the +purpose of enforcing integrity, confidentiality, or availability +constraints. This ensures that users have permission to perform +operations or access data.

      +
    • +
    • +

      Data integrity: The means used to prove that information has not been +modified by a third party, an entity other than the source of the +information. For example, a recipient of data sent over an open network +must be able to detect and discard messages that were modified after +they were sent. This ensures that only authorized users can modify data.

      +
    • +
    • +

      Confidentiality, or data privacy: The means used to ensure that +information is made available only to users who are authorized to access +it. This ensures that only authorized users can view sensitive data.

      +
    • +
    • +

      Non-repudiation: The means used to prove that a user who performed +some action cannot reasonably deny having done so. This ensures that +transactions can be proved to have happened.

      +
    • +
    • +

      Quality of Service: The means used to provide better service to +selected network traffic over various technologies.

      +
    • +
    • +

      Auditing: The means used to capture a tamper-resistant record of +security-related events for the purpose of being able to evaluate the +effectiveness of security policies and mechanisms. To enable this, the +system maintains a record of transactions and security information.

      +
    • +
    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    +
    + + + \ No newline at end of file diff --git a/security-intro002.html b/security-intro002.html new file mode 100644 index 0000000..1b0b15f --- /dev/null +++ b/security-intro002.html @@ -0,0 +1,366 @@ + + + + + + Security Mechanisms + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    47.2 Security Mechanisms

    +
    +
    +

    The characteristics of an application should be considered when deciding +the layer and type of security to be provided for applications. The +following sections discuss the characteristics of the common mechanisms +that can be used to secure Java EE applications. Each of these +mechanisms can be used individually or with others to provide protection +layers based on the specific needs of your implementation.

    +
    +
    +

    The following topics are addressed here:

    +
    + +
    +

    47.2.1 Java SE Security Mechanisms

    +
    +

    Java SE provides support for a variety of security features and +mechanisms.

    +
    +
    +
      +
    • +

      Java Authentication and Authorization Service (JAAS) is a set of APIs +that enable services to authenticate and enforce access controls upon +users. JAAS provides a pluggable and extensible framework for +programmatic user authentication and authorization. JAAS is a core Java +SE API and is an underlying technology for Java EE security mechanisms.

      +
    • +
    • +

      Java Generic Security Services (Java GSS-API) is a token-based API +used to securely exchange messages between communicating applications. +The GSS-API offers application programmers uniform access to security +services atop a variety of underlying security mechanisms, including +Kerberos.

      +
    • +
    • +

      Java Cryptography Extension (JCE) provides a framework and +implementations for encryption, key generation and key agreement, and +Message Authentication Code (MAC) algorithms. Support for encryption +includes symmetric, asymmetric, block, and stream ciphers. Block ciphers +operate on groups of bytes; stream ciphers operate on one byte at a +time. The software also supports secure streams and sealed objects.

      +
    • +
    • +

      Java Secure Sockets Extension (JSSE) provides a framework and an +implementation for a Java version of the Secure Sockets Layer (SSL) and +Transport Layer Security (TLS) protocols and includes functionality for +data encryption, server authentication, message integrity, and optional +client authentication to enable secure Internet communications.

      +
    • +
    • +

      Simple Authentication and Security Layer (SASL) is an Internet +standard (RFC 2222) that specifies a protocol for authentication and +optional establishment of a security layer between client and server +applications. SASL defines how authentication data is to be exchanged +but does not itself specify the contents of that data. SASL is a +framework into which specific authentication mechanisms that specify the +contents and semantics of the authentication data can fit.

      +
    • +
    +
    +
    +

    Java SE also provides a set of tools for managing keystores, +certificates, and policy files; generating and verifying JAR signatures; +and obtaining, listing, and managing Kerberos tickets.

    +
    +
    +

    For more information on Java SE security, visit +http://docs.oracle.com/javase/7/docs/technotes/guides/security/.

    +
    +
    +
    +

    47.2.2 Java EE Security Mechanisms

    +
    +

    Java EE security services are provided by the component container and +can be implemented by using declarative or programmatic techniques (see +Securing Containers). Java EE security +services provide a robust and easily configured security mechanism for +authenticating users and authorizing access to application functions and +associated data at many different layers. Java EE security services are +separate from the security mechanisms of the operating system.

    +
    +
    +

    47.2.2.1 Application-Layer Security

    +
    +

    In Java EE, component containers are responsible for providing +application-layer security, security services for a specific application +type tailored to the needs of the application. At the application layer, +application firewalls can be used to enhance application protection by +protecting the communication stream and all associated application +resources from attacks.

    +
    +
    +

    Java EE security is easy to implement and configure and can offer +fine-grained access control to application functions and data. However, +as is inherent to security applied at the application layer, security +properties are not transferable to applications running in other +environments and protect data only while it is residing in the +application environment. In the context of a traditional enterprise +application, this is not necessarily a problem, but when applied to a +web services application, in which data often travels across several +intermediaries, you would need to use the Java EE security mechanisms +along with transport-layer security and message-layer security for a +complete security solution.

    +
    +
    +

    The advantages of using application-layer security include the +following.

    +
    +
    +
      +
    • +

      Security is uniquely suited to the needs of the application.

      +
    • +
    • +

      Security is fine grained, with application-specific settings.

      +
    • +
    +
    +
    +

    The disadvantages of using application-layer security include the +following.

    +
    +
    +
      +
    • +

      The application is dependent on security attributes that are not +transferable between application types.

      +
    • +
    • +

      Support for multiple protocols makes this type of security vulnerable.

      +
    • +
    • +

      Data is close to or contained within the point of vulnerability.

      +
    • +
    +
    +
    +

    For more information on providing security at the application layer, see +Securing Containers.

    +
    +
    +
    +

    47.2.2.2 Transport-Layer Security

    +
    +

    Transport-layer security is provided by the transport mechanisms used to +transmit information over the wire between clients and providers; thus, +transport-layer security relies on secure HTTP transport (HTTPS) using +Secure Sockets Layer (SSL). Transport security is a point-to-point +security mechanism that can be used for authentication, message +integrity, and confidentiality. When running over an SSL-protected +session, the server and client can authenticate each other and negotiate +an encryption algorithm and cryptographic keys before the application +protocol transmits or receives its first byte of data. Security is +active from the time the data leaves the client until it arrives at its +destination, or vice versa, even across intermediaries. The problem is +that the data is not protected once it gets to the destination. One +solution is to encrypt the message before sending.

    +
    +
    +

    Transport-layer security is performed in a series of phases, as follows.

    +
    +
    +
      +
    • +

      The client and server agree on an appropriate algorithm.

      +
    • +
    • +

      A key is exchanged using public-key encryption and certificate-based +authentication.

      +
    • +
    • +

      A symmetric cipher is used during the information exchange.

      +
    • +
    +
    +
    +

    Digital certificates are necessary when running HTTPS using SSL. The +HTTPS service of most web servers will not run unless a digital +certificate has been installed. Digital certificates have already been +created for GlassFish Server.

    +
    +
    +

    The advantages of using transport-layer security include the following.

    +
    +
    +
      +
    • +

      It is relatively simple, well-understood, standard technology.

      +
    • +
    • +

      It applies to both a message body and its attachments.

      +
    • +
    +
    +
    +

    The disadvantages of using transport-layer security include the +following.

    +
    +
    +
      +
    • +

      It is tightly coupled with the transport-layer protocol.

      +
    • +
    • +

      It represents an all-or-nothing approach to security. This implies +that the security mechanism is unaware of message contents, so that you +cannot selectively apply security to portions of the message as you can +with message-layer security.

      +
    • +
    • +

      Protection is transient. The message is protected only while in +transit. Protection is removed automatically by the endpoint when it +receives the message.

      +
    • +
    • +

      It is not an end-to-end solution, simply point-to-point.

      +
    • +
    +
    +
    +

    For more information on transport-layer security, see +Establishing a Secure Connection Using +SSL.

    +
    +
    +
    +

    47.2.2.3 Message-Layer Security

    +
    +

    In message-layer security, security information is contained within the +SOAP message and/or SOAP message attachment, which allows security +information to travel along with the message or attachment. For example, +a portion of the message may be signed by a sender and encrypted for a +particular receiver. When sent from the initial sender, the message may +pass through intermediate nodes before reaching its intended receiver. +In this scenario, the encrypted portions continue to be opaque to any +intermediate nodes and can be decrypted only by the intended receiver. +For this reason, message-layer security is also sometimes referred to as +end-to-end security.

    +
    +
    +

    The advantages of message-layer security include the following.

    +
    +
    +
      +
    • +

      Security stays with the message over all hops and after the message +arrives at its destination.

      +
    • +
    • +

      Security can be selectively applied to different portions of a message +and, if using XML Web Services Security, to attachments.

      +
    • +
    • +

      Message security can be used with intermediaries over multiple hops.

      +
    • +
    • +

      Message security is independent of the application environment or +transport protocol.

      +
    • +
    +
    +
    +

    The disadvantage of using message-layer security is that it is +relatively complex and adds some overhead to processing.

    +
    +
    +

    GlassFish Server supports message security using Metro, a web services +stack that uses Web Services Security (WSS) to secure messages. Because +this message security is specific to Metro and is not a part of the Java +EE platform, this tutorial does not discuss using WSS to secure +messages. See the Metro User’s Guide at https://metro.java.net/guide/.

    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    +
    +
    + + + \ No newline at end of file diff --git a/security-intro003.html b/security-intro003.html new file mode 100644 index 0000000..4a9199e --- /dev/null +++ b/security-intro003.html @@ -0,0 +1,206 @@ + + + + + + Securing Containers + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    47.3 Securing Containers

    +
    +
    +

    In Java EE, the component containers are responsible for providing +application security. A container provides two types of security: +declarative and programmatic.

    +
    +
    +

    The following topics are addressed here:

    +
    + +
    +

    47.3.1 Using Annotations to Specify Security Information

    +
    +

    Annotations enable a declarative style of programming and so encompass +both the declarative and programmatic security concepts. Users can +specify information about security within a class file by using +annotations. GlassFish Server uses this information when the application +is deployed. Not all security information can be specified by using +annotations, however. Some information must be specified in the +application deployment descriptors.

    +
    +
    +

    Specific annotations that can be used to specify security information +within an enterprise bean class file are described in +Securing an Enterprise Bean Using +Declarative Security. Chapter 48, +"Getting Started Securing Web Applications", describes how to use +annotations to secure web applications where possible. Deployment +descriptors are described only where necessary.

    +
    +
    +

    For more information on annotations, see +Further Information about Security.

    +
    +
    +
    +

    47.3.2 Using Deployment Descriptors for Declarative Security

    +
    +

    Declarative security can express an application component’s security +requirements by using deployment descriptors. Because deployment +descriptor information is declarative, it can be changed without the +need to modify the source code. At runtime, the Java EE server reads the +deployment descriptor and acts upon the corresponding application, +module, or component accordingly. Deployment descriptors must provide +certain structural information for each component if this information +has not been provided in annotations or is not to be defaulted.

    +
    +
    +

    This part of the tutorial does not document how to create deployment +descriptors; it describes only the elements of the deployment descriptor +relevant to security. NetBeans IDE provides tools for creating and +modifying deployment descriptors.

    +
    +
    +

    Different types of components use different formats, or schemas, for +their deployment descriptors. The security elements of deployment +descriptors discussed in this tutorial include the following.

    +
    +
    +
      +
    • +

      Web components may use a web application deployment descriptor named +web.xml.

      +
      +

      The schema for web component deployment descriptors is provided in +Chapter 14 of the Java Servlet 4.0 specification (JSR 369), which can be +downloaded from http://jcp.org/en/jsr/detail?id=369.

      +
      +
    • +
    • +

      Enterprise JavaBeans components may use an EJB deployment descriptor +named META-INF/ejb-jar.xml, contained in the EJB JAR file.

      +
      +

      The schema for enterprise bean deployment descriptors is provided in +Chapter 14 of the EJB 3.2 Core Contracts and Requirements Specification +(JSR 345), which can be downloaded from +http://jcp.org/en/jsr/detail?id=345.

      +
      +
    • +
    +
    +
    +
    +

    47.3.3 Using Programmatic Security

    +
    +

    Programmatic security is embedded in an application and is used to make +security decisions. Programmatic security is useful when declarative +security alone is not sufficient to express the security model of an +application. The API for programmatic security consists of methods of +the EJBContext interface and the HttpServletRequest interface. These +methods allow components to make business-logic decisions based on the +security role of the caller or remote user.

    +
    +
    +

    Programmatic security is discussed in more detail in the following +sections:

    +
    + +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    +
    + + + \ No newline at end of file diff --git a/security-intro004.html b/security-intro004.html new file mode 100644 index 0000000..aaf2af7 --- /dev/null +++ b/security-intro004.html @@ -0,0 +1,129 @@ + + + + + + Securing GlassFish Server + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    47.4 Securing GlassFish Server

    +
    +
    +

    This tutorial describes deployment to GlassFish Server, which provides +highly secure, interoperable, and distributed component computing based +on the Java EE security model. GlassFish Server supports the Java EE 7 +security model. You can configure GlassFish Server for the following +purposes.

    +
    +
    +
      +
    • +

      Adding, deleting, or modifying authorized users. For more information +on this topic, see Working with Realms, +Users, Groups, and Roles.

      +
    • +
    • +

      Configuring secure HTTP and Internet Inter-Orb Protocol (IIOP) +listeners.

      +
    • +
    • +

      Configuring secure Java Management Extensions (JMX) connectors.

      +
    • +
    • +

      Adding, deleting, or modifying existing or custom realms.

      +
    • +
    • +

      Defining an interface for pluggable authorization providers using Java +Authorization Contract for Containers (JACC). JACC defines security +contracts between GlassFish Server and authorization policy modules. +These contracts specify how the authorization providers are installed, +configured, and used in access decisions.

      +
    • +
    • +

      Using pluggable audit modules.

      +
    • +
    • +

      Customizing authentication mechanisms. All implementations of Java EE +7 compatible web containers are required to support the Servlet Profile +of JSR 196, which offers an avenue for customizing the authentication +mechanism applied by the web container on behalf of one or more +applications.

      +
    • +
    • +

      Setting and changing policy permissions for an application.

      +
    • +
    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    + + + \ No newline at end of file diff --git a/security-intro005.html b/security-intro005.html new file mode 100644 index 0000000..4e35315 --- /dev/null +++ b/security-intro005.html @@ -0,0 +1,548 @@ + + + + + + Working with Realms, Users, Groups, and Roles + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    47.5 Working with Realms, Users, Groups, and Roles

    +
    +
    +

    You often need to protect resources to ensure that only authorized users +have access. See Characteristics of +Application Security for an introduction to the concepts of +authentication, identification, and authorization.

    +
    +
    +

    This section discusses setting up users so that they can be correctly +identified and either given access to protected resources or denied +access if they are not authorized to access the protected resources. To +authenticate a user, you need to follow these basic steps.

    +
    +
    +
      +
    1. +

      The application developer writes code to prompt for a user name and +password. The various methods of authentication are discussed in +Specifying Authentication +Mechanisms.

      +
    2. +
    3. +

      The application developer communicates how to set up security for +the deployed application by use of a metadata annotation or deployment +descriptor. This step is discussed in Setting Up Security +Roles.

      +
    4. +
    5. +

      The server administrator sets up authorized users and groups in +GlassFish Server. This is discussed in Managing Users and +Groups in GlassFish Server.

      +
    6. +
    7. +

      The application deployer maps the application’s security roles to +users, groups, and principals defined in GlassFish Server. This topic is +discussed in Mapping Roles to Users and Groups.

      +
    8. +
    +
    +
    +

    47.5.1 What Are Realms, Users, Groups, and Roles?

    +
    +

    A realm is a security policy domain defined for a web or application +server. A realm contains a collection of users, who may or may not be +assigned to a group. Managing users in GlassFish Server is discussed in +Managing Users and Groups in GlassFish Server.

    +
    +
    +

    An application will often prompt for a user name and password before +allowing access to a protected resource. After the user name and +password have been entered, that information is passed to the server, +which either authenticates the user and sends the protected resource or +does not authenticate the user, in which case access to the protected +resource is denied. This type of user authentication is discussed in +Specifying an Authentication +Mechanism in the Deployment Descriptor.

    +
    +
    +

    In some applications, authorized users are assigned to roles. In this +situation, the role assigned to the user in the application must be +mapped to a principal or group defined on the application server. +Figure 47-6 shows this. More information on mapping roles +to users and groups can be found in Setting Up Security +Roles.

    +
    +
    +

    Figure 47-6 Mapping Roles to Users and Groups

    +
    + +
    +

    The following sections provide more information on realms, users, +groups, and roles.

    +
    +
    +

    47.5.1.1 What Is a Realm?

    +
    +

    The protected resources on a server can be partitioned into a set of +protection spaces, each with its own authentication scheme and/or +authorization database containing a collection of users and groups. A +realm is a complete database of users and groups identified as valid +users of one or more applications and controlled by the same +authentication policy.

    +
    +
    +

    The Java EE server authentication service can govern users in multiple +realms. The file, admin-realm, and certificate realms come +preconfigured for GlassFish Server.

    +
    +
    +

    In the file realm, the server stores user credentials locally in a +file named keyfile. You can use the Administration Console to manage +users in the file realm. When using the file realm, the server +authentication service verifies user identity by checking the file +realm. This realm is used for the authentication of all clients except +for web browser clients that use HTTPS and certificates.

    +
    +
    +

    In the certificate realm, the server stores user credentials in a +certificate database. When using the certificate realm, the server +uses certificates with HTTPS to authenticate web clients. To verify the +identity of a user in the certificate realm, the authentication +service verifies an X.509 certificate. For step-by-step instructions for +creating this type of certificate, see +Working with Digital Certificates. +The common name field of the X.509 certificate is used as the principal +name.

    +
    +
    +

    The admin-realm is also a file realm and stores administrator user +credentials locally in a file named admin-keyfile. You can use the +Administration Console to manage users in this realm in the same way you +manage users in the file realm. For more information, see +Managing Users and Groups in GlassFish Server.

    +
    +
    +
    +

    47.5.1.2 What Is a User?

    +
    +

    A user is an individual or application program identity that has been +defined in GlassFish Server. In a web application, a user can have +associated with that identity a set of roles that entitle the user to +access all resources protected by those roles. Users can be associated +with a group.

    +
    +
    +

    A Java EE user is similar to an operating system user. Typically, both +types of users represent people. However, these two types of users are +not the same. The Java EE server authentication service has no knowledge +of the user name and password you provide when you log in to the +operating system. The Java EE server authentication service is not +connected to the security mechanism of the operating system. The two +security services manage users that belong to different realms.

    +
    +
    +
    +

    47.5.1.3 What Is a Group?

    +
    +

    A group is a set of authenticated users, classified by common traits, +defined in GlassFish Server. A Java EE user of the file realm can +belong to a group in GlassFish Server. (A user in the certificate +realm cannot.) A group in GlassFish Server is a category of users +classified by common traits, such as job title or customer profile. For +example, most customers of an e-commerce application might belong to the +CUSTOMER group, but the big spenders would belong to the PREFERRED +group. Categorizing users into groups makes it easier to control the +access of large numbers of users.

    +
    +
    +

    A group in GlassFish Server has a different scope from a role. A group +is designated for the entire GlassFish Server, whereas a role is +associated only with a specific application in GlassFish Server.

    +
    +
    +
    +

    47.5.1.4 What Is a Role?

    +
    +

    A role is an abstract name for the permission to access a particular set +of resources in an application. A role can be compared to a key that can +open a lock. Many people might have a copy of the key. The lock doesn’t +care who you are, only that you have the right key.

    +
    +
    +
    +

    47.5.1.5 Some Other Terminology

    +
    +

    The following terminology is also used to describe the security +requirements of the Java EE platform.

    +
    +
    +
      +
    • +

      A principal is an entity that can be authenticated by an +authentication protocol in a security service that is deployed in an +enterprise. A principal is identified by using a principal name and +authenticated by using authentication data.

      +
    • +
    • +

      A security policy domain, also known as a security domain or realm, is +a scope over which a common security policy is defined and enforced by +the security administrator of the security service.

      +
    • +
    • +

      Security attributes are a set of attributes associated with every +principal. The security attributes have many uses: for example, access +to protected resources and auditing of users. Security attributes can be +associated with a principal by an authentication protocol.

      +
    • +
    • +

      A credential is an object that contains or references security +attributes used to authenticate a principal for Java EE services. A +principal acquires a credential upon authentication or from another +principal that allows its credential to be used.

      +
    • +
    +
    +
    +
    +
    +

    47.5.2 Managing Users and Groups in GlassFish Server

    +
    +

    Follow these steps for managing users before you run the tutorial +examples.

    +
    +
    +

    The following topics are addressed here:

    +
    + +
    +

    47.5.2.1 To Add Users to GlassFish Server

    +
    +
      +
    1. +

      Start GlassFish Server, if you haven’t already done so.

      +
      +

      Information on starting GlassFish Server is available in +Starting and Stopping GlassFish Server.

      +
      +
    2. +
    3. +

      Start the Administration Console, if you haven’t already done so.

      +
      +

      To start the Administration Console, open a web browser and specify the +URL http://localhost:4848/. If you changed the default Admin port +during installation, enter the correct port number in place of 4848.

      +
      +
    4. +
    5. +

      In the navigation tree, expand the Configurations node, then expand +the server-config node.

      +
    6. +
    7. +

      Expand the Security node.

      +
    8. +
    9. +

      Expand the Realms node.

      +
    10. +
    11. +

      Select the realm to which you are adding users.

      +
      +
        +
      • +

        Select the file realm to add users you want to access applications +running in this realm.

        +
        +

        For the example security applications, select the file realm.

        +
        +
      • +
      • +

        Select the admin-realm to add users you want to enable as system +administrators of GlassFish Server.

        +
        +

        You cannot add users to the certificate realm by using the +Administration Console. In the certificate realm, you can add only +certificates. For information on adding (importing) certificates to the +certificate realm, see Adding +Users to the Certificate Realm.

        +
        +
      • +
      +
      +
    12. +
    13. +

      On the Edit Realm page, click Manage Users.

      +
    14. +
    15. +

      On the File Users or Admin Users page, click New to add a new user +to the realm.

      +
    16. +
    17. +

      On the New File Realm User page, enter values in the User ID, Group +List, New Password, and Confirm New Password fields.

      +
      +

      For the Admin Realm, the Group List field is read-only, and the group +name is asadmin. Restart GlassFish Server and the Administration +Console after you add a user to the Admin Realm.

      +
      +
      +

      For more information on these properties, see Working with +Realms, Users, Groups, and Roles.

      +
      +
      +

      For the example security applications, specify a user with any name and +password you like, but make sure that the user is assigned to the group +TutorialUser. The user name and password are case-sensitive. Keep a +record of the user name and password for working with the examples later +in this tutorial.

      +
      +
    18. +
    19. +

      Click OK to add this user to the realm, or click Cancel to quit +without saving.

      +
    20. +
    +
    +
    +
    +
    +

    47.5.3 Setting Up Security Roles

    +
    +

    When you design an enterprise bean or web component, you should always +think about the kinds of users who will access the component. For +example, a web application for a human resources department might have a +different request URL for someone who has been assigned the role of +DEPT_ADMIN than for someone who has been assigned the role of +DIRECTOR. The DEPT_ADMIN role may let you view employee data, but +the DIRECTOR role enables you to modify employee data, including +salary data. Each of these security roles is an abstract logical +grouping of users that is defined by the person who assembles the +application. When an application is deployed, the deployer will map the +roles to security identities in the operational environment, as shown in +Figure 47-6.

    +
    +
    +

    For Java EE components, you define security roles using the +@DeclareRoles and @RolesAllowed metadata annotations.

    +
    +
    +

    The following is an example of an application in which the role of +DEPT-ADMIN is authorized for methods that review employee payroll +data, and the role of DIRECTOR is authorized for methods that change +employee payroll data.

    +
    +
    +

    The enterprise bean would be annotated as shown in the following code:

    +
    +
    +
    +
    import javax.annotation.security.DeclareRoles;
    +import javax.annotation.security.RolesAllowed;
    +...
    +@DeclareRoles({"DEPT-ADMIN", "DIRECTOR"})
    +@Stateless public class PayrollBean implements Payroll {
    +    @Resource SessionContext ctx;
    +
    +
    +    @RolesAllowed("DEPT-ADMIN")
    +    public void reviewEmployeeInfo(EmplInfo info) {
    +
    +        oldInfo = ... read from database;
    +
    +        // ...
    +    }
    +
    +    @RolesAllowed("DIRECTOR")
    +    public void updateEmployeeInfo(EmplInfo info) {
    +
    +        newInfo = ... update database;
    +
    +        // ...
    +    }
    +    ...
    + }
    +
    +
    +
    +

    For a servlet, you can use the @HttpConstraint annotation within the +@ServletSecurity annotation to specify the roles that are allowed to +access the servlet. For example, a servlet might be annotated as +follows:

    +
    +
    +
    +
    @WebServlet(name = "PayrollServlet", urlPatterns = {"/payroll"})
    +@ServletSecurity(
    +@HttpConstraint(transportGuarantee = TransportGuarantee.CONFIDENTIAL,
    +    rolesAllowed = {"DEPT-ADMIN", "DIRECTOR"}))
    +public class GreetingServlet extends HttpServlet {
    +
    +
    + +
    +

    After users have provided their login information and the application +has declared what roles are authorized to access protected parts of an +application, the next step is to map the security role to the name of a +user, or principal.

    +
    +
    +
    +

    47.5.4 Mapping Roles to Users and Groups

    +
    +

    When you are developing a Java EE application, you don’t need to know +what categories of users have been defined for the realm in which the +application will be run. In the Java EE platform, the security +architecture provides a mechanism for mapping the roles defined in the +application to the users or groups defined in the runtime realm.

    +
    +
    +

    The role names used in the application are often the same as the group +names defined in GlassFish Server. Under these circumstances, you can +enable a default principal-to-role mapping in GlassFish Server by using +the Administration Console. The task +To Set Up Your System for Running the +Security Examples explains how to do this. All the tutorial security +examples use default principal-to-role mapping. With that setting +enabled, if the group name defined on GlassFish Server matches the role +name defined in the application, there is no need to use the runtime +deployment descriptor to provide a mapping. The application server will +implicitly make this mapping, as long as the names of the groups and +roles match.

    +
    +
    +

    If the role names used in an application are not the same as the group +names defined on the server, use the runtime deployment descriptor to +specify the mapping. The following example demonstrates how to do this +mapping in the glassfish-web.xml file, which is the file used for web +applications:

    +
    +
    +
    +
    <glassfish-web-app>
    +    ...
    +    <security-role-mapping>
    +        <role-name>Mascot</role-name>
    +        <principal-name>Duke</principal-name>
    +    </security-role-mapping>
    +
    +    <security-role-mapping>
    +        <role-name>Admin</role-name>
    +        <group-name>Director</group-name>
    +    </security-role-mapping>
    +    ...
    +</glassfish-web-app>
    +
    +
    +
    +

    A role can be mapped to specific principals, specific groups, or both. +The principal or group names must be valid principals or groups in the +current default realm or in the realm specified in the login-config +element. In this example, the role of Mascot used in the application +is mapped to a principal, named Duke, that exists on the application +server. Mapping a role to a specific principal is useful when the person +occupying that role may change. For this application, you would need to +modify only the runtime deployment descriptor rather than search and +replace throughout the application for references to this principal.

    +
    +
    +

    Also in this example, the role of Admin is mapped to a group of users +assigned the group name of Director. This is useful because the group +of people authorized to access director-level administrative data has to +be maintained only in GlassFish Server. The application developer does +not need to know who these people are, but only needs to define the +group of people who will be given access to the information.

    +
    +
    +

    The role-name must match the role-name in the security-role +element of the corresponding deployment descriptor or the role name +defined in a @DeclareRoles annotation.

    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    +
    + + + \ No newline at end of file diff --git a/security-intro006.html b/security-intro006.html new file mode 100644 index 0000000..f2c2aca --- /dev/null +++ b/security-intro006.html @@ -0,0 +1,205 @@ + + + + + + Establishing a Secure Connection Using SSL + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    47.6 Establishing a Secure Connection Using SSL

    +
    +
    +

    Secure Sockets Layer (SSL) technology is security that is implemented at +the transport layer (see +Transport-Layer Security for more +information about transport-layer security). SSL allows web browsers and +web servers to communicate over a secure connection. In this secure +connection, the data is encrypted before being sent and then is +decrypted upon receipt and before processing. Both the browser and the +server encrypt all traffic before sending any data.

    +
    +
    +

    SSL addresses the following important security considerations.

    +
    +
    +
      +
    • +

      Authentication: During your initial attempt to communicate with a web +server over a secure connection, that server will present your web +browser with a set of credentials in the form of a server certificate +(also called a public key certificate). The purpose of the certificate +is to verify that the site is who and what it claims to be. In some +cases, the server may request a certificate proving that the client is +who and what it claims to be; this mechanism is known as client +authentication.

      +
    • +
    • +

      Confidentiality: When data is being passed between the client and the +server on a network, third parties can view and intercept this data. SSL +responses are encrypted so that the data cannot be deciphered by the +third party and the data remains confidential.

      +
    • +
    • +

      Integrity: When data is being passed between the client and the server +on a network, third parties can view and intercept this data. SSL helps +guarantee that the data will not be modified in transit by that third +party.

      +
    • +
    +
    +
    +

    The SSL protocol is designed to be as efficient as securely possible. +However, encryption and decryption are computationally expensive +processes from a performance standpoint. It is not strictly necessary to +run an entire web application over SSL, and it is customary for a +developer to decide which pages require a secure connection and which do +not. Pages that might require a secure connection include those for +login, personal information, shopping cart checkouts, or credit card +information transmittal. Any page within an application can be requested +over a secure socket by simply prefixing the address with https: +instead of http:. Any pages that absolutely require a secure +connection should check the protocol type associated with the page +request and take the appropriate action if https: is not specified.

    +
    +
    +

    Using name-based virtual hosts on a secured connection can be +problematic. This is a design limitation of the SSL protocol itself. The +SSL handshake, whereby the client browser accepts the server +certificate, must occur before the HTTP request is accessed. As a +result, the request information containing the virtual host name cannot +be determined before authentication, and it is therefore not possible to +assign multiple certificates to a single IP address. If all virtual +hosts on a single IP address need to authenticate against the same +certificate, the addition of multiple virtual hosts should not interfere +with normal SSL operations on the server. Be aware, however, that most +client browsers will compare the server’s domain name against the domain +name listed in the certificate, if any; this is applicable primarily to +official certificates signed by a certificate authority (CA). If the +domain names do not match, these browsers will display a warning to the +client. In general, only address-based virtual hosts are commonly used +with SSL in a production environment.

    +
    +
    +

    47.6.1 Verifying and Configuring SSL Support

    +
    +

    As a general rule, you must address the following issues to enable SSL +for a server.

    +
    +
    +
      +
    • +

      There must be a Connector element for an SSL connector in the server +deployment descriptor.

      +
    • +
    • +

      There must be valid keystore and certificate files.

      +
    • +
    • +

      The location of the keystore file and its password must be specified +in the server deployment descriptor.

      +
    • +
    +
    +
    +

    An SSL HTTPS connector is already enabled in GlassFish Server.

    +
    +
    +

    For testing purposes and to verify that SSL support has been correctly +installed, load the default introduction page with a URL that connects +to the port defined in the server deployment descriptor:

    +
    +
    +
    +
    https://localhost:8181/
    +
    +
    +
    +

    The https in this URL indicates that the browser should be using the +SSL protocol. The localhost in this example assumes that you are +running the example on your local machine as part of the development +process. The 8181 in this example is the secure port that was +specified where the SSL connector was created. If you are using a +different server or port, modify this value accordingly.

    +
    +
    +

    The first time that you load this application, the New Site Certificate +or Security Alert dialog box appears. Click Next to move through the +series of dialog boxes, and click Finish when you reach the last dialog +box. The certificates will appear only the first time. When you accept +the certificates, subsequent hits to this site assume that you still +trust the content.

    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    +
    + + + \ No newline at end of file diff --git a/security-intro007.html b/security-intro007.html new file mode 100644 index 0000000..ad93819 --- /dev/null +++ b/security-intro007.html @@ -0,0 +1,126 @@ + + + + + + Further Information about Security + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    47.7 Further Information about Security

    +
    +
    +

    For more information about security in Java EE applications, see

    +
    +
    +
      +
    • +

      Java EE 7 specification:

      +
      +

      http://jcp.org/en/jsr/detail?id=342

      +
      +
    • +
    • +

      Enterprise JavaBeans 3.2 specification:

      +
      +

      http://jcp.org/en/jsr/detail?id=345

      +
      +
    • +
    • +

      Implementing Enterprise Web Services 1.3 specification:

      +
      +

      http://jcp.org/en/jsr/detail?id=109

      +
      +
    • +
    • +

      Java SE security information:

      +
      +

      http://docs.oracle.com/javase/7/docs/technotes/guides/security/

      +
      +
    • +
    • +

      Java Servlet 4.0 specification:

      +
      +

      http://jcp.org/en/jsr/detail?id=369

      +
      +
    • +
    • +

      Java Authorization Contract for Containers 1.5 specification:

      +
      +

      http://jcp.org/en/jsr/detail?id=115

      +
      +
    • +
    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    + + + \ No newline at end of file diff --git a/security-javaee.html b/security-javaee.html new file mode 100644 index 0000000..cf0813a --- /dev/null +++ b/security-javaee.html @@ -0,0 +1,104 @@ + + + + + + Getting Started Securing Enterprise Applications + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    49 Getting Started Securing Enterprise Applications

    +
    +
    +

    This chapter describes how to administer security for enterprise +applications.

    +
    +
    +

    The following topics are addressed here:

    +
    + +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    + + + \ No newline at end of file diff --git a/security-javaee001.html b/security-javaee001.html new file mode 100644 index 0000000..68da6d1 --- /dev/null +++ b/security-javaee001.html @@ -0,0 +1,110 @@ + + + + + + Basic Security Tasks for Enterprise Applications + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    49.1 Basic Security Tasks for Enterprise Applications

    +
    +
    +

    System administrators, application developers, bean providers, and +deployers are responsible for administering security for enterprise +applications. The basic security tasks are as follows:

    +
    +
    +
      +
    • +

      Setting up a database of users and assigning them to the proper group

      +
    • +
    • +

      Setting up identity propagation

      +
    • +
    • +

      Setting GlassFish Server properties that enable the applications to +run properly, such as setting default principal-to-role mapping

      +
    • +
    • +

      Annotating the classes and methods of an enterprise application to +provide information about which methods need to have restricted access

      +
    • +
    +
    +
    +

    The sections on the security examples in this chapter and the previous +chapter explain how to perform these tasks.

    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    + + + \ No newline at end of file diff --git a/security-javaee002.html b/security-javaee002.html new file mode 100644 index 0000000..b1f3ba5 --- /dev/null +++ b/security-javaee002.html @@ -0,0 +1,733 @@ + + + + + + Securing Enterprise Beans + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    49.2 Securing Enterprise Beans

    +
    +
    +

    Enterprise beans are Java EE components that implement EJB technology. +Enterprise beans run in the EJB container, a runtime environment within +GlassFish Server. Although transparent to the application developer, the +EJB container provides system-level services, such as transactions and +security to its enterprise beans, which form the core of transactional +Java EE applications.

    +
    +
    +

    Enterprise bean methods can be secured in either of the following ways.

    +
    +
    +
      +
    • +

      Declarative security (preferred): Expresses an application component’s +security requirements using either deployment descriptors or +annotations. The presence of an annotation in the business method of an +enterprise bean class that specifies method permissions is all that is +needed for method protection and authentication in some situations. This +section discusses this simple and efficient method of securing +enterprise beans.

      +
      +

      Because of some limitations to the simplified method of securing +enterprise beans, you would want to continue to use the deployment +descriptor to specify security information in some instances. An +authentication mechanism must be configured on the server for the simple +solution to work. Basic authentication is GlassFish Server’s default +authentication method.

      +
      +
      +

      This tutorial explains how to invoke user name/password authentication +of authorized users by decorating the enterprise application’s business +methods with annotations that specify method permissions.

      +
      +
      +

      To make the deployer’s task easier, the application developer can define +security roles. A security role is a grouping of permissions that a +given type of application users must have in order to successfully use +the application. For example, in a payroll application, some users will +want to view their own payroll information (employee), some will need to +view others' payroll information (manager), and some will need to be +able to change others' payroll information (payrollDept). The +application developer would determine the potential users of the +application and which methods would be accessible to which users. The +application developer would then decorate classes or methods of the +enterprise bean with annotations that specify the types of users +authorized to access those methods. Using annotations to specify +authorized users is described in Specifying Authorized Users +by Declaring Security Roles.

      +
      +
      +

      When one of the annotations is used to define method permissions, the +deployment system will automatically require user name/password +authentication. In this type of authentication, a user is prompted to +enter a user name and password, which will be compared against a +database of known users. If the user is found and the password matches, +the roles that the user is assigned will be compared against the roles +that are authorized to access the method. If the user is authenticated +and found to have a role that is authorized to access that method, the +data will be returned to the user.

      +
      +
      +

      Using declarative security is discussed in Securing an +Enterprise Bean Using Declarative Security.

      +
      +
    • +
    • +

      Programmatic security: For an enterprise bean, code embedded in a +business method that is used to access a caller’s identity +programmatically and that uses this information to make security +decisions. Programmatic security is useful when declarative security +alone is not sufficient to express the security model of an application.

      +
      +

      In general, security management should be enforced by the container in a +manner that is transparent to the enterprise beans' business methods. +The programmatic security APIs described in this chapter should be used +only in the less frequent situations in which the enterprise bean +business methods need to access the security-context information, such +as when you want to grant access based on the time of day or other +nontrivial condition checks for a particular role.

      +
      +
      +

      Programmatic security is discussed in Securing an Enterprise +Bean Programmatically.

      +
      +
    • +
    +
    + +
    +

    This section discusses securing a Java EE application where one or more +modules, such as EJB JAR files, are packaged into an EAR file, the +archive file that holds the application. Security annotations will be +used in the Java programming class files to specify authorized users and +basic, or user name/password, authentication.

    +
    +
    +

    Enterprise beans often provide the business logic of a web application. +In these cases, packaging the enterprise bean within the web +application’s WAR module simplifies deployment and application +organization. Enterprise beans may be packaged within a WAR module as +Java class files or within a JAR file that is bundled within the WAR +module. When a servlet or JavaServer Faces page handles the web front +end and the application is packaged into a WAR module as a Java class +file, security for the application can be handled in the application’s +web.xml file. The EJB in the WAR file can have its own deployment +descriptor, ejb-jar.xml, if required. Securing web applications using +web.xml is discussed in Chapter 48, +"Getting Started Securing Web Applications".

    +
    +
    +

    The following sections describe declarative and programmatic security +mechanisms that can be used to protect enterprise bean resources. The +protected resources include enterprise bean methods that are called from +application clients, web components, or other enterprise beans.

    +
    +
    +

    For more information on this topic, read the Enterprise JavaBeans 3.2 +specification. This document can be downloaded from +http://jcp.org/en/jsr/detail?id=345. Chapter 12 of this specification, +"Security Management," discusses security management for enterprise +beans.

    +
    +
    +

    49.2.1 Securing an Enterprise Bean Using Declarative Security

    +
    +

    Declarative security enables the application developer to specify which +users are authorized to access which methods of the enterprise beans and +to authenticate these users with basic, or user name/password, +authentication. Frequently, the person who is developing an enterprise +application is not the same person who is responsible for deploying the +application. An application developer who uses declarative security to +define method permissions and authentication mechanisms is passing along +to the deployer a security view of the enterprise beans contained in the +EJB JAR. When a security view is passed on to the deployer, he or she +uses this information to define method permissions for security roles. +If you don’t define a security view, the deployer will have to determine +what each business method does to determine which users are authorized +to call each method.

    +
    +
    +

    A security view consists of a set of security roles, a semantic grouping +of permissions that a given type of users of an application must have to +successfully access the application. Security roles are meant to be +logical roles, representing a type of user. You can define method +permissions for each security role. A method permission is a permission +to invoke a specified group of methods of an enterprise bean’s business +interface, home interface, component interface, and/or web service +endpoints. After method permissions are defined, user name/password +authentication will be used to verify the identity of the user.

    +
    +
    +

    It is important to keep in mind that security roles are used to define +the logical security view of an application. They should not be confused +with the user groups, users, principals, and other concepts that exist +in GlassFish Server. An additional step is required to map the roles +defined in the application to users, groups, and principals that are the +components of the user database in the file realm of GlassFish Server. +These steps are outlined in Mapping +Roles to Users and Groups.

    +
    +
    +

    The following sections show how an application developer uses +declarative security to either secure an application or to create a +security view to pass along to the deployer.

    +
    +
    +

    49.2.1.1 Specifying Authorized Users by Declaring Security Roles

    +
    +

    This section discusses how to use annotations to specify the method +permissions for the methods of a bean class. For more information on +these annotations, refer to the Common Annotations for the Java Platform +specification at http://jcp.org/en/jsr/detail?id=250.

    +
    +
    +

    Method permissions can be specified on the class, the business methods +of the class, or both. Method permissions can be specified on a method +of the bean class to override the method permissions value specified on +the entire bean class. The following annotations are used to specify +method permissions.

    +
    +
    +
      +
    • +

      @DeclareRoles: Specifies all the roles that the application will +use, including roles not specifically named in a @RolesAllowed +annotation. The set of security roles the application uses is the total +of the security roles defined in the @DeclareRoles and @RolesAllowed +annotations.

      +
      +

      The @DeclareRoles annotation is specified on a bean class, where it +serves to declare roles that can be tested (for example, by calling +isCallerInRole) from within the methods of the annotated class. When +declaring the name of a role used as a parameter to the +isCallerInRole(String roleName) method, the declared name must be the +same as the parameter value.

      +
      +
      +

      The following example code demonstrates the use of the @DeclareRoles +annotation:

      +
      +
      +
      +
      @DeclareRoles("BusinessAdmin")
      +public class Calculator {
      +    ...
      +}
      +
      +
      +
      +

      The syntax for declaring more than one role is as shown in the following +example:

      +
      +
      +
      +
      @DeclareRoles({"Administrator", "Manager", "Employee"})
      +
      +
      +
    • +
    • +

      @RolesAllowed("`list-of-roles")`: Specifies the security roles +permitted to access methods in an application. This annotation can be +specified on a class or on one or more methods. When specified at the +class level, the annotation applies to all methods in the class. When +specified on a method, the annotation applies to that method only and +overrides any values specified at the class level.

      +
      +

      To specify that no roles are authorized to access methods in an +application, use the @DenyAll annotation. To specify that a user in +any role is authorized to access the application, use the @PermitAll +annotation.

      +
      +
      +

      When used in conjunction with the @DeclareRoles annotation, the +combined set of security roles is used by the application.

      +
      +
      +

      The following example code demonstrates the use of the @RolesAllowed +annotation:

      +
      +
      +
      +
      @DeclareRoles({"Administrator", "Manager", "Employee"})
      +public class Calculator {
      +
      +    @RolesAllowed("Administrator")
      +    public void setNewRate(int rate) {
      +        ...
      +    }
      +}
      +
      +
      +
    • +
    • +

      @PermitAll: Specifies that all security roles are permitted to +execute the specified method or methods. The user is not checked against +a database to ensure that he or she is authorized to access this +application.

      +
      +

      This annotation can be specified on a class or on one or more methods. +Specifying this annotation on the class means that it applies to all +methods of the class. Specifying it at the method level means that it +applies to only that method.

      +
      +
      +

      The following example code demonstrates the use of the @PermitAll +annotation:

      +
      +
      +
      +
      import javax.annotation.security.*;
      +@RolesAllowed("RestrictedUsers")
      +public class Calculator {
      +
      +    @RolesAllowed("Administrator")
      +    public void setNewRate(int rate) {
      +        //...
      +    }
      +    @PermitAll
      +    public long convertCurrency(long amount) {
      +        //...
      +    }
      +}
      +
      +
      +
    • +
    • +

      @DenyAll: Specifies that no security roles are permitted to execute +the specified method or methods. This means that these methods are +excluded from execution in the Java EE container.

      +
      +

      The following example code demonstrates the use of the @DenyAll +annotation:

      +
      +
      +
      +
      import javax.annotation.security.*;
      +@RolesAllowed("Users")
      +public class Calculator {
      +    @RolesAllowed("Administrator")
      +    public void setNewRate(int rate) {
      +        //...
      +    }
      +    @DenyAll
      +    public long convertCurrency(long amount) {
      +        //...
      +    }
      +}
      +
      +
      +
    • +
    +
    +
    +

    The following code snippet demonstrates the use of the @DeclareRoles +annotation with the isCallerInRole method. In this example, the +@DeclareRoles annotation declares a role that the enterprise bean +PayrollBean uses to make the security check by using +isCallerInRole("payroll") to verify that the caller is authorized to +change salary data:

    +
    +
    +
    +
    @DeclareRoles("payroll")
    +@Stateless public class PayrollBean implements Payroll {
    +    @Resource SessionContext ctx;
    +
    +    public void updateEmployeeInfo(EmplInfo info) {
    +
    +        oldInfo = ... read from database;
    +
    +        // The salary field can be changed only by callers
    +        // who have the security role "payroll"
    +        Principal callerPrincipal = ctx.getCallerPrincipal();
    +        if (info.salary != oldInfo.salary && !ctx.isCallerInRole("payroll")) {
    +            throw new SecurityException(...);
    +        }
    +        ...
    +    }
    +    ...
    +}
    +
    +
    +
    +

    The following example code illustrates the use of the @RolesAllowed +annotation:

    +
    +
    +
    +
    @RolesAllowed("admin")
    +public class SomeClass {
    +    public void aMethod () {...}
    +    public void bMethod () {...}
    +    ...
    +}
    +
    +@Stateless public class MyBean extends SomeClass implements A  {
    +
    +    @RolesAllowed("HR")
    +    public void aMethod () {...}
    +
    +    public void cMethod () {...}
    +    ...
    +}
    +
    +
    +
    +

    In this example, assuming that aMethod, bMethod, and cMethod are +methods of business interface A, the method permissions values of +methods aMethod and bMethod are @RolesAllowed("HR") and +@RolesAllowed("admin"), respectively. The method permissions for +method cMethod have not been specified.

    +
    +
    +

    To clarify, the annotations are not inherited by the subclass itself. +Instead, the annotations apply to methods of the superclass that are +inherited by the subclass.

    +
    +
    +
    +

    49.2.1.2 Specifying an Authentication Mechanism and Secure Connection

    +
    +

    When method permissions are specified, basic user name/password +authentication will be invoked by GlassFish Server.

    +
    +
    +

    To use a different type of authentication or to require a secure +connection using SSL, specify this information in an application +deployment descriptor.

    +
    +
    +
    +
    +

    49.2.2 Securing an Enterprise Bean Programmatically

    +
    +

    Programmatic security, code that is embedded in a business method, is +used to access a caller’s identity programmatically and uses this +information to make security decisions within the method itself.

    +
    +
    +

    The following topics are addressed here:

    +
    + +
    +

    49.2.2.1 Accessing an Enterprise Bean Caller’s Security Context

    +
    +

    In general, security management should be enforced by the container in a +manner that is transparent to the enterprise bean’s business methods. +The security API described in this section should be used only in the +less frequent situations in which the enterprise bean business methods +need to access the security context information, such as when you want +to restrict access to a particular time of day.

    +
    +
    +

    The javax.ejb.EJBContext interface provides two methods that allow the +bean provider to access security information about the enterprise bean’s +caller.

    +
    +
    +
      +
    • +

      getCallerPrincipal allows the enterprise bean methods to obtain the +current caller principal’s name. The methods might, for example, use the +name as a key to information in a database.

      +
      +

      The following code sample illustrates the use of the +getCallerPrincipal method:

      +
      +
      +
      +
      @Stateless public class EmployeeServiceBean implements EmployeeService {
      +    @Resource SessionContext ctx;
      +    @PersistenceContext EntityManager em;
      +
      +    public void changePhoneNumber(...) {
      +        ...
      +        // obtain the caller principal
      +        callerPrincipal = ctx.getCallerPrincipal();
      +
      +        // obtain the caller principal's name
      +        callerKey = callerPrincipal.getName();
      +
      +        // use callerKey as primary key to find EmployeeRecord
      +        EmployeeRecord myEmployeeRecord =
      +            em.find(EmployeeRecord.class, callerKey);
      +
      +        // update phone number
      +        myEmployeeRecord.setPhoneNumber(...);
      +
      +        ...
      +    }
      +}
      +
      +
      +
      +

      In this example, the enterprise bean obtains the principal name of the +current caller and uses it as the primary key to locate an +EmployeeRecord entity. This example assumes that application has been +deployed such that the current caller principal contains the primary key +used for the identification of employees (for example, employee number).

      +
      +
    • +
    • +

      isCallerInRole allows the developer to code the security checks that +cannot be easily defined using method permissions. Such a check might +impose a role-based limit on a request, or it might depend on +information stored in the database.

      +
      +

      The enterprise bean code can use the isCallerInRole method to test +whether the current caller has been assigned to a given security role. +Security roles are defined by the bean provider or the application +assembler and are assigned by the deployer to principals or principal +groups that exist in the operational environment.

      +
      +
      +

      The following code sample illustrates the use of the isCallerInRole +method:

      +
      +
      +
      +
      @Stateless public class PayrollBean implements Payroll {
      +     @Resource SessionContext ctx;
      +
      +     public void updateEmployeeInfo(EmplInfo info) {
      +
      +         oldInfo = ... read from database;
      +
      +         // The salary field can be changed only by callers
      +         // who have the security role "payroll"
      +         if (info.salary != oldInfo.salary &&
      +             !ctx.isCallerInRole("payroll")) {
      +                 throw new SecurityException(...);
      +         }
      +         ...
      +     }
      +     ...
      + }
      +
      +
      +
    • +
    +
    +
    +

    You would use programmatic security in this way to dynamically control +access to a method, for example, when you want to deny access except +during a particular time of day. An example application that uses the +getCallerPrincipal and isCallerInRole methods is described in +The converter-secure Example: Securing +an Enterprise Bean with Programmatic Security.

    +
    +
    +
    +
    +

    49.2.3 Propagating a Security Identity (Run-As)

    +
    +

    You can specify whether a caller’s security identity should be used for +the execution of specified methods of an enterprise bean or whether a +specific run-as identity should be used. Figure 49-1 +illustrates this concept.

    +
    +
    +

    Figure 49-1 Security Identity Propagation

    +
    + +
    +

    In this illustration, an application client is making a call to an +enterprise bean method in one EJB container. This enterprise bean +method, in turn, makes a call to an enterprise bean method in another +container. The security identity during the first call is the identity +of the caller. The security identity during the second call can be any +of the following options.

    +
    +
    +
      +
    • +

      By default, the identity of the caller of the intermediate component +is propagated to the target enterprise bean. This technique is used when +the target container trusts the intermediate container.

      +
    • +
    • +

      A specific identity is propagated to the target enterprise bean. This +technique is used when the target container expects access using a +specific identity.

      +
    • +
    +
    +
    +

    To propagate an identity to the target enterprise bean, configure a +run-as identity for the bean, as described in Configuring a +Component’s Propagated Security Identity. Establishing a run-as +identity for an enterprise bean does not affect the identities of its +callers, which are the identities tested for permission to access the +methods of the enterprise bean. The run-as identity establishes the +identity that the enterprise bean will use when it makes calls.

    +
    +
    +

    The run-as identity applies to the enterprise bean as a whole, including +all the methods of the enterprise bean’s business interface, local and +remote interfaces, component interface, and web service endpoint +interfaces, the message listener methods of a message-driven bean, the +timeout method of an enterprise bean, and all internal methods of the +bean that might be called in turn.

    +
    +
    +

    49.2.3.1 Configuring a Component’s Propagated Security Identity

    +
    +

    You can configure an enterprise bean’s run-as, or propagated, security +identity by using the @RunAs annotation, which defines the role of the +application during execution in a Java EE container. The annotation can +be specified on a class, allowing developers to execute an application +under a particular role. The role must map to the user/group information +in the container’s security realm. The @RunAs annotation specifies the +name of a security role as its parameter.

    +
    +
    +

    The following code demonstrates the use of the @RunAs annotation:

    +
    +
    +
    +
    @RunAs("Admin")
    +public class Calculator {
    +    //....
    +}
    +
    +
    +
    +

    You will have to map the run-as role name to a given principal defined +in GlassFish Server if the given roles are associated with more than one +user principal.

    +
    +
    +
    +

    49.2.3.2 Trust between Containers

    +
    +

    When an enterprise bean is designed so that either the original caller +identity or a designated identity is used to call a target bean, the +target bean will receive the propagated identity only. The target bean +will not receive any authentication data.

    +
    +
    +

    There is no way for the target container to authenticate the propagated +security identity. However, because the security identity is used in +authorization checks (for example, method permissions or with the +isCallerInRole method), it is vitally important that the security +identity be authentic. Because no authentication data is available to +authenticate the propagated identity, the target must trust that the +calling container has propagated an authenticated security identity.

    +
    +
    +

    By default, GlassFish Server is configured to trust identities that are +propagated from different containers. Therefore, you do not need to take +any special steps to set up a trust relationship.

    +
    +
    +
    +
    +

    49.2.4 Deploying Secure Enterprise Beans

    +
    +

    The deployer is responsible for ensuring that an assembled application +is secure after it has been deployed in the target operational +environment. If a security view has been provided to the deployer +through the use of security annotations and/or a deployment descriptor, +the security view is mapped to the mechanisms and policies used by the +security domain in the target operational environment, which in this +case is GlassFish Server. If no security view is provided, the deployer +must set up the appropriate security policy for the enterprise bean +application.

    +
    +
    +

    Deployment information is specific to a web or application server.

    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    +
    + + + \ No newline at end of file diff --git a/security-javaee003.html b/security-javaee003.html new file mode 100644 index 0000000..f5b51f8 --- /dev/null +++ b/security-javaee003.html @@ -0,0 +1,617 @@ + + + + + + Examples: Securing Enterprise Beans + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    49.3 Examples: Securing Enterprise Beans

    +
    +
    +

    The following examples show how to secure enterprise beans using +declarative and programmatic security.

    +
    +
    +

    The following topics are addressed here:

    +
    + +
    +

    49.3.1 The cart-secure Example: Securing an Enterprise Bean withDeclarative Security

    +
    +

    This section discusses how to configure an enterprise bean for basic +user name/password authentication. When a bean that is constrained in +this way is requested, the server requests a user name and password from +the client and verifies that the user name and password are valid by +comparing them against a database of authorized users in GlassFish +Server.

    +
    +
    +

    If the topic of authentication is new to you, see +Specifying Authentication +Mechanisms.

    +
    +
    +

    This example demonstrates security by starting with the unsecured +enterprise bean application, cart, which is found in the +tut-install`/examples/ejb/cart/` directory and is discussed in +The cart Example.

    +
    +
    +

    In general, the following steps are necessary to add user name/password +authentication to an existing application that contains an enterprise +bean. In the example application included with this tutorial, these +steps have been completed for you and are listed here simply to show +what needs to be done should you wish to create a similar application.

    +
    +
    +
      +
    1. +

      Create an application like the one in +The cart Example. The example in +this tutorial starts with this example and demonstrates adding basic +authentication of the client to this application. The example +application discussed in this section can be found at +tut-install`/examples/security/cart-secure/`.

      +
    2. +
    3. +

      If you have not already done so, complete the steps in +To Set Up Your System for Running the +Security Examples to configure your system for running the tutorial +applications.

      +
    4. +
    5. +

      Modify the source code for the enterprise bean, CartBean.java, to +specify which roles are authorized to access which protected methods. +This step is discussed in Annotating the Bean.

      +
    6. +
    7. +

      Build, package, and deploy the enterprise bean; then build and run +the client application by following the steps in To Run the +cart-secure Example Using NetBeans IDE or To Run the +cart-secure Example Using Maven.

      +
    8. +
    +
    +
    +

    49.3.1.1 Annotating the Bean

    +
    +

    The source code for the original cart application was modified as +shown in the following code snippet (modifications in bold). The +resulting file can be found in the file +tut-install`/examples/security/cart-secure/cart-secure-ejb/src/main/java/javaeetutorial/cart/ejb/CartBean.java`.

    +
    +
    +

    The code snippet is as follows:

    +
    +
    +
    +
    package javaeetutorial.cartsecure.ejb;
    +
    +import java.io.Serializable;
    +import java.util.ArrayList;
    +import java.util.List;
    +import javaeetutorial.cart.util.BookException;
    +import javaeetutorial.cart.util.IdVerifier;
    +import javax.ejb.Remove;
    +import javax.ejb.Stateful;
    +import javax.annotation.security.DeclareRoles;
    +import javax.annotation.security.RolesAllowed;
    +
    +@Stateful
    +@DeclareRoles("TutorialUser")
    +public class CartBean implements Cart, Serializable {
    +    List<String> contents;
    +    String customerId;
    +    String customerName;
    +
    +    @Override
    +    public void initialize(String person) throws BookException {
    +        if (person == null) {
    +            throw new BookException("Null person not allowed.");
    +        } else {
    +            customerName = person;
    +        }
    +
    +        customerId = "0";
    +        contents = new ArrayList<>();
    +    }
    +
    +    @Override
    +    public void initialize(String person, String id) throws BookException {
    +        if (person == null) {
    +            throw new BookException("Null person not allowed.");
    +        } else {
    +            customerName = person;
    +        }
    +
    +        IdVerifier idChecker = new IdVerifier();
    +
    +        if (idChecker.validate(id)) {
    +            customerId = id;
    +        } else {
    +            throw new BookException("Invalid id: " + id);
    +        }
    +
    +        contents = new ArrayList<>();
    +    }
    +
    +    @Override
    +    @RolesAllowed("TutorialUser")
    +    public void addBook(String title) {
    +        contents.add(title);
    +    }
    +
    +    @Override
    +    @RolesAllowed("TutorialUser")
    +    public void removeBook(String title) throws BookException {
    +        boolean result = contents.remove(title);
    +
    +        if (result == false) {
    +            throw new BookException("\"" + title + "\" not in cart.");
    +        }
    +    }
    +
    +    @Override
    +    @RolesAllowed("TutorialUser")
    +    public List<String> getContents() {
    +        return contents;
    +    }
    +
    +    @Override
    +    @Remove()
    +    @RolesAllowed("TutorialUser")
    +    public void remove() {
    +        contents = null;
    +    }
    +}
    +
    +
    +
    +

    The @RolesAllowed annotation is specified on methods for which you +want to restrict access. In this example, only users in the role of +TutorialUser will be allowed to add and remove books from the cart and +to list the contents of the cart. A @RolesAllowed annotation +implicitly declares a role that will be referenced in the application; +therefore, no @DeclareRoles annotation is required. The presence of +the @RolesAllowed annotation also implicitly declares that +authentication will be required for a user to access these methods. If +no authentication method is specified in the deployment descriptor, the +type of authentication will be user name/password authentication.

    +
    +
    +
    +

    49.3.1.2 To Run the cart-secure Example Using NetBeans IDE

    +
    +
      +
    1. +

      Follow the steps in To Set Up +Your System for Running the Security Examples.

      +
    2. +
    3. +

      From the File menu, choose Open Project.

      +
    4. +
    5. +

      In the Open Project dialog box, navigate to:

      +
      +
      +
      tut-install/examples/security
      +
      +
      +
    6. +
    7. +

      Select the cart-secure folder.

      +
    8. +
    9. +

      Select the Open Required Projects check box.

      +
    10. +
    11. +

      Click Open Project.

      +
    12. +
    13. +

      In the Projects tab, right-click the cart-secure project and +select Build.

      +
      +

      This step builds and packages the application into cart-secure.ear, +located in the cart-secure-ear/target/ directory, and deploys this EAR +file to your GlassFish Server instance, retrieves the client stubs, and +runs the client.

      +
      +
    14. +
    15. +

      In the Login for user: dialog box, enter the user name and password +of a file realm user created in GlassFish Server and assigned to the +group TutorialUser; then click OK.

      +
      +

      If the user name and password you enter are authenticated, the output of +the application client appears in the Output tab:

      +
      +
      +
      +
      ...
      +Retrieving book title from cart: Infinite Jest
      +Retrieving book title from cart: Bel Canto
      +Retrieving book title from cart: Kafka on the Shore
      +Removing "Gravity's Rainbow" from cart.
      +Caught a BookException: "Gravity's Rainbow" not in cart.
      +Java Result: 1
      +...
      +
      +
      +
      +

      If the user name and password are not authenticated, the dialog box +reappears until you enter correct values.

      +
      +
    16. +
    +
    +
    +
    +

    49.3.1.3 To Run the cart-secure Example Using Maven

    +
    +
      +
    1. +

      Follow the steps in To Set Up +Your System for Running the Security Examples.

      +
    2. +
    3. +

      In a terminal window, go to:

      +
      +
      +
      tut-install/examples/security/cart-secure/
      +
      +
      +
    4. +
    5. +

      To build the application, package it into an EAR file in the +cart-secure-ear/target subdirectory, deploy it, and run it, enter the +following command at the terminal window or command prompt:

      +
      +
      +
      mvn install
      +
      +
      +
    6. +
    7. +

      In the Login for user: dialog box, enter the user name and password +of a file realm user created in GlassFish Server and assigned to the +group TutorialUser; then click OK.

      +
      +

      If the user name and password you enter are authenticated, the output of +the application client appears in the Output tab:

      +
      +
      +
      +
      ...
      +Retrieving book title from cart: Infinite Jest
      +Retrieving book title from cart: Bel Canto
      +Retrieving book title from cart: Kafka on the Shore
      +Removing "Gravity's Rainbow" from cart.
      +Caught a BookException: "Gravity's Rainbow" not in cart.
      +Java Result: 1
      +...
      +
      +
      +
      +

      If the user name and password are not authenticated, the dialog box +reappears until you enter correct values.

      +
      +
    8. +
    +
    +
    +
    +
    +

    49.3.2 The converter-secure Example: Securing an Enterprise Bean withProgrammatic Security

    +
    +

    This example demonstrates how to use the getCallerPrincipal and +isCallerInRole methods with an enterprise bean. This example starts +with a very simple EJB application, converter, and modifies the +methods of the ConverterBean so that currency conversion will occur +only when the requester is in the role of TutorialUser.

    +
    +
    +

    This example can be found in the +tut-install`/``examples/security/converter-secure` directory. This +example is based on the unsecured enterprise bean application, +converter, which is discussed in +Chapter 33, "Getting Started with +Enterprise Beans" and is found in the +tut-install`/examples/ejb/converter/` directory. This section builds on +the example by adding the necessary elements to secure the application +by using the getCallerPrincipal and isCallerInRole methods, which +are discussed in more detail in +Accessing an Enterprise Bean Caller’s +Security Context.

    +
    +
    +

    In general, the following steps are necessary when using the +getCallerPrincipal and isCallerInRole methods with an enterprise +bean. In the example application included with this tutorial, many of +these steps have been completed for you and are listed here simply to +show what needs to be done should you wish to create a similar +application.

    +
    +
    +
      +
    1. +

      Create a simple enterprise bean application.

      +
    2. +
    3. +

      Set up a user on GlassFish Server in the file realm, in the group +TutorialUser, and set up default principal to role mapping. To do +this, follow the steps in To Set Up +Your System for Running the Security Examples.

      +
    4. +
    5. +

      Modify the bean to add the getCallerPrincipal and isCallerInRole +methods.

      +
    6. +
    7. +

      If the application contains a web client that is a servlet, specify +security for the servlet, as described in +Specifying Security for Basic +Authentication Using Annotations.

      +
    8. +
    9. +

      Build, package, deploy, and run the application.

      +
    10. +
    +
    +
    +

    49.3.2.1 Modifying ConverterBean

    +
    +

    The source code for the original ConverterBean class was modified to +add the if..else clause that tests whether the caller is in the role +of TutorialUser. If the user is in the correct role, the currency +conversion is computed and displayed. If the user is not in the correct +role, the computation is not performed, and the application displays the +result as 0. The code example can be found in +tut-install`/examples/security/converter-secure/converter-secure-ejb/src/main/java/javaeetutorial/converter/ejb/ConverterBean.java`.

    +
    +
    +

    The code snippet (with modifications shown in bold) is as follows:

    +
    +
    +
    +
    package javaeetutorial.convertersecure.ejb;
    +
    +import java.math.BigDecimal;
    +import java.security.Principal;
    +import javax.ejb.Stateless;
    +import javax.annotation.Resource;
    +import javax.ejb.SessionContext;
    +import javax.annotation.security.DeclareRoles;
    +import javax.annotation.security.RolesAllowed;
    +
    +@Stateless()
    +@DeclareRoles("TutorialUser")
    +public class ConverterBean{
    +
    +    @Resource SessionContext ctx;
    +    private final BigDecimal yenRate = new BigDecimal("104.34");
    +    private final BigDecimal euroRate = new BigDecimal("0.007");
    +
    +    @RolesAllowed("TutorialUser")
    +     public BigDecimal dollarToYen(BigDecimal dollars) {
    +        BigDecimal result = new BigDecimal("0.0");
    +        Principal callerPrincipal = ctx.getCallerPrincipal();
    +        if (ctx.isCallerInRole("TutorialUser")) {
    +            result = dollars.multiply(yenRate);
    +            return result.setScale(2, BigDecimal.ROUND_UP);
    +        } else {
    +            return result.setScale(2, BigDecimal.ROUND_UP);
    +        }
    +    }
    +
    +    @RolesAllowed("TutorialUser")
    +    public BigDecimal yenToEuro(BigDecimal yen) {
    +        BigDecimal result = new BigDecimal("0.0");
    +        Principal callerPrincipal = ctx.getCallerPrincipal();
    +        if (ctx.isCallerInRole("TutorialUser")) {
    +             result = yen.multiply(euroRate);
    +             return result.setScale(2, BigDecimal.ROUND_UP);
    +        } else {
    +             return result.setScale(2, BigDecimal.ROUND_UP);
    +        }
    +    }
    +}
    +
    +
    +
    +
    +

    49.3.2.2 Modifying ConverterServlet

    +
    +

    The following annotations specify security for the converter web +client, ConverterServlet:

    +
    +
    +
    +
    @WebServlet(urlPatterns = {"/"})
    +@ServletSecurity(
    +@HttpConstraint(transportGuarantee = TransportGuarantee.CONFIDENTIAL,
    +    rolesAllowed = {"TutorialUser"}))
    +
    +
    +
    +
    +

    49.3.2.3 To Run the converter-secure Example Using NetBeans IDE

    +
    +
      +
    1. +

      Follow the steps in To Set Up +Your System for Running the Security Examples.

      +
    2. +
    3. +

      From the File menu, choose Open Project.

      +
    4. +
    5. +

      In the Open Project dialog box, navigate to:

      +
      +
      +
      tut-install/examples/security
      +
      +
      +
    6. +
    7. +

      Select the converter-secure folder.

      +
    8. +
    9. +

      Click Open Project.

      +
    10. +
    11. +

      Right-click the converter-secure project and select Build.

      +
      +

      This command builds and deploys the example application to your +GlassFish Server instance.

      +
      +
    12. +
    +
    +
    +
    +

    49.3.2.4 To Run the converter-secure Example Using Maven

    +
    +
      +
    1. +

      Follow the steps in To Set Up +Your System for Running the Security Examples.

      +
    2. +
    3. +

      In a terminal window, go to:

      +
      +
      +
      tut-install/examples/security/converter-secure/
      +
      +
      +
    4. +
    5. +

      Enter the following command:

      +
      +
      +
      mvn install
      +
      +
      +
      +

      This command builds and packages the application into a WAR file, +converter-secure.war, that is located in the target directory, and +deploys the WAR file.

      +
      +
    6. +
    +
    +
    +
    +

    49.3.2.5 To Run the converter-secure Example

    +
    +
      +
    1. +

      Open a web browser to the following URL:

      +
      +
      +
      http://localhost:8080/converter-secure
      +
      +
      +
      +

      An Authentication Required dialog box appears.

      +
      +
    2. +
    3. +

      Enter a user name and password combination that corresponds to a +user who has already been created in the file realm of GlassFish +Server and has been assigned to the group TutorialUser; then click OK.

      +
    4. +
    5. +

      Enter 100 in the input field and click Submit.

      +
      +

      A second page appears, showing the converted values.

      +
      +
    6. +
    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    +
    +
    + + + \ No newline at end of file diff --git a/security-webtier.html b/security-webtier.html new file mode 100644 index 0000000..b150acf --- /dev/null +++ b/security-webtier.html @@ -0,0 +1,112 @@ + + + + + + Getting Started Securing Web Applications + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    48 Getting Started Securing Web Applications

    +
    +
    +

    This chapter describes in greater detail the ways to implement security +for Java EE web applications discussed in a general way in +Securing Containers. The detail and +examples in this chapter explore these security services as they relate +to web components.

    +
    +
    +

    The following topics are addressed here:

    +
    + +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    + + + \ No newline at end of file diff --git a/security-webtier001.html b/security-webtier001.html new file mode 100644 index 0000000..02ffac7 --- /dev/null +++ b/security-webtier001.html @@ -0,0 +1,186 @@ + + + + + + Overview of Web Application Security + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    48.1 Overview of Web Application Security

    +
    +
    +

    A web application is accessed using a web browser over a network, such +as the Internet or a company’s intranet. As discussed in +Distributed Multitiered Applications, the +Java EE platform uses a distributed multitiered application model, and +web applications run in the web tier.

    +
    +
    +

    Web applications contain resources that can be accessed by many users. +These resources often traverse unprotected, open networks, such as the +Internet. In such an environment, a substantial number of web +applications will require some type of security.

    +
    +
    +

    Securing applications and their clients in the business tier and the EIS +tier is discussed in Chapter 49, "Getting +Started Securing Enterprise Applications".

    +
    +
    +

    In the Java EE platform, web components provide the dynamic extension +capabilities for a web server. Web components can be Java servlets or +JavaServer Faces pages.

    +
    +
    +

    Certain aspects of web application security can be configured when the +application is installed, or deployed, to the web container. Annotations +and/or deployment descriptors are used to relay information to the +deployer about security and other aspects of the application. Specifying +this information in annotations or in the deployment descriptor helps +the deployer set up the appropriate security policy for the web +application. Any values explicitly specified in the deployment +descriptor override any values specified in annotations.

    +
    +
    +

    Security for Java EE web applications can be implemented in the +following ways.

    +
    +
    +
      +
    • +

      Declarative security can be implemented using either metadata +annotations or an application’s deployment descriptor. See +Overview of Java EE Security for more +information.

      +
      +

      Declarative security for web applications is described in +Securing Web Applications.

      +
      +
    • +
    • +

      Programmatic security is embedded in an application and can be used to +make security decisions when declarative security alone is not +sufficient to express the security model of an application. Declarative +security alone may not be sufficient when conditional login in a +particular work flow, instead of for all cases, is required in the +middle of an application. See Overview +of Java EE Security for more information.

      +
      +

      Servlet 4.0 provides the authenticate, login, and logout methods +of the HttpServletRequest interface. With the addition of the +authenticate, login, and logout methods to the Servlet +specification, an application deployment descriptor is no longer +required for web applications but may still be used to further specify +security requirements beyond the basic default values.

      +
      +
      +

      Programmatic security is discussed in +Using Programmatic Security with Web +Applications.

      +
      +
    • +
    • +

      Message security works with web services and incorporates security +features, such as digital signatures and encryption, into the header of +a SOAP message, working in the application layer, ensuring end-to-end +security. Message security is not a component of Java EE 7 and is +mentioned here for informational purposes only.

      +
    • +
    +
    +
    +

    Some of the material in this chapter builds on material presented +earlier in this tutorial. In particular, this chapter assumes that you +are familiar with the information in the following chapters:

    +
    + +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    + + + \ No newline at end of file diff --git a/security-webtier002.html b/security-webtier002.html new file mode 100644 index 0000000..96e0af9 --- /dev/null +++ b/security-webtier002.html @@ -0,0 +1,805 @@ + + + + + + Securing Web Applications + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    48.2 Securing Web Applications

    +
    +
    +

    Web applications are created by application developers who give, sell, +or otherwise transfer the application to an application deployer for +installation into a runtime environment.

    +
    +
    +

    The following topics are addressed here:

    +
    + +
    +

    48.2.1 Overview of Securing Web Applications

    +
    +

    Application developers communicate how to set up security for the +deployed application by using annotations or deployment descriptors. +This information is passed on to the deployer, who uses it to define +method permissions for security roles, set up user authentication, and +set up the appropriate transport mechanism. If the application developer +doesn’t define security requirements, the deployer will have to +determine the security requirements independently.

    +
    +
    +

    Some elements necessary for security in a web application cannot be +specified as annotations for all types of web applications. This chapter +explains how to secure web applications using annotations wherever +possible. It explains how to use deployment descriptors where +annotations cannot be used.

    +
    +
    +
    +

    48.2.2 Specifying Security Constraints

    +
    +

    A security constraint is used to define the access privileges to a +collection of resources using their URL mapping.

    +
    +
    +

    If your web application uses a servlet, you can express the security +constraint information by using annotations. Specifically, you use the +@HttpConstraint and, optionally, the @HttpMethodConstraint +annotations within the @ServletSecurity annotation to specify a +security constraint.

    +
    +
    +

    If your web application does not use a servlet, however, you must +specify a security-constraint element in the deployment descriptor +file. The authentication mechanism cannot be expressed using +annotations, so if you use any authentication method other than BASIC +(the default), a deployment descriptor is required.

    +
    +
    +

    The following subelements can be part of a security-constraint.

    +
    +
    +
      +
    • +

      Web resource collection (web-resource-collection): A list of URL +patterns (the part of a URL after the host name and port you want to +constrain) and HTTP operations (the methods within the files that match +the URL pattern you want to constrain) that describe a set of resources +to be protected. Web resource collections are discussed in +Specifying a Web Resource Collection.

      +
    • +
    • +

      Authorization constraint (auth-constraint): Specifies whether +authentication is to be used and names the roles authorized to perform +the constrained requests. For more information about authorization +constraints, see Specifying an Authorization Constraint.

      +
    • +
    • +

      User data constraint (user-data-constraint): Specifies how data is +protected when transported between a client and a server. User data +constraints are discussed in Specifying a Secure +Connection.

      +
    • +
    +
    +
    +

    48.2.2.1 Specifying a Web Resource Collection

    +
    +

    A web resource collection consists of the following subelements.

    +
    +
    +
      +
    • +

      web-resource-name is the name you use for this resource. Its use is +optional.

      +
    • +
    • +

      url-pattern is used to list the request URI to be protected. Many +applications have both unprotected and protected resources. To provide +unrestricted access to a resource, do not configure a security +constraint for that particular request URI.

      +
      +

      The request URI is the part of a URL after the host name and port. For +example, let’s say that you have an e-commerce site with a catalog that +you would want anyone to be able to access and browse, and a shopping +cart area for customers only. You could set up the paths for your web +application so that the pattern /cart/* is protected but nothing else +is protected. Assuming that the application is installed at context path +/myapp, the following are true.

      +
      +
      +
        +
      • +

        http://localhost:8080/myapp/index.xhtml is not protected.

        +
      • +
      • +

        http://localhost:8080/myapp/cart/index.xhtml is protected.

        +
        +

        A user will be prompted to log in the first time he or she accesses a +resource in the cart/ subdirectory.

        +
        +
      • +
      +
      +
    • +
    • +

      http-method or http-method-omission is used to specify which +methods should be protected or which methods should be omitted from +protection. An HTTP method is protected by a web-resource-collection +under any of the following circumstances:

      +
      +
        +
      • +

        If no HTTP methods are named in the collection (which means that all +are protected)

        +
      • +
      • +

        If the collection specifically names the HTTP method in an +http-method subelement

        +
      • +
      • +

        If the collection contains one or more http-method-omission +elements, none of which names the HTTP method

        +
      • +
      +
      +
    • +
    +
    +
    +
    +

    48.2.2.2 Specifying an Authorization Constraint

    +
    +

    An authorization constraint (auth-constraint) contains the role-name +element. You can use as many role-name elements as needed here.

    +
    +
    +

    An authorization constraint establishes a requirement for authentication +and names the roles authorized to access the URL patterns and HTTP +methods declared by this security constraint. If there is no +authorization constraint, the container must accept the request without +requiring user authentication. If there is an authorization constraint +but no roles are specified within it, the container will not allow +access to constrained requests under any circumstances. Each role name +specified here must either correspond to the role name of one of the +security-role elements defined for this web application or be the +specially reserved role name *, which indicates all roles in the web +application. Role names are case sensitive. The roles defined for the +application must be mapped to users and groups defined on the server, +except when default principal-to-role mapping is used.

    +
    +
    +

    For more information about security roles, see Declaring +Security Roles. For information on mapping security roles, see +Mapping Roles to Users and Groups.

    +
    +
    +

    For a servlet, the @HttpConstraint and @HttpMethodConstraint +annotations accept a rolesAllowed element that specifies the +authorized roles.

    +
    +
    +
    +

    48.2.2.3 Specifying a Secure Connection

    +
    +

    A user data constraint (user-data-constraint in the deployment +descriptor) contains the transport-guarantee subelement. A user data +constraint can be used to require that a protected transport-layer +connection, such as HTTPS, be used for all constrained URL patterns and +HTTP methods specified in the security constraint. The choices for +transport guarantee are CONFIDENTIAL, INTEGRAL, or NONE. If you +specify CONFIDENTIAL or INTEGRAL as a security constraint, it +generally means that the use of SSL is required and applies to all +requests that match the URL patterns in the web resource collection, not +just to the login dialog box.

    +
    +
    +

    The strength of the required protection is defined by the value of the +transport guarantee, as follows.

    +
    +
    +
      +
    • +

      Specify CONFIDENTIAL when the application requires that data be +transmitted so as to prevent other entities from observing the contents +of the transmission.

      +
    • +
    • +

      Specify INTEGRAL when the application requires that the data be sent +between client and server in such a way that it cannot be changed in +transit.

      +
    • +
    • +

      Specify NONE to indicate that the container must accept the +constrained requests on any connection, including an unprotected one.

      +
      +
      +
      +
      +
      +
      +
    • +
    +
    + +++ + + + + + +
    +

    Note:

    +
    +
    +

    In practice, Java EE servers treat the CONFIDENTIAL and INTEGRAL +transport guarantee values identically.

    +
    +
    +
    +
    +
    +
    +
    +
    +

    The user data constraint is handy to use in conjunction with basic and +form-based user authentication. When the login authentication method is +set to BASIC or FORM, passwords are not protected, meaning that +passwords sent between a client and a server on an unprotected session +can be viewed and intercepted by third parties. Using a user data +constraint with the user authentication mechanism can alleviate this +concern. Configuring a user authentication mechanism is described in +Specifying an Authentication Mechanism in the Deployment +Descriptor.

    +
    +
    +

    To guarantee that data is transported over a secure connection, ensure +that SSL support is configured for your server. SSL support is already +configured for GlassFish Server.

    +
    +
    +
    +
    +
    +
    +
    + +++ + + + + + +
    +

    Note:

    +
    +
    +

    After you switch to SSL for a session, you should never accept any +non-SSL requests for the rest of that session. For example, a shopping +site might not use SSL until the checkout page, and then it might switch +to using SSL to accept your card number. After switching to SSL, you +should stop listening to non-SSL requests for this session. The reason +for this practice is that the session ID itself was not encrypted on the +earlier communications. This is not so bad when you’re only doing your +shopping, but after the credit card information is stored in the +session, you don’t want anyone to use that information to fake the +purchase transaction against your credit card. This practice could be +easily implemented by using a filter.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +

    48.2.2.4 Specifying Security Constraints for Resources

    +
    +

    You can create security constraints for resources within your +application. For example, you could allow users with the role of +PARTNER full access to all resources at the URL pattern +/acme/wholesale/* and allow users with the role of CLIENT full +access to all resources at the URL pattern /acme/retail/*. This is the +recommended way to protect resources if you do not want to protect some +HTTP methods while leaving other HTTP methods unprotected. An example of +a deployment descriptor that would demonstrate this functionality is the +following:

    +
    +
    +
    +
    <!-- SECURITY CONSTRAINT #1 -->
    +<security-constraint>
    +    <web-resource-collection>
    +        <web-resource-name>wholesale</web-resource-name>
    +        <url-pattern>/acme/wholesale/*</url-pattern>
    +    </web-resource-collection>
    +    <auth-constraint>
    +        <role-name>PARTNER</role-name>
    +    </auth-constraint>
    +    <user-data-constraint>
    +        <transport-guarantee>CONFIDENTIAL</transport-guarantee>
    +    </user-data-constraint>
    +</security-constraint>
    +
    +<!-- SECURITY CONSTRAINT #2 -->
    +<security-constraint>
    +    <web-resource-collection>
    +        <web-resource-name>retail</web-resource-name>
    +        <url-pattern>/acme/retail/*</url-pattern>
    +    </web-resource-collection>
    +    <auth-constraint>
    +        <role-name>CLIENT</role-name>
    +    </auth-constraint>
    +    <user-data-constraint>
    +        <transport-guarantee>CONFIDENTIAL</transport-guarantee>
    +    </user-data-constraint>
    +</security-constraint>
    +
    +
    +
    +
    +
    +

    48.2.3 Specifying Authentication Mechanisms

    +
    +

    A user authentication mechanism specifies

    +
    +
    +
      +
    • +

      The way a user gains access to web content

      +
    • +
    • +

      With basic authentication, the realm in which the user will be +authenticated

      +
    • +
    • +

      With form-based authentication, additional attributes

      +
    • +
    +
    +
    +

    When an authentication mechanism is specified, the user must be +authenticated before access is granted to any resource that is +constrained by a security constraint. There can be multiple security +constraints applying to multiple resources, but the same authentication +method will apply to all constrained resources in an application.

    +
    +
    +

    Before you can authenticate a user, you must have a database of user +names, passwords, and roles configured on your web or application +server. For information on setting up the user database, see +Managing Users and Groups in GlassFish +Server.

    +
    +
    +

    The Java EE platform supports the following authentication mechanisms:

    +
    +
    +
      +
    • +

      Basic authentication

      +
    • +
    • +

      Form-based authentication

      +
    • +
    • +

      Digest authentication

      +
    • +
    • +

      Client authentication

      +
    • +
    • +

      Mutual authentication

      +
    • +
    +
    +
    +

    Basic, form-based, and digest authentication are discussed in this +section. Client and mutual authentication are discussed in +Chapter 50, "Java EE Security: Advanced +Topics".

    +
    +
    +

    HTTP basic authentication and form-based authentication are not very +secure authentication mechanisms. Basic authentication sends user names +and passwords over the Internet as Base64-encoded text. Form-based +authentication sends this data as plain text. In both cases, the target +server is not authenticated. Therefore, these forms of authentication +leave user data exposed and vulnerable. If someone can intercept the +transmission, the user name and password information can easily be +decoded.

    +
    +
    +

    However, when a secure transport mechanism, such as SSL, or security at +the network level, such as the Internet Protocol Security (IPsec) +protocol or virtual private network (VPN) strategies, is used in +conjunction with basic or form-based authentication, some of these +concerns can be alleviated. To specify a secure transport mechanism, use +the elements described in Specifying a Secure Connection.

    +
    +
    +

    48.2.3.1 HTTP Basic Authentication

    +
    +

    Specifying HTTP basic authentication requires that the server request a +user name and password from the web client and verify that the user name +and password are valid by comparing them against a database of +authorized users in the specified or default realm.

    +
    +
    +

    Basic authentication is the default when you do not specify an +authentication mechanism.

    +
    +
    +

    When basic authentication is used, the following actions occur.

    +
    +
    +
      +
    1. +

      A client requests access to a protected resource.

      +
    2. +
    3. +

      The web server returns a dialog box that requests the user name and +password.

      +
    4. +
    5. +

      The client submits the user name and password to the server.

      +
    6. +
    7. +

      The server authenticates the user in the specified realm and, if +successful, returns the requested resource.

      +
    8. +
    +
    +
    +

    Figure 48-1 shows what happens when you specify HTTP basic +authentication.

    +
    +
    +

    Figure 48-1 HTTP Basic Authentication

    +
    + +
    +
    +

    48.2.3.2 Form-Based Authentication

    +
    +

    Form-based authentication allows the developer to control the look and +feel of the login authentication screens by customizing the login screen +and error pages that an HTTP browser presents to the end user. When +form-based authentication is declared, the following actions occur.

    +
    +
    +
      +
    1. +

      A client requests access to a protected resource.

      +
    2. +
    3. +

      If the client is unauthenticated, the server redirects the client to +a login page.

      +
    4. +
    5. +

      The client submits the login form to the server.

      +
    6. +
    7. +

      The server attempts to authenticate the user.

      +
      +
        +
      • +

        If authentication succeeds, the authenticated user’s principal is +checked to ensure that it is in a role that is authorized to access the +resource. If the user is authorized, the server redirects the client to +the resource by using the stored URL path.

        +
      • +
      • +

        If authentication fails, the client is forwarded or redirected to an +error page.

        +
      • +
      +
      +
    8. +
    +
    +
    +

    Figure 48-2 shows what happens when you specify form-based +authentication.

    +
    +
    +

    Figure 48-2 Form-Based Authentication

    +
    + +
    +

    The section The hello1-formauth +Example: Form-Based Authentication with a JavaServer Faces Application +is an example application that uses form-based authentication.

    +
    +
    +

    When you create a form-based login, be sure to maintain sessions using +cookies or SSL session information.

    +
    +
    +

    For authentication to proceed appropriately, the action of the login +form must always be j_security_check. This restriction is made so that +the login form will work no matter which resource it is for and to avoid +requiring the server to specify the action field of the outbound form. +The following code snippet shows how the form should be coded into the +HTML page:

    +
    +
    +
    +
    <form method="POST" action="j_security_check">
    +<input type="text" name="j_username">
    +<input type="password" name="j_password">
    +</form>
    +
    +
    +
    +
    +

    48.2.3.3 Digest Authentication

    +
    +

    Like basic authentication, digest authentication authenticates a user +based on a user name and a password. However, unlike basic +authentication, digest authentication does not send user passwords over +the network. Instead, the client sends a one-way cryptographic hash of +the password and additional data. Although passwords are not sent on the +wire, digest authentication requires that clear-text password +equivalents be available to the authenticating container so that it can +validate received authenticators by calculating the expected digest.

    +
    +
    +
    +
    +

    48.2.4 Specifying an Authentication Mechanism in the DeploymentDescriptor

    +
    +

    To specify an authentication mechanism, use the login-config element. +It can contain the following subelements.

    +
    +
    +
      +
    • +

      The auth-method subelement configures the authentication mechanism +for the web application. The element content must be either NONE, +BASIC, DIGEST, FORM, or CLIENT-CERT.

      +
    • +
    • +

      The realm-name subelement indicates the realm name to use when the +basic authentication scheme is chosen for the web application.

      +
    • +
    • +

      The form-login-config subelement specifies the login and error pages +that should be used when form-based login is specified.

      +
      +
      +
      +
      +
      +
      +
    • +
    +
    + +++ + + + + + +
    +

    Note:

    +
    +
    +

    Another way to specify form-based authentication is to use the +authenticate, login, and logout methods of HttpServletRequest, +as discussed in Authenticating Users +Programmatically.

    +
    +
    +
    +
    +
    +
    +
    +
    +

    When you try to access a web resource that is constrained by a +security-constraint element, the web container activates the +authentication mechanism that has been configured for that resource. The +authentication mechanism specifies how the user will be prompted to log +in. If the login-config element is present and the auth-method +element contains a value other than NONE, the user must be +authenticated to access the resource. If you do not specify an +authentication mechanism, authentication of the user is not required.

    +
    +
    +

    The following example shows how to declare form-based authentication in +your deployment descriptor:

    +
    +
    +
    +
    <login-config>
    +    <auth-method>FORM</auth-method>
    +    <realm-name>file</realm-name>
    +    <form-login-config>
    +        <form-login-page>/login.xhtml</form-login-page>
    +        <form-error-page>/error.xhtml</form-error-page>
    +    </form-login-config>
    +</login-config>
    +
    +
    +
    +

    The login and error page locations are specified relative to the +location of the deployment descriptor. Examples of login and error pages +are shown in Creating the Login Form +and the Error Page.

    +
    +
    +

    The following example shows how to declare digest authentication in your +deployment descriptor:

    +
    +
    +
    +
    <login-config>
    +    <auth-method>DIGEST</auth-method>
    +</login-config>
    +
    +
    +
    +
    +

    48.2.5 Declaring Security Roles

    +
    +

    You can declare security role names used in web applications by using +the security-role element of the deployment descriptor. Use this +element to list all the security roles that you have referenced in your +application.

    +
    +
    +

    The following snippet of a deployment descriptor declares the roles that +will be used in an application using the security-role element and +specifies which of these roles is authorized to access protected +resources using the auth-constraint element:

    +
    +
    +
    +
    <security-constraint>
    +    <web-resource-collection>
    +        <web-resource-name>Protected Area</web-resource-name>
    +        <url-pattern>/security/protected/*</url-pattern>
    +        <http-method>PUT</http-method>
    +        <http-method>DELETE</http-method>
    +        <http-method>GET</http-method>
    +        <http-method>POST</http-method>
    +    </web-resource-collection>
    +    <auth-constraint>
    +        <role-name>manager</role-name>
    +    </auth-constraint>
    +</security-constraint>
    +
    + <!-- Security roles used by this web application -->
    +<security-role>
    +    <role-name>manager</role-name>
    +</security-role>
    +<security-role>
    +    <role-name>employee</role-name>
    +</security-role>
    +
    +
    +
    +

    In this example, the security-role element lists all the security +roles used in the application: manager and employee. This enables +the deployer to map all the roles defined in the application to users +and groups defined in GlassFish Server.

    +
    +
    +

    The auth-constraint element specifies the role, manager, that can +access the HTTP methods PUT, DELETE, GET, and POST located in the +directory specified by the url-pattern element +(/security/protected/*).

    +
    +
    +

    The @ServletSecurity annotation cannot be used in this situation +because its constraints apply to all URL patterns specified by the +@WebServlet annotation.

    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    +
    + + + \ No newline at end of file diff --git a/security-webtier003.html b/security-webtier003.html new file mode 100644 index 0000000..9205d54 --- /dev/null +++ b/security-webtier003.html @@ -0,0 +1,423 @@ + + + + + + Using Programmatic Security with Web Applications + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    48.3 Using Programmatic Security with Web Applications

    +
    +
    +

    Programmatic security is used by security-aware applications when +declarative security alone is not sufficient to express the security +model of the application.

    +
    +
    +

    The following topics are addressed here:

    +
    + +
    +

    48.3.1 Authenticating Users Programmatically

    +
    +

    The following methods of the HttpServletRequest interface enable you +to authenticate users for a web application programmatically.

    +
    +
    +
      +
    • +

      authenticate allows an application to instigate authentication of +the request caller by the container from within an unconstrained request +context. A login dialog box displays and collects the user name and +password for authentication purposes.

      +
    • +
    • +

      login allows an application to collect user name and password +information as an alternative to specifying form-based authentication in +an application deployment descriptor.

      +
    • +
    • +

      logout allows an application to reset the caller identity of a +request.

      +
    • +
    +
    +
    +

    The following example code shows how to use the login and logout +methods:

    +
    +
    +
    +
    package test;
    +
    +import java.io.IOException;
    +import java.io.PrintWriter;
    +import java.math.BigDecimal;
    +import javax.ejb.EJB;
    +import javax.servlet.ServletException;
    +import javax.servlet.annotation.WebServlet;
    +import javax.servlet.http.HttpServlet;
    +import javax.servlet.http.HttpServletRequest;
    +import javax.servlet.http.HttpServletResponse;
    +
    +@WebServlet(name="TutorialServlet", urlPatterns={"/TutorialServlet"})
    +public class TutorialServlet extends HttpServlet {
    +    @EJB
    +    private ConverterBean converterBean;
    +
    +    /**
    +     * Processes requests for both HTTP <code>GET</code>
    +     *    and <code>POST</code> methods.
    +     * @param request servlet request
    +     * @param response servlet response
    +     * @throws ServletException if a servlet-specific error occurs
    +     * @throws IOException if an I/O error occurs
    +     */
    +    protected void processRequest(HttpServletRequest request,
    +            HttpServletResponse response)
    +    throws ServletException, IOException {
    +        response.setContentType("text/html;charset=UTF-8");
    +        PrintWriter out = response.getWriter();
    +        try {
    +
    +            out.println("<html>");
    +            out.println("<head>");
    +            out.println("<title>Servlet TutorialServlet</title>");
    +            out.println("</head>");
    +            out.println("<body>");
    +            request.login("TutorialUser", "TutorialUser");
    +            BigDecimal result =
    +                converterBean.dollarToYen(new BigDecimal("1.0"));
    +            out.println("<h1>Servlet TutorialServlet result of dollarToYen= "
    +                + result + "</h1>");
    +            out.println("</body>");
    +            out.println("</html>");
    +        } catch (Exception e) {
    +            throw new ServletException(e);
    +        } finally {
    +            request.logout();
    +            out.close();
    +        }
    +    }
    +}
    +
    +
    +
    +

    The following example code shows how to use the authenticate method:

    +
    +
    +
    +
    package com.example.test;
    +
    +import java.io.*;
    +import javax.servlet.*;
    +import javax.servlet.http.*;
    +
    +public class TestServlet extends HttpServlet {
    +
    +    protected void processRequest(HttpServletRequest request,
    +            HttpServletResponse response)
    +            throws ServletException, IOException {
    +        response.setContentType("text/html;charset=UTF-8");
    +        PrintWriter out = response.getWriter();
    +        try {
    +            request.authenticate(response);
    +            out.println("Authenticate Successful");
    +        } finally {
    +            out.close();
    +        }
    +    }
    +
    +
    +
    +
    +

    48.3.2 Checking Caller Identity Programmatically

    +
    +

    In general, security management should be enforced by the container in a +manner that is transparent to the web component. The security API +described in this section should be used only in the less frequent +situations in which the web component methods need to access the +security context information.

    +
    +
    +

    Servlet 4.0 specifies the following methods that enable you to access +security information about the component’s caller.

    +
    +
    +
      +
    • +

      getRemoteUser determines the user name with which the client +authenticated. The getRemoteUser method returns the name of the remote +user (the caller) associated by the container with the request. If no +user has been authenticated, this method returns null.

      +
    • +
    • +

      isUserInRole determines whether a remote user is in a specific +security role. If no user has been authenticated, this method returns +false. This method expects a String user role-name parameter.

      +
      +

      The security-role-ref element should be declared in the deployment +descriptor with a role-name subelement containing the role name to be +passed to the method. Using security role references is discussed in +Declaring and Linking Role References.

      +
      +
    • +
    • +

      getUserPrincipal determines the principal name of the current user +and returns a java.security.Principal object. If no user has been +authenticated, this method returns null. Calling the getName method +on the Principal returned by getUserPrincipal returns the name of +the remote user.

      +
    • +
    +
    +
    +

    Your application can make business-logic decisions based on the +information obtained using these APIs.

    +
    +
    +
    +

    48.3.3 Example Code for Programmatic Security

    +
    +

    The following code demonstrates the use of programmatic security for the +purposes of programmatic login. This servlet does the following.

    +
    +
    +
      +
    1. +

      It displays information about the current user.

      +
    2. +
    3. +

      It prompts the user to log in.

      +
    4. +
    5. +

      It prints out the information again to demonstrate the effect of the +login method.

      +
    6. +
    7. +

      It logs the user out.

      +
    8. +
    9. +

      It prints out the information again to demonstrate the effect of the +logout method.

      +
    10. +
    +
    +
    +
    +
    package enterprise.programmatic_login;
    +
    +import java.io.*;
    +import java.net.*;
    +import javax.annotation.security.DeclareRoles;
    +import javax.servlet.*;
    +import javax.servlet.http.*;
    +
    +@DeclareRoles("javaee7user")
    +public class LoginServlet extends HttpServlet {
    +
    +    /**
    +     * Processes requests for both HTTP GET and POST methods.
    +     * @param request servlet request
    +     * @param response servlet response
    +     */
    +    protected void processRequest(HttpServletRequest request,
    +                 HttpServletResponse response)
    +            throws ServletException, IOException {
    +        response.setContentType("text/html;charset=UTF-8");
    +        PrintWriter out = response.getWriter();
    +        try {
    +            String userName = request.getParameter("txtUserName");
    +            String password = request.getParameter("txtPassword");
    +
    +            out.println("Before Login" + "<br><br>");
    +            out.println("IsUserInRole?.."
    +                        + request.isUserInRole("javaee7user")+"<br>");
    +            out.println("getRemoteUser?.." + request.getRemoteUser()+"<br>");
    +            out.println("getUserPrincipal?.."
    +                        + request.getUserPrincipal()+"<br>");
    +            out.println("getAuthType?.." + request.getAuthType()+"<br><br>");
    +
    +            try {
    +                request.login(userName, password);
    +            } catch(ServletException ex) {
    +                out.println("Login Failed with a ServletException.."
    +                    + ex.getMessage());
    +                return;
    +            }
    +            out.println("After Login..."+"<br><br>");
    +            out.println("IsUserInRole?.."
    +                        + request.isUserInRole("javaee7user")+"<br>");
    +            out.println("getRemoteUser?.." + request.getRemoteUser()+"<br>");
    +            out.println("getUserPrincipal?.."
    +                        + request.getUserPrincipal()+"<br>");
    +            out.println("getAuthType?.." + request.getAuthType()+"<br><br>");
    +
    +            request.logout();
    +            out.println("After Logout..."+"<br><br>");
    +            out.println("IsUserInRole?.."
    +                        + request.isUserInRole("javaee7user")+"<br>");
    +            out.println("getRemoteUser?.." + request.getRemoteUser()+"<br>");
    +            out.println("getUserPrincipal?.."
    +                        + request.getUserPrincipal()+"<br>");
    +            out.println("getAuthType?.." + request.getAuthType()+"<br>");
    +        } finally {
    +            out.close();
    +        }
    +    }
    +    ...
    +}
    +
    +
    +
    +
    +

    48.3.4 Declaring and Linking Role References

    +
    +

    A security role reference is a mapping between the name of a role that +is called from a web component using isUserInRole(String role) and the +name of a security role that has been defined for the application. If no +security-role-ref element is declared in a deployment descriptor and +the isUserInRole method is called, the container defaults to checking +the provided role name against the list of all security roles defined +for the web application. Using the default method instead of using the +security-role-ref element limits your flexibility to change role names +in an application without also recompiling the servlet making the call.

    +
    +
    +

    The security-role-ref element is used when an application uses the +HttpServletRequest.isUserInRole(String role). The value passed to the +isUserInRole method is a String representing the role name of the +user. The value of the role-name element must be the String used as +the parameter to the HttpServletRequest.isUserInRole(String role). The +role-link must contain the name of one of the security roles defined +in the security-role elements. The container uses the mapping of +security-role-ref to security-role when determining the return value +of the call.

    +
    +
    +

    For example, to map the security role reference cust to the security +role with role name bankCustomer, the elements would look like this:

    +
    +
    +
    +
    <servlet>
    +...
    +    <security-role-ref>
    +        <role-name>cust</role-name>
    +        <role-link>bankCustomer</role-link>
    +    </security-role-ref>
    +...
    +</servlet>
    +
    +
    +
    +

    If the servlet method is called by a user in the bankCustomer security +role, isUserInRole("cust") returns true.

    +
    +
    +

    The role-link element in the security-role-ref element must match a +role-name defined in the security-role element of the same web.xml +deployment descriptor, as shown here:

    +
    +
    +
    +
    <security-role>
    +    <role-name>bankCustomer</role-name>
    +</security-role>
    +
    +
    +
    +

    A security role reference, including the name defined by the reference, +is scoped to the component whose deployment descriptor contains the +security-role-ref deployment descriptor element.

    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    +
    + + + \ No newline at end of file diff --git a/security-webtier004.html b/security-webtier004.html new file mode 100644 index 0000000..90be4bf --- /dev/null +++ b/security-webtier004.html @@ -0,0 +1,773 @@ + + + + + + Examples: Securing Web Applications + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    48.4 Examples: Securing Web Applications

    +
    +
    +

    Some basic setup is required before any of the example applications will +run correctly.

    +
    +
    +

    The following topics are addressed here:

    +
    + +
    +

    48.4.1 Overview of Examples of Securing Web Applications

    +
    +

    The examples use annotations, programmatic security, and/or declarative +security to demonstrate adding security to existing web applications.

    +
    +
    +

    Here are some other locations where you will find examples of securing +various types of applications:

    +
    + +
    +
    +

    48.4.2 To Set Up Your System for Running the Security Examples

    +
    +

    To set up your system for running the security examples, you need to +configure a user database that the application can use for +authenticating users. Before continuing, follow these steps.

    +
    +
    +
      +
    1. +

      Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

      +
    2. +
    3. +

      Add an authorized user to GlassFish Server. For the examples in this +chapter and in Chapter 49, "Getting +Started Securing Enterprise Applications", add a user to the file +realm of GlassFish Server, and assign the user to the group +TutorialUser.

      +
    4. +
    5. +

      From the Administration Console, expand the Configurations node, +then expand the server-config node.

      +
    6. +
    7. +

      Expand the Security node.

      +
    8. +
    9. +

      Expand the Realms node.

      +
    10. +
    11. +

      Select the File node.

      +
    12. +
    13. +

      On the Edit Realm page, click Manage Users.

      +
    14. +
    15. +

      On the File Users page, click New.

      +
    16. +
    17. +

      In the User ID field, enter a user ID.

      +
    18. +
    19. +

      In the Group List field, enter TutorialUser.

      +
    20. +
    21. +

      In the New Password and Confirm New Password fields, enter a +password.

      +
    22. +
    23. +

      Click OK.

      +
      +

      Be sure to write down the user name and password for the user you create +so that you can use it for testing the example applications. +Authentication is case sensitive for both the user name and password, so +write down the user name and password exactly. This topic is discussed +more in Managing Users and Groups in +GlassFish Server.

      +
      +
    24. +
    25. +

      Set up Default Principal to Role Mapping in GlassFish Server.

      +
    26. +
    27. +

      From the Administration Console, expand the Configurations node, +then expand the server-config node.

      +
    28. +
    29. +

      Select the Security node.

      +
    30. +
    31. +

      Select the Default Principal to Role Mapping Enabled check box.

      +
    32. +
    33. +

      Click Save.

      +
    34. +
    +
    +
    +
    +

    48.4.3 The hello2-basicauth Example: Basic Authentication with a Servlet

    +
    +

    This example explains how to use basic authentication with a servlet. +With basic authentication of a servlet, the web browser presents a +standard login dialog box that is not customizable. When a user submits +his or her name and password, the server determines whether the user +name and password are those of an authorized user and sends the +requested web resource if the user is authorized to view it.

    +
    +
    +

    In general, the following steps are necessary for adding basic +authentication to an unsecured servlet, such as the ones described in +Chapter 6, "Getting Started with Web +Applications". In the example application included with this tutorial, +many of these steps have been completed for you and are listed here +simply to show what needs to be done should you wish to create a similar +application. This application can be found in the +tut-install`/examples/security/hello2-basicauth/` directory.

    +
    +
    +
      +
    1. +

      Follow the steps in To Set Up Your System for Running +the Security Examples.

      +
    2. +
    3. +

      Create a web module for the servlet example, hello2, as described +in Chapter 6, "Getting Started with Web +Applications".

      +
    4. +
    5. +

      Add the appropriate security annotations to the servlet. The +security annotations are described in Specifying Security +for Basic Authentication Using Annotations.

      +
    6. +
    7. +

      Build, package, and deploy the web application by following the +steps in To Build, Package, and Deploy the hello2-basicauth +Example Using NetBeans IDE or To Build, Package, and Deploy +the hello2-basicauth Example Using Maven.

      +
    8. +
    9. +

      Run the web application by following the steps described in +To Run the hello2-basicauth Example.

      +
    10. +
    +
    +
    +

    48.4.3.1 Specifying Security for Basic Authentication Using Annotations

    +
    +

    The default authentication mechanism used by GlassFish Server is basic +authentication. With basic authentication, GlassFish Server spawns a +standard login dialog box to collect user name and password data for a +protected resource. Once the user is authenticated, access to the +protected resource is permitted.

    +
    +
    +

    To specify security for a servlet, use the @ServletSecurity +annotation. This annotation allows you to specify both specific +constraints on HTTP methods and more general constraints that apply to +all HTTP methods for which no specific constraint is specified. Within +the @ServletSecurity annotation, you can specify the following +annotations:

    +
    +
    +
      +
    • +

      The @HttpMethodConstraint annotation, which applies to a specific +HTTP method

      +
    • +
    • +

      The more general @HttpConstraint annotation, which applies to all +HTTP methods for which there is no corresponding @HttpMethodConstraint +annotation

      +
    • +
    +
    +
    +

    Both the @HttpMethodConstraint and @HttpConstraint annotations +within the @ServletSecurity annotation can specify the following:

    +
    +
    +
      +
    • +

      A transportGuarantee element that specifies the data protection +requirements (that is, whether or not SSL/TLS is required) that must be +satisfied by the connections on which requests arrive. Valid values for +this element are NONE and CONFIDENTIAL.

      +
    • +
    • +

      A rolesAllowed element that specifies the names of the authorized +roles.

      +
    • +
    +
    +
    +

    For the hello2-basicauth application, the GreetingServlet has the +following annotations:

    +
    +
    +
    +
    @WebServlet(name = "GreetingServlet", urlPatterns = {"/greeting"})
    +@ServletSecurity(
    +@HttpConstraint(transportGuarantee = TransportGuarantee.CONFIDENTIAL,
    +    rolesAllowed = {"TutorialUser"}))
    +
    +
    +
    +

    These annotations specify that the request URI /greeting can be +accessed only by users who have been authorized to access this URL +because they have been verified to be in the role TutorialUser. The +data will be sent over a protected transport in order to keep the user +name and password data from being read in transit.

    +
    +
    +

    If you use the @ServletSecurity annotation, you do not need to specify +security settings in the deployment descriptor. Use the deployment +descriptor to specify settings for nondefault authentication mechanisms, +for which you cannot use the @ServletSecurity annotation.

    +
    +
    +

    48.4.3.2 To Build, Package, and Deploy the hello2-basicauth Example +Using NetBeans IDE +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

    +
    +
    +
      +
    1. +

      Follow the steps in To Set Up Your System for Running +the Security Examples.

      +
    2. +
    3. +

      From the File menu, choose Open Project.

      +
    4. +
    5. +

      In the Open Project dialog box, navigate to:

      +
      +
      +
      tut-install/examples/security
      +
      +
      +
    6. +
    7. +

      Select the hello2-basicauth folder.

      +
    8. +
    9. +

      Click Open Project.

      +
    10. +
    11. +

      In the Projects tab, right-click the hello2-basicauth project and +select Build.

      +
      +

      This command builds and deploys the example application to your +GlassFish Server instance.

      +
      +
    12. +
    +
    +
    +

    48.4.3.3 To Build, Package, and Deploy the hello2-basicauth Example +Using Maven +^^^^^^^^^^^^^^^^^^^^^^^^^^^

    +
    +
    +
      +
    1. +

      Follow the steps in To Set Up Your System for Running +the Security Examples.

      +
    2. +
    3. +

      In a terminal window, go to:

      +
      +
      +
      tut-install/examples/security/hello2-basicauth/
      +
      +
      +
    4. +
    5. +

      Enter the following command:

      +
      +
      +
      mvn install
      +
      +
      +
      +

      This command builds and packages the application into a WAR file, +hello2-basicauth.war, that is located in the target directory, then +deploys the WAR file.

      +
      +
    6. +
    +
    +
    +
    +

    48.4.3.4 To Run the hello2-basicauth Example

    +
    +
      +
    1. +

      In a web browser, enter the following URL:

      +
      +
      +
      https://localhost:8181/hello2-basicauth/greeting
      +
      +
      +
      +

      You may be prompted to accept the security certificate for the server. +If so, accept the security certificate. If the browser warns that the +certificate is invalid because it is self-signed, add a security +exception for the application.

      +
      +
      +

      An Authentication Required dialog box appears. Its appearance varies, +depending on the browser you use.

      +
      +
    2. +
    3. +

      Enter a user name and password combination that corresponds to a +user who has already been created in the file realm of GlassFish +Server and has been assigned to the group TutorialUser; then click OK.

      +
      +

      Basic authentication is case sensitive for both the user name and +password, so enter the user name and password exactly as defined for +GlassFish Server.

      +
      +
      +

      The server returns the requested resource if all the following +conditions are met. +* A user with the user name you entered is defined for GlassFish Server. +* The user with the user name you entered has the password you entered. +* The user name and password combination you entered is assigned to the +group TutorialUser in GlassFish Server. +* The role of TutorialUser, as defined for the application, is mapped +to the group TutorialUser, as defined for GlassFish Server.

      +
      +
    4. +
    5. +

      Enter a name in the field and click Submit.

      +
      +

      Because you have already been authorized, the name you enter in this +step does not have any limitations. You have unlimited access to the +application now.

      +
      +
      +

      The application responds by saying "Hello" to the name you entered.

      +
      +
    6. +
    +
    +
    +
    +
    +

    48.4.4 The hello1-formauth Example: Form-Based Authentication with aJavaServer Faces Application

    +
    +

    This example explains how to use form-based authentication with a +JavaServer Faces application. With form-based authentication, you can +customize the login screen and error pages that are presented to the web +client for authentication of the user name and password. When a user +submits his or her name and password, the server determines whether the +user name and password are those of an authorized user and, if +authorized, sends the requested web resource.

    +
    +
    +

    This example, hello1-formauth, adds security to the basic JavaServer +Faces application shown in A Web Module That +Uses JavaServer Faces Technology: The hello1 Example.

    +
    +
    +

    In general, the steps necessary for adding form-based authentication to +an unsecured JavaServer Faces application are similar to those described +in The hello2-basicauth Example: Basic Authentication with a +Servlet. The major difference is that you must use a deployment +descriptor to specify the use of form-based authentication, as described +in Specifying Security for the Form-Based Authentication +Example. In addition, you must create a login form page and a login +error page, as described in Creating the Login Form and the +Error Page.

    +
    +
    +

    This application can be found in the +tut-install`/examples/security/hello1-formauth/` directory.

    +
    +
    +

    48.4.4.1 Creating the Login Form and the Error Page

    +
    +

    When using form-based login mechanisms, you must specify a page that +contains the form you want to use to obtain the user name and password, +as well as a page to display if login authentication fails. This section +discusses the login form and the error page used in this example. +Specifying Security for the Form-Based Authentication +Example shows how you specify these pages in the deployment descriptor.

    +
    +
    +

    The login page can be an HTML page or a servlet, and it must return an +HTML page containing a form that conforms to specific naming conventions +(see the Java Servlet 4.0 specification for more information on these +requirements). To do this, include the elements that accept user name +and password information between <form></form> tags in your login +page. The content of an HTML page or servlet for a login page should be +coded as follows:

    +
    +
    +
    +
    <form method="post" action="j_security_check">
    +    <input type="text" name="j_username">
    +    <input type="password" name= "j_password">
    +</form>
    +
    +
    +
    +

    The full code for the login page used in this example can be found at +tut-install`/examples/security/hello1-formauth/src/main/webapp/login.html`. +Here is the code for this page:

    +
    +
    +
    +
    <html lang="en">
    +    <head>
    +        <title>Login Form</title>
    +    </head>
    +    <body>
    +        <h2>Hello, please log in:</h2>
    +        <form method="post" action="j_security_check">
    +            <table role="presentation">
    +                <tr>
    +                    <td>Please type your user name: </td>
    +                    <td><input type="text" name="j_username"
    +                               size="20"/></td>
    +                </tr>
    +                <tr>
    +                    <td>Please type your password: </td>
    +                    <td><input type="password" name="j_password"
    +                               size="20"/></td>
    +                </tr>
    +            </table>
    +            <p></p>
    +            <input type="submit" value="Submit"/>
    +            &nbsp;
    +            <input type="reset" value="Reset"/>
    +        </form>
    +    </body>
    +</html>
    +
    +
    +
    +

    The login error page is displayed if the user enters a user name and +password combination that is not authorized to access the protected URI. +For this example, the login error page can be found at +tut-install`/examples/security/hello1-formauth/``src/main/webapp/error.html`. +For this example, the login error page explains the reason for receiving +the error page and provides a link that will allow the user to try +again. Here is the code for this page:

    +
    +
    +
    +
    <html lang="en">
    +    <head>
    +        <title>Login Error</title>
    +    </head>
    +    <body>
    +        <h2>Invalid user name or password.</h2>
    +
    +        <p>Please enter a user name or password that is authorized to access
    +           this application. For this application, this means a user that
    +           has been created in the <code>file</code> realm and has been
    +           assigned to the <em>group</em> of <code>TutorialUser</code>.</p>
    +        <p><a href="login.html">Return to login page</a></p>
    +    </body>
    +</html>
    +
    +
    +
    +
    +

    48.4.4.2 Specifying Security for the Form-Based Authentication Example

    +
    +

    This example takes a very simple servlet-based web application and adds +form-based security. To specify form-based instead of basic +authentication for a JavaServer Faces example, you must use the +deployment descriptor.

    +
    +
    +

    The following sample code shows the security elements added to the +deployment descriptor for this example, which can be found in +tut-install`/examples/security/hello1-formauth/src/main/webapp/WEB-INF/web.xml`:

    +
    +
    +
    +
        <security-constraint>
    +        <display-name>Constraint1</display-name>
    +        <web-resource-collection>
    +            <web-resource-name>wrcoll</web-resource-name>
    +            <description/>
    +            <url-pattern>/*</url-pattern>
    +        </web-resource-collection>
    +        <auth-constraint>
    +            <description/>
    +            <role-name>TutorialUser</role-name>
    +        </auth-constraint>
    +    </security-constraint>
    +
    +    <login-config>
    +        <auth-method>FORM</auth-method>
    +        <realm-name>file</realm-name>
    +        <form-login-config>
    +            <form-login-page>/login.xhtml</form-login-page>
    +            <form-error-page>/error.xhtml</form-error-page>
    +        </form-login-config>
    +    </login-config>
    +
    +    <security-role>
    +        <description/>
    +        <role-name>TutorialUser</role-name>
    +    </security-role>
    +
    +
    +
    +

    48.4.4.3 To Build, Package, and Deploy the hello1-formauth Example Using +NetBeans IDE +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

    +
    +
    +
      +
    1. +

      Follow the steps in To Set Up Your System for Running +the Security Examples.

      +
    2. +
    3. +

      From the File menu, choose Open Project.

      +
    4. +
    5. +

      In the Open Project dialog box, navigate to:

      +
      +
      +
      tut-install/examples/security
      +
      +
      +
    6. +
    7. +

      Select the hello1-formauth folder.

      +
    8. +
    9. +

      Click Open Project.

      +
    10. +
    11. +

      In the Projects tab, right-click the hello1-formauth project and +select Run.

      +
      +

      This command builds and deploys the example application to your +GlassFish Server instance, then opens it in a browser.

      +
      +
    12. +
    +
    +
    +

    48.4.4.4 To Build, Package, and Deploy the hello1-formauth Example Using +Maven and the asadmin Command +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

    +
    +
    +
      +
    1. +

      Follow the steps in To Set Up Your System for Running +the Security Examples.

      +
    2. +
    3. +

      In a terminal window, go to:

      +
      +
      +
      tut-install/examples/security/hello1-formauth/
      +
      +
      +
    4. +
    5. +

      Enter the following command at the terminal window or command +prompt:

      +
      +
      +
      mvn install
      +
      +
      +
      +

      This command builds and packages the application into a WAR file, +hello1-formauth.war, that is located in the target directory, then +deploys the WAR file to GlassFish Server.

      +
      +
    6. +
    +
    +
    +
    +

    48.4.4.5 To Run the hello1-formauth Example

    +
    +

    To run the web client for hello1-formauth, follow these steps.

    +
    +
    +
      +
    1. +

      Open a web browser to the following URL:

      +
      +
      +
      http://localhost:8080/hello1-formauth/
      +
      +
      +
    2. +
    3. +

      In the login form, enter a user name and password combination that +corresponds to a user who has already been created in the file realm +of GlassFish Server and has been assigned to the group TutorialUser.

      +
      +

      Form-based authentication is case sensitive for both the user name and +password, so enter the user name and password exactly as defined for +GlassFish Server.

      +
      +
    4. +
    5. +

      Click Submit.

      +
      +

      If you entered My_Name as the name and My_Pwd for the password, the +server returns the requested resource if all the following conditions +are met. +* A user with the user name My_Name is defined for GlassFish Server. +* The user with the user name My_Name has a password My_Pwd defined +for GlassFish Server. +* The user My_Name with the password My_Pwd is assigned to the group +TutorialUser on GlassFish Server. +* The role TutorialUser, as defined for the application, is mapped to +the group TutorialUser, as defined for GlassFish Server.

      +
      +
      +

      + +When these conditions are met and the server has authenticated the user, +the application appears.

      +
      +
    6. +
    7. +

      Enter your name and click Submit.

      +
      +

      Because you have already been authorized, the name you enter in this +step does not have any limitations. You have unlimited access to the +application now.

      +
      +
      +

      The application responds by saying "Hello" to you.

      +
      +
    8. +
    +
    +
    +

    Next Steps

    +
    +
    +

    For additional testing and to see the login error page generated, close +and reopen your browser, enter the application URL, and enter a user +name and password that are not authorized.

    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    +
    +
    + + + \ No newline at end of file diff --git a/servlets.html b/servlets.html new file mode 100644 index 0000000..907d56a --- /dev/null +++ b/servlets.html @@ -0,0 +1,150 @@ + + + + + + Java Servlet Technology + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    + + + + \ No newline at end of file diff --git a/servlets001.html b/servlets001.html new file mode 100644 index 0000000..938b73b --- /dev/null +++ b/servlets001.html @@ -0,0 +1,100 @@ + + + + + + What Is a Servlet? + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    17.1 What Is a Servlet?

    +
    +
    +

    A servlet is a Java programming language class used to extend the +capabilities of servers that host applications accessed by means of a +request-response programming model. Although servlets can respond to any +type of request, they are commonly used to extend the applications +hosted by web servers. For such applications, Java Servlet technology +defines HTTP-specific servlet classes.

    +
    +
    +

    The javax.servlet and javax.servlet.http packages provide interfaces +and classes for writing servlets. All servlets must implement the +Servlet interface, which defines lifecycle methods. When implementing +a generic service, you can use or extend the GenericServlet class +provided with the Java Servlet API. The HttpServlet class provides +methods, such as doGet and doPost, for handling HTTP-specific +services.

    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    + + + \ No newline at end of file diff --git a/servlets002.html b/servlets002.html new file mode 100644 index 0000000..fddd2b2 --- /dev/null +++ b/servlets002.html @@ -0,0 +1,250 @@ + + + + + + Servlet Lifecycle + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    17.2 Servlet Lifecycle

    +
    +
    +

    The lifecycle of a servlet is controlled by the container in which the +servlet has been deployed. When a request is mapped to a servlet, the +container performs the following steps.

    +
    +
    +
      +
    1. +

      If an instance of the servlet does not exist, the web container:

      +
    2. +
    3. +

      Loads the servlet class

      +
    4. +
    5. +

      Creates an instance of the servlet class

      +
    6. +
    7. +

      Initializes the servlet instance by calling the init method +(initialization is covered in Creating and +Initializing a Servlet)

      +
    8. +
    9. +

      The container invokes the service method, passing request and +response objects. Service methods are discussed in +Writing Service Methods.

      +
    10. +
    +
    +
    +

    If it needs to remove the servlet, the container finalizes the servlet +by calling the servlet’s destroy method. For more information, see +Finalizing a Servlet.

    +
    +
    +

    17.2.1 Handling Servlet Lifecycle Events

    +
    +

    You can monitor and react to events in a servlet’s lifecycle by defining +listener objects whose methods get invoked when lifecycle events occur. +To use these listener objects, you must define and specify the listener +class.

    +
    +
    +

    17.2.1.1 Defining the Listener Class

    +
    +

    You define a listener class as an implementation of a listener +interface. Table 17-1 lists the events that can be +monitored and the corresponding interface that must be implemented. When +a listener method is invoked, it is passed an event that contains +information appropriate to the event. For example, the methods in the +HttpSessionListener interface are passed an HttpSessionEvent, which +contains an HttpSession.

    +
    +
    +

    +
    +
    +

    Table 17-1 Servlet Lifecycle Events

    +
    + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ObjectEventListener Interface and Event Class

    Web context

    Initialization and destruction

    javax.servlet.ServletContextListener and ServletContextEvent

    Web context

    Attribute added, removed, or replaced

    javax.servlet.ServletContextAttributeListener and +ServletContextAttributeEvent

    Session

    Creation, invalidation, activation, passivation, and timeout

    javax.servlet.http.HttpSessionListener, +javax.servlet.http.HttpSessionActivationListener, and +HttpSessionEvent

    Session

    Attribute added, removed, or replaced

    javax.servlet.http.HttpSessionAttributeListener and +HttpSessionBindingEvent

    Request

    A servlet request has started being processed by web +components

    javax.servlet.ServletRequestListener and +ServletRequestEvent

    Request

    Attribute added, removed, or replaced

    javax.servlet.ServletRequestAttributeListener and +ServletRequestAttributeEvent

    +
    +
    +
    +
    +
    +
    +
    +

    Use the @WebListener annotation to define a listener to get events for +various operations on the particular web application context. Classes +annotated with @WebListener must implement one of the following +interfaces:

    +
    +
    +
    +
    javax.servlet.ServletContextListener
    +javax.servlet.ServletContextAttributeListener
    +javax.servlet.ServletRequestListener
    +javax.servlet.ServletRequestAttributeListener
    +javax.servlet..http.HttpSessionListener
    +javax.servlet..http.HttpSessionAttributeListener
    +
    +
    +
    +

    For example, the following code snippet defines a listener that +implements two of these interfaces:

    +
    +
    +
    +
    import javax.servlet.ServletContextAttributeListener;
    +import javax.servlet.ServletContextListener;
    +import javax.servlet.annotation.WebListener;
    +
    +@WebListener()
    +public class SimpleServletListener implements ServletContextListener,
    +        ServletContextAttributeListener {
    +    ...
    +
    +
    +
    +
    +
    +

    17.2.2 Handling Servlet Errors

    +
    +

    Any number of exceptions can occur when a servlet executes. When an +exception occurs, the web container generates a default page containing +the following message:

    +
    +
    +
    +
    A Servlet Exception Has Occurred
    +
    +
    +
    +

    But you can also specify that the container should return a specific +error page for a given exception.

    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    +
    + + + \ No newline at end of file diff --git a/servlets003.html b/servlets003.html new file mode 100644 index 0000000..e88befc --- /dev/null +++ b/servlets003.html @@ -0,0 +1,209 @@ + + + + + + Sharing Information + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    17.3 Sharing Information

    +
    +
    +

    Web components, like most objects, usually work with other objects to +accomplish their tasks. Web components can do so by doing the following.

    +
    +
    +
      +
    • +

      Using private helper objects (for example, JavaBeans components).

      +
    • +
    • +

      Sharing objects that are attributes of a public scope.

      +
    • +
    • +

      Using a database.

      +
    • +
    • +

      Invoking other web resources. The Java Servlet technology mechanisms +that allow a web component to invoke other web resources are described +in Invoking Other Web Resources.

      +
    • +
    +
    +
    +

    17.3.1 Using Scope Objects

    +
    +

    Collaborating web components share information by means of objects that +are maintained as attributes of four scope objects. You access these +attributes by using the getAttribute and setAttribute methods of the +class representing the scope. Table 17-2 lists the scope +objects.

    +
    +
    +

    +
    +
    +

    Table 17-2 Scope Objects

    +
    + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Scope ObjectClassAccessible From

    Web context

    javax.servlet.ServletContext

    Web components within a +web context. See Accessing the Web Context.

    Session

    javax.servlet.http.HttpSession

    Web components handling a +request that belongs to the session. See +Maintaining Client State.

    Request

    Subtype of javax.servlet.ServletRequest

    Web components +handling the request.

    Page

    javax.servlet.jsp.JspContext

    The JSP page that creates the +object.

    +
    +
    +
    +
    +
    +
    +
    +
    +

    17.3.2 Controlling Concurrent Access to Shared Resources

    +
    +

    In a multithreaded server, shared resources can be accessed +concurrently. In addition to scope object attributes, shared resources +include in-memory data, such as instance or class variables, and +external objects, such as files, database connections, and network +connections.

    +
    +
    +

    Concurrent access can arise in several situations.

    +
    +
    +
      +
    • +

      Multiple web components accessing objects stored in the web context.

      +
    • +
    • +

      Multiple web components accessing objects stored in a session.

      +
    • +
    • +

      Multiple threads within a web component accessing instance variables. +A web container will typically create a thread to handle each request. +To ensure that a servlet instance handles only one request at a time, a +servlet can implement the SingleThreadModel interface. If a servlet +implements this interface, no two threads will execute concurrently in +the servlet’s service method. A web container can implement this +guarantee by synchronizing access to a single instance of the servlet or +by maintaining a pool of web component instances and dispatching each +new request to a free instance. This interface does not prevent +synchronization problems that result from web components' accessing +shared resources, such as static class variables or external objects.

      +
    • +
    +
    +
    +

    When resources can be accessed concurrently, they can be used in an +inconsistent fashion. You prevent this by controlling the access using +the synchronization techniques described in the Threads lesson at +http://docs.oracle.com/javase/tutorial/essential/concurrency/.

    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    +
    + + + \ No newline at end of file diff --git a/servlets004.html b/servlets004.html new file mode 100644 index 0000000..d13b312 --- /dev/null +++ b/servlets004.html @@ -0,0 +1,125 @@ + + + + + + Creating and Initializing a Servlet + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    17.4 Creating and Initializing a Servlet

    +
    +
    +

    Use the @WebServlet annotation to define a servlet component in a web +application. This annotation is specified on a class and contains +metadata about the servlet being declared. The annotated servlet must +specify at least one URL pattern. This is done by using the +urlPatterns or value attribute on the annotation. All other +attributes are optional, with default settings. Use the value +attribute when the only attribute on the annotation is the URL pattern; +otherwise, use the urlPatterns attribute when other attributes are +also used.

    +
    +
    +

    Classes annotated with @WebServlet must extend the +javax.servlet.http.HttpServlet class. For example, the following code +snippet defines a servlet with the URL pattern /report:

    +
    +
    +
    +
    import javax.servlet.annotation.WebServlet;
    +import javax.servlet.http.HttpServlet;
    +
    +@WebServlet("/report")
    +public class MoodServlet extends HttpServlet {
    +    ...
    +
    +
    +
    +

    The web container initializes a servlet after loading and instantiating +the servlet class and before delivering requests from clients. To +customize this process to allow the servlet to read persistent +configuration data, initialize resources, and perform any other one-time +activities, you can either override the init method of the Servlet +interface or specify the initParams attribute of the @WebServlet +annotation. The initParams attribute contains a @WebInitParam +annotation. If it cannot complete its initialization process, a servlet +throws an UnavailableException.

    +
    +
    +

    Use an initialization parameter to provide data needed by a particular +servlet. By contrast, a context parameter provides data that is +available to all components of a web application.

    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    + + + \ No newline at end of file diff --git a/servlets005.html b/servlets005.html new file mode 100644 index 0000000..5c2741c --- /dev/null +++ b/servlets005.html @@ -0,0 +1,264 @@ + + + + + + Writing Service Methods + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    17.5 Writing Service Methods

    +
    +
    +

    The service provided by a servlet is implemented in the service method +of a GenericServlet, in the do`Method methods (where Method can take +the value `Get, Delete, Options, Post, Put, or Trace) of an +HttpServlet object, or in any other protocol-specific methods defined +by a class that implements the Servlet interface. The term service +method is used for any method in a servlet class that provides a service +to a client.

    +
    +
    +

    The general pattern for a service method is to extract information from +the request, access external resources, and then populate the response, +based on that information. For HTTP servlets, the correct procedure for +populating the response is to do the following:

    +
    +
    +
      +
    1. +

      Retrieve an output stream from the response.

      +
    2. +
    3. +

      Fill in the response headers.

      +
    4. +
    5. +

      Write any body content to the output stream.

      +
    6. +
    +
    +
    +

    Response headers must always be set before the response has been +committed. The web container will ignore any attempt to set or add +headers after the response has been committed. The next two sections +describe how to get information from requests and generate responses.

    +
    +
    +

    17.5.1 Getting Information from Requests

    +
    +

    A request contains data passed between a client and the servlet. All +requests implement the ServletRequest interface. This interface +defines methods for accessing the following information:

    +
    +
    +
      +
    • +

      Parameters, which are typically used to convey information between +clients and servlets

      +
    • +
    • +

      Object-valued attributes, which are typically used to pass information +between the web container and a servlet or between collaborating +servlets

      +
    • +
    • +

      Information about the protocol used to communicate the request and +about the client and server involved in the request

      +
    • +
    • +

      Information relevant to localization

      +
    • +
    +
    +
    +

    You can also retrieve an input stream from the request and manually +parse the data. To read character data, use the BufferedReader object +returned by the request’s getReader method. To read binary data, use +the ServletInputStream returned by getInputStream.

    +
    +
    +

    HTTP servlets are passed an HTTP request object, HttpServletRequest, +which contains the request URL, HTTP headers, query string, and so on. +An HTTP request URL contains the following parts:

    +
    +
    +
    +
    http://[host]:[port][request-path]?[query-string]
    +
    +
    +
    +

    The request path is further composed of the following elements.

    +
    +
    +
      +
    • +

      Context path: A concatenation of a forward slash (/) with the +context root of the servlet’s web application.

      +
    • +
    • +

      Servlet path: The path section that corresponds to the component alias +that activated this request. This path starts with a forward slash +(/).

      +
    • +
    • +

      Path info: The part of the request path that is not part of the +context path or the servlet path.

      +
    • +
    +
    +
    +

    You can use the getContextPath, getServletPath, and getPathInfo +methods of the HttpServletRequest interface to access this +information. Except for URL encoding differences between the request URI +and the path parts, the request URI is always comprised of the context +path plus the servlet path plus the path info.

    +
    +
    +

    Query strings are composed of a set of parameters and values. Individual +parameters are retrieved from a request by using the getParameter +method. There are two ways to generate query strings.

    +
    +
    +
      +
    • +

      A query string can explicitly appear in a web page.

      +
    • +
    • +

      A query string is appended to a URL when a form with a GET HTTP +method is submitted.

      +
    • +
    +
    +
    +
    +

    17.5.2 Constructing Responses

    +
    +

    A response contains data passed between a server and the client. All +responses implement the ServletResponse interface. This interface +defines methods that allow you to do the following.

    +
    +
    +
      +
    • +

      Retrieve an output stream to use to send data to the client. To send +character data, use the PrintWriter returned by the response’s +getWriter method. To send binary data in a Multipurpose Internet Mail +Extensions (MIME) body response, use the ServletOutputStream returned +by getOutputStream. To mix binary and text data, as in a multipart +response, use a ServletOutputStream and manage the character sections +manually.

      +
    • +
    • +

      Indicate the content type (for example, text/html) being returned by +the response with the setContentType(String) method. This method must +be called before the response is committed. A registry of content type +names is kept by the Internet Assigned Numbers Authority (IANA) at +http://www.iana.org/assignments/media-types/.

      +
    • +
    • +

      Indicate whether to buffer output with the setBufferSize(int) +method. By default, any content written to the output stream is +immediately sent to the client. Buffering allows content to be written +before anything is sent back to the client, thus providing the servlet +with more time to set appropriate status codes and headers or forward to +another web resource. The method must be called before any content is +written or before the response is committed.

      +
    • +
    • +

      Set localization information, such as locale and character encoding. +See Chapter 20, "Internationalizing and +Localizing Web Applications" for details.

      +
    • +
    +
    +
    +

    HTTP response objects, javax.servlet.http.HttpServletResponse, have +fields representing HTTP headers, such as the following.

    +
    +
    +
      +
    • +

      Status codes, which are used to indicate the reason a request is not +satisfied or that a request has been redirected.

      +
    • +
    • +

      Cookies, which are used to store application-specific information at +the client. Sometimes, cookies are used to maintain an identifier for +tracking a user’s session (see Session +Tracking).

      +
    • +
    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    +
    + + + \ No newline at end of file diff --git a/servlets006.html b/servlets006.html new file mode 100644 index 0000000..8960654 --- /dev/null +++ b/servlets006.html @@ -0,0 +1,377 @@ + + + + + + Filtering Requests and Responses + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    17.6 Filtering Requests and Responses

    +
    +
    +

    A filter is an object that can transform the header and content (or +both) of a request or response. Filters differ from web components in +that filters usually do not themselves create a response. Instead, a +filter provides functionality that can be "attached" to any kind of web +resource. Consequently, a filter should not have any dependencies on a +web resource for which it is acting as a filter; this way, it can be +composed with more than one type of web resource.

    +
    +
    +

    The main tasks that a filter can perform are as follows.

    +
    +
    +
      +
    • +

      Query the request and act accordingly.

      +
    • +
    • +

      Block the request-and-response pair from passing any further.

      +
    • +
    • +

      Modify the request headers and data. You do this by providing a +customized version of the request.

      +
    • +
    • +

      Modify the response headers and data. You do this by providing a +customized version of the response.

      +
    • +
    • +

      Interact with external resources.

      +
    • +
    +
    +
    +

    Applications of filters include authentication, logging, image +conversion, data compression, encryption, tokenizing streams, XML +transformations, and so on.

    +
    +
    +

    You can configure a web resource to be filtered by a chain of zero, one, +or more filters in a specific order. This chain is specified when the +web application containing the component is deployed and is instantiated +when a web container loads the component.

    +
    +
    +

    17.6.1 Programming Filters

    +
    +

    The filtering API is defined by the Filter, FilterChain, and +FilterConfig interfaces in the javax.servlet package. You define a +filter by implementing the Filter interface.

    +
    +
    +

    Use the @WebFilter annotation to define a filter in a web application. +This annotation is specified on a class and contains metadata about the +filter being declared. The annotated filter must specify at least one +URL pattern. This is done by using the urlPatterns or value +attribute on the annotation. All other attributes are optional, with +default settings. Use the value attribute when the only attribute on +the annotation is the URL pattern; use the urlPatterns attribute when +other attributes are also used.

    +
    +
    +

    Classes annotated with the @WebFilter annotation must implement the +javax.servlet.Filter interface.

    +
    +
    +

    To add configuration data to the filter, specify the initParams +attribute of the @WebFilter annotation. The initParams attribute +contains a @WebInitParam annotation. The following code snippet +defines a filter, specifying an initialization parameter:

    +
    +
    +
    +
    import javax.servlet.Filter;
    +import javax.servlet.annotation.WebFilter;
    +import javax.servlet.annotation.WebInitParam;
    +
    +@WebFilter(filterName = "TimeOfDayFilter",
    +urlPatterns = {"/*"},
    +initParams = {
    +    @WebInitParam(name = "mood", value = "awake")})
    +public class TimeOfDayFilter implements Filter {
    +    ...
    +
    +
    +
    +

    The most important method in the Filter interface is doFilter, which +is passed request, response, and filter chain objects. This method can +perform the following actions.

    +
    +
    +
      +
    • +

      Examine the request headers.

      +
    • +
    • +

      Customize the request object if the filter wishes to modify request +headers or data.

      +
    • +
    • +

      Customize the response object if the filter wishes to modify response +headers or data.

      +
    • +
    • +

      Invoke the next entity in the filter chain. If the current filter is +the last filter in the chain that ends with the target web component or +static resource, the next entity is the resource at the end of the +chain; otherwise, it is the next filter that was configured in the WAR. +The filter invokes the next entity by calling the doFilter method on +the chain object, passing in the request and response it was called with +or the wrapped versions it may have created. Alternatively, the filter +can choose to block the request by not making the call to invoke the +next entity. In the latter case, the filter is responsible for filling +out the response.

      +
    • +
    • +

      Examine response headers after invoking the next filter in the chain.

      +
    • +
    • +

      Throw an exception to indicate an error in processing.

      +
    • +
    +
    +
    +

    In addition to doFilter, you must implement the init and destroy +methods. The init method is called by the container when the filter is +instantiated. If you wish to pass initialization parameters to the +filter, you retrieve them from the FilterConfig object passed to +init.

    +
    +
    +
    +

    17.6.2 Programming Customized Requests and Responses

    +
    +

    There are many ways for a filter to modify a request or a response. For +example, a filter can add an attribute to the request or can insert data +in the response.

    +
    +
    +

    A filter that modifies a response must usually capture the response +before it is returned to the client. To do this, you pass a stand-in +stream to the servlet that generates the response. The stand-in stream +prevents the servlet from closing the original response stream when it +completes and allows the filter to modify the servlet’s response.

    +
    +
    +

    To pass this stand-in stream to the servlet, the filter creates a +response wrapper that overrides the getWriter or getOutputStream +method to return this stand-in stream. The wrapper is passed to the +doFilter method of the filter chain. Wrapper methods default to +calling through to the wrapped request or response object.

    +
    +
    +

    To override request methods, you wrap the request in an object that +extends either ServletRequestWrapper or HttpServletRequestWrapper. +To override response methods, you wrap the response in an object that +extends either ServletResponseWrapper or HttpServletResponseWrapper.

    +
    +
    +
    +

    17.6.3 Specifying Filter Mappings

    +
    +

    A web container uses filter mappings to decide how to apply filters to +web resources. A filter mapping matches a filter to a web component by +name or to web resources by URL pattern. The filters are invoked in the +order in which filter mappings appear in the filter mapping list of a +WAR. You specify a filter mapping list for a WAR in its deployment +descriptor by either using NetBeans IDE or coding the list by hand with +XML.

    +
    +
    +

    If you want to log every request to a web application, you map the hit +counter filter to the URL pattern /*.

    +
    +
    +

    You can map a filter to one or more web resources, and you can map more +than one filter to a web resource. This is illustrated in +Figure 17-1, in which filter F1 is mapped to servlets S1, +S2, and S3; filter F2 is mapped to servlet S2; and filter F3 is mapped +to servlets S1 and S2.

    +
    +
    +

    Figure 17-1 Filter-to-Servlet Mapping

    +
    + +
    +

    Recall that a filter chain is one of the objects passed to the +doFilter method of a filter. This chain is formed indirectly by means +of filter mappings. The order of the filters in the chain is the same as +the order in which filter mappings appear in the web application +deployment descriptor.

    +
    +
    +

    When a filter is mapped to servlet S1, the web container invokes the +doFilter method of F1. The doFilter method of each filter in S1’s +filter chain is invoked by the preceding filter in the chain by means of +the chain.doFilter method. Because S1’s filter chain contains filters +F1 and F3, F1’s call to chain.doFilter invokes the doFilter method +of filter F3. When F3’s doFilter method completes, control returns to +F1’s doFilter method.

    +
    +
    +

    17.6.3.1 To Specify Filter Mappings Using NetBeans IDE

    +
    +
      +
    1. +

      Expand the application’s project node in the Project tab.

      +
    2. +
    3. +

      Expand the Web Pages and WEB-INF nodes under the project node.

      +
    4. +
    5. +

      Double-click web.xml.

      +
    6. +
    7. +

      Click Filters at the top of the editor window.

      +
    8. +
    9. +

      Expand the Servlet Filters node in the editor window.

      +
    10. +
    11. +

      Click Add Filter Element to map the filter to a web resource by name +or by URL pattern.

      +
    12. +
    13. +

      In the Add Servlet Filter dialog box, enter the name of the filter +in the Filter Name field.

      +
    14. +
    15. +

      Click Browse to locate the servlet class to which the filter +applies.

      +
      +

      You can include wildcard characters so that you can apply the filter to +more than one servlet.

      +
      +
    16. +
    17. +

      Click OK.

      +
    18. +
    19. +

      To constrain how the filter is applied to requests, follow these +steps.

      +
    20. +
    21. +

      Expand the Filter Mappings node.

      +
    22. +
    23. +

      Select the filter from the list of filters.

      +
    24. +
    25. +

      Click Add.

      +
    26. +
    27. +

      In the Add Filter Mapping dialog box, select one of the following +dispatcher types:

      +
      +
        +
      • +

        REQUEST: Only when the request comes directly from the client

        +
      • +
      • +

        ASYNC: Only when the asynchronous request comes from the client

        +
      • +
      • +

        FORWARD: Only when the request has been forwarded to a component (see +Transferring Control to Another Web +Component)

        +
      • +
      • +

        INCLUDE: Only when the request is being processed by a component that +has been included (see Including Other +Resources in the Response)

        +
      • +
      • +

        ERROR: Only when the request is being processed with the error page +mechanism (see Handling Servlet Errors)

        +
        +

        You can direct the filter to be applied to any combination of the +preceding situations by selecting multiple dispatcher types. If no types +are specified, the default option is REQUEST.

        +
        +
      • +
      +
      +
    28. +
    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    +
    +
    + + + \ No newline at end of file diff --git a/servlets007.html b/servlets007.html new file mode 100644 index 0000000..2f47a88 --- /dev/null +++ b/servlets007.html @@ -0,0 +1,169 @@ + + + + + + Invoking Other Web Resources + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    17.7 Invoking Other Web Resources

    +
    +
    +

    Web components can invoke other web resources both indirectly and +directly. A web component indirectly invokes another web resource by +embedding a URL that points to another web component in content returned +to a client. While it is executing, a web component directly invokes +another resource by either including the content of another resource or +forwarding a request to another resource.

    +
    +
    +

    To invoke a resource available on the server that is running a web +component, you must first obtain a RequestDispatcher object by using +the getRequestDispatcher("URL") method. You can get a +RequestDispatcher object from either a request or the web context; +however, the two methods have slightly different behavior. The method +takes the path to the requested resource as an argument. A request can +take a relative path (that is, one that does not begin with a /), but +the web context requires an absolute path. If the resource is not +available or if the server has not implemented a RequestDispatcher +object for that type of resource, getRequestDispatcher will return +null. Your servlet should be prepared to deal with this condition.

    +
    +
    +

    17.7.1 Including Other Resources in the Response

    +
    +

    It is often useful to include another web resource, such as banner +content or copyright information, in the response returned from a web +component. To include another resource, invoke the include method of a +RequestDispatcher object:

    +
    +
    +
    +
    include(request, response);
    +
    +
    +
    +

    If the resource is static, the include method enables programmatic +server-side includes. If the resource is a web component, the effect of +the method is to send the request to the included web component, execute +the web component, and then include the result of the execution in the +response from the containing servlet. An included web component has +access to the request object but is limited in what it can do with the +response object.

    +
    +
    +
      +
    • +

      It can write to the body of the response and commit a response.

      +
    • +
    • +

      It cannot set headers or call any method, such as setCookie, that +affects the headers of the response.

      +
    • +
    +
    +
    +
    +

    17.7.2 Transferring Control to Another Web Component

    +
    +

    In some applications, you might want to have one web component do +preliminary processing of a request and have another component generate +the response. For example, you might want to partially process a request +and then transfer to another component, depending on the nature of the +request.

    +
    +
    +

    To transfer control to another web component, you invoke the forward +method of a RequestDispatcher. When a request is forwarded, the +request URL is set to the path of the forwarded page. The original URI +and its constituent parts are saved as the following request attributes:

    +
    +
    +
    +
    javax.servlet.forward.request_uri
    +javax.servlet.forward.context_path
    +javax.servlet.forward.servlet_path
    +javax.servlet.forward.path_info
    +javax.servlet.forward.query_string
    +
    +
    +
    +

    The forward method should be used to give another resource +responsibility for replying to the user. If you have already accessed a +ServletOutputStream or PrintWriter object within the servlet, you +cannot use this method; doing so throws an IllegalStateException.

    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    +
    + + + \ No newline at end of file diff --git a/servlets008.html b/servlets008.html new file mode 100644 index 0000000..6fec5c7 --- /dev/null +++ b/servlets008.html @@ -0,0 +1,111 @@ + + + + + + Accessing the Web Context + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    17.8 Accessing the Web Context

    +
    +
    +

    The context in which web components execute is an object that implements +the ServletContext interface. You retrieve the web context by using +the getServletContext method. The web context provides methods for +accessing

    +
    +
    +
      +
    • +

      Initialization parameters

      +
    • +
    • +

      Resources associated with the web context

      +
    • +
    • +

      Object-valued attributes

      +
    • +
    • +

      Logging capabilities

      +
    • +
    +
    +
    +

    The counter’s access methods are synchronized to prevent incompatible +operations by servlets that are running concurrently. A filter retrieves +the counter object by using the context’s getAttribute method. The +incremented value of the counter is recorded in the log.

    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    + + + \ No newline at end of file diff --git a/servlets009.html b/servlets009.html new file mode 100644 index 0000000..ae12e81 --- /dev/null +++ b/servlets009.html @@ -0,0 +1,207 @@ + + + + + + Maintaining Client State + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    17.9 Maintaining Client State

    +
    +
    +

    Many applications require that a series of requests from a client be +associated with one another. For example, a web application can save the +state of a user’s shopping cart across requests. Web-based applications +are responsible for maintaining such state, called a session, because +HTTP is stateless. To support applications that need to maintain state, +Java Servlet technology provides an API for managing sessions and allows +several mechanisms for implementing sessions.

    +
    +
    +

    17.9.1 Accessing a Session

    +
    +

    Sessions are represented by an HttpSession object. You access a +session by calling the getSession method of a request object. This +method returns the current session associated with this request; or, if +the request does not have a session, this method creates one.

    +
    +
    +
    +

    17.9.2 Associating Objects with a Session

    +
    +

    You can associate object-valued attributes with a session by name. Such +attributes are accessible by any web component that belongs to the same +web context and is handling a request that is part of the same session.

    +
    +
    +

    Recall that your application can notify web context and session listener +objects of servlet lifecycle events (Handling +Servlet Lifecycle Events). You can also notify objects of certain +events related to their association with a session, such as the +following.

    +
    +
    +
      +
    • +

      When the object is added to or removed from a session. To receive this +notification, your object must implement the +javax.servlet.http.HttpSessionBindingListener interface.

      +
    • +
    • +

      When the session to which the object is attached will be passivated or +activated. A session will be passivated or activated when it is moved +between virtual machines or saved to and restored from persistent +storage. To receive this notification, your object must implement the +javax.servlet.http.HttpSessionActivationListener interface.

      +
    • +
    +
    +
    +
    +

    17.9.3 Session Management

    +
    +

    Because an HTTP client has no way to signal that it no longer needs a +session, each session has an associated timeout so that its resources +can be reclaimed. The timeout period can be accessed by using a +session’s getMaxInactiveInterval and setMaxInactiveInterval methods.

    +
    +
    +
      +
    • +

      To ensure that an active session is not timed out, you should +periodically access the session by using service methods because this +resets the session’s time-to-live counter.

      +
    • +
    • +

      When a particular client interaction is finished, you use the +session’s invalidate method to invalidate a session on the server side +and remove any session data.

      +
    • +
    +
    +
    +

    17.9.3.1 To Set the Timeout Period Using NetBeans IDE

    +
    +

    To set the timeout period in the deployment descriptor using NetBeans +IDE, follow these steps.

    +
    +
    +
      +
    1. +

      Open the project if you haven’t already.

      +
    2. +
    3. +

      Expand the node of your project in the Projects tab.

      +
    4. +
    5. +

      Expand the Web Pages and WEB-INF nodes that are under the project +node.

      +
    6. +
    7. +

      Double-click web.xml.

      +
    8. +
    9. +

      Click General at the top of the editor.

      +
    10. +
    11. +

      In the Session Timeout field, enter an integer value.

      +
      +

      The integer value represents the number of minutes of inactivity that +must pass before the session times out.

      +
      +
    12. +
    +
    +
    +
    +
    +

    17.9.4 Session Tracking

    +
    +

    To associate a session with a user, a web container can use several +methods, all of which involve passing an identifier between the client +and the server. The identifier can be maintained on the client as a +cookie, or the web component can include the identifier in every URL +that is returned to the client.

    +
    +
    +

    If your application uses session objects, you must ensure that session +tracking is enabled by having the application rewrite URLs whenever the +client turns off cookies. You do this by calling the response’s +encodeURL(URL) method on all URLs returned by a servlet. This method +includes the session ID in the URL only if cookies are disabled; +otherwise, the method returns the URL unchanged.

    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    +
    + + + \ No newline at end of file diff --git a/servlets010.html b/servlets010.html new file mode 100644 index 0000000..af3dfcc --- /dev/null +++ b/servlets010.html @@ -0,0 +1,261 @@ + + + + + + Finalizing a Servlet + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    17.10 Finalizing a Servlet

    +
    +
    +

    The web container may determine that a servlet should be removed from +service (for example, when a container wants to reclaim memory resources +or when it is being shut down). In such a case, the container calls the +destroy method of the Servlet interface. In this method, you release +any resources the servlet is using and save any persistent state. The +destroy method releases the database object created in the init +method.

    +
    +
    +

    A servlet’s service methods should all be complete when a servlet is +removed. The server tries to ensure this by calling the destroy method +only after all service requests have returned or after a server-specific +grace period, whichever comes first. If your servlet has operations that +may run longer than the server’s grace period, the operations could +still be running when destroy is called. You must make sure that any +threads still handling client requests complete.

    +
    +
    +

    The remainder of this section explains how to do the following.

    +
    +
    +
      +
    • +

      Keep track of how many threads are currently running the service +method.

      +
    • +
    • +

      Provide a clean shutdown by having the destroy method notify +long-running threads of the shutdown and wait for them to complete.

      +
    • +
    • +

      Have the long-running methods poll periodically to check for shutdown +and, if necessary, stop working, clean up, and return.

      +
    • +
    +
    +
    +

    17.10.1 Tracking Service Requests

    +
    +

    To track service requests:

    +
    +
    +
      +
    1. +

      Include a field in your servlet class that counts the number of +service methods that are running.

      +
      +

      The field should have synchronized access methods to increment, +decrement, and return its value:

      +
      +
      +
      +
      public class ShutdownExample extends HttpServlet {
      +    private int serviceCounter = 0;
      +    ...
      +    // Access methods for serviceCounter
      +    protected synchronized void enteringServiceMethod() {
      +        serviceCounter++;
      +    }
      +    protected synchronized void leavingServiceMethod() {
      +        serviceCounter--;
      +    }
      +    protected synchronized int numServices() {
      +        return serviceCounter;
      +    }
      +}
      +
      +
      +
      +

      The service method should increment the service counter each time the +method is entered and should decrement the counter each time the method +returns. This is one of the few times that your HttpServlet subclass +should override the service method. The new method should call +super.service to preserve the functionality of the original service +method:

      +
      +
      +
      +
      protected void service(HttpServletRequest req,
      +                       HttpServletResponse resp)
      +                       throws ServletException,IOException {
      +    enteringServiceMethod();
      +    try {
      +        super.service(req, resp);
      +    } finally {
      +        leavingServiceMethod();
      +    }
      +}
      +
      +
      +
    2. +
    +
    +
    +
    +

    17.10.2 Notifying Methods to Shut Down

    +
    +

    To ensure a clean shutdown, your destroy method should not release any +shared resources until all the service requests have completed:

    +
    +
    +
      +
    1. +

      Check the service counter.

      +
    2. +
    3. +

      Notify long-running methods that it is time to shut down.

      +
      +

      For this notification, another field is required. The field should have +the usual access methods:

      +
      +
      +
      +
      public class ShutdownExample extends HttpServlet {
      +    private boolean shuttingDown;
      +    ...
      +    //Access methods for shuttingDown
      +    protected synchronized void setShuttingDown(boolean flag) {
      +        shuttingDown = flag;
      +    }
      +    protected synchronized boolean isShuttingDown() {
      +        return shuttingDown;
      +    }
      +}
      +
      +
      +
      +

      Here is an example of the destroy method using these fields to provide +a clean shutdown:

      +
      +
      +
      +
      public void destroy() {
      +    /* Check to see whether there are still service methods /*
      +    /* running, and if there are, tell them to stop. */
      +    if (numServices()> 0) {
      +        setShuttingDown(true);
      +    }
      +
      +    /* Wait for the service methods to stop. */
      +    while (numServices()> 0) {
      +        try {
      +            Thread.sleep(interval);
      +        } catch (InterruptedException e) {
      +        }
      +    }
      +}
      +
      +
      +
    4. +
    +
    +
    +
    +

    17.10.3 Creating Polite Long-Running Methods

    +
    +

    The final step in providing a clean shutdown is to make any long-running +methods behave politely. Methods that might run for a long time should +check the value of the field that notifies them of shutdowns and should +interrupt their work, if necessary:

    +
    +
    +
    +
    public void doPost(...) {
    +    ...
    +    for(i = 0; ((i < lotsOfStuffToDo) &&
    +         !isShuttingDown()); i++) {
    +        try {
    +            partOfLongRunningOperation(i);
    +        } catch (InterruptedException e) {
    +            ...
    +        }
    +    }
    +}
    +
    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    +
    + + + \ No newline at end of file diff --git a/servlets011.html b/servlets011.html new file mode 100644 index 0000000..01523ec --- /dev/null +++ b/servlets011.html @@ -0,0 +1,216 @@ + + + + + + Uploading Files with Java Servlet Technology + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    17.11 Uploading Files with Java Servlet Technology

    +
    +
    +

    Supporting file uploads is a very basic and common requirement for many +web applications. In prior versions of the Servlet specification, +implementing file upload required the use of external libraries or +complex input processing. The Java Servlet specification now helps to +provide a viable solution to the problem in a generic and portable way. +Java Servlet technology now supports file upload out of the box, so any +web container that implements the specification can parse multipart +requests and make mime attachments available through the +HttpServletRequest object.

    +
    +
    +

    A new annotation, javax.servlet.annotation.MultipartConfig, is used to +indicate that the servlet on which it is declared expects requests to be +made using the multipart/form-data MIME type. Servlets that are +annotated with @MultipartConfig can retrieve the Part components of +a given multipart/form-data request by calling the +request.getPart(String name) or request.getParts() method.

    +
    +
    +

    17.11.1 The @MultipartConfig Annotation

    +
    +

    The @MultipartConfig annotation supports the following optional +attributes.

    +
    +
    +
      +
    • +

      location: An absolute path to a directory on the file system. The +location attribute does not support a path relative to the application +context. This location is used to store files temporarily while the +parts are processed or when the size of the file exceeds the specified +fileSizeThreshold setting. The default location is "".

      +
    • +
    • +

      fileSizeThreshold: The file size in bytes after which the file will +be temporarily stored on disk. The default size is 0 bytes.

      +
    • +
    • +

      MaxFileSize: The maximum size allowed for uploaded files, in bytes. +If the size of any uploaded file is greater than this size, the web +container will throw an exception (IllegalStateException). The default +size is unlimited.

      +
    • +
    • +

      maxRequestSize: The maximum size allowed for a multipart/form-data +request, in bytes. The web container will throw an exception if the +overall size of all uploaded files exceeds this threshold. The default +size is unlimited.

      +
    • +
    +
    +
    +

    For, example, the @MultipartConfig annotation could be constructed as +follows:

    +
    +
    +
    +
    @MultipartConfig(location="/tmp", fileSizeThreshold=1024*1024,
    +    maxFileSize=1024*1024*5, maxRequestSize=1024*1024*5*5)
    +
    +
    +
    +

    Instead of using the @MultipartConfig annotation to hard-code these +attributes in your file upload servlet, you could add the following as a +child element of the servlet configuration element in the web.xml +file:

    +
    +
    +
    +
    <multipart-config>
    +    <location>/tmp</location>
    +    <max-file-size>20848820</max-file-size>
    +    <max-request-size>418018841</max-request-size>
    +    <file-size-threshold>1048576</file-size-threshold>
    +</multipart-config>
    +
    +
    +
    +
    +

    17.11.2 The getParts and getPart Methods

    +
    +

    The Servlet specification supports two additional HttpServletRequest +methods:

    +
    +
    +
      +
    • +

      Collection<Part> getParts()

      +
    • +
    • +

      Part getPart(String name)

      +
    • +
    +
    +
    +

    The request.getParts() method returns collections of all Part +objects. If you have more than one input of type file, multiple Part +objects are returned. Because Part objects are named, the +getPart(String name) method can be used to access a particular Part. +Alternatively, the getParts() method, which returns an +Iterable<Part>, can be used to get an Iterator over all the Part +objects.

    +
    +
    +

    The javax.servlet.http.Part interface is a simple one, providing +methods that allow introspection of each Part. The methods do the +following:

    +
    +
    +
      +
    • +

      Retrieve the name, size, and content-type of the Part

      +
    • +
    • +

      Query the headers submitted with a Part

      +
    • +
    • +

      Delete a Part

      +
    • +
    • +

      Write a Part out to disk

      +
    • +
    +
    +
    +

    For example, the Part interface provides the write(String filename) +method to write the file with the specified name. The file can then be +saved in the directory that is specified with the location attribute +of the @MultipartConfig annotation or, in the case of the fileupload +example, in the location specified by the Destination field in the form.

    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    +
    + + + \ No newline at end of file diff --git a/servlets012.html b/servlets012.html new file mode 100644 index 0000000..bb8f2e1 --- /dev/null +++ b/servlets012.html @@ -0,0 +1,347 @@ + + + + + + Asynchronous Processing + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    17.12 Asynchronous Processing

    +
    +
    +

    Web containers in application servers normally use a server thread per +client request. Under heavy load conditions, containers need a large +amount of threads to serve all the client requests. Scalability +limitations include running out of memory or exhausting the pool of +container threads. To create scalable web applications, you must ensure +that no threads associated with a request are sitting idle, so the +container can use them to process new requests.

    +
    +
    +

    There are two common scenarios in which a thread associated with a +request can be sitting idle.

    +
    +
    +
      +
    • +

      The thread needs to wait for a resource to become available or process +data before building the response. For example, an application may need +to query a database or access data from a remote web service before +generating the response.

      +
    • +
    • +

      The thread needs to wait for an event before generating the response. +For example, an application may have to wait for a JMS message, new +information from another client, or new data available in a queue before +generating the response.

      +
    • +
    +
    +
    +

    These scenarios represent blocking operations that limit the scalability +of web applications. Asynchronous processing refers to assigning these +blocking operations to a new thread and retuning the thread associated +with the request immediately to the container.

    +
    +
    +

    17.12.1 Asynchronous Processing in Servlets

    +
    +

    Java EE provides asynchronous processing support for servlets and +filters. If a servlet or a filter reaches a potentially blocking +operation when processing a request, it can assign the operation to an +asynchronous execution context and return the thread associated with the +request immediately to the container without generating a response. The +blocking operation completes in the asynchronous execution context in a +different thread, which can generate a response or dispatch the request +to another servlet.

    +
    +
    +

    To enable asynchronous processing on a servlet, set the parameter +asyncSupported to true on the @WebServlet annotation as follows:

    +
    +
    +
    +
    @WebServlet(urlPatterns={"/asyncservlet"}, asyncSupported=true)
    +public class AsyncServlet extends HttpServlet { ... }
    +
    +
    +
    +

    The javax.servlet.AsyncContext class provides the functionality that +you need to perform asynchronous processing inside service methods. To +obtain an instance of AsyncContext, call the startAsync() method on +the request object of your service method; for example:

    +
    +
    +
    +
    public void doGet(HttpServletRequest req, HttpServletResponse resp) {
    +   ...
    +   AsyncContext acontext = req.startAsync();
    +   ...
    +}
    +
    +
    +
    +

    This call puts the request into asynchronous mode and ensures that the +response is not committed after exiting the service method. You have to +generate the response in the asynchronous context after the blocking +operation completes or dispatch the request to another servlet.

    +
    +
    +

    Table 17-3 describes the basic functionality provided by +the AsyncContext class.

    +
    +
    +

    +
    +
    +

    Table 17-3 Functionality Provided by the AsyncContext Class

    +
    + ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Method SignatureDescription

    void start(Runnable run)

    +

    The container provides a different thread in which the blocking +operation can be processed.

    +
    +
    +

    You provide code for the blocking operation as a class that implements +the Runnable interface. You can provide this class as an inner class +when calling the start method or use another mechanism to pass the +AsyncContext instance to your class.

    +

    ServletRequest getRequest()

    +

    Returns the request used to initialize this asynchronous context. In the +example above, the request is the same as in the service method.

    +
    +
    +

    You can use this method inside the asynchronous context to obtain +parameters from the request.

    +

    ServletResponse getResponse()

    +

    Returns the response used to initialize this asynchronous context. In +the example above, the response is the same as in the service method.

    +
    +
    +

    You can use this method inside the asynchronous context to write to the +response with the results of the blocking operation.

    +

    void complete()

    +

    Completes the asynchronous operation and closes the response associated +with this asynchronous context.

    +
    +
    +

    You call this method after writing to the response object inside the +asynchronous context.

    +

    void dispatch(String path)

    +

    Dispatches the request and response objects to the given path.

    +
    +
    +

    You use this method to have another servlet write to the response after +the blocking operation completes.

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +

    17.12.2 Waiting for a Resource

    +
    +

    This section demonstrates how to use the functionality provided by the +AsyncContext class for the following use case:

    +
    +
    +
      +
    1. +

      A servlet receives a parameter from a GET request.

      +
    2. +
    3. +

      The servlet uses a resource, such as a database or a web service, to +retrieve information based on the value of the parameter. The resource +can be slow at times, so this may be a blocking operation.

      +
    4. +
    5. +

      The servlet generates a response using the result from the resource.

      +
    6. +
    +
    +
    +

    The following code shows a basic servlet that does not use asynchronous +processing:

    +
    +
    +
    +
    @WebServlet(urlPatterns={"/syncservlet"})
    +public class SyncServlet extends HttpServlet {
    +   private MyRemoteResource resource;
    +   @Override
    +   public void init(ServletConfig config) {
    +      resource = MyRemoteResource.create("config1=x,config2=y");
    +   }
    +
    +   @Override
    +   public void doGet(HttpServletRequest request,
    +                     HttpServletResponse response) {
    +      response.setContentType("text/html;charset=UTF-8");
    +      String param = request.getParameter("param");
    +      String result = resource.process(param);
    +      /* ... print to the response ... */
    +   }
    +}
    +
    +
    +
    +

    The following code shows the same servlet using asynchronous processing:

    +
    +
    +
    +
    @WebServlet(urlPatterns={"/asyncservlet"}, asyncSupported=true)
    +public class AsyncServlet extends HttpServlet {
    +   /* ... Same variables and init method as in SyncServlet ... */
    +
    +   @Override
    +   public void doGet(HttpServletRequest request,
    +                     HttpServletResponse response) {
    +      response.setContentType("text/html;charset=UTF-8");
    +      final AsyncContext acontext = request.startAsync();
    +      acontext.start(new Runnable() {
    +         public void run() {
    +            String param = acontext.getRequest().getParameter("param");
    +            String result = resource.process(param);
    +            HttpServletResponse response = acontext.getResponse();
    +            /* ... print to the response ... */
    +            acontext.complete();
    +   }
    +}
    +
    +
    +
    +

    AsyncServlet adds asyncSupported=true to the @WebServlet +annotation. The rest of the differences are inside the service method.

    +
    +
    +
      +
    • +

      request.startAsync() causes the request to be processed +asynchronously; the response is not sent to the client at the end of the +service method.

      +
    • +
    • +

      acontext.start(new Runnable() {...}) gets a new thread from the +container.

      +
    • +
    • +

      The code inside the run() method of the inner class executes in the +new thread. The inner class has access to the asynchronous context to +read parameters from the request and write to the response. Calling the +complete() method of the asynchronous context commits the response and +sends it to the client.

      +
    • +
    +
    +
    +

    The service method of AsyncServlet returns immediately, and the +request is processed in the asynchronous context.

    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    +
    + + + \ No newline at end of file diff --git a/servlets013.html b/servlets013.html new file mode 100644 index 0000000..040770b --- /dev/null +++ b/servlets013.html @@ -0,0 +1,327 @@ + + + + + + Nonblocking I/O + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    17.13 Nonblocking I/O

    +
    +
    +

    Web containers in application servers normally use a server thread per +client request. To develop scalable web applications, you must ensure +that threads associated with client requests are never sitting idle +waiting for a blocking operation to complete. +Asynchronous Processing provides a +mechanism to execute application-specific blocking operations in a new +thread, returning the thread associated with the request immediately to +the container. Even if you use asynchronous processing for all the +application-specific blocking operations inside your service methods, +threads associated with client requests can be momentarily sitting idle +because of input/output considerations.

    +
    +
    +

    For example, if a client is submitting a large HTTP POST request over a +slow network connection, the server can read the request faster than the +client can provide it. Using traditional I/O, the container thread +associated with this request would be sometimes sitting idle waiting for +the rest of the request.

    +
    +
    +

    Java EE provides nonblocking I/O support for servlets and filters when +processing requests in asynchronous mode. The following steps summarize +how to use nonblocking I/O to process requests and write responses +inside service methods.

    +
    +
    +
      +
    1. +

      Put the request in asynchronous mode as described in +Asynchronous Processing.

      +
    2. +
    3. +

      Obtain an input stream and/or an output stream from the request and +response objects in the service method.

      +
    4. +
    5. +

      Assign a read listener to the input stream and/or a write listener +to the output stream.

      +
    6. +
    7. +

      Process the request and the response inside the listener’s callback +methods.

      +
    8. +
    +
    +
    +

    Table 17-4 and Table 17-5 describe the +methods available in the servlet input and output streams for +nonblocking I/O support. Table 17-6 describes the +interfaces for read listeners and write listeners.

    +
    +
    +

    +
    +
    +

    Table 17-4 Nonblocking I/O Support in javax.servlet.ServletInputStream

    +
    + ++++ + + + + + + + + + + + + + + + + + + + + +
    MethodDescription

    void setReadListener(ReadListener rl)

    Associates this input stream +with a listener object that contains callback methods to read data +asynchronously. You provide the listener object as an anonymous class or +use another mechanism to pass the input stream to the read listener +object.

    boolean isReady()

    Returns true if data can be read without blocking.

    boolean isFinished()

    Returns true when all the data has been read.

    +
    +
    +
    +
    +
    +
    +
    +

    +
    +
    +

    Table 17-5 Nonblocking I/O Support in javax.servlet.ServletOutputStream

    +
    + ++++ + + + + + + + + + + + + + + + + +
    MethodDescription

    void setWriteListener(WriteListener wl)

    Associates this output +stream with a listener object that contains callback methods to write +data asynchronously. You provide the write listener object as an +anonymous class or use another mechanism to pass the output stream to +the write listener object.

    boolean isReady()

    Returns true if data can be written without +blocking.

    +
    +
    +
    +
    +
    +
    +
    +

    +
    +
    +

    Table 17-6 Listener Interfaces for Nonblocking I/O Support

    +
    + +++++ + + + + + + + + + + + + + + + + + + + +
    InterfaceMethodsDescription

    ReadListener

    +

    void onDataAvailable()

    +
    +
    +

    void onAllDataRead()

    +
    +
    +

    void onError(Throwable t)

    +

    A ServletInputStream instance calls these methods on its listener +when there is data available to read, when all the data has been read, +or when there is an error.

    WriteListener

    +

    void onWritePossible()

    +
    +
    +

    void onError(Throwable t)

    +

    A ServletOutputStream instance calls these methods on its listener +when it is possible to write data without blocking or when there is an +error.

    +
    +
    +
    +
    +
    +
    +
    +

    17.13.1 Reading a Large HTTP POST Request Using Nonblocking I/O

    +
    +

    The code in this section shows how to read a large HTTP POST request +inside a servlet by putting the request in asynchronous mode (as +described in Asynchronous Processing) and +using the nonblocking I/O functionality from Table 17-4 +and Table 17-6.

    +
    +
    +
    +
    @WebServlet(urlPatterns={"/asyncioservlet"}, asyncSupported=true)
    +public class AsyncIOServlet extends HttpServlet {
    +   @Override
    +   public void doPost(HttpServletRequest request,
    +                      HttpServletResponse response)
    +                      throws IOException {
    +      final AsyncContext acontext = request.startAsync();
    +      final ServletInputStream input = request.getInputStream();
    +
    +      input.setReadListener(new ReadListener() {
    +         byte buffer[] = new byte[4*1024];
    +         StringBuilder sbuilder = new StringBuilder();
    +         @Override
    +         public void onDataAvailable() {
    +            try {
    +               do {
    +                  int length = input.read(buffer);
    +                  sbuilder.append(new String(buffer, 0, length));
    +               } while(input.isReady());
    +            } catch (IOException ex) { ... }
    +         }
    +         @Override
    +         public void onAllDataRead() {
    +            try {
    +               acontext.getResponse().getWriter()
    +                                     .write("...the response...");
    +            } catch (IOException ex) { ... }
    +            acontext.complete();
    +         }
    +         @Override
    +         public void onError(Throwable t) { ... }
    +      });
    +   }
    +}
    +
    +
    +
    +

    This example declares the web servlet with asynchronous support using +the @WebServlet annotation parameter asyncSupported=true. The +service method first puts the request in asynchronous mode by calling +the startAsync() method of the request object, which is required in +order to use nonblocking I/O. Then, the service method obtains an input +stream associated with the request and assigns a read listener defined +as an inner class. The listener reads parts of the request as they +become available and then writes some response to the client when it +finishes reading the request.

    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    +
    + + + \ No newline at end of file diff --git a/servlets014.html b/servlets014.html new file mode 100644 index 0000000..3b57ea0 --- /dev/null +++ b/servlets014.html @@ -0,0 +1,259 @@ + + + + + + Protocol Upgrade Processing + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    17.14 Protocol Upgrade Processing

    +
    +
    +

    In HTTP/1.1, clients can request to switch to a different protocol on +the current connection by using the Upgrade header field. If the +server accepts the request to switch to the protocol indicated by the +client, it generates an HTTP response with status 101 (switching +protocols). After this exchange, the client and the server communicate +using the new protocol.

    +
    +
    +

    For example, a client can make an HTTP request to switch to the XYZP +protocol as follows:

    +
    +
    +
    +
    GET /xyzpresource HTTP/1.1
    +Host: localhost:8080
    +Accept: text/html
    +Upgrade: XYZP
    +Connection: Upgrade
    +OtherHeaderA: Value
    +
    +
    +
    +

    The client can specify parameters for the new protocol using HTTP +headers. The server can accept the request and generate a response as +follows:

    +
    +
    +
    +
    HTTP/1.1 101 Switching Protocols
    +Upgrade: XYZP
    +Connection: Upgrade
    +OtherHeaderB: Value
    +
    +(XYZP data)
    +
    +
    +
    +

    Java EE supports the HTTP protocol upgrade functionality in servlets, as +described in Table 17-7.

    +
    +
    +

    +
    +
    +

    Table 17-7 Protocol Upgrade Support

    +
    + ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Class or InterfaceMethod

    HttpServletRequest

    +

    HttpUpgradeHandler upgrade(Class handler)

    +
    +
    +

    The upgrade method starts the protocol upgrade processing. This method +instantiates a class that implements the HttpUpgradeHandler interface +and delegates the connection to it.

    +
    +
    +

    You call the upgrade method inside a service method when accepting a +request from a client to switch protocols.

    +

    HttpUpgradeHandler

    +

    void init(WebConnection wc)

    +
    +
    +

    The init method is called when the servlet accepts the request to +switch protocols. You implement this method and obtain input and output +streams from the WebConnection object to implement the new protocol.

    +

    HttpUpgradeHandler

    +

    void destroy()

    +
    +
    +

    The destroy method is called when the client disconnects. You +implement this method and free any resources associated with processing +the new protocol.

    +

    WebConnection

    +

    ServletInputStream getInputStream()

    +
    +
    +

    The getInputStream method provides access to the input stream of the +connection. You can use Nonblocking I/O +with the returned stream to implement the new protocol.

    +

    WebConnection

    +

    ServletOutputStream getOutputStream()

    +
    +
    +

    The getOutputStream method provides access to the output stream of the +connection. You can use Nonblocking I/O +with the returned stream to implement the new protocol.

    +
    +
    +
    +
    +
    +
    +
    +
    +

    The following code demonstrates how to accept an HTTP protocol upgrade +request from a client:

    +
    +
    +
    +
    @WebServlet(urlPatterns={"/xyzpresource"})
    +public class XYZPUpgradeServlet extends HttpServlet {
    +   @Override
    +   public void doGet(HttpServletRequest request,
    +                     HttpServletResponse response) {
    +      if ("XYZP".equals(request.getHeader("Upgrade"))) {
    +         /* Accept upgrade request */
    +         response.setStatus(101);
    +         response.setHeader("Upgrade", "XYZP");
    +         response.setHeader("Connection", "Upgrade");
    +         response.setHeader("OtherHeaderB", "Value");
    +         /* Delegate the connection to the upgrade handler */
    +         XYZPUpgradeHandler = request.upgrade(XYZPUpgradeHandler.class);
    +         /* (the service method returns immedately) */
    +      } else {
    +         /* ... write error response ... */
    +      }
    +   }
    +}
    +
    +
    +
    +

    The XYZPUpgradeHandler class handles the connection:

    +
    +
    +
    +
    public class XYZPUpgradeHandler implements HttpUpgradeHandler {
    +   @Override
    +   public void init(WebConnection wc) {
    +      ServletInputStream input = wc.getInputStream();
    +      ServletOutputStream output = wc.getOutputStream();
    +      /* ... implement XYZP using these streams (protocol-specific) ... */
    +   }
    +   @Override
    +   public void destroy() { ... }
    +}
    +
    +
    +
    +

    The class that implements HttpUpgradeHandler uses the streams from the +current connection to communicate with the client using the new +protocol. See the Servlet 4.0 specification at +http://jcp.org/en/jsr/detail?id=369 for details on HTTP protocol +upgrade support.

    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    + + + \ No newline at end of file diff --git a/servlets015.html b/servlets015.html new file mode 100644 index 0000000..3d2a1ac --- /dev/null +++ b/servlets015.html @@ -0,0 +1,259 @@ + + + + + + The mood Example Application + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    17.15 The mood Example Application

    +
    +
    +

    The mood example application, located in the +tut-install`/examples/web/servlet/mood/` directory, is a simple example +that displays Duke’s moods at different times during the day. The +example shows how to develop a simple application by using the +@WebServlet, @WebFilter, and @WebListener annotations to create a +servlet, a listener, and a filter.

    +
    +
    +

    The following topics are addressed here:

    +
    + +
    +

    17.15.1 Components of the mood Example Application

    +
    +

    The mood example application is comprised of three components: +mood.web.MoodServlet, mood.web.TimeOfDayFilter, and +mood.web.SimpleServletListener.

    +
    +
    +

    MoodServlet, the presentation layer of the application, displays +Duke’s mood in a graphic, based on the time of day. The @WebServlet +annotation specifies the URL pattern:

    +
    +
    +
    +
    @WebServlet("/report")
    +public class MoodServlet extends HttpServlet {
    +    ...
    +
    +
    +
    +

    TimeOfDayFilter sets an initialization parameter indicating that Duke +is awake:

    +
    +
    +
    +
    @WebFilter(filterName = "TimeOfDayFilter",
    +urlPatterns = {"/*"},
    +initParams = {
    +    @WebInitParam(name = "mood", value = "awake")})
    +public class TimeOfDayFilter implements Filter {
    +    ...
    +
    +
    +
    +

    The filter calls the doFilter method, which contains a switch +statement that sets Duke’s mood based on the current time.

    +
    +
    +

    SimpleServletListener logs changes in the servlet’s lifecycle. The log +entries appear in the server log.

    +
    +
    +
    +

    17.15.2 Running the mood Example

    +
    +

    You can use either NetBeans IDE or Maven to build, package, deploy, and +run the mood example.

    +
    +
    +

    The following topics are addressed here:

    +
    + +
    +

    17.15.2.1 To Run the mood Example Using NetBeans IDE

    +
    +
      +
    1. +

      Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

      +
    2. +
    3. +

      From the File menu, choose Open Project.

      +
    4. +
    5. +

      In the Open Project dialog box, navigate to:

      +
      +
      +
      tut-install/examples/web/servlet
      +
      +
      +
    6. +
    7. +

      Select the mood folder.

      +
    8. +
    9. +

      Click Open Project.

      +
    10. +
    11. +

      In the Projects tab, right-click the mood project and select +Build.

      +
    12. +
    13. +

      In a web browser, enter the following URL:

      +
      +
      +
      http://localhost:8080/mood/report
      +
      +
      +
      +

      The URL specifies the context root, followed by the URL pattern.

      +
      +
      +

      A web page appears with the title "Servlet MoodServlet at /mood", a text +string describing Duke’s mood, and an illustrative graphic.

      +
      +
    14. +
    +
    +
    +
    +

    17.15.2.2 To Run the mood Example Using Maven

    +
    +
      +
    1. +

      Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

      +
    2. +
    3. +

      In a terminal window, go to:

      +
      +
      +
      tut-install/examples/web/servlet/mood/
      +
      +
      +
    4. +
    5. +

      Enter the following command to deploy the application:

      +
      +
      +
      mvn install
      +
      +
      +
    6. +
    7. +

      In a web browser, enter the following URL:

      +
      +
      +
      http://localhost:8080/mood/report
      +
      +
      +
      +

      The URL specifies the context root, followed by the URL pattern.

      +
      +
      +

      A web page appears with the title "Servlet MoodServlet at /mood", a text +string describing Duke’s mood, and an illustrative graphic.

      +
      +
    8. +
    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    +
    +
    + + + \ No newline at end of file diff --git a/servlets016.html b/servlets016.html new file mode 100644 index 0000000..42c6746 --- /dev/null +++ b/servlets016.html @@ -0,0 +1,475 @@ + + + + + + The fileupload Example Application + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    17.16 The fileupload Example Application

    +
    +
    +

    The fileupload example, located in the +tut-install`/examples/web/servlet/fileupload/` directory, illustrates +how to implement and use the file upload feature.

    +
    +
    +

    The Duke’s Forest case study provides a more complex example that +uploads an image file and stores its content in a database.

    +
    +
    +
    +
    +
    +
    +
    + +++ + + + + + +
    +

    Note:

    +
    +
    +

    Except where expressly provided otherwise, the site, and all content +provided on or through the site, are provided on an "as is" and "as +available" basis. Oracle expressly disclaims all warranties of any kind, +whether express or implied, including, but not limited to, the implied +warranties of merchantability, fitness for a particular purpose and +non-infringement with respect to the site and all content provided on or +through the site. Oracle makes no warranty that: (a) the site or content +will meet your requirements; (b) the site will be available on an +uninterrupted, timely, secure, or error-free basis; (c) the results that +may be obtained from the use of the site or any content provided on or +through the site will be accurate or reliable; or (d) the quality of any +content purchased or obtained by you on or through the site will meet +your expectations.

    +
    +
    +

    Any content accessed, downloaded or otherwise obtained on or through the +use of the site is used at your own discretion and risk. Oracle shall +have no responsibility for any damage to your computer system or loss of +data that results from the download or use of content.

    +
    +
    +
    +
    +
    +
    +
    +
    +

    The following topics are addressed here:

    +
    + +
    +

    17.16.1 Architecture of the fileupload Example Application

    +
    +

    The fileupload example application consists of a single servlet and an +HTML form that makes a file upload request to the servlet.

    +
    +
    +

    This example includes a very simple HTML form with two fields, File and +Destination. The input type, file, enables a user to browse the local +file system to select the file. When the file is selected, it is sent to +the server as a part of a POST request. During this process, two +mandatory restrictions are applied to the form with input type file.

    +
    +
    +
      +
    • +

      The enctype attribute must be set to a value of +multipart/form-data.

      +
    • +
    • +

      Its method must be POST.

      +
    • +
    +
    +
    +

    When the form is specified in this manner, the entire request is sent to +the server in encoded form. The servlet then uses its own means to +handle the request to process the incoming file data and extract a file +from the stream. The destination is the path to the location where the +file will be saved on your computer. Pressing the Upload button at the +bottom of the form posts the data to the servlet, which saves the file +in the specified destination.

    +
    +
    +

    The HTML form in index.html is as follows:

    +
    +
    +
    +
    <!DOCTYPE html>
    +<html lang="en">
    +    <head>
    +        <title>File Upload</title>
    +        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    +    </head>
    +    <body>
    +        <form method="POST" action="upload" enctype="multipart/form-data" >
    +            File:
    +            <input type="file" name="file" id="file" /> <br/>
    +            Destination:
    +            <input type="text" value="/tmp" name="destination"/>
    +            </br>
    +            <input type="submit" value="Upload" name="upload" id="upload" />
    +        </form>
    +    </body>
    +</html>
    +
    +
    +
    +

    A POST request method is used when the client needs to send data to the +server as part of the request, such as when uploading a file or +submitting a completed form. In contrast, a GET request method sends a +URL and headers only to the server, whereas POST requests also include a +message body. This allows arbitrary length data of any type to be sent +to the server. A header field in the POST request usually indicates the +message body’s Internet media type.

    +
    +
    +

    When submitting a form, the browser streams the content in, combining +all parts, with each part representing a field of a form. Parts are +named after the input elements and are separated from each other with +string delimiters named boundary.

    +
    +
    +

    This is what submitted data from the fileupload form looks like, after +selecting sample.txt as the file that will be uploaded to the tmp +directory on the local file system:

    +
    +
    +
    +
    POST /fileupload/upload HTTP/1.1
    +Host: localhost:8080
    +Content-Type: multipart/form-data;
    +boundary=---------------------------263081694432439Content-Length: 441
    +-----------------------------263081694432439
    +Content-Disposition: form-data; name="file"; filename="sample.txt"
    +Content-Type: text/plain
    +Data from sample file
    +-----------------------------263081694432439
    +Content-Disposition: form-data; name="destination"
    +/tmp
    +-----------------------------263081694432439
    +Content-Disposition: form-data; name="upload"
    +Upload
    +-----------------------------263081694432439--
    +
    +
    +
    +

    The servlet FileUploadServlet.java begins as follows:

    +
    +
    +
    +
    @WebServlet(name = "FileUploadServlet", urlPatterns = {"/upload"})
    +@MultipartConfig
    +public class FileUploadServlet extends HttpServlet {
    +    private final static Logger LOGGER =
    +            Logger.getLogger(FileUploadServlet.class.getCanonicalName());
    +
    +
    +
    +

    The @WebServlet annotation uses the urlPatterns property to define +servlet mappings.

    +
    +
    +

    The @MultipartConfig annotation indicates that the servlet expects +requests to be made using the multipart/form-data MIME type.

    +
    +
    +

    The processRequest method retrieves the destination and file part from +the request, then calls the getFileName method to retrieve the file +name from the file part. The method then creates a FileOutputStream +and copies the file to the specified destination. The error-handling +section of the method catches and handles some of the most common +reasons why a file would not be found. The processRequest and +getFileName methods look like this:

    +
    +
    +
    +
    protected void processRequest(HttpServletRequest request,
    +        HttpServletResponse response)
    +        throws ServletException, IOException {
    +    response.setContentType("text/html;charset=UTF-8");
    +
    +    // Create path components to save the file
    +    final String path = request.getParameter("destination");
    +    final Part filePart = request.getPart("file");
    +    final String fileName = getFileName(filePart);
    +
    +    OutputStream out = null;
    +    InputStream filecontent = null;
    +    final PrintWriter writer = response.getWriter();
    +
    +    try {
    +        out = new FileOutputStream(new File(path + File.separator
    +                + fileName));
    +        filecontent = filePart.getInputStream();
    +
    +        int read = 0;
    +        final byte[] bytes = new byte[1024];
    +
    +        while ((read = filecontent.read(bytes)) != -1) {
    +            out.write(bytes, 0, read);
    +        }
    +        writer.println("New file " + fileName + " created at " + path);
    +        LOGGER.log(Level.INFO, "File{0}being uploaded to {1}",
    +                new Object[]{fileName, path});
    +    } catch (FileNotFoundException fne) {
    +        writer.println("You either did not specify a file to upload or are "
    +                + "trying to upload a file to a protected or nonexistent "
    +                + "location.");
    +        writer.println("<br/> ERROR: " + fne.getMessage());
    +
    +        LOGGER.log(Level.SEVERE, "Problems during file upload. Error: {0}",
    +                new Object[]{fne.getMessage()});
    +    } finally {
    +        if (out != null) {
    +            out.close();
    +        }
    +        if (filecontent != null) {
    +            filecontent.close();
    +        }
    +        if (writer != null) {
    +            writer.close();
    +        }
    +    }
    +}
    +
    +private String getFileName(final Part part) {
    +    final String partHeader = part.getHeader("content-disposition");
    +    LOGGER.log(Level.INFO, "Part Header = {0}", partHeader);
    +    for (String content : part.getHeader("content-disposition").split(";")) {
    +        if (content.trim().startsWith("filename")) {
    +            return content.substring(
    +                    content.indexOf('=') + 1).trim().replace("\"", "");
    +        }
    +    }
    +    return null;
    +}
    +
    +
    +
    +
    +

    17.16.2 Running the fileupload Example

    +
    +

    You can use either NetBeans IDE or Maven to build, package, deploy, and +run the fileupload example.

    +
    +
    +

    The following topics are addressed here:

    +
    + +
    +

    17.16.2.1 To Build, Package, and Deploy the fileupload Example Using +NetBeans IDE +^^^^^^^^^^^^^^^^^^^^^^^^^^^

    +
    +
    +
      +
    1. +

      Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

      +
    2. +
    3. +

      From the File menu, choose Open Project.

      +
    4. +
    5. +

      In the Open Project dialog box, navigate to:

      +
      +
      +
      tut-install/examples/web/servlet
      +
      +
      +
    6. +
    7. +

      Select the fileupload folder.

      +
    8. +
    9. +

      Click Open Project.

      +
    10. +
    11. +

      In the Projects tab, right-click the fileupload project and select +Build.

      +
    12. +
    +
    +
    +

    17.16.2.2 To Build, Package, and Deploy the fileupload Example Using +Maven +^^^^^^^^^^^^^^^^^^^^^^^^^^

    +
    +
    +
      +
    1. +

      Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

      +
    2. +
    3. +

      In a terminal window, go to:

      +
      +
      +
      tut-install/examples/web/servlet/fileupload/
      +
      +
      +
    4. +
    5. +

      Enter the following command to deploy the application:

      +
      +
      +
      mvn install
      +
      +
      +
    6. +
    +
    +
    +

    17.16.2.3 To Run the fileupload Example

    +
    +
      +
    1. +

      In a web browser, enter the following URL:

      +
      +
      +
      http://localhost:8080/fileupload/
      +
      +
      +
    2. +
    3. +

      On the File Upload page, click Choose File to display a file browser +window.

      +
    4. +
    5. +

      Select a file to upload and click Open.

      +
      +

      The name of the file you selected is displayed in the File field. If you +do not select a file, an exception will be thrown.

      +
      +
    6. +
    7. +

      In the Destination field, type a directory name.

      +
      +

      The directory must have already been created and must also be writable. +If you do not enter a directory name or if you enter the name of a +nonexistent or protected directory, an exception will be thrown.

      +
      +
    8. +
    9. +

      Click Upload to upload the file that you selected to the directory +that you specified in the Destination field.

      +
      +

      A message reports that the file was created in the directory that you +specified.

      +
      +
    10. +
    11. +

      Go to the directory that you specified in the Destination field and +verify that the uploaded file is present.

      +
    12. +
    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    +
    +
    + + + \ No newline at end of file diff --git a/servlets017.html b/servlets017.html new file mode 100644 index 0000000..d05cb78 --- /dev/null +++ b/servlets017.html @@ -0,0 +1,445 @@ + + + + + + The dukeetf Example Application + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    17.17 The dukeetf Example Application

    +
    +
    +

    The dukeetf example application, located in the +tut-install`/examples/web/dukeetf/` directory, demonstrates how to use +asynchronous processing in a servlet to provide data updates to web +clients. The example resembles a service that provides periodic updates +on the price and trading volume of an electronically traded fund (ETF).

    +
    +
    +

    The following topics are addressed here:

    +
    + +
    +

    17.17.1 Architecture of the dukeetf Example Application

    +
    +

    The dukeetf example application consists of a servlet, an enterprise +bean, and an HTML page.

    +
    +
    +
      +
    • +

      The servlet puts requests in asynchronous mode, stores them in a +queue, and writes the responses when new data for price and trading +volume becomes available.

      +
    • +
    • +

      The enterprise bean updates the price and volume information once +every second.

      +
    • +
    • +

      The HTML page uses JavaScript code to make requests to the servlet for +new data, parse the response from the servlet, and update the price and +volume information without reloading the page.

      +
    • +
    +
    +
    +

    The dukeetf example application uses a programming model known as long +polling. In the traditional HTTP request and response model, the user +must make an explicit request (such as clicking a link or submitting a +form) to get any new information from the server, and the page has to be +reloaded. Long polling provides a mechanism for web applications to push +updates to clients using HTTP without the user making an explicit +request. The server handles connections asynchronously, and the client +uses JavaScript to make new connections. In this model, clients make a +new request immediately after receiving new data, and the server keeps +the connection open until new data becomes available.

    +
    +
    +

    17.17.1.1 The Servlet

    +
    +

    The DukeETFServlet class uses asynchronous processing:

    +
    +
    +
    +
    @WebServlet(urlPatterns={"/dukeetf"}, asyncSupported=true)
    +public class DukeETFServlet extends HttpServlet {
    +...
    +}
    +
    +
    +
    +

    In the following code, the init method initializes a queue to hold +client requests and registers the servlet with the enterprise bean that +provides the price and volume updates. The send method gets called +once per second by the PriceVolumeBean to send updates and close the +connection:

    +
    +
    +
    +
    @Override
    +public void init(ServletConfig config) {
    +   /* Queue for requests */
    +   requestQueue = new ConcurrentLinkedQueue<>();
    +   /* Register with the enterprise bean that provides price/volume updates */
    +   pvbean.registerServlet(this);
    +}
    +
    +/* PriceVolumeBean calls this method every second to send updates */
    +public void send(double price, int volume) {
    +   /* Send update to all connected clients */
    +   for (AsyncContext acontext : requestQueue) {
    +      try {
    +         String msg = String.format("%.2f / %d", price, volume);
    +         PrintWriter writer = acontext.getResponse().getWriter();
    +         writer.write(msg);
    +         logger.log(Level.INFO, "Sent: {0}", msg);
    +         /* Close the connection
    +          * The client (JavaScript) makes a new one instantly */
    +         acontext.complete();
    +      } catch (IOException ex) {
    +         logger.log(Level.INFO, ex.toString());
    +      }
    +   }
    +}
    +
    +
    +
    +

    The service method puts client requests in asynchronous mode and adds a +listener to each request. The listener is implemented as an anonymous +class that removes the request from the queue when the servlet finishes +writing a response or when there is an error. Finally, the service +method adds the request to the request queue created in the init +method. The service method is the following:

    +
    +
    +
    +
    @Override
    +public void doGet(HttpServletRequest request,
    +                  HttpServletResponse response) {
    +   response.setContentType("text/html");
    +   /* Put request in async mode */
    +   final AsyncContext acontext = request.startAsync();
    +   /* Remove from the queue when done */
    +   acontext.addListener(new AsyncListener() {
    +      public void onComplete(AsyncEvent ae) throws IOException {
    +         requestQueue.remove(acontext);
    +      }
    +      public void onTimeout(AsyncEvent ae) throws IOException {
    +         requestQueue.remove(acontext);
    +      }
    +      public void onError(AsyncEvent ae) throws IOException {
    +         requestQueue.remove(acontext);
    +      }
    +      public void onStartAsync(AsyncEvent ae) throws IOException {}
    +   });
    +   /* Add to the queue */
    +   requestQueue.add(acontext);
    +}
    +
    +
    +
    +
    +

    17.17.1.2 The Enterprise Bean

    +
    +

    The PriceVolumeBean class is an enterprise bean that uses the timer +service from the container to update the price and volume information +and call the servlet’s send method once every second:

    +
    +
    +
    +
    @Startup
    +@Singleton
    +public class PriceVolumeBean {
    +    /* Use the container's timer service */
    +    @Resource TimerService tservice;
    +    private DukeETFServlet servlet;
    +    ...
    +
    +    @PostConstruct
    +    public void init() {
    +        /* Initialize the EJB and create a timer */
    +        random = new Random();
    +        servlet = null;
    +        tservice.createIntervalTimer(1000, 1000, new TimerConfig());
    +    }
    +
    +    public void registerServlet(DukeETFServlet servlet) {
    +        /* Associate a servlet to send updates to */
    +        this.servlet = servlet;
    +    }
    +
    +    @Timeout
    +    public void timeout() {
    +        /* Adjust price and volume and send updates */
    +        price += 1.0*(random.nextInt(100)-50)/100.0;
    +        volume += random.nextInt(5000) - 2500;
    +        if (servlet != null)
    +            servlet.send(price, volume);
    +    }
    +}
    +
    +
    +
    +

    See Using the Timer Service in +Chapter 34, "Running the Enterprise +Bean Examples" for more information on the timer service.

    +
    +
    +
    +

    17.17.1.3 The HTML Page

    +
    +

    The HTML page consists of a table and some JavaScript code. The table +contains two fields referenced from JavaScript code:

    +
    +
    +
    +
    <html xmlns="http://www.w3.org/1999/xhtml">
    +<head>...</head>
    +<body onload="makeAjaxRequest();">
    +  ...
    +  <table>
    +    ...
    +    <td id="price">--.--</td>
    +    ...
    +    <td id="volume">--</td>
    +    ...
    +  </table>
    +</body>
    +</html>
    +
    +
    +
    +

    The JavaScript code uses the XMLHttpRequest API, which provides +functionality for transferring data between a client and a server. The +script makes an asynchronous request to the servlet and designates a +callback method. When the server provides a response, the callback +method updates the fields in the table and makes a new request. The +JavaScript code is the following:

    +
    +
    +
    +
    var ajaxRequest;
    +function updatePage() {
    +   if (ajaxRequest.readyState === 4) {
    +      var arraypv = ajaxRequest.responseText.split("/");
    +      document.getElementById("price").innerHTML = arraypv[0];
    +      document.getElementById("volume").innerHTML = arraypv[1];
    +      makeAjaxRequest();
    +   }
    +}
    +function makeAjaxRequest() {
    +   ajaxRequest = new XMLHttpRequest();
    +   ajaxRequest.onreadystatechange = updatePage;
    +   ajaxRequest.open("GET", "http://localhost:8080/dukeetf/dukeetf",
    +                    true);
    +   ajaxRequest.send(null);
    +}
    +
    +
    +
    +

    The XMLHttpRequest API is supported by most modern browsers, and it is +widely used in Ajax web client development (Asynchronous JavaScript and +XML).

    +
    +
    +

    See The dukeetf2 Example Application in +Chapter 18, "Java API for WebSocket" for an +equivalent version of this example implemented using a WebSocket +endpoint.

    +
    +
    +
    +
    +

    17.17.2 Running the dukeetf Example Application

    +
    +

    This section describes how to run the dukeetf example application +using NetBeans IDE and from the command line.

    +
    +
    +

    The following topics are addressed here:

    +
    + +
    +

    17.17.2.1 To Run the dukeetf Example Application Using NetBeans IDE

    +
    +
      +
    1. +

      Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

      +
    2. +
    3. +

      From the File menu, choose Open Project.

      +
    4. +
    5. +

      In the Open Project dialog box, navigate to:

      +
      +
      +
      tut-install/examples/web/servlet
      +
      +
      +
    6. +
    7. +

      Select the dukeetf folder.

      +
    8. +
    9. +

      Click Open Project.

      +
    10. +
    11. +

      In the Projects tab, right-click the dukeetf project and select +Run.

      +
      +

      This command builds and packages the application into a WAR file +(dukeetf.war) located in the target directory, deploys it to the +server, and launches a web browser window with the following URL:

      +
      +
      +
      +
      http://localhost:8080/dukeetf/
      +
      +
      +
      +

      Open the same URL in a different web browser to see how both pages get +price and volume updates simultaneously.

      +
      +
    12. +
    +
    +
    +
    +

    17.17.2.2 To Run the dukeetf Example Application Using Maven

    +
    +
      +
    1. +

      Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

      +
    2. +
    3. +

      In a terminal window, go to:

      +
      +
      +
      tut-install/examples/web/servlet/dukeetf/
      +
      +
      +
    4. +
    5. +

      Enter the following command to deploy the application:

      +
      +
      +
      mvn install
      +
      +
      +
    6. +
    7. +

      Open a web browser window and type the following address:

      +
      +
      +
      http://localhost:8080/dukeetf/
      +
      +
      +
      +

      Open the same URL in a different web browser to see how both pages get +price and volume updates simultaneously.

      +
      +
    8. +
    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    +
    +
    + + + \ No newline at end of file diff --git a/servlets018.html b/servlets018.html new file mode 100644 index 0000000..e5f2f04 --- /dev/null +++ b/servlets018.html @@ -0,0 +1,87 @@ + + + + + + Further Information about Java Servlet Technology + + + + + +
    +
    + +++++ + + + + + + + +

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    +
    + +++++ + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

     

    +
    +
    +
    +

    17.18 Further Information about Java Servlet Technology

    +
    +
    +

    For more information on Java Servlet technology, see the Java Servlet +4.0 specification at http://jcp.org/en/jsr/detail?id=369.

    +
    +
    + ++++++++ + + + + + + + + + + +

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    +
    +
    + + + \ No newline at end of file diff --git a/target.html b/target.html new file mode 100644 index 0000000..79ae68e --- /dev/null +++ b/target.html @@ -0,0 +1,19 @@ + + + + + + Java Platform, Enterprise Edition The Java EE Tutorial Java Platform, Enterprise Edition Java Platform, Enterprise Edition The Java EE Tutorial Java Platform, Enterprise Edition Preface “Preface” Audience “Audience” Documentation Accessibility “Documentation Accessibility” Access to Oracle Support “Access to Oracle Support” Before You Read This Book “Before You Read This Book” Related Documentation “Related Documentation” Conventions “Conventions” Default Paths and File Names “Default Paths and File Names” Overview “Overview” This chapter introduces… the paragraph beginning “This chapter introduces…” Introduction to Java EE “Introduction to Java EE” Java EE 7 Platform Highlights “Java EE 7 Platform Highlights” Java EE Application Model “Java EE Application Model” Distributed Multitiered Applications “Distributed Multitiered Applications” Multitiered Applications “Multitiered Applications” Security “Security” Java EE Components “Java EE Components” Java EE Clients “Java EE Clients” Web Clients “Web Clients” Application Clients “Application Clients” Applets “Applets” The JavaBeans Component Architecture “The JavaBeans Component Architecture” Java EE Server Communications “Java EE Server Communications” Server Communication “Server Communication” Web Components “Web Components” Web Tier and Java EE Applications “Web Tier and Java EE Applications” Business Components “Business Components” Business and EIS Tiers “Business and EIS Tiers” Enterprise Information System Tier “Enterprise Information System Tier” Java EE Containers “Java EE Containers” Container Services “Container Services” Container Types “Container Types” Java EE Server and Containers “Java EE Server and Containers” Web Services Support “Web Services Support” XML “XML” SOAP Transport Protocol “SOAP Transport Protocol” WSDL Standard Format “WSDL Standard Format” Java EE Application Assembly and Deployment “Java EE Application Assembly and Deployment” Java EE 7 APIs “Java EE 7 APIs” Java EE Containers “Java EE Containers” Java EE APIs in the Web Container “Java EE APIs in the Web Container” Java EE APIs in the EJB Container “Java EE APIs in the EJB Container” Java EE APIs in the Application Client Container “Java EE APIs in the Application Client Container” Enterprise JavaBeans Technology “Enterprise JavaBeans Technology” Java Servlet Technology “Java Servlet Technology” JavaServer Faces Technology “JavaServer Faces Technology” JavaServer Pages Technology “JavaServer Pages Technology” JavaServer Pages Standard Tag Library “JavaServer Pages Standard Tag Library” Java Persistence API “Java Persistence API” Java Transaction API “Java Transaction API” Java API for RESTful Web Services “Java API for RESTful Web Services” Managed Beans “Managed Beans” Contexts and Dependency Injection for Java EE “Contexts and Dependency Injection for Java EE” Dependency Injection for Java “Dependency Injection for Java” Bean Validation “Bean Validation” Java Message Service API “Java Message Service API” Java EE Connector Architecture “Java EE Connector Architecture” JavaMail API “JavaMail API” Java Authorization Contract for Containers “Java Authorization Contract for Containers” Java Authentication Service Provider Interface for Containers “Java Authentication Service Provider Interface for Containers” Java API for WebSocket “Java API for WebSocket” Java API for JSON Processing “Java API for JSON Processing” Concurrency Utilities for Java EE “Concurrency Utilities for Java EE” Batch Applications for the Java Platform “Batch Applications for the Java Platform” Java EE 7 APIs in the Java Platform, Standard Edition 7 “Java EE 7 APIs in the Java Platform, Standard Edition 7” Java Database Connectivity API “Java Database Connectivity API” Java Naming and Directory Interface API “Java Naming and Directory Interface API” JavaBeans Activation Framework “JavaBeans Activation Framework” Java API for XML Processing “Java API for XML Processing” Java Architecture for XML Binding “Java Architecture for XML Binding” Java API for XML Web Services “Java API for XML Web Services” SOAP with Attachments API for Java “SOAP with Attachments API for Java” Java Authentication and Authorization Service “Java Authentication and Authorization Service” Common Annotations for the Java Platform “Common Annotations for the Java Platform” GlassFish Server Tools “GlassFish Server Tools” GlassFish Server Tools “GlassFish Server Tools” Using the Tutorial Examples “Using the Tutorial Examples” This chapter tells… the paragraph beginning “This chapter tells…” Required Software “Required Software” Java Platform, Standard Edition “Java Platform, Standard Edition” Java EE 7 Software Development Kit “Java EE 7 Software Development Kit” SDK Installation Tips “SDK Installation Tips” Java EE 7 Tutorial Component “Java EE 7 Tutorial Component” NetBeans IDE “NetBeans IDE” To Install NetBeans IDE without GlassFish Server “To Install NetBeans IDE without GlassFish Server” To Add GlassFish Server as a Server Using NetBeans IDE “To Add GlassFish Server as a Server Using NetBeans IDE” Apache Maven “Apache Maven” Starting and Stopping GlassFish Server “Starting and Stopping GlassFish Server” To Start GlassFish Server Using NetBeans IDE “To Start GlassFish Server Using NetBeans IDE” To Stop GlassFish Server Using NetBeans IDE “To Stop GlassFish Server Using NetBeans IDE” To Start GlassFish Server Using the Command Line “To Start GlassFish Server Using the Command Line” To Stop GlassFish Server Using the Command Line “To Stop GlassFish Server Using the Command Line” Starting the Administration Console “Starting the Administration Console” To Start the Administration Console Using NetBeans IDE “To Start the Administration Console Using NetBeans IDE” Starting and Stopping the Java DB Server “Starting and Stopping the Java DB Server” To Start the Database Server Using NetBeans IDE “To Start the Database Server Using NetBeans IDE” Next Steps “Next Steps” Building the Examples “Building the Examples” Tutorial Example Directory Structure “Tutorial Example Directory Structure” Java EE 7 Maven Archetypes in the Tutorial “Java EE 7 Maven Archetypes in the Tutorial” Installing the Tutorial Archetypes “Installing the Tutorial Archetypes” Installing the Tutorial Archetypes Using NetBeans IDE “Installing the Tutorial Archetypes Using NetBeans IDE” Installing the Tutorial Archetypes Using Maven “Installing the Tutorial Archetypes Using Maven” Getting the Latest Updates to the Tutorial “Getting the Latest Updates to the Tutorial” To Update the Tutorial Using NetBeans IDE “To Update the Tutorial Using NetBeans IDE” To Update the Tutorial Using the Command Line “To Update the Tutorial Using the Command Line” Debugging Java EE Applications “Debugging Java EE Applications” Using the Server Log “Using the Server Log” To Use the Administration Console Log Viewer “To Use the Administration Console Log Viewer” Using a Debugger “Using a Debugger” To Debug an Application Using a Debugger “To Debug an Application Using a Debugger” Resource Creation “Resource Creation” A resource is… the paragraph beginning “A resource is…” Resources and JNDI Naming “Resources and JNDI Naming” DataSource Objects and Connection Pools “DataSource Objects and Connection Pools” Creating Resources Administratively “Creating Resources Administratively” Injection “Injection” This chapter provides… the paragraph beginning “This chapter provides…” Resource Injection “Resource Injection” Dependency Injection “Dependency Injection” The Main Differences between Resource Injection and Dependency Injection “The Main Differences between Resource Injection and Dependency Injection” Differences between Resource Injection and Dependency Injection “Differences between Resource Injection and Dependency Injection” Packaging “Packaging” This chapter describes… the paragraph beginning “This chapter describes…” Packaging Applications “Packaging Applications” EAR File Structure “EAR File Structure” Packaging Enterprise Beans “Packaging Enterprise Beans” Packaging Enterprise Beans in EJB JAR Modules “Packaging Enterprise Beans in EJB JAR Modules” Structure of an Enterprise Bean JAR “Structure of an Enterprise Bean JAR” Packaging Enterprise Beans in WAR Modules “Packaging Enterprise Beans in WAR Modules” Packaging Web Archives “Packaging Web Archives” Web Module Structure “Web Module Structure” Packaging Resource Adapter Archives “Packaging Resource Adapter Archives” Getting Started with Web Applications “Getting Started with Web Applications” This chapter introduces… the paragraph beginning “This chapter introduces…” Web Applications “Web Applications” Java Web Application Request Handling “Java Web Application Request Handling” Web Application Lifecycle “Web Application Lifecycle” A Web Module That Uses JavaServer Faces Technology: The hello1 Example “A Web Module That Uses JavaServer Faces Technology: The hello1 Example” To View the hello1 Web Module Using NetBeans IDE “To View the hello1 Web Module Using NetBeans IDE” Introduction to Scopes “Introduction to Scopes” Packaging and Deploying the hello1 Web Module “Packaging and Deploying the hello1 Web Module” To Build and Package the hello1 Web Module Using NetBeans IDE “To Build and Package the hello1 Web Module Using NetBeans IDE” To Build and Package the hello1 Web Module Using Maven “To Build and Package the hello1 Web Module Using Maven” Viewing Deployed Web Modules “Viewing Deployed Web Modules” To View Deployed Web Modules Using the Administration Console “To View Deployed Web Modules Using the Administration Console” To View Deployed Web Modules Using the asadmin Command “To View Deployed Web Modules Using the asadmin Command” To View Deployed Web Modules Using NetBeans IDE “To View Deployed Web Modules Using NetBeans IDE” Running the Deployed hello1 Web Module “Running the Deployed hello1 Web Module” Dynamic Reloading of Deployed Modules “Dynamic Reloading of Deployed Modules” Undeploying the hello1 Web Module “Undeploying the hello1 Web Module” To Undeploy the hello1 Web Module Using NetBeans IDE “To Undeploy the hello1 Web Module Using NetBeans IDE” To Undeploy the hello1 Web Module Using Maven “To Undeploy the hello1 Web Module Using Maven” A Web Module That Uses Java Servlet Technology: The hello2 Example “A Web Module That Uses Java Servlet Technology: The hello2 Example” Mapping URLs to Web Components “Mapping URLs to Web Components” Examining the hello2 Web Module “Examining the hello2 Web Module” To View the hello2 Web Module Using NetBeans IDE “To View the hello2 Web Module Using NetBeans IDE” Running the hello2 Example “Running the hello2 Example” To Run the hello2 Example Using NetBeans IDE “To Run the hello2 Example Using NetBeans IDE” To Run the hello2 Example Using Maven “To Run the hello2 Example Using Maven” Configuring Web Applications “Configuring Web Applications” Setting Context Parameters “Setting Context Parameters” To Add a Context Parameter Using NetBeans IDE “To Add a Context Parameter Using NetBeans IDE” To Create a web.xml File Using NetBeans IDE “To Create a web.xml File Using NetBeans IDE” Declaring Welcome Files “Declaring Welcome Files” Mapping Errors to Error Screens “Mapping Errors to Error Screens” To Set Up Error Mapping Using NetBeans IDE “To Set Up Error Mapping Using NetBeans IDE” Declaring Resource References “Declaring Resource References” Web Components That Accept Resource Injections “Web Components That Accept Resource Injections” Declaring a Reference to a Resource “Declaring a Reference to a Resource” Declaring a Reference to a Web Service “Declaring a Reference to a Web Service” Further Information about Web Applications “Further Information about Web Applications” JavaServer Faces Technology “JavaServer Faces Technology” JavaServer Faces technology… the paragraph beginning “JavaServer Faces technology…” Introduction to JavaServer Faces Technology “Introduction to JavaServer Faces Technology” What Is a JavaServer Faces Application? “What Is a JavaServer Faces Application?” Responding to a Client Request for a JavaServer Faces Page “Responding to a Client Request for a JavaServer Faces Page” JavaServer Faces Technology Benefits “JavaServer Faces Technology Benefits” Java Web Application Technologies “Java Web Application Technologies” A Simple JavaServer Faces Application “A Simple JavaServer Faces Application” User Interface Component Model “User Interface Component Model” User Interface Component Classes “User Interface Component Classes” Component Rendering Model “Component Rendering Model” Conversion Model “Conversion Model” Event and Listener Model “Event and Listener Model” Validation Model “Validation Model” Navigation Model “Navigation Model” The Lifecycle of a JavaServer Faces Application “The Lifecycle of a JavaServer Faces Application” Overview of the JavaServer Faces Lifecycle “Overview of the JavaServer Faces Lifecycle” JavaServer Faces Standard Request-Response Lifecycle “JavaServer Faces Standard Request-Response Lifecycle” Restore View Phase “Restore View Phase” Apply Request Values Phase “Apply Request Values Phase” Process Validations Phase “Process Validations Phase” Update Model Values Phase “Update Model Values Phase” Invoke Application Phase “Invoke Application Phase” Render Response Phase “Render Response Phase” Partial Processing and Partial Rendering “Partial Processing and Partial Rendering” Further Information about JavaServer Faces Technology “Further Information about JavaServer Faces Technology” Introduction to Facelets “Introduction to Facelets” The term Facelets… the paragraph beginning “The term Facelets…” What Is Facelets? “What Is Facelets?” Tag Libraries Supported by Facelets “Tag Libraries Supported by Facelets” The Lifecycle of a Facelets Application “The Lifecycle of a Facelets Application” Developing a Simple Facelets Application: The guessnumber-jsf Example Application “Developing a Simple Facelets Application: The guessnumber-jsf Example Application” Creating a Facelets Application “Creating a Facelets Application” Developing a Managed Bean “Developing a Managed Bean” Creating Facelets Views “Creating Facelets Views” Configuring the Application “Configuring the Application” Running the guessnumber-jsf Facelets Example “Running the guessnumber-jsf Facelets Example” To Build, Package, and Deploy the guessnumber-jsf Example Using NetBeans IDE “To Build, Package, and Deploy the guessnumber-jsf Example Using NetBeans IDE” To Build, Package, and Deploy the guessnumber-jsf Example Using Maven “To Build, Package, and Deploy the guessnumber-jsf Example Using Maven” To Run the guessnumber-jsf Example “To Run the guessnumber-jsf Example” Using Facelets Templates “Using Facelets Templates” Facelets Templating Tags “Facelets Templating Tags” Composite Components “Composite Components” Composite Component Tags “Composite Component Tags” Web Resources “Web Resources” Relocatable Resources “Relocatable Resources” Resource Library Contracts “Resource Library Contracts” The hello1-rlc Example Application “The hello1-rlc Example Application” Configuring the hello1-rlc Example “Configuring the hello1-rlc Example” The Facelets Pages for the hello1-rlc Example “The Facelets Pages for the hello1-rlc Example” To Build, Package, and Deploy the hello1-rlc Example Using NetBeans IDE “To Build, Package, and Deploy the hello1-rlc Example Using NetBeans IDE” To Build, Package, and Deploy the hello1-rlc Example Using Maven “To Build, Package, and Deploy the hello1-rlc Example Using Maven” To Run the hello1-rlc Example “To Run the hello1-rlc Example” HTML5-Friendly Markup “HTML5-Friendly Markup” Using Pass-Through Elements “Using Pass-Through Elements” How Facelets Renders HTML5 Elements “How Facelets Renders HTML5 Elements” Using Pass-Through Attributes “Using Pass-Through Attributes” The reservation Example Application “The reservation Example Application” The Facelets Pages for the reservation Application “The Facelets Pages for the reservation Application” The Managed Bean for the reservation Application “The Managed Bean for the reservation Application” To Build, Package, and Deploy the reservation Example Using NetBeans IDE “To Build, Package, and Deploy the reservation Example Using NetBeans IDE” To Build, Package, and Deploy the reservation Example Using Maven “To Build, Package, and Deploy the reservation Example Using Maven” To Run the reservation Example “To Run the reservation Example” Expression Language “Expression Language” This chapter introduces… the paragraph beginning “This chapter introduces…” Overview of the EL “Overview of the EL” Immediate and Deferred Evaluation Syntax “Immediate and Deferred Evaluation Syntax” Immediate Evaluation “Immediate Evaluation” Deferred Evaluation “Deferred Evaluation” Value and Method Expressions “Value and Method Expressions” Value Expressions “Value Expressions” Referencing Objects “Referencing Objects” Referencing Object Properties or Collection Elements “Referencing Object Properties or Collection Elements” Referencing Literals “Referencing Literals” Parameterized Method Calls “Parameterized Method Calls” Where Value Expressions Can Be Used “Where Value Expressions Can Be Used” Method Expressions “Method Expressions” Lambda Expressions “Lambda Expressions” Operations on Collection Objects “Operations on Collection Objects” Operators “Operators” Reserved Words “Reserved Words” Examples of EL Expressions “Examples of EL Expressions” Example Expressions “Example Expressions” Further Information about the Expression Language “Further Information about the Expression Language” Using JavaServer Faces Technology in Web Pages “Using JavaServer Faces Technology in Web Pages” Web pages (Facelets… the paragraph beginning “Web pages (Facelets…” Setting Up a Page “Setting Up a Page” Adding Components to a Page Using HTML Tag Library Tags “Adding Components to a Page Using HTML Tag Library Tags” The Component Tags “The Component Tags” Common Component Tag Attributes “Common Component Tag Attributes” Common Component Tag Attributes “Common Component Tag Attributes” The id Attribute “The id Attribute” The immediate Attribute “The immediate Attribute” The rendered Attribute “The rendered Attribute” The style and styleClass Attributes “The style and styleClass Attributes” The value and binding Attributes “The value and binding Attributes” Adding HTML Head and Body Tags “Adding HTML Head and Body Tags” Adding a Form Component “Adding a Form Component” A Typical Form “A Typical Form” Using Text Components “Using Text Components” Example Text Components “Example Text Components” Input Tags “Input Tags” Input Tag Attributes “Input Tag Attributes” Output Tags “Output Tags” Rendering a Field with the h:inputText Tag “Rendering a Field with the h:inputText Tag” Rendering a Password Field with the h:inputSecret Tag “Rendering a Password Field with the h:inputSecret Tag” Rendering a Label with the h:outputLabel Tag “Rendering a Label with the h:outputLabel Tag” Rendering a Link with the h:outputLink Tag “Rendering a Link with the h:outputLink Tag” Displaying a Formatted Message with the h:outputFormat Tag “Displaying a Formatted Message with the h:outputFormat Tag” Using Command Component Tags for Performing Actions and Navigation “Using Command Component Tags for Performing Actions and Navigation” Rendering a Button with the h:commandButton Tag “Rendering a Button with the h:commandButton Tag” Rendering a Link with the h:commandLink Tag “Rendering a Link with the h:commandLink Tag” Adding Graphics and Images with the h:graphicImage Tag “Adding Graphics and Images with the h:graphicImage Tag” Laying Out Components with the h:panelGrid and h:panelGroup Tags “Laying Out Components with the h:panelGrid and h:panelGroup Tags” Panel Component Tags “Panel Component Tags” Displaying Components for Selecting One Value “Displaying Components for Selecting One Value” Example Components for Selecting One Item “Example Components for Selecting One Item” Displaying a Check Box Using the h:selectBooleanCheckbox Tag “Displaying a Check Box Using the h:selectBooleanCheckbox Tag” Displaying a Menu Using the h:selectOneMenu Tag “Displaying a Menu Using the h:selectOneMenu Tag” Displaying Components for Selecting Multiple Values “Displaying Components for Selecting Multiple Values” Example Components for Selecting Multiple Values “Example Components for Selecting Multiple Values” Using the f:selectItem and f:selectItems Tags “Using the f:selectItem and f:selectItems Tags” Using the f:selectItems Tag “Using the f:selectItems Tag” Using the f:selectItem Tag “Using the f:selectItem Tag” Displaying the Results from Selection Components “Displaying the Results from Selection Components” Using Data-Bound Table Components “Using Data-Bound Table Components” Optional Attributes for the h:dataTable Tag “Optional Attributes for the h:dataTable Tag” Displaying Error Messages with the h:message and h:messages Tags “Displaying Error Messages with the h:message and h:messages Tags” Creating Bookmarkable URLs with the h:button and h:link Tags “Creating Bookmarkable URLs with the h:button and h:link Tags” Using View Parameters to Configure Bookmarkable URLs “Using View Parameters to Configure Bookmarkable URLs” The bookmarks Example Application “The bookmarks Example Application” To Build, Package, and Deploy the bookmarks Example Using NetBeans IDE “To Build, Package, and Deploy the bookmarks Example Using NetBeans IDE” To Build, Package, and Deploy the bookmarks Example Using Maven “To Build, Package, and Deploy the bookmarks Example Using Maven” To Run the bookmarks Example “To Run the bookmarks Example” Resource Relocation Using h:outputScript and h:outputStylesheet Tags “Resource Relocation Using h:outputScript and h:outputStylesheet Tags” Using Core Tags “Using Core Tags” Event-Handling Core Tags “Event-Handling Core Tags” Data-Conversion Core Tags “Data-Conversion Core Tags” Facet Core Tags “Facet Core Tags” Core Tags That Represent Items in a List “Core Tags That Represent Items in a List” Validator Core Tags “Validator Core Tags” Miscellaneous Core Tags “Miscellaneous Core Tags” Where the Core Tags Are Explained “Where the Core Tags Are Explained” Using Converters, Listeners, and Validators “Using Converters, Listeners, and Validators” The previous chapter… the paragraph beginning “The previous chapter…” Using the Standard Converters “Using the Standard Converters” Converter Classes and Converter IDs “Converter Classes and Converter IDs” Converting a Component's Value “Converting a Component's Value” Using DateTimeConverter “Using DateTimeConverter” Attributes for the f:convertDateTime Tag “Attributes for the f:convertDateTime Tag” Using NumberConverter “Using NumberConverter” Attributes for the f:convertNumber Tag “Attributes for the f:convertNumber Tag” Registering Listeners on Components “Registering Listeners on Components” Registering a Value-Change Listener on a Component “Registering a Value-Change Listener on a Component” Attributes for the f:valueChangeListener Tag “Attributes for the f:valueChangeListener Tag” Registering an Action Listener on a Component “Registering an Action Listener on a Component” Using the Standard Validators “Using the Standard Validators” The Validator Classes “The Validator Classes” Validating a Component's Value “Validating a Component's Value” Using Validator Tags “Using Validator Tags” Referencing a Managed Bean Method “Referencing a Managed Bean Method” Component Tag Attributes That Reference Managed Bean Methods “Component Tag Attributes That Reference Managed Bean Methods” Referencing a Method That Performs Navigation “Referencing a Method That Performs Navigation” Referencing a Method That Handles an Action Event “Referencing a Method That Handles an Action Event” Referencing a Method That Performs Validation “Referencing a Method That Performs Validation” Referencing a Method That Handles a Value-Change Event “Referencing a Method That Handles a Value-Change Event” Developing with JavaServer Faces Technology “Developing with JavaServer Faces Technology” This chapter provides… the paragraph beginning “This chapter provides…” Managed Beans in JavaServer Faces Technology “Managed Beans in JavaServer Faces Technology” Creating a Managed Bean “Creating a Managed Bean” Using the EL to Reference Managed Beans “Using the EL to Reference Managed Beans” Writing Bean Properties “Writing Bean Properties” Writing Properties Bound to Component Values “Writing Properties Bound to Component Values” Acceptable Types of Component Values “Acceptable Types of Component Values” UIInput and UIOutput Properties “UIInput and UIOutput Properties” UIData Properties “UIData Properties” UISelectBoolean Properties “UISelectBoolean Properties” UISelectMany Properties “UISelectMany Properties” UISelectOne Properties “UISelectOne Properties” UISelectItem Properties “UISelectItem Properties” UISelectItems Properties “UISelectItems Properties” Writing Properties Bound to Component Instances “Writing Properties Bound to Component Instances” Writing Properties Bound to Converters, Listeners, or Validators “Writing Properties Bound to Converters, Listeners, or Validators” Writing Managed Bean Methods “Writing Managed Bean Methods” Why Use Managed Beans “Why Use Managed Beans” Writing a Method to Handle Navigation “Writing a Method to Handle Navigation” Writing a Method to Handle an Action Event “Writing a Method to Handle an Action Event” Writing a Method to Perform Validation “Writing a Method to Perform Validation” Writing a Method to Handle a Value-Change Event “Writing a Method to Handle a Value-Change Event” Using Ajax with JavaServer Faces Technology “Using Ajax with JavaServer Faces Technology” This chapter describes… the paragraph beginning “This chapter describes…” Overview of Ajax “Overview of Ajax” Using Ajax Functionality with JavaServer Faces Technology “Using Ajax Functionality with JavaServer Faces Technology” Using Ajax with Facelets “Using Ajax with Facelets” Using the f:ajax Tag “Using the f:ajax Tag” Attributes of the f:ajax Tag “Attributes of the f:ajax Tag” Execute and Render Keywords “Execute and Render Keywords” Sending an Ajax Request “Sending an Ajax Request” Using the event Attribute “Using the event Attribute” Using the execute Attribute “Using the execute Attribute” Using the immediate Attribute “Using the immediate Attribute” Using the listener Attribute “Using the listener Attribute” Monitoring Events on the Client “Monitoring Events on the Client” Properties of the onevent Data Object “Properties of the onevent Data Object” Handling Errors “Handling Errors” Valid Error Values for the Data Object status Property “Valid Error Values for the Data Object status Property” Receiving an Ajax Response “Receiving an Ajax Response” Ajax Request Lifecycle “Ajax Request Lifecycle” Grouping of Components “Grouping of Components” Loading JavaScript as a Resource “Loading JavaScript as a Resource” Using JavaScript API in a Facelets Application “Using JavaScript API in a Facelets Application” Possible Values for the Options Parameter “Possible Values for the Options Parameter” Using the @ResourceDependency Annotation in a Bean Class “Using the @ResourceDependency Annotation in a Bean Class” The ajaxguessnumber Example Application “The ajaxguessnumber Example Application” The ajaxguessnumber Source Files “The ajaxguessnumber Source Files” The ajaxgreeting.xhtml Facelets Page “The ajaxgreeting.xhtml Facelets Page” The UserNumberBean Backing Bean “The UserNumberBean Backing Bean” The DukesNumberBean CDI Managed Bean “The DukesNumberBean CDI Managed Bean” Running the ajaxguessnumber Example “Running the ajaxguessnumber Example” To Build, Package, and Deploy the ajaxguessnumber Example Using NetBeans IDE “To Build, Package, and Deploy the ajaxguessnumber Example Using NetBeans IDE” To Build, Package, and Deploy the ajaxguessnumber Example Using Maven “To Build, Package, and Deploy the ajaxguessnumber Example Using Maven” To Run the ajaxguessnumber Example “To Run the ajaxguessnumber Example” Further Information about Ajax in JavaServer Faces Technology “Further Information about Ajax in JavaServer Faces Technology” Composite Components: Advanced Topics and an Example “Composite Components: Advanced Topics and an Example” This chapter describes… the paragraph beginning “This chapter describes…” Attributes of a Composite Component “Attributes of a Composite Component” Commonly Used Attributes of the composite:attribute Tag “Commonly Used Attributes of the composite:attribute Tag” Invoking a Managed Bean “Invoking a Managed Bean” Validating Composite Component Values “Validating Composite Component Values” Validator Tags “Validator Tags” The compositecomponentexample Example Application “The compositecomponentexample Example Application” The Composite Component File “The Composite Component File” The Using Page “The Using Page” The Managed Bean “The Managed Bean” Running the compositecomponentexample Example “Running the compositecomponentexample Example” To Build, Package, and Deploy the compositecomponentexample Example Using NetBeans IDE “To Build, Package, and Deploy the compositecomponentexample Example Using NetBeans IDE” To Build, Package, and Deploy the compositecomponentexample Example Using Maven “To Build, Package, and Deploy the compositecomponentexample Example Using Maven” To Run the compositecomponentexample Example “To Run the compositecomponentexample Example” Creating Custom UI Components and Other Custom Objects “Creating Custom UI Components and Other Custom Objects” This chapter describes… the paragraph beginning “This chapter describes…” Introduction to Creating Custom Components “Introduction to Creating Custom Components” Determining Whether You Need a Custom Component or Renderer “Determining Whether You Need a Custom Component or Renderer” When to Use a Custom Component “When to Use a Custom Component” When to Use a Custom Renderer “When to Use a Custom Renderer” Component, Renderer, and Tag Combinations “Component, Renderer, and Tag Combinations” Requirements for Custom Components, Custom Renderers, and Custom Tags “Requirements for Custom Components, Custom Renderers, and Custom Tags” Understanding the Image Map Example “Understanding the Image Map Example” Why Use JavaServer Faces Technology to Implement an Image Map? “Why Use JavaServer Faces Technology to Implement an Image Map?” Understanding the Rendered HTML “Understanding the Rendered HTML” Understanding the Facelets Page “Understanding the Facelets Page” Configuring Model Data “Configuring Model Data” Summary of the Image Map Application Classes “Summary of the Image Map Application Classes” Image Map Classes “Image Map Classes” Steps for Creating a Custom Component “Steps for Creating a Custom Component” Creating Custom Component Classes “Creating Custom Component Classes” Specifying the Component Family “Specifying the Component Family” Performing Encoding “Performing Encoding” Performing Decoding “Performing Decoding” Enabling Component Properties to Accept Expressions “Enabling Component Properties to Accept Expressions” Saving and Restoring State “Saving and Restoring State” Delegating Rendering to a Renderer “Delegating Rendering to a Renderer” Creating the Renderer Class “Creating the Renderer Class” Identifying the Renderer Type “Identifying the Renderer Type” Implementing an Event Listener “Implementing an Event Listener” Implementing Value-Change Listeners “Implementing Value-Change Listeners” Implementing Action Listeners “Implementing Action Listeners” Handling Events for Custom Components “Handling Events for Custom Components” Defining the Custom Component Tag in a Tag Library Descriptor “Defining the Custom Component Tag in a Tag Library Descriptor” Using a Custom Component “Using a Custom Component” Creating and Using a Custom Converter “Creating and Using a Custom Converter” Creating a Custom Converter “Creating a Custom Converter” Using a Custom Converter “Using a Custom Converter” Creating and Using a Custom Validator “Creating and Using a Custom Validator” Implementing the Validator Interface “Implementing the Validator Interface” Specifying a Custom Tag “Specifying a Custom Tag” Using a Custom Validator “Using a Custom Validator” Binding Component Values and Instances to Managed Bean Properties “Binding Component Values and Instances to Managed Bean Properties” Examples of Value-Binding Expressions “Examples of Value-Binding Expressions” Binding a Component Value to a Property “Binding a Component Value to a Property” Binding a Component Value to an Implicit Object “Binding a Component Value to an Implicit Object” Implicit Objects “Implicit Objects” Binding a Component Instance to a Bean Property “Binding a Component Instance to a Bean Property” Binding Converters, Listeners, and Validators to Managed Bean Properties “Binding Converters, Listeners, and Validators to Managed Bean Properties” Configuring JavaServer Faces Applications “Configuring JavaServer Faces Applications” This chapter describes… the paragraph beginning “This chapter describes…” Introduction to Configuring JavaServer Faces Applications “Introduction to Configuring JavaServer Faces Applications” Using Annotations to Configure Managed Beans “Using Annotations to Configure Managed Beans” Using Managed Bean Scopes “Using Managed Bean Scopes” Application Configuration Resource File “Application Configuration Resource File” Configuring Eager Application-Scoped Managed Beans “Configuring Eager Application-Scoped Managed Beans” Ordering of Application Configuration Resource Files “Ordering of Application Configuration Resource Files” Using Faces Flows “Using Faces Flows” Two Faces Flows and Their Interactions “Two Faces Flows and Their Interactions” Packaging Flows in an Application “Packaging Flows in an Application” The Simplest Possible Flow: The simple-flow Example Application “The Simplest Possible Flow: The simple-flow Example Application” To Build, Package, and Deploy the simple-flow Example Using NetBeans IDE “To Build, Package, and Deploy the simple-flow Example Using NetBeans IDE” To Build, Package, and Deploy the simple-flow Example Using Maven “To Build, Package, and Deploy the simple-flow Example Using Maven” To Run the simple-flow Example “To Run the simple-flow Example” The checkout-module Example Application “The checkout-module Example Application” The Facelets Pages for the checkout-module Example “The Facelets Pages for the checkout-module Example” Using a Configuration File to Configure a Flow “Using a Configuration File to Configure a Flow” Using a Java Class to Configure a Flow “Using a Java Class to Configure a Flow” The Flow-Scoped Managed Beans “The Flow-Scoped Managed Beans” To Build, Package, and Deploy the checkout-module Example Using NetBeans IDE “To Build, Package, and Deploy the checkout-module Example Using NetBeans IDE” To Build, Package, and Deploy the checkout-module Example Using Maven “To Build, Package, and Deploy the checkout-module Example Using Maven” To Run the checkout-module Example “To Run the checkout-module Example” Configuring Managed Beans “Configuring Managed Beans” Using the managed-bean Element “Using the managed-bean Element” Initializing Properties Using the managed-property Element “Initializing Properties Using the managed-property Element” Subelements of managed-property Elements That Define Property Values “Subelements of managed-property Elements That Define Property Values” Referencing a Java Enum Type “Referencing a Java Enum Type” Referencing a Context Initialization Parameter “Referencing a Context Initialization Parameter” Initializing Map Properties “Initializing Map Properties” Initializing Array and List Properties “Initializing Array and List Properties” Initializing Managed Bean Properties “Initializing Managed Bean Properties” Allowable Connections between Scoped Objects “Allowable Connections between Scoped Objects” Initializing Maps and Lists “Initializing Maps and Lists” Registering Application Messages “Registering Application Messages” Using FacesMessage to Create a Message “Using FacesMessage to Create a Message” Referencing Error Messages “Referencing Error Messages” Using Default Validators “Using Default Validators” Registering a Custom Validator “Registering a Custom Validator” Registering a Custom Converter “Registering a Custom Converter” Configuring Navigation Rules “Configuring Navigation Rules” Common Outcome Strings “Common Outcome Strings” Registering a Custom Renderer with a Render Kit “Registering a Custom Renderer with a Render Kit” Registering a Custom Component “Registering a Custom Component” Basic Requirements of a JavaServer Faces Application “Basic Requirements of a JavaServer Faces Application” Configuring an Application with a Web Deployment Descriptor “Configuring an Application with a Web Deployment Descriptor” Identifying the Servlet for Lifecycle Processing “Identifying the Servlet for Lifecycle Processing” To Specify a Path to an Application Configuration Resource File “To Specify a Path to an Application Configuration Resource File” To Specify Where State Is Saved “To Specify Where State Is Saved” Configuring Project Stage “Configuring Project Stage” Including the Classes, Pages, and Other Resources “Including the Classes, Pages, and Other Resources” Java Servlet Technology “Java Servlet Technology” Java Servlet technology… the paragraph beginning “Java Servlet technology…” What Is a Servlet? “What Is a Servlet?” Servlet Lifecycle “Servlet Lifecycle” Handling Servlet Lifecycle Events “Handling Servlet Lifecycle Events” Defining the Listener Class “Defining the Listener Class” Servlet Lifecycle Events “Servlet Lifecycle Events” Handling Servlet Errors “Handling Servlet Errors” Sharing Information “Sharing Information” Using Scope Objects “Using Scope Objects” Scope Objects “Scope Objects” Controlling Concurrent Access to Shared Resources “Controlling Concurrent Access to Shared Resources” Creating and Initializing a Servlet “Creating and Initializing a Servlet” Writing Service Methods “Writing Service Methods” Getting Information from Requests “Getting Information from Requests” Constructing Responses “Constructing Responses” Filtering Requests and Responses “Filtering Requests and Responses” Programming Filters “Programming Filters” Programming Customized Requests and Responses “Programming Customized Requests and Responses” Specifying Filter Mappings “Specifying Filter Mappings” Filter-to-Servlet Mapping “Filter-to-Servlet Mapping” To Specify Filter Mappings Using NetBeans IDE “To Specify Filter Mappings Using NetBeans IDE” Invoking Other Web Resources “Invoking Other Web Resources” Including Other Resources in the Response “Including Other Resources in the Response” Transferring Control to Another Web Component “Transferring Control to Another Web Component” Accessing the Web Context “Accessing the Web Context” Maintaining Client State “Maintaining Client State” Accessing a Session “Accessing a Session” Associating Objects with a Session “Associating Objects with a Session” Session Management “Session Management” To Set the Timeout Period Using NetBeans IDE “To Set the Timeout Period Using NetBeans IDE” Session Tracking “Session Tracking” Finalizing a Servlet “Finalizing a Servlet” Tracking Service Requests “Tracking Service Requests” Notifying Methods to Shut Down “Notifying Methods to Shut Down” Creating Polite Long-Running Methods “Creating Polite Long-Running Methods” Uploading Files with Java Servlet Technology “Uploading Files with Java Servlet Technology” The @MultipartConfig Annotation “The @MultipartConfig Annotation” The getParts and getPart Methods “The getParts and getPart Methods” Asynchronous Processing “Asynchronous Processing” Asynchronous Processing in Servlets “Asynchronous Processing in Servlets” Functionality Provided by the AsyncContext Class “Functionality Provided by the AsyncContext Class” Waiting for a Resource “Waiting for a Resource” Nonblocking I/O “Nonblocking I/O” Nonblocking I/O Support in javax.servlet.ServletInputStream “Nonblocking I/O Support in javax.servlet.ServletInputStream” Nonblocking I/O Support in javax.servlet.ServletOutputStream “Nonblocking I/O Support in javax.servlet.ServletOutputStream” Listener Interfaces for Nonblocking I/O Support “Listener Interfaces for Nonblocking I/O Support” Reading a Large HTTP POST Request Using Nonblocking I/O “Reading a Large HTTP POST Request Using Nonblocking I/O” Protocol Upgrade Processing “Protocol Upgrade Processing” Protocol Upgrade Support “Protocol Upgrade Support” The mood Example Application “The mood Example Application” Components of the mood Example Application “Components of the mood Example Application” Running the mood Example “Running the mood Example” To Run the mood Example Using NetBeans IDE “To Run the mood Example Using NetBeans IDE” To Run the mood Example Using Maven “To Run the mood Example Using Maven” The fileupload Example Application “The fileupload Example Application” Architecture of the fileupload Example Application “Architecture of the fileupload Example Application” Running the fileupload Example “Running the fileupload Example” To Build, Package, and Deploy the fileupload Example Using NetBeans IDE “To Build, Package, and Deploy the fileupload Example Using NetBeans IDE” To Build, Package, and Deploy the fileupload Example Using Maven “To Build, Package, and Deploy the fileupload Example Using Maven” To Run the fileupload Example “To Run the fileupload Example” The dukeetf Example Application “The dukeetf Example Application” Architecture of the dukeetf Example Application “Architecture of the dukeetf Example Application” The Servlet “The Servlet” The Enterprise Bean “The Enterprise Bean” The HTML Page “The HTML Page” Running the dukeetf Example Application “Running the dukeetf Example Application” To Run the dukeetf Example Application Using NetBeans IDE “To Run the dukeetf Example Application Using NetBeans IDE” To Run the dukeetf Example Application Using Maven “To Run the dukeetf Example Application Using Maven” Further Information about Java Servlet Technology “Further Information about Java Servlet Technology” Java API for WebSocket “Java API for WebSocket” This chapter describes… the paragraph beginning “This chapter describes…” Introduction to WebSocket “Introduction to WebSocket” Creating WebSocket Applications in the Java EE Platform “Creating WebSocket Applications in the Java EE Platform” Creating and Deploying a WebSocket Endpoint “Creating and Deploying a WebSocket Endpoint” Programmatic Endpoints “Programmatic Endpoints” Annotated Endpoints “Annotated Endpoints” WebSocket Endpoint Lifecycle Annotations “WebSocket Endpoint Lifecycle Annotations” Sending and Receiving Messages “Sending and Receiving Messages” Sending Messages “Sending Messages” Sending Messages to All Peers Connected to an Endpoint “Sending Messages to All Peers Connected to an Endpoint” Receiving Messages “Receiving Messages” Maintaining Client State “Maintaining Client State” Using Encoders and Decoders “Using Encoders and Decoders” Implementing Encoders to Convert Java Objects into WebSocket Messages “Implementing Encoders to Convert Java Objects into WebSocket Messages” Implementing Decoders to Convert WebSocket Messages into Java Objects “Implementing Decoders to Convert WebSocket Messages into Java Objects” Path Parameters “Path Parameters” Handling Errors “Handling Errors” Specifying an Endpoint Configurator Class “Specifying an Endpoint Configurator Class” The dukeetf2 Example Application “The dukeetf2 Example Application” Architecture of the dukeetf2 Sample Application “Architecture of the dukeetf2 Sample Application” The Endpoint “The Endpoint” The Enterprise Bean “The Enterprise Bean” The HTML Page “The HTML Page” Running the dukeetf2 Example Application “Running the dukeetf2 Example Application” To Run the dukeetf2 Example Application Using NetBeans IDE “To Run the dukeetf2 Example Application Using NetBeans IDE” To Run the dukeetf2 Example Application Using Maven “To Run the dukeetf2 Example Application Using Maven” The websocketbot Example Application “The websocketbot Example Application” Architecture of the websocketbot Example Application “Architecture of the websocketbot Example Application” The CDI Bean “The CDI Bean” The WebSocket Endpoint “The WebSocket Endpoint” The Application Messages “The Application Messages” The Encoder Classes “The Encoder Classes” The Message Decoder “The Message Decoder” The HTML Page “The HTML Page” Running the websocketbot Example Application “Running the websocketbot Example Application” To Run the websocketbot Example Application Using NetBeans IDE “To Run the websocketbot Example Application Using NetBeans IDE” To Run the websocketbot Example Application Using Maven “To Run the websocketbot Example Application Using Maven” To Test the websocketbot Example Application “To Test the websocketbot Example Application” Further Information about WebSocket “Further Information about WebSocket” JSON Processing “JSON Processing” This chapter describes… the paragraph beginning “This chapter describes…” Introduction to JSON “Introduction to JSON” JSON Syntax “JSON Syntax” Uses of JSON “Uses of JSON” Generating and Parsing JSON Data “Generating and Parsing JSON Data” JSON Processing in the Java EE Platform “JSON Processing in the Java EE Platform” Main Classes and Interfaces in javax.json “Main Classes and Interfaces in javax.json” Main Classes and Interfaces in javax.json.stream “Main Classes and Interfaces in javax.json.stream” Using the Object Model API “Using the Object Model API” Creating an Object Model from JSON Data “Creating an Object Model from JSON Data” Creating an Object Model from Application Code “Creating an Object Model from Application Code” Navigating an Object Model “Navigating an Object Model” Writing an Object Model to a Stream “Writing an Object Model to a Stream” Using the Streaming API “Using the Streaming API” Reading JSON Data Using a Parser “Reading JSON Data Using a Parser” Writing JSON Data Using a Generator “Writing JSON Data Using a Generator” JSON in Java EE RESTful Web Services “JSON in Java EE RESTful Web Services” The jsonpmodel Example Application “The jsonpmodel Example Application” Components of the jsonpmodel Example Application “Components of the jsonpmodel Example Application” Running the jsonpmodel Example Application “Running the jsonpmodel Example Application” To Run the jsonpmodel Example Application Using NetBeans IDE “To Run the jsonpmodel Example Application Using NetBeans IDE” To Run the jsonpmodel Example Application Using Maven “To Run the jsonpmodel Example Application Using Maven” The jsonpstreaming Example Application “The jsonpstreaming Example Application” Components of the jsonpstreaming Example Application “Components of the jsonpstreaming Example Application” Running the jsonpstreaming Example Application “Running the jsonpstreaming Example Application” To Run the jsonpstreaming Example Application Using NetBeans IDE “To Run the jsonpstreaming Example Application Using NetBeans IDE” To Run the jsonpstreaming Example Application Using Maven “To Run the jsonpstreaming Example Application Using Maven” Further Information about the Java API for JSON Processing “Further Information about the Java API for JSON Processing” Internationalizing and Localizing Web Applications “Internationalizing and Localizing Web Applications” The process of… the paragraph beginning “The process of…” Java Platform Localization Classes “Java Platform Localization Classes” Providing Localized Messages and Labels “Providing Localized Messages and Labels” Establishing the Locale “Establishing the Locale” Setting the Resource Bundle “Setting the Resource Bundle” Retrieving Localized Messages “Retrieving Localized Messages” Date and Number Formatting “Date and Number Formatting” Character Sets and Encodings “Character Sets and Encodings” Character Sets “Character Sets” Character Encoding “Character Encoding” Introduction to Bean Validation “Introduction to Bean Validation” This chapter describes… the paragraph beginning “This chapter describes…” Overview of Bean Validation “Overview of Bean Validation” Using Bean Validation Constraints “Using Bean Validation Constraints” Built-In Bean Validation Constraints “Built-In Bean Validation Constraints” Validating Null and Empty Strings “Validating Null and Empty Strings” Validating Constructors and Methods “Validating Constructors and Methods” Cross-Parameter Constraints “Cross-Parameter Constraints” Identifying Parameter Constraint Violations “Identifying Parameter Constraint Violations” Adding Constraints to Method Return Values “Adding Constraints to Method Return Values” Further Information about Bean Validation “Further Information about Bean Validation” Bean Validation: Advanced Topics “Bean Validation: Advanced Topics” This chapter describes… the paragraph beginning “This chapter describes…” Creating Custom Constraints “Creating Custom Constraints” Using the Built-In Constraints to Make a New Constraint “Using the Built-In Constraints to Make a New Constraint” Removing Ambiguity in Constraint Targets “Removing Ambiguity in Constraint Targets” Customizing Validator Messages “Customizing Validator Messages” The ValidationMessages Resource Bundle “The ValidationMessages Resource Bundle” Localizing Validation Messages “Localizing Validation Messages” Grouping Constraints “Grouping Constraints” Customizing Group Validation Order “Customizing Group Validation Order” Using Method Constraints in Type Hierarchies “Using Method Constraints in Type Hierarchies” Rules for Using Method Constraints in Type Hierarchies “Rules for Using Method Constraints in Type Hierarchies” Introduction to Contexts and Dependency Injection for Java EE “Introduction to Contexts and Dependency Injection for Java EE” This chapter describes… the paragraph beginning “This chapter describes…” Getting Started “Getting Started” Overview of CDI “Overview of CDI” About Beans “About Beans” About CDI Managed Beans “About CDI Managed Beans” Beans as Injectable Objects “Beans as Injectable Objects” Using Qualifiers “Using Qualifiers” Injecting Beans “Injecting Beans” Using Scopes “Using Scopes” Scopes “Scopes” Giving Beans EL Names “Giving Beans EL Names” Adding Setter and Getter Methods “Adding Setter and Getter Methods” Using a Managed Bean in a Facelets Page “Using a Managed Bean in a Facelets Page” Injecting Objects by Using Producer Methods “Injecting Objects by Using Producer Methods” Configuring a CDI Application “Configuring a CDI Application” Using the @PostConstruct and @PreDestroy Annotations with CDI Managed Bean Classes “Using the @PostConstruct and @PreDestroy Annotations with CDI Managed Bean Classes” To Initialize a Managed Bean Using the @PostConstruct Annotation “To Initialize a Managed Bean Using the @PostConstruct Annotation” To Prepare for the Destruction of a Managed Bean Using the @PreDestroy Annotation “To Prepare for the Destruction of a Managed Bean Using the @PreDestroy Annotation” Further Information about CDI “Further Information about CDI” Running the Basic Contexts and Dependency Injection Examples “Running the Basic Contexts and Dependency Injection Examples” This chapter describes… the paragraph beginning “This chapter describes…” Building and Running the CDI Samples “Building and Running the CDI Samples” The simplegreeting CDI Example “The simplegreeting CDI Example” The simplegreeting Source Files “The simplegreeting Source Files” The Facelets Template and Page “The Facelets Template and Page” Running the simplegreeting Example “Running the simplegreeting Example” To Build, Package, and Run the simplegreeting Example Using NetBeans IDE “To Build, Package, and Run the simplegreeting Example Using NetBeans IDE” To Build, Package, and Deploy the simplegreeting Example Using Maven “To Build, Package, and Deploy the simplegreeting Example Using Maven” To Run the simplegreeting Example “To Run the simplegreeting Example” The guessnumber-cdi CDI Example “The guessnumber-cdi CDI Example” The guessnumber-cdi Source Files “The guessnumber-cdi Source Files” The @MaxNumber and @Random Qualifier Interfaces “The @MaxNumber and @Random Qualifier Interfaces” The Generator Managed Bean “The Generator Managed Bean” The UserNumberBean Managed Bean “The UserNumberBean Managed Bean” The Facelets Page “The Facelets Page” Running the guessnumber-cdi Example “Running the guessnumber-cdi Example” To Build, Package, and Deploy the guessnumber-cdi Example Using NetBeans IDE “To Build, Package, and Deploy the guessnumber-cdi Example Using NetBeans IDE” To Build, Package, and Deploy the guessnumber-cdi Example Using Maven “To Build, Package, and Deploy the guessnumber-cdi Example Using Maven” To Run the guessnumber Example “To Run the guessnumber Example” Contexts and Dependency Injection for Java EE: Advanced Topics “Contexts and Dependency Injection for Java EE: Advanced Topics” This chapter describes… the paragraph beginning “This chapter describes…” Packaging CDI Applications “Packaging CDI Applications” Using Alternatives in CDI Applications “Using Alternatives in CDI Applications” Using Specialization “Using Specialization” Using Producer Methods, Producer Fields, and Disposer Methods in CDI Applications “Using Producer Methods, Producer Fields, and Disposer Methods in CDI Applications” Using Producer Methods “Using Producer Methods” Using Producer Fields to Generate Resources “Using Producer Fields to Generate Resources” Using a Disposer Method “Using a Disposer Method” Using Predefined Beans in CDI Applications “Using Predefined Beans in CDI Applications” Injection of Predefined Beans “Injection of Predefined Beans” Using Events in CDI Applications “Using Events in CDI Applications” Defining Events “Defining Events” Using Observer Methods to Handle Events “Using Observer Methods to Handle Events” Firing Events “Firing Events” Using Interceptors in CDI Applications “Using Interceptors in CDI Applications” Using Decorators in CDI Applications “Using Decorators in CDI Applications” Using Stereotypes in CDI Applications “Using Stereotypes in CDI Applications” Running the Advanced Contexts and Dependency Injection Examples “Running the Advanced Contexts and Dependency Injection Examples” This chapter describes… the paragraph beginning “This chapter describes…” Building and Running the CDI Advanced Examples “Building and Running the CDI Advanced Examples” The encoder Example: Using Alternatives “The encoder Example: Using Alternatives” The Coder Interface and Implementations “The Coder Interface and Implementations” The encoder Facelets Page and Managed Bean “The encoder Facelets Page and Managed Bean” Running the encoder Example “Running the encoder Example” To Build, Package, and Deploy the encoder Example Using NetBeans IDE “To Build, Package, and Deploy the encoder Example Using NetBeans IDE” To Run the encoder Example Using NetBeans IDE “To Run the encoder Example Using NetBeans IDE” To Build, Package, and Deploy the encoder Example Using Maven “To Build, Package, and Deploy the encoder Example Using Maven” To Run the encoder Example Using Maven “To Run the encoder Example Using Maven” The producermethods Example: Using a Producer Method to Choose a Bean Implementation “The producermethods Example: Using a Producer Method to Choose a Bean Implementation” Components of the producermethods Example “Components of the producermethods Example” Running the producermethods Example “Running the producermethods Example” To Build, Package, and Deploy the producermethods Example Using NetBeans IDE “To Build, Package, and Deploy the producermethods Example Using NetBeans IDE” To Build, Package, and Deploy the producermethods Example Using Maven “To Build, Package, and Deploy the producermethods Example Using Maven” To Run the producermethods Example “To Run the producermethods Example” The producerfields Example: Using Producer Fields to Generate Resources “The producerfields Example: Using Producer Fields to Generate Resources” The Producer Field for the producerfields Example “The Producer Field for the producerfields Example” The producerfields Entity and Session Bean “The producerfields Entity and Session Bean” The producerfields Facelets Pages and Managed Bean “The producerfields Facelets Pages and Managed Bean” Running the producerfields Example “Running the producerfields Example” To Build, Package, and Deploy the producerfields Example Using NetBeans IDE “To Build, Package, and Deploy the producerfields Example Using NetBeans IDE” To Build, Package, and Deploy the producerfields Example Using Maven “To Build, Package, and Deploy the producerfields Example Using Maven” To Run the producerfields Example “To Run the producerfields Example” The billpayment Example: Using Events and Interceptors “The billpayment Example: Using Events and Interceptors” Overview of the billpayment Example “Overview of the billpayment Example” The PaymentEvent Event Class “The PaymentEvent Event Class” The PaymentHandler Event Listener “The PaymentHandler Event Listener” The billpayment Facelets Pages and Managed Bean “The billpayment Facelets Pages and Managed Bean” The LoggedInterceptor Interceptor Class “The LoggedInterceptor Interceptor Class” Running the billpayment Example “Running the billpayment Example” To Build, Package, and Deploy the billpayment Example Using NetBeans IDE “To Build, Package, and Deploy the billpayment Example Using NetBeans IDE” To Build, Package, and Deploy the billpayment Example Using Maven “To Build, Package, and Deploy the billpayment Example Using Maven” To Run the billpayment Example “To Run the billpayment Example” The decorators Example: Decorating a Bean “The decorators Example: Decorating a Bean” Overview of the decorators Example “Overview of the decorators Example” Components of the decorators Example “Components of the decorators Example” Running the decorators Example “Running the decorators Example” To Build, Package, and Deploy the decorators Example Using NetBeans IDE “To Build, Package, and Deploy the decorators Example Using NetBeans IDE” To Build, Package, and Deploy the decorators Example Using Maven “To Build, Package, and Deploy the decorators Example Using Maven” To Run the decorators Example “To Run the decorators Example” Introduction to Web Services “Introduction to Web Services” This part of… the paragraph beginning “This part of…” What Are Web Services? “What Are Web Services?” Types of Web Services “Types of Web Services” "Big" Web Services “"Big" Web Services” RESTful Web Services “RESTful Web Services” Deciding Which Type of Web Service to Use “Deciding Which Type of Web Service to Use” Building Web Services with JAX-WS “Building Web Services with JAX-WS” This chapter describes… the paragraph beginning “This chapter describes…” Overview of Java API for XML Web Services “Overview of Java API for XML Web Services” Creating a Simple Web Service and Clients with JAX-WS “Creating a Simple Web Service and Clients with JAX-WS” Communication between a JAX-WS Web Service and a Client “Communication between a JAX-WS Web Service and a Client” Basic Steps for Creating a Web Service and Client “Basic Steps for Creating a Web Service and Client” Requirements of a JAX-WS Endpoint “Requirements of a JAX-WS Endpoint” Coding the Service Endpoint Implementation Class “Coding the Service Endpoint Implementation Class” Building, Packaging, and Deploying the Service “Building, Packaging, and Deploying the Service” To Build, Package, and Deploy the Service Using NetBeans IDE “To Build, Package, and Deploy the Service Using NetBeans IDE” Next Steps “Next Steps” To Build, Package, and Deploy the Service Using Maven “To Build, Package, and Deploy the Service Using Maven” Next Steps “Next Steps” Testing the Methods of a Web Service Endpoint “Testing the Methods of a Web Service Endpoint” To Test the Service without a Client “To Test the Service without a Client” A Simple JAX-WS Application Client “A Simple JAX-WS Application Client” Coding the Application Client “Coding the Application Client” Running the Application Client “Running the Application Client” To Run the Application Client Using NetBeans IDE “To Run the Application Client Using NetBeans IDE” To Run the Application Client Using Maven “To Run the Application Client Using Maven” A Simple JAX-WS Web Client “A Simple JAX-WS Web Client” Coding the Servlet “Coding the Servlet” Running the Web Client “Running the Web Client” To Run the Web Client Using NetBeans IDE “To Run the Web Client Using NetBeans IDE” To Run the Web Client Using Maven “To Run the Web Client Using Maven” Types Supported by JAX-WS “Types Supported by JAX-WS” Schema-to-Java Mapping “Schema-to-Java Mapping” Mapping of XML Data Types to Java Data Types in JAXB “Mapping of XML Data Types to Java Data Types in JAXB” Java-to-Schema Mapping “Java-to-Schema Mapping” Mapping of Java Classes to XML Data Types in JAXB “Mapping of Java Classes to XML Data Types in JAXB” Web Services Interoperability and JAX-WS “Web Services Interoperability and JAX-WS” Further Information about JAX-WS “Further Information about JAX-WS” Building RESTful Web Services with JAX-RS “Building RESTful Web Services with JAX-RS” This chapter describes… the paragraph beginning “This chapter describes…” What Are RESTful Web Services? “What Are RESTful Web Services?” Creating a RESTful Root Resource Class “Creating a RESTful Root Resource Class” Developing RESTful Web Services with JAX-RS “Developing RESTful Web Services with JAX-RS” Summary of JAX-RS Annotations “Summary of JAX-RS Annotations” Overview of a JAX-RS Application “Overview of a JAX-RS Application” The @Path Annotation and URI Path Templates “The @Path Annotation and URI Path Templates” Examples of URI Path Templates “Examples of URI Path Templates” Responding to HTTP Methods and Requests “Responding to HTTP Methods and Requests” The Request Method Designator Annotations “The Request Method Designator Annotations” Using Entity Providers to Map HTTP Response and Request Entity Bodies “Using Entity Providers to Map HTTP Response and Request Entity Bodies” Types Supported for HTTP Request and Response Entity Bodies “Types Supported for HTTP Request and Response Entity Bodies” Using @Consumes and @Produces to Customize Requests and Responses “Using @Consumes and @Produces to Customize Requests and Responses” The @Produces Annotation “The @Produces Annotation” The @Consumes Annotation “The @Consumes Annotation” Extracting Request Parameters “Extracting Request Parameters” Configuring JAX-RS Applications “Configuring JAX-RS Applications” Configuring a JAX-RS Application Using a Subclass of Application “Configuring a JAX-RS Application Using a Subclass of Application” Configuring the Base URI in web.xml “Configuring the Base URI in web.xml” Example Applications for JAX-RS “Example Applications for JAX-RS” Creating a Simple RESTful Web Service “Creating a Simple RESTful Web Service” To Create a RESTful Web Service Using NetBeans IDE “To Create a RESTful Web Service Using NetBeans IDE” The rsvp Example Application “The rsvp Example Application” Components of the rsvp Example Application “Components of the rsvp Example Application” Running the rsvp Example Application “Running the rsvp Example Application” To Run the rsvp Example Application Using NetBeans IDE “To Run the rsvp Example Application Using NetBeans IDE” To Run the rsvp Example Application Using Maven “To Run the rsvp Example Application Using Maven” Real-World Examples “Real-World Examples” Further Information about JAX-RS “Further Information about JAX-RS” Accessing REST Resources with the JAX-RS Client API “Accessing REST Resources with the JAX-RS Client API” This chapter describes… the paragraph beginning “This chapter describes…” Overview of the Client API “Overview of the Client API” Creating a Basic Client Request Using the Client API “Creating a Basic Client Request Using the Client API” Obtaining the Client Instance “Obtaining the Client Instance” Setting the Client Target “Setting the Client Target” Setting Path Parameters in Targets “Setting Path Parameters in Targets” Invoking the Request “Invoking the Request” Using the Client API in the JAX-RS Example Applications “Using the Client API in the JAX-RS Example Applications” The Client API in the rsvp Example Application “The Client API in the rsvp Example Application” The Client API in the customer Example Application “The Client API in the customer Example Application” Advanced Features of the Client API “Advanced Features of the Client API” Configuring the Client Request “Configuring the Client Request” Setting Message Headers in the Client Request “Setting Message Headers in the Client Request” Setting Cookies in the Client Request “Setting Cookies in the Client Request” Adding Filters to the Client “Adding Filters to the Client” Asynchronous Invocations in the Client API “Asynchronous Invocations in the Client API” Using Custom Callbacks in Asynchronous Invocations “Using Custom Callbacks in Asynchronous Invocations” Using Reactive Approach in Asynchronous Invocations “Using Reactive Approach in Asynchronous Invocations” Using Server-Sent Events “Using Server-Sent Events” Overview of the SSE API “Overview of the SSE API” Broadcasting Using SSE “Broadcasting Using SSE” Listening and Receiving Events “Listening and Receiving Events” JAX-RS: Advanced Topics and an Example “JAX-RS: Advanced Topics and an Example” The Java API… the paragraph beginning “The Java API…” Annotations for Field and Bean Properties of Resource Classes “Annotations for Field and Bean Properties of Resource Classes” Advanced JAX-RS Annotations “Advanced JAX-RS Annotations” Extracting Path Parameters “Extracting Path Parameters” Extracting Query Parameters “Extracting Query Parameters” Extracting Form Data “Extracting Form Data” Extracting the Java Type of a Request or Response “Extracting the Java Type of a Request or Response” Validating Resource Data with Bean Validation “Validating Resource Data with Bean Validation” Using Constraint Annotations on Resource Methods “Using Constraint Annotations on Resource Methods” Validating Entity Data “Validating Entity Data” Validation Exception Handling and Response Codes “Validation Exception Handling and Response Codes” Subresources and Runtime Resource Resolution “Subresources and Runtime Resource Resolution” Subresource Methods “Subresource Methods” Subresource Locators “Subresource Locators” Integrating JAX-RS with EJB Technology and CDI “Integrating JAX-RS with EJB Technology and CDI” Conditional HTTP Requests “Conditional HTTP Requests” Runtime Content Negotiation “Runtime Content Negotiation” Using JAX-RS with JAXB “Using JAX-RS with JAXB” Using Java Objects to Model Your Data “Using Java Objects to Model Your Data” Starting from an Existing XML Schema Definition “Starting from an Existing XML Schema Definition” Using JSON with JAX-RS and JAXB “Using JSON with JAX-RS and JAXB” The customer Example Application “The customer Example Application” Overview of the customer Example Application “Overview of the customer Example Application” The Customer and Address Entity Classes “The Customer and Address Entity Classes” The CustomerService Class “The CustomerService Class” Using the JAX-RS Client in the CustomerBean Classes “Using the JAX-RS Client in the CustomerBean Classes” Running the customer Example “Running the customer Example” To Build, Package, and Deploy the customer Example Using NetBeans IDE “To Build, Package, and Deploy the customer Example Using NetBeans IDE” To Build, Package, and Deploy the customer Example Using Maven “To Build, Package, and Deploy the customer Example Using Maven” Enterprise Beans “Enterprise Beans” Enterprise beans are… the paragraph beginning “Enterprise beans are…” What Is an Enterprise Bean? “What Is an Enterprise Bean?” Benefits of Enterprise Beans “Benefits of Enterprise Beans” When to Use Enterprise Beans “When to Use Enterprise Beans” Types of Enterprise Beans “Types of Enterprise Beans” Enterprise Bean Types “Enterprise Bean Types” What Is a Session Bean? “What Is a Session Bean?” Types of Session Beans “Types of Session Beans” Stateful Session Beans “Stateful Session Beans” Stateless Session Beans “Stateless Session Beans” Singleton Session Beans “Singleton Session Beans” When to Use Session Beans “When to Use Session Beans” What Is a Message-Driven Bean? “What Is a Message-Driven Bean?” What Makes Message-Driven Beans Different from Session Beans? “What Makes Message-Driven Beans Different from Session Beans?” When to Use Message-Driven Beans “When to Use Message-Driven Beans” Accessing Enterprise Beans “Accessing Enterprise Beans” Using Enterprise Beans in Clients “Using Enterprise Beans in Clients” Portable JNDI Syntax “Portable JNDI Syntax” Deciding on Remote or Local Access “Deciding on Remote or Local Access” Local Clients “Local Clients” Accessing Local Enterprise Beans Using the No-Interface View “Accessing Local Enterprise Beans Using the No-Interface View” Accessing Local Enterprise Beans That Implement Business Interfaces “Accessing Local Enterprise Beans That Implement Business Interfaces” Remote Clients “Remote Clients” Interfaces for an Enterprise Bean with Remote Access “Interfaces for an Enterprise Bean with Remote Access” Web Service Clients “Web Service Clients” Method Parameters and Access “Method Parameters and Access” Isolation “Isolation” Granularity of Accessed Data “Granularity of Accessed Data” The Contents of an Enterprise Bean “The Contents of an Enterprise Bean” Naming Conventions for Enterprise Beans “Naming Conventions for Enterprise Beans” Naming Conventions for Enterprise Beans “Naming Conventions for Enterprise Beans” The Lifecycles of Enterprise Beans “The Lifecycles of Enterprise Beans” The Lifecycle of a Stateful Session Bean “The Lifecycle of a Stateful Session Bean” Lifecycle of a Stateful Session Bean “Lifecycle of a Stateful Session Bean” The Lifecycle of a Stateless Session Bean “The Lifecycle of a Stateless Session Bean” Lifecycle of a Stateless or Singleton Session Bean “Lifecycle of a Stateless or Singleton Session Bean” The Lifecycle of a Singleton Session Bean “The Lifecycle of a Singleton Session Bean” The Lifecycle of a Message-Driven Bean “The Lifecycle of a Message-Driven Bean” Lifecycle of a Message-Driven Bean “Lifecycle of a Message-Driven Bean” Further Information about Enterprise Beans “Further Information about Enterprise Beans” Getting Started with Enterprise Beans “Getting Started with Enterprise Beans” This chapter shows… the paragraph beginning “This chapter shows…” Starting With Enterprise Beans “Starting With Enterprise Beans” Creating the Enterprise Bean “Creating the Enterprise Bean” Coding the Enterprise Bean Class “Coding the Enterprise Bean Class” Creating the converter Web Client “Creating the converter Web Client” Running the converter Example “Running the converter Example” To Run the converter Example Using NetBeans IDE “To Run the converter Example Using NetBeans IDE” To Run the converter Example Using Maven “To Run the converter Example Using Maven” Modifying the Java EE Application “Modifying the Java EE Application” To Modify a Class File “To Modify a Class File” Running the Enterprise Bean Examples “Running the Enterprise Bean Examples” This chapter describes… the paragraph beginning “This chapter describes…” Overview of the EJB Examples “Overview of the EJB Examples” The cart Example “The cart Example” The Business Interface “The Business Interface” Session Bean Class “Session Bean Class” Lifecycle Callback Methods “Lifecycle Callback Methods” Business Methods “Business Methods” The @Remove Method “The @Remove Method” Helper Classes “Helper Classes” Running the cart Example “Running the cart Example” To Run the cart Example Using NetBeans IDE “To Run the cart Example Using NetBeans IDE” To Run the cart Example Using Maven “To Run the cart Example Using Maven” A Singleton Session Bean Example: counter “A Singleton Session Bean Example: counter” Creating a Singleton Session Bean “Creating a Singleton Session Bean” Initializing Singleton Session Beans “Initializing Singleton Session Beans” Managing Concurrent Access in a Singleton Session Bean “Managing Concurrent Access in a Singleton Session Bean” Handling Errors in a Singleton Session Bean “Handling Errors in a Singleton Session Bean” The Architecture of the counter Example “The Architecture of the counter Example” Running the counter Example “Running the counter Example” To Run the counter Example Using NetBeans IDE “To Run the counter Example Using NetBeans IDE” To Run the counter Example Using Maven “To Run the counter Example Using Maven” A Web Service Example: helloservice “A Web Service Example: helloservice” The Web Service Endpoint Implementation Class “The Web Service Endpoint Implementation Class” Stateless Session Bean Implementation Class “Stateless Session Bean Implementation Class” Running the helloservice Example “Running the helloservice Example” To Build, Package, and Deploy the helloservice Example Using NetBeans IDE “To Build, Package, and Deploy the helloservice Example Using NetBeans IDE” To Build, Package, and Deploy the helloservice Example Using Maven “To Build, Package, and Deploy the helloservice Example Using Maven” To Test the Service without a Client “To Test the Service without a Client” Using the Timer Service “Using the Timer Service” Creating Calendar-Based Timer Expressions “Creating Calendar-Based Timer Expressions” Calendar-Based Timer Attributes “Calendar-Based Timer Attributes” Specifying Multiple Values in Calendar Expressions “Specifying Multiple Values in Calendar Expressions” Programmatic Timers “Programmatic Timers” The @Timeout Method “The @Timeout Method” Creating Programmatic Timers “Creating Programmatic Timers” Automatic Timers “Automatic Timers” Canceling and Saving Timers “Canceling and Saving Timers” Getting Timer Information “Getting Timer Information” Transactions and Timers “Transactions and Timers” The timersession Example “The timersession Example” Running the timersession Example “Running the timersession Example” To Run the timersession Example Using NetBeans IDE “To Run the timersession Example Using NetBeans IDE” To Build, Package, and Deploy the timersession Example Using Maven “To Build, Package, and Deploy the timersession Example Using Maven” To Run the Web Client “To Run the Web Client” Handling Exceptions “Handling Exceptions” Using the Embedded Enterprise Bean Container “Using the Embedded Enterprise Bean Container” This chapter demonstrates… the paragraph beginning “This chapter demonstrates…” Overview of the Embedded Enterprise Bean Container “Overview of the Embedded Enterprise Bean Container” Developing Embeddable Enterprise Bean Applications “Developing Embeddable Enterprise Bean Applications” Required Enterprise Bean Features in the Embeddable Container “Required Enterprise Bean Features in the Embeddable Container” Running Embedded Applications “Running Embedded Applications” Creating the Enterprise Bean Container “Creating the Enterprise Bean Container” Explicitly Specifying Enterprise Bean Modules to Be Initialized “Explicitly Specifying Enterprise Bean Modules to Be Initialized” Looking Up Session Bean References “Looking Up Session Bean References” Shutting Down the Enterprise Bean Container “Shutting Down the Enterprise Bean Container” The standalone Example Application “The standalone Example Application” Overview of the standalone Example Application “Overview of the standalone Example Application” To Run the standalone Example Application Using NetBeans IDE “To Run the standalone Example Application Using NetBeans IDE” To Run the standalone Example Application Using Maven “To Run the standalone Example Application Using Maven” Using Asynchronous Method Invocation in Session Beans “Using Asynchronous Method Invocation in Session Beans” This chapter discusses… the paragraph beginning “This chapter discusses…” Asynchronous Method Invocation “Asynchronous Method Invocation” Creating an Asynchronous Business Method “Creating an Asynchronous Business Method” Calling Asynchronous Methods from Enterprise Bean Clients “Calling Asynchronous Methods from Enterprise Bean Clients” Retrieving the Final Result from an Asynchronous Method Invocation “Retrieving the Final Result from an Asynchronous Method Invocation” Cancelling an Asynchronous Method Invocation “Cancelling an Asynchronous Method Invocation” Checking the Status of an Asynchronous Method Invocation “Checking the Status of an Asynchronous Method Invocation” The async Example Application “The async Example Application” Architecture of the async-war Module “Architecture of the async-war Module” Running the async Example “Running the async Example” To Run the async Example Application Using NetBeans IDE “To Run the async Example Application Using NetBeans IDE” To Run the async Example Application Using Maven “To Run the async Example Application Using Maven” Introduction to the Java Persistence API “Introduction to the Java Persistence API” This chapter provides… the paragraph beginning “This chapter provides…” Overview of the Java Persistence API “Overview of the Java Persistence API” Entities “Entities” Requirements for Entity Classes “Requirements for Entity Classes” Persistent Fields and Properties in Entity Classes “Persistent Fields and Properties in Entity Classes” Persistent Fields “Persistent Fields” Persistent Properties “Persistent Properties” Using Collections in Entity Fields and Properties “Using Collections in Entity Fields and Properties” Validating Persistent Fields and Properties “Validating Persistent Fields and Properties” Primary Keys in Entities “Primary Keys in Entities” Multiplicity in Entity Relationships “Multiplicity in Entity Relationships” Direction in Entity Relationships “Direction in Entity Relationships” Bidirectional Relationships “Bidirectional Relationships” Unidirectional Relationships “Unidirectional Relationships” Queries and Relationship Direction “Queries and Relationship Direction” Cascade Operations and Relationships “Cascade Operations and Relationships” Cascade Operations for Entities “Cascade Operations for Entities” Orphan Removal in Relationships “Orphan Removal in Relationships” Embeddable Classes in Entities “Embeddable Classes in Entities” Entity Inheritance “Entity Inheritance” Abstract Entities “Abstract Entities” Mapped Superclasses “Mapped Superclasses” Non-Entity Superclasses “Non-Entity Superclasses” Entity Inheritance Mapping Strategies “Entity Inheritance Mapping Strategies” The Single Table per Class Hierarchy Strategy “The Single Table per Class Hierarchy Strategy” @DiscriminatorColumn Elements “@DiscriminatorColumn Elements” The Table per Concrete Class Strategy “The Table per Concrete Class Strategy” The Joined Subclass Strategy “The Joined Subclass Strategy” Managing Entities “Managing Entities” The EntityManager Interface “The EntityManager Interface” Container-Managed Entity Managers “Container-Managed Entity Managers” Application-Managed Entity Managers “Application-Managed Entity Managers” Finding Entities Using the EntityManager “Finding Entities Using the EntityManager” Managing an Entity Instance's Lifecycle “Managing an Entity Instance's Lifecycle” Persisting Entity Instances “Persisting Entity Instances” Removing Entity Instances “Removing Entity Instances” Synchronizing Entity Data to the Database “Synchronizing Entity Data to the Database” Persistence Units “Persistence Units” Querying Entities “Querying Entities” Database Schema Creation “Database Schema Creation” Configuring an Application to Create or Drop Database Tables “Configuring an Application to Create or Drop Database Tables” Schema Creation Actions “Schema Creation Actions” Settings for Create and Delete Source Properties “Settings for Create and Delete Source Properties” Loading Data Using SQL Scripts “Loading Data Using SQL Scripts” Further Information about Persistence “Further Information about Persistence” Running the Persistence Examples “Running the Persistence Examples” This chapter explains… the paragraph beginning “This chapter explains…” Overview of the Persistence Examples “Overview of the Persistence Examples” The order Application “The order Application” Database Schema for the order Application “Database Schema for the order Application” Entity Relationships in the order Application “Entity Relationships in the order Application” Self-Referential Relationships “Self-Referential Relationships” One-to-One Relationships “One-to-One Relationships” One-to-Many Relationship Mapped to Overlapping Primary and Foreign Keys “One-to-Many Relationship Mapped to Overlapping Primary and Foreign Keys” Unidirectional Relationships “Unidirectional Relationships” Primary Keys in the order Application “Primary Keys in the order Application” Generated Primary Keys “Generated Primary Keys” Compound Primary Keys “Compound Primary Keys” Entity Mapped to More Than One Database Table “Entity Mapped to More Than One Database Table” Cascade Operations in the order Application “Cascade Operations in the order Application” BLOB and CLOB Database Types in the order Application “BLOB and CLOB Database Types in the order Application” Temporal Types in the order Application “Temporal Types in the order Application” Managing the order Application's Entities “Managing the order Application's Entities” Creating Entities “Creating Entities” Finding Entities “Finding Entities” Setting Entity Relationships “Setting Entity Relationships” Using Queries “Using Queries” Removing Entities “Removing Entities” Running the order Example “Running the order Example” To Run the order Example Using NetBeans IDE “To Run the order Example Using NetBeans IDE” To Run the order Example Using Maven “To Run the order Example Using Maven” The roster Application “The roster Application” Database Schema for the roster Application “Database Schema for the roster Application” Relationships in the roster Application “Relationships in the roster Application” The Many-To-Many Relationship in roster “The Many-To-Many Relationship in roster” Entity Inheritance in the roster Application “Entity Inheritance in the roster Application” Criteria Queries in the roster Application “Criteria Queries in the roster Application” Metamodel Classes in the roster Application “Metamodel Classes in the roster Application” Obtaining a CriteriaBuilder Instance in RequestBean “Obtaining a CriteriaBuilder Instance in RequestBean” Creating Criteria Queries in RequestBean's Business Methods “Creating Criteria Queries in RequestBean's Business Methods” Automatic Table Generation in the roster Application “Automatic Table Generation in the roster Application” Running the roster Example “Running the roster Example” To Run the roster Example Using NetBeans IDE “To Run the roster Example Using NetBeans IDE” To Run the roster Example Using Maven “To Run the roster Example Using Maven” The address-book Application “The address-book Application” Bean Validation Constraints in address-book “Bean Validation Constraints in address-book” Specifying Error Messages for Constraints in address-book “Specifying Error Messages for Constraints in address-book” Validating Contact Input from a JavaServer Faces Application “Validating Contact Input from a JavaServer Faces Application” Running the address-book Example “Running the address-book Example” To Run the address-book Example Using NetBeans IDE “To Run the address-book Example Using NetBeans IDE” To Run the address-book Example Using Maven “To Run the address-book Example Using Maven” The Java Persistence Query Language “The Java Persistence Query Language” This chapter describes… the paragraph beginning “This chapter describes…” Overview of the Java Persistence Query Language “Overview of the Java Persistence Query Language” Query Language Terminology “Query Language Terminology” Creating Queries Using the Java Persistence Query Language “Creating Queries Using the Java Persistence Query Language” Named Parameters in Queries “Named Parameters in Queries” Positional Parameters in Queries “Positional Parameters in Queries” Simplified Query Language Syntax “Simplified Query Language Syntax” Select Statements “Select Statements” Update and Delete Statements “Update and Delete Statements” Example Queries “Example Queries” Simple Queries “Simple Queries” A Basic Select Query “A Basic Select Query” Eliminating Duplicate Values “Eliminating Duplicate Values” Using Named Parameters “Using Named Parameters” Queries That Navigate to Related Entities “Queries That Navigate to Related Entities” A Simple Query with Relationships “A Simple Query with Relationships” Navigating to Single-Valued Relationship Fields “Navigating to Single-Valued Relationship Fields” Traversing Relationships with an Input Parameter “Traversing Relationships with an Input Parameter” Traversing Multiple Relationships “Traversing Multiple Relationships” Navigating According to Related Fields “Navigating According to Related Fields” Queries with Other Conditional Expressions “Queries with Other Conditional Expressions” The LIKE Expression “The LIKE Expression” The IS NULL Expression “The IS NULL Expression” The IS EMPTY Expression “The IS EMPTY Expression” The BETWEEN Expression “The BETWEEN Expression” Comparison Operators “Comparison Operators” Bulk Updates and Deletes “Bulk Updates and Deletes” Update Queries “Update Queries” Delete Queries “Delete Queries” Full Query Language Syntax “Full Query Language Syntax” BNF Symbols “BNF Symbols” BNF Symbol Summary “BNF Symbol Summary” BNF Grammar of the Java Persistence Query Language “BNF Grammar of the Java Persistence Query Language” FROM Clause “FROM Clause” Identifiers “Identifiers” Identification Variables “Identification Variables” Range Variable Declarations “Range Variable Declarations” Collection Member Declarations “Collection Member Declarations” Joins “Joins” Path Expressions “Path Expressions” Examples of Path Expressions “Examples of Path Expressions” Expression Types “Expression Types” Navigation “Navigation” WHERE Clause “WHERE Clause” Literals “Literals” Input Parameters “Input Parameters” Conditional Expressions “Conditional Expressions” Operators and Their Precedence “Operators and Their Precedence” Query Language Order Precedence “Query Language Order Precedence” BETWEEN Expressions “BETWEEN Expressions” IN Expressions “IN Expressions” LIKE Expressions “LIKE Expressions” LIKE Expression Examples “LIKE Expression Examples” NULL Comparison Expressions “NULL Comparison Expressions” Empty Collection Comparison Expressions “Empty Collection Comparison Expressions” Collection Member Expressions “Collection Member Expressions” Subqueries “Subqueries” Functional Expressions “Functional Expressions” String Expressions “String Expressions” Arithmetic Expressions “Arithmetic Expressions” Date/Time Expressions “Date/Time Expressions” Case Expressions “Case Expressions” NULL Values “NULL Values” AND Operator Logic “AND Operator Logic” OR Operator Logic “OR Operator Logic” Equality Semantics “Equality Semantics” NOT Operator Logic “NOT Operator Logic” Conditional Test “Conditional Test” SELECT Clause “SELECT Clause” Return Types “Return Types” Aggregate Functions in Select Statements “Aggregate Functions in Select Statements” The DISTINCT Keyword “The DISTINCT Keyword” Constructor Expressions “Constructor Expressions” ORDER BY Clause “ORDER BY Clause” GROUP BY and HAVING Clauses “GROUP BY and HAVING Clauses” Using the Criteria API to Create Queries “Using the Criteria API to Create Queries” The Criteria API… the paragraph beginning “The Criteria API…” Overview of the Criteria and Metamodel APIs “Overview of the Criteria and Metamodel APIs” Using the Metamodel API to Model Entity Classes “Using the Metamodel API to Model Entity Classes” Using Metamodel Classes “Using Metamodel Classes” Using the Criteria API and Metamodel API to Create Basic Typesafe Queries “Using the Criteria API and Metamodel API to Create Basic Typesafe Queries” Creating a Criteria Query “Creating a Criteria Query” Query Roots “Query Roots” Querying Relationships Using Joins “Querying Relationships Using Joins” Path Navigation in Criteria Queries “Path Navigation in Criteria Queries” Restricting Criteria Query Results “Restricting Criteria Query Results” The Expression Interface Methods “The Expression Interface Methods” Conditional Methods in the Expression Interface “Conditional Methods in the Expression Interface” Expression Methods in the CriteriaBuilder Interface “Expression Methods in the CriteriaBuilder Interface” Conditional Methods in the CriteriaBuilder Interface “Conditional Methods in the CriteriaBuilder Interface” Compound Predicate Methods in the CriteriaBuilder Interface “Compound Predicate Methods in the CriteriaBuilder Interface” Managing Criteria Query Results “Managing Criteria Query Results” Ordering Results “Ordering Results” Grouping Results “Grouping Results” Executing Queries “Executing Queries” Single-Valued Query Results “Single-Valued Query Results” Collection-Valued Query Results “Collection-Valued Query Results” Creating and Using String-Based Criteria Queries “Creating and Using String-Based Criteria Queries” This chapter describes… the paragraph beginning “This chapter describes…” Overview of String-Based Criteria API Queries “Overview of String-Based Criteria API Queries” Creating String-Based Queries “Creating String-Based Queries” Executing String-Based Queries “Executing String-Based Queries” Controlling Concurrent Access to Entity Data with Locking “Controlling Concurrent Access to Entity Data with Locking” This chapter details… the paragraph beginning “This chapter details…” Overview of Entity Locking and Concurrency “Overview of Entity Locking and Concurrency” Using Optimistic Locking “Using Optimistic Locking” Lock Modes “Lock Modes” Lock Modes for Concurrent Entity Access “Lock Modes for Concurrent Entity Access” Setting the Lock Mode “Setting the Lock Mode” Using Pessimistic Locking “Using Pessimistic Locking” Pessimistic Locking Timeouts “Pessimistic Locking Timeouts” Creating Fetch Plans with Entity Graphs “Creating Fetch Plans with Entity Graphs” This chapter explains… the paragraph beginning “This chapter explains…” Overview of Using Fetch Plans and Entity Graphs “Overview of Using Fetch Plans and Entity Graphs” Entity Graph Basics “Entity Graph Basics” The Default Entity Graph “The Default Entity Graph” Using Entity Graphs in Persistence Operations “Using Entity Graphs in Persistence Operations” Fetch Graphs “Fetch Graphs” Load Graphs “Load Graphs” Using Named Entity Graphs “Using Named Entity Graphs” Applying Named Entity Graph Annotations to Entity Classes “Applying Named Entity Graph Annotations to Entity Classes” Obtaining EntityGraph Instances from Named Entity Graphs “Obtaining EntityGraph Instances from Named Entity Graphs” Using Entity Graphs in Query Operations “Using Entity Graphs in Query Operations” Using a Second-Level Cache with Java Persistence API Applications “Using a Second-Level Cache with Java Persistence API Applications” This chapter explains… the paragraph beginning “This chapter explains…” Overview of the Second-Level Cache “Overview of the Second-Level Cache” Cache Mode Settings for the Second-Level Cache “Cache Mode Settings for the Second-Level Cache” Controlling whether Entities May Be Cached “Controlling whether Entities May Be Cached” Specifying the Cache Mode Settings to Improve Performance “Specifying the Cache Mode Settings to Improve Performance” Setting the Cache Retrieval and Store Modes “Setting the Cache Retrieval and Store Modes” Cache Retrieval Mode “Cache Retrieval Mode” Cache Store Mode “Cache Store Mode” Setting the Cache Retrieval or Store Mode “Setting the Cache Retrieval or Store Mode” Controlling the Second-Level Cache Programmatically “Controlling the Second-Level Cache Programmatically” Overview of the javax.persistence.Cache Interface “Overview of the javax.persistence.Cache Interface” Checking whether an Entity's Data Is Cached “Checking whether an Entity's Data Is Cached” Removing an Entity from the Cache “Removing an Entity from the Cache” Removing All Data from the Cache “Removing All Data from the Cache” Java Message Service Concepts “Java Message Service Concepts” This chapter provides… the paragraph beginning “This chapter provides…” Overview of the JMS API “Overview of the JMS API” What Is Messaging? “What Is Messaging?” What Is the JMS API? “What Is the JMS API?” When Can You Use the JMS API? “When Can You Use the JMS API?” Messaging in an Enterprise Application “Messaging in an Enterprise Application” How Does the JMS API Work with the Java EE Platform? “How Does the JMS API Work with the Java EE Platform?” Basic JMS API Concepts “Basic JMS API Concepts” JMS API Architecture “JMS API Architecture” JMS API Architecture “JMS API Architecture” Messaging Styles “Messaging Styles” Point-to-Point Messaging Style “Point-to-Point Messaging Style” Point-to-Point Messaging “Point-to-Point Messaging” Publish/Subscribe Messaging Style “Publish/Subscribe Messaging Style” Publish/Subscribe Messaging “Publish/Subscribe Messaging” Message Consumption “Message Consumption” The JMS API Programming Model “The JMS API Programming Model” The JMS API Programming Model “The JMS API Programming Model” JMS Administered Objects “JMS Administered Objects” JMS Connection Factories “JMS Connection Factories” JMS Destinations “JMS Destinations” Connections “Connections” Sessions “Sessions” JMSContext Objects “JMSContext Objects” JMS Message Producers “JMS Message Producers” JMS Message Consumers “JMS Message Consumers” JMS Message Listeners “JMS Message Listeners” JMS Message Selectors “JMS Message Selectors” Consuming Messages from Topics “Consuming Messages from Topics” Creating Durable Subscriptions “Creating Durable Subscriptions” Nondurable Subscriptions and Consumers “Nondurable Subscriptions and Consumers” Consumers on a Durable Subscription “Consumers on a Durable Subscription” Creating Shared Subscriptions “Creating Shared Subscriptions” JMS Messages “JMS Messages” Message Headers “Message Headers” How JMS Message Header Field Values Are Set “How JMS Message Header Field Values Are Set” Message Properties “Message Properties” Message Bodies “Message Bodies” JMS Message Types “JMS Message Types” JMS Queue Browsers “JMS Queue Browsers” JMS Exception Handling “JMS Exception Handling” Using Advanced JMS Features “Using Advanced JMS Features” Controlling Message Acknowledgment “Controlling Message Acknowledgment” Specifying Options for Sending Messages “Specifying Options for Sending Messages” Specifying Message Persistence “Specifying Message Persistence” Setting Message Priority Levels “Setting Message Priority Levels” Allowing Messages to Expire “Allowing Messages to Expire” Specifying a Delivery Delay “Specifying a Delivery Delay” Using JMSProducer Method Chaining “Using JMSProducer Method Chaining” Creating Temporary Destinations “Creating Temporary Destinations” Using JMS Local Transactions “Using JMS Local Transactions” Using JMS Local Transactions “Using JMS Local Transactions” Sending Messages Asynchronously “Sending Messages Asynchronously” Using the JMS API in Java EE Applications “Using the JMS API in Java EE Applications” Overview of Using the JMS API “Overview of Using the JMS API” Creating Resources for Java EE Applications “Creating Resources for Java EE Applications” Using Resource Injection in Enterprise Bean or Web Components “Using Resource Injection in Enterprise Bean or Web Components” Injecting a ConnectionFactory, Queue, or Topic “Injecting a ConnectionFactory, Queue, or Topic” Injecting a JMSContext Object “Injecting a JMSContext Object” Using Java EE Components to Produce and to Synchronously Receive Messages “Using Java EE Components to Produce and to Synchronously Receive Messages” Managing JMS Resources in Web and EJB Components “Managing JMS Resources in Web and EJB Components” Managing Transactions in Session Beans “Managing Transactions in Session Beans” Using Message-Driven Beans to Receive Messages Asynchronously “Using Message-Driven Beans to Receive Messages Asynchronously” @ActivationConfigProperty Settings for Message-Driven Beans “@ActivationConfigProperty Settings for Message-Driven Beans” Managing JTA Transactions “Managing JTA Transactions” Further Information about JMS “Further Information about JMS” Java Message Service Examples “Java Message Service Examples” This chapter provides… the paragraph beginning “This chapter provides…” Building and Running Java Message Service Examples “Building and Running Java Message Service Examples” Overview of the JMS Examples “Overview of the JMS Examples” JMS Examples That Show the Use of Java EE Application Clients “JMS Examples That Show the Use of Java EE Application Clients” JMS Examples That Show the Use of Java EE Web and EJB Components “JMS Examples That Show the Use of Java EE Web and EJB Components” Writing Simple JMS Applications “Writing Simple JMS Applications” Overview of Writing Simple JMS Application “Overview of Writing Simple JMS Application” Starting the JMS Provider “Starting the JMS Provider” Creating JMS Administered Objects “Creating JMS Administered Objects” To Create Resources for the Simple Examples “To Create Resources for the Simple Examples” Building All the Simple Examples “Building All the Simple Examples” To Build All the Simple Examples Using NetBeans IDE “To Build All the Simple Examples Using NetBeans IDE” To Build All the Simple Examples Using Maven “To Build All the Simple Examples Using Maven” Sending Messages “Sending Messages” General Steps Performed in the Example “General Steps Performed in the Example” The Producer.java Client “The Producer.java Client” To Run the Producer Client “To Run the Producer Client” Receiving Messages Synchronously “Receiving Messages Synchronously” The SynchConsumer.java Client “The SynchConsumer.java Client” To Run the SynchConsumer and Producer Clients “To Run the SynchConsumer and Producer Clients” Using a Message Listener for Asynchronous Message Delivery “Using a Message Listener for Asynchronous Message Delivery” Writing the AsynchConsumer.java and TextListener.java Clients “Writing the AsynchConsumer.java and TextListener.java Clients” To Run the AsynchConsumer and Producer Clients “To Run the AsynchConsumer and Producer Clients” Browsing Messages on a Queue “Browsing Messages on a Queue” The MessageBrowser.java Client “The MessageBrowser.java Client” To Run the QueueBrowser Client “To Run the QueueBrowser Client” Running Multiple Consumers on the Same Destination “Running Multiple Consumers on the Same Destination” Acknowledging Messages “Acknowledging Messages” Message Acknowledgment with Synchronous and Asynchronous Consumers “Message Acknowledgment with Synchronous and Asynchronous Consumers” To Run the ClientAckConsumer Client “To Run the ClientAckConsumer Client” Writing More Advanced JMS Applications “Writing More Advanced JMS Applications” Using Durable Subscriptions “Using Durable Subscriptions” To Create Resources for the Durable Subscription Example “To Create Resources for the Durable Subscription Example” To Run the Durable Subscription Example “To Run the Durable Subscription Example” To Run the unsubscriber Example “To Run the unsubscriber Example” Using Local Transactions “Using Local Transactions” Transactions: JMS Client Example “Transactions: JMS Client Example” To Create Resources for the transactedexample Example “To Create Resources for the transactedexample Example” To Run the transactedexample Clients “To Run the transactedexample Clients” Writing High Performance and Scalable JMS Applications “Writing High Performance and Scalable JMS Applications” Using Shared Nondurable Subscriptions “Using Shared Nondurable Subscriptions” Writing the Clients for the Shared Consumer Example “Writing the Clients for the Shared Consumer Example” To Run the SharedConsumer and Producer Clients “To Run the SharedConsumer and Producer Clients” Using Shared Durable Subscriptions “Using Shared Durable Subscriptions” To Run the SharedDurableConsumer and Producer Clients “To Run the SharedDurableConsumer and Producer Clients” Sending and Receiving Messages Using a Simple Web Application “Sending and Receiving Messages Using a Simple Web Application” The websimplemessage Application “The websimplemessage Application” The websimplemessage Facelets Pages “The websimplemessage Facelets Pages” The websimplemessage Managed Beans “The websimplemessage Managed Beans” Running the websimplemessage Example “Running the websimplemessage Example” Creating Resources for the websimplemessage Example “Creating Resources for the websimplemessage Example” To Package and Deploy websimplemessage Using NetBeans IDE “To Package and Deploy websimplemessage Using NetBeans IDE” To Package and Deploy websimplemessage Using Maven “To Package and Deploy websimplemessage Using Maven” To Run the websimplemessage Example “To Run the websimplemessage Example” Receiving Messages Asynchronously Using a Message-Driven Bean “Receiving Messages Asynchronously Using a Message-Driven Bean” Overview of the simplemessage Example “Overview of the simplemessage Example” The simplemessage Application “The simplemessage Application” The simplemessage Application Client “The simplemessage Application Client” The simplemessage Message-Driven Bean Class “The simplemessage Message-Driven Bean Class” The onMessage Method “The onMessage Method” Running the simplemessage Example “Running the simplemessage Example” Creating Resources for the simplemessage Example “Creating Resources for the simplemessage Example” To Run the simplemessage Example Using NetBeans IDE “To Run the simplemessage Example Using NetBeans IDE” To Run the simplemessage Example Using Maven “To Run the simplemessage Example Using Maven” Sending Messages from a Session Bean to an MDB “Sending Messages from a Session Bean to an MDB” Writing the Application Components for the clientsessionmdb Example “Writing the Application Components for the clientsessionmdb Example” An Enterprise Bean Application: Client to Session Bean to Message-Driven Bean “An Enterprise Bean Application: Client to Session Bean to Message-Driven Bean” Coding the Application Client: MyAppClient.java “Coding the Application Client: MyAppClient.java” Coding the Publisher Session Bean “Coding the Publisher Session Bean” Coding the Message-Driven Bean: MessageBean.java “Coding the Message-Driven Bean: MessageBean.java” Running the clientsessionmdb Example “Running the clientsessionmdb Example” To Run clientsessionmdb Using NetBeans IDE “To Run clientsessionmdb Using NetBeans IDE” To Run clientsessionmdb Using Maven “To Run clientsessionmdb Using Maven” Using an Entity to Join Messages from Two MDBs “Using an Entity to Join Messages from Two MDBs” Overview of the clientmdbentity Example Application “Overview of the clientmdbentity Example Application” An Enterprise Bean Application: Client to Message-Driven Beans to Entity “An Enterprise Bean Application: Client to Message-Driven Beans to Entity” Writing the Application Components for the clientmdbentity Example “Writing the Application Components for the clientmdbentity Example” Coding the Application Client: HumanResourceClient.java “Coding the Application Client: HumanResourceClient.java” Coding the Message-Driven Beans for the clientmdbentity Example “Coding the Message-Driven Beans for the clientmdbentity Example” Coding the Entity Class for the clientmdbentity Example “Coding the Entity Class for the clientmdbentity Example” Running the clientmdbentity Example “Running the clientmdbentity Example” To Run clientmdbentity Using NetBeans IDE “To Run clientmdbentity Using NetBeans IDE” To Run clientmdbentity Using Maven “To Run clientmdbentity Using Maven” Viewing the Application Output “Viewing the Application Output” Using NetBeans IDE to Create JMS Resources “Using NetBeans IDE to Create JMS Resources” To Create JMS Resources Using NetBeans IDE “To Create JMS Resources Using NetBeans IDE” To Delete JMS Resources Using NetBeans IDE “To Delete JMS Resources Using NetBeans IDE” Introduction to Security in the Java EE Platform “Introduction to Security in the Java EE Platform” This chapter introduces… the paragraph beginning “This chapter introduces…” Overview of Java EE Security “Overview of Java EE Security” A Simple Application Security Walkthrough “A Simple Application Security Walkthrough” Step 1: Initial Request “Step 1: Initial Request” Initial Request “Initial Request” Step 2: Initial Authentication “Step 2: Initial Authentication” Initial Authentication “Initial Authentication” Step 3: URL Authorization “Step 3: URL Authorization” URL Authorization “URL Authorization” Step 4: Fulfilling the Original Request “Step 4: Fulfilling the Original Request” Fulfilling the Original Request “Fulfilling the Original Request” Step 5: Invoking Enterprise Bean Business Methods “Step 5: Invoking Enterprise Bean Business Methods” Invoking an Enterprise Bean Business Method “Invoking an Enterprise Bean Business Method” Features of a Security Mechanism “Features of a Security Mechanism” Characteristics of Application Security “Characteristics of Application Security” Security Mechanisms “Security Mechanisms” Java SE Security Mechanisms “Java SE Security Mechanisms” Java EE Security Mechanisms “Java EE Security Mechanisms” Application-Layer Security “Application-Layer Security” Transport-Layer Security “Transport-Layer Security” Message-Layer Security “Message-Layer Security” Securing Containers “Securing Containers” Using Annotations to Specify Security Information “Using Annotations to Specify Security Information” Using Deployment Descriptors for Declarative Security “Using Deployment Descriptors for Declarative Security” Using Programmatic Security “Using Programmatic Security” Securing GlassFish Server “Securing GlassFish Server” Working with Realms, Users, Groups, and Roles “Working with Realms, Users, Groups, and Roles” What Are Realms, Users, Groups, and Roles? “What Are Realms, Users, Groups, and Roles?” Mapping Roles to Users and Groups “Mapping Roles to Users and Groups” What Is a Realm? “What Is a Realm?” What Is a User? “What Is a User?” What Is a Group? “What Is a Group?” What Is a Role? “What Is a Role?” Some Other Terminology “Some Other Terminology” Managing Users and Groups in GlassFish Server “Managing Users and Groups in GlassFish Server” To Add Users to GlassFish Server “To Add Users to GlassFish Server” Setting Up Security Roles “Setting Up Security Roles” Mapping Roles to Users and Groups “Mapping Roles to Users and Groups” Establishing a Secure Connection Using SSL “Establishing a Secure Connection Using SSL” Verifying and Configuring SSL Support “Verifying and Configuring SSL Support” Further Information about Security “Further Information about Security” Getting Started Securing Web Applications “Getting Started Securing Web Applications” This chapter describes… the paragraph beginning “This chapter describes…” Overview of Web Application Security “Overview of Web Application Security” Securing Web Applications “Securing Web Applications” Overview of Securing Web Applications “Overview of Securing Web Applications” Specifying Security Constraints “Specifying Security Constraints” Specifying a Web Resource Collection “Specifying a Web Resource Collection” Specifying an Authorization Constraint “Specifying an Authorization Constraint” Specifying a Secure Connection “Specifying a Secure Connection” Specifying Security Constraints for Resources “Specifying Security Constraints for Resources” Specifying Authentication Mechanisms “Specifying Authentication Mechanisms” HTTP Basic Authentication “HTTP Basic Authentication” HTTP Basic Authentication “HTTP Basic Authentication” Form-Based Authentication “Form-Based Authentication” Form-Based Authentication “Form-Based Authentication” Digest Authentication “Digest Authentication” Specifying an Authentication Mechanism in the Deployment Descriptor “Specifying an Authentication Mechanism in the Deployment Descriptor” Declaring Security Roles “Declaring Security Roles” Using Programmatic Security with Web Applications “Using Programmatic Security with Web Applications” Authenticating Users Programmatically “Authenticating Users Programmatically” Checking Caller Identity Programmatically “Checking Caller Identity Programmatically” Example Code for Programmatic Security “Example Code for Programmatic Security” Declaring and Linking Role References “Declaring and Linking Role References” Examples: Securing Web Applications “Examples: Securing Web Applications” Overview of Examples of Securing Web Applications “Overview of Examples of Securing Web Applications” To Set Up Your System for Running the Security Examples “To Set Up Your System for Running the Security Examples” The hello2-basicauth Example: Basic Authentication with a Servlet “The hello2-basicauth Example: Basic Authentication with a Servlet” Specifying Security for Basic Authentication Using Annotations “Specifying Security for Basic Authentication Using Annotations” To Build, Package, and Deploy the hello2-basicauth Example Using NetBeans IDE “To Build, Package, and Deploy the hello2-basicauth Example Using NetBeans IDE” To Build, Package, and Deploy the hello2-basicauth Example Using Maven “To Build, Package, and Deploy the hello2-basicauth Example Using Maven” To Run the hello2-basicauth Example “To Run the hello2-basicauth Example” The hello1-formauth Example: Form-Based Authentication with a JavaServer Faces Application “The hello1-formauth Example: Form-Based Authentication with a JavaServer Faces Application” Creating the Login Form and the Error Page “Creating the Login Form and the Error Page” Specifying Security for the Form-Based Authentication Example “Specifying Security for the Form-Based Authentication Example” To Build, Package, and Deploy the hello1-formauth Example Using NetBeans IDE “To Build, Package, and Deploy the hello1-formauth Example Using NetBeans IDE” To Build, Package, and Deploy the hello1-formauth Example Using Maven and the asadmin Command “To Build, Package, and Deploy the hello1-formauth Example Using Maven and the asadmin Command” To Run the hello1-formauth Example “To Run the hello1-formauth Example” Next Steps “Next Steps” Getting Started Securing Enterprise Applications “Getting Started Securing Enterprise Applications” This chapter describes… the paragraph beginning “This chapter describes…” Basic Security Tasks for Enterprise Applications “Basic Security Tasks for Enterprise Applications” Securing Enterprise Beans “Securing Enterprise Beans” Securing an Enterprise Bean Using Declarative Security “Securing an Enterprise Bean Using Declarative Security” Specifying Authorized Users by Declaring Security Roles “Specifying Authorized Users by Declaring Security Roles” Specifying an Authentication Mechanism and Secure Connection “Specifying an Authentication Mechanism and Secure Connection” Securing an Enterprise Bean Programmatically “Securing an Enterprise Bean Programmatically” Accessing an Enterprise Bean Caller's Security Context “Accessing an Enterprise Bean Caller's Security Context” Propagating a Security Identity (Run-As) “Propagating a Security Identity (Run-As)” Security Identity Propagation “Security Identity Propagation” Configuring a Component's Propagated Security Identity “Configuring a Component's Propagated Security Identity” Trust between Containers “Trust between Containers” Deploying Secure Enterprise Beans “Deploying Secure Enterprise Beans” Examples: Securing Enterprise Beans “Examples: Securing Enterprise Beans” The cart-secure Example: Securing an Enterprise Bean with Declarative Security “The cart-secure Example: Securing an Enterprise Bean with Declarative Security” Annotating the Bean “Annotating the Bean” To Run the cart-secure Example Using NetBeans IDE “To Run the cart-secure Example Using NetBeans IDE” To Run the cart-secure Example Using Maven “To Run the cart-secure Example Using Maven” The converter-secure Example: Securing an Enterprise Bean with Programmatic Security “The converter-secure Example: Securing an Enterprise Bean with Programmatic Security” Modifying ConverterBean “Modifying ConverterBean” Modifying ConverterServlet “Modifying ConverterServlet” To Run the converter-secure Example Using NetBeans IDE “To Run the converter-secure Example Using NetBeans IDE” To Run the converter-secure Example Using Maven “To Run the converter-secure Example Using Maven” To Run the converter-secure Example “To Run the converter-secure Example” Java EE Security: Advanced Topics “Java EE Security: Advanced Topics” This chapter provides… the paragraph beginning “This chapter provides…” Working with Digital Certificates “Working with Digital Certificates” Creating a Server Certificate “Creating a Server Certificate” To Use keytool to Create a Server Certificate “To Use keytool to Create a Server Certificate” Adding Users to the Certificate Realm “Adding Users to the Certificate Realm” Using a Different Server Certificate with GlassFish Server “Using a Different Server Certificate with GlassFish Server” To Specify a Different Server Certificate “To Specify a Different Server Certificate” Authentication Mechanisms “Authentication Mechanisms” Client Authentication “Client Authentication” Mutual Authentication “Mutual Authentication” Certificate-Based Mutual Authentication “Certificate-Based Mutual Authentication” User Name/Password-Based Mutual Authentication “User Name/Password-Based Mutual Authentication” Enabling Mutual Authentication over SSL “Enabling Mutual Authentication over SSL” Creating a Client Certificate for Mutual Authentication “Creating a Client Certificate for Mutual Authentication” Using the JDBC Realm for User Authentication “Using the JDBC Realm for User Authentication” To Configure a JDBC Authentication Realm “To Configure a JDBC Authentication Realm” Securing HTTP Resources “Securing HTTP Resources” Securing Application Clients “Securing Application Clients” Using Login Modules “Using Login Modules” Using Programmatic Login “Using Programmatic Login” Securing Enterprise Information Systems Applications “Securing Enterprise Information Systems Applications” Overview of Securing Enterprise Information Systems Applications “Overview of Securing Enterprise Information Systems Applications” Container-Managed Sign-On “Container-Managed Sign-On” Component-Managed Sign-On “Component-Managed Sign-On” Configuring Resource Adapter Security “Configuring Resource Adapter Security” Mapping an Application Principal to EIS Principals “Mapping an Application Principal to EIS Principals” Configuring Security Using Deployment Descriptors “Configuring Security Using Deployment Descriptors” Specifying Security for Basic Authentication in the Deployment Descriptor “Specifying Security for Basic Authentication in the Deployment Descriptor” Specifying Non-Default Principal-to-Role Mapping in the Deployment Descriptor “Specifying Non-Default Principal-to-Role Mapping in the Deployment Descriptor” Further Information about Advanced Security Topics “Further Information about Advanced Security Topics” Transactions “Transactions” This chapter describes… the paragraph beginning “This chapter describes…” Overview of Transactions “Overview of Transactions” Transactions in Java EE Applications “Transactions in Java EE Applications” What Is a Transaction? “What Is a Transaction?” Container-Managed Transactions “Container-Managed Transactions” Transaction Attributes “Transaction Attributes” Transaction Scope “Transaction Scope” Required Attribute “Required Attribute” RequiresNew Attribute “RequiresNew Attribute” Mandatory Attribute “Mandatory Attribute” NotSupported Attribute “NotSupported Attribute” Supports Attribute “Supports Attribute” Never Attribute “Never Attribute” Summary of Transaction Attributes “Summary of Transaction Attributes” Transaction Attributes and Scope “Transaction Attributes and Scope” Setting Transaction Attributes “Setting Transaction Attributes” TransactionAttributeType Constants “TransactionAttributeType Constants” Rolling Back a Container-Managed Transaction “Rolling Back a Container-Managed Transaction” Synchronizing a Session Bean's Instance Variables “Synchronizing a Session Bean's Instance Variables” Methods Not Allowed in Container-Managed Transactions “Methods Not Allowed in Container-Managed Transactions” Bean-Managed Transactions “Bean-Managed Transactions” JTA Transactions “JTA Transactions” Returning without Committing “Returning without Committing” Methods Not Allowed in Bean-Managed Transactions “Methods Not Allowed in Bean-Managed Transactions” Transaction Timeouts “Transaction Timeouts” To Set a Transaction Timeout “To Set a Transaction Timeout” Updating Multiple Databases “Updating Multiple Databases” Updating Multiple Databases “Updating Multiple Databases” Updating Multiple Databases Across Java EE Servers “Updating Multiple Databases Across Java EE Servers” Transactions in Web Components “Transactions in Web Components” Further Information about Transactions “Further Information about Transactions” Resource Adapters and Contracts “Resource Adapters and Contracts” This chapter examines… the paragraph beginning “This chapter examines…” What Is a Resource Adapter? “What Is a Resource Adapter?” Resource Adapters “Resource Adapters” Management Contracts “Management Contracts” Lifecycle Management “Lifecycle Management” Work Management Contract “Work Management Contract” Generic Work Context Contract “Generic Work Context Contract” Outbound and Inbound Contracts “Outbound and Inbound Contracts” Metadata Annotations “Metadata Annotations” Common Client Interface “Common Client Interface” Using Resource Adapters with Contexts and Dependency Injection for Java EE (CDI) “Using Resource Adapters with Contexts and Dependency Injection for Java EE (CDI)” Further Information about Resource Adapters “Further Information about Resource Adapters” The Resource Adapter Examples “The Resource Adapter Examples” This chapter describes… the paragraph beginning “This chapter describes…” Overview of the Resource Adapter Examples “Overview of the Resource Adapter Examples” The trading Example “The trading Example” The trading Example “The trading Example” Using the Outbound Resource Adapter “Using the Outbound Resource Adapter” Classes and Interfaces in the javaeetutorial.trading.rar.api Package “Classes and Interfaces in the javaeetutorial.trading.rar.api Package” Implementing the Outbound Resource Adapter “Implementing the Outbound Resource Adapter” Architecture of the trading Example “Architecture of the trading Example” Interfaces Implemented in the trading-rar Module “Interfaces Implemented in the trading-rar Module” Running the trading Example “Running the trading Example” To Run the trading Example Using NetBeans IDE “To Run the trading Example Using NetBeans IDE” To Run the trading Example Using Maven “To Run the trading Example Using Maven” The traffic Example “The traffic Example” The traffic Example “The traffic Example” Using the Inbound Resource Adapter “Using the Inbound Resource Adapter” Implementing the Inbound Resource Adapter “Implementing the Inbound Resource Adapter” Architecture of the traffic Example “Architecture of the traffic Example” Interfaces Implemented in the traffic-rar Module “Interfaces Implemented in the traffic-rar Module” Running the traffic Example “Running the traffic Example” To Run the traffic Example Using NetBeans IDE “To Run the traffic Example Using NetBeans IDE” To Run the traffic Example Using Maven “To Run the traffic Example Using Maven” Using Java EE Interceptors “Using Java EE Interceptors” This chapter discusses… the paragraph beginning “This chapter discusses…” Overview of Interceptors “Overview of Interceptors” Interceptor Metadata Annotations “Interceptor Metadata Annotations” Interceptor Classes “Interceptor Classes” Interceptor Lifecycle “Interceptor Lifecycle” Interceptors and CDI “Interceptors and CDI” Using Interceptors “Using Interceptors” Intercepting Method Invocations “Intercepting Method Invocations” Using Multiple Method Interceptors “Using Multiple Method Interceptors” Accessing Target Method Parameters from an Interceptor Class “Accessing Target Method Parameters from an Interceptor Class” Intercepting Lifecycle Callback Events “Intercepting Lifecycle Callback Events” Using AroundConstruct Interceptor Methods “Using AroundConstruct Interceptor Methods” Using Multiple Lifecycle Callback Interceptors “Using Multiple Lifecycle Callback Interceptors” Intercepting Timeout Events “Intercepting Timeout Events” Using Multiple Timeout Interceptors “Using Multiple Timeout Interceptors” Binding Interceptors to Components “Binding Interceptors to Components” Declaring the Interceptor Bindings on an Interceptor Class “Declaring the Interceptor Bindings on an Interceptor Class” Binding a Component to an Interceptor “Binding a Component to an Interceptor” Ordering Interceptors “Ordering Interceptors” Interceptor Priority Constants “Interceptor Priority Constants” The interceptor Example Application “The interceptor Example Application” Running the interceptor Example “Running the interceptor Example” To Run the interceptor Example Using NetBeans IDE “To Run the interceptor Example Using NetBeans IDE” To Run the interceptor Example Using Maven “To Run the interceptor Example Using Maven” Batch Processing “Batch Processing” This chapter describes… the paragraph beginning “This chapter describes…” Introduction to Batch Processing “Introduction to Batch Processing” Steps in Batch Jobs “Steps in Batch Jobs” Chunk Steps in a Batch Job “Chunk Steps in a Batch Job” Parallel Processing “Parallel Processing” Status and Decision Elements “Status and Decision Elements” Steps and Decision Elements in a Job “Steps and Decision Elements in a Job” Batch Framework Functionality “Batch Framework Functionality” Batch Processing in Java EE “Batch Processing in Java EE” The Batch Processing Framework “The Batch Processing Framework” Creating Batch Applications “Creating Batch Applications” Elements of a Batch Job “Elements of a Batch Job” Properties and Parameters “Properties and Parameters” Job Instances and Job Executions “Job Instances and Job Executions” Batch and Exit Status “Batch and Exit Status” Batch Status Values “Batch Status Values” Simple Use Case “Simple Use Case” Chunk Step “Chunk Step” Task Step “Task Step” Using the Job Specification Language “Using the Job Specification Language” The job Element “The job Element” The step Element “The step Element” The chunk Element “The chunk Element” Attributes of the chunk Element “Attributes of the chunk Element” The batchlet Element “The batchlet Element” The partition Element “The partition Element” The flow Element “The flow Element” The split Element “The split Element” The decision Element “The decision Element” Creating Batch Artifacts “Creating Batch Artifacts” Batch Artifact Interfaces “Batch Artifact Interfaces” Main Batch Artifact Interfaces “Main Batch Artifact Interfaces” Partition Batch Artifact Interfaces “Partition Batch Artifact Interfaces” Listener Batch Artifact Interfaces “Listener Batch Artifact Interfaces” Dependency Injection in Batch Artifacts “Dependency Injection in Batch Artifacts” Using the Context Objects from the Batch Runtime “Using the Context Objects from the Batch Runtime” Submitting Jobs to the Batch Runtime “Submitting Jobs to the Batch Runtime” Starting a Job “Starting a Job” Checking the Status of a Job “Checking the Status of a Job” Invoking the Batch Runtime in Your Application “Invoking the Batch Runtime in Your Application” Packaging Batch Applications “Packaging Batch Applications” The webserverlog Example Application “The webserverlog Example Application” Architecture of the webserverlog Example Application “Architecture of the webserverlog Example Application” The Job Definition File “The Job Definition File” The LogLine and LogFilteredLine Items “The LogLine and LogFilteredLine Items” The Chunk Step Batch Artifacts “The Chunk Step Batch Artifacts” The Listener Batch Artifacts “The Listener Batch Artifacts” The Task Step Batch Artifact “The Task Step Batch Artifact” The JavaServer Faces Pages “The JavaServer Faces Pages” The Managed Bean “The Managed Bean” Running the webserverlog Example Application “Running the webserverlog Example Application” To Run the webserverlog Example Application Using NetBeans IDE “To Run the webserverlog Example Application Using NetBeans IDE” To Run the webserverlog Example Application Using Maven “To Run the webserverlog Example Application Using Maven” The phonebilling Example Application “The phonebilling Example Application” Architecture of the phonebilling Example Application “Architecture of the phonebilling Example Application” The Job Definition File “The Job Definition File” The CallRecord and PhoneBill Entities “The CallRecord and PhoneBill Entities” The Call Records Chunk Step “The Call Records Chunk Step” The Phone Billing Chunk Step “The Phone Billing Chunk Step” The JavaServer Faces Pages “The JavaServer Faces Pages” The Managed Bean “The Managed Bean” Running the phonebilling Example Application “Running the phonebilling Example Application” To Run the phonebilling Example Application Using NetBeans IDE “To Run the phonebilling Example Application Using NetBeans IDE” To Run the phonebilling Example Application Using Maven “To Run the phonebilling Example Application Using Maven” Further Information about Batch Processing “Further Information about Batch Processing” Concurrency Utilities for Java EE “Concurrency Utilities for Java EE” This chapter describes… the paragraph beginning “This chapter describes…” Concurrency Basics “Concurrency Basics” Threads and Processes “Threads and Processes” Main Components of the Concurrency Utilities “Main Components of the Concurrency Utilities” Concurrency and Transactions “Concurrency and Transactions” Concurrency and Security “Concurrency and Security” The jobs Concurrency Example “The jobs Concurrency Example” Running the jobs Example “Running the jobs Example” To Configure GlassFish Server for the Basic Concurrency Example “To Configure GlassFish Server for the Basic Concurrency Example” To Build, Package, and Deploy the jobs Example Using NetBeans IDE “To Build, Package, and Deploy the jobs Example Using NetBeans IDE” To Build, Package, and Deploy the jobs Example Using Maven “To Build, Package, and Deploy the jobs Example Using Maven” To Run the jobs Example and Submit Jobs with Low Priority “To Run the jobs Example and Submit Jobs with Low Priority” To Run the jobs Example and Submit Jobs with High Priority “To Run the jobs Example and Submit Jobs with High Priority” The taskcreator Concurrency Example “The taskcreator Concurrency Example” Architecture of the taskcreator Example “Architecture of the taskcreator Example” Running the taskcreator Example “Running the taskcreator Example” To Build, Package, and Deploy the taskcreator Example Using NetBeans IDE “To Build, Package, and Deploy the taskcreator Example Using NetBeans IDE” To Build, Package, and Deploy the taskcreator Example Using Maven “To Build, Package, and Deploy the taskcreator Example Using Maven” To Run the taskcreator Example “To Run the taskcreator Example” Further Information about the Concurrency Utilities “Further Information about the Concurrency Utilities” Duke's Bookstore Case Study Example “Duke's Bookstore Case Study Example” The Duke's Bookstore… the paragraph beginning “The Duke's Bookstore…” Design and Architecture of Duke's Bookstore “Design and Architecture of Duke's Bookstore” The Duke's Bookstore Interface “The Duke's Bookstore Interface” The Book Java Persistence API Entity “The Book Java Persistence API Entity” Enterprise Beans Used in Duke's Bookstore “Enterprise Beans Used in Duke's Bookstore” Facelets Pages and Managed Beans Used in Duke's Bookstore “Facelets Pages and Managed Beans Used in Duke's Bookstore” Custom Components and Other Custom Objects Used in Duke's Bookstore “Custom Components and Other Custom Objects Used in Duke's Bookstore” Properties Files Used in Duke's Bookstore “Properties Files Used in Duke's Bookstore” Deployment Descriptors Used in Duke's Bookstore “Deployment Descriptors Used in Duke's Bookstore” Running the Duke's Bookstore Case Study Application “Running the Duke's Bookstore Case Study Application” To Build and Deploy Duke's Bookstore Using NetBeans IDE “To Build and Deploy Duke's Bookstore Using NetBeans IDE” To Build and Deploy Duke's Bookstore Using Maven “To Build and Deploy Duke's Bookstore Using Maven” To Run Duke's Bookstore “To Run Duke's Bookstore” Duke's Tutoring Case Study Example “Duke's Tutoring Case Study Example” The Duke's Tutoring… the paragraph beginning “The Duke's Tutoring…” Design and Architecture of Duke's Tutoring “Design and Architecture of Duke's Tutoring” Architecture of the Duke's Tutoring Example Application “Architecture of the Duke's Tutoring Example Application” Main Interface “Main Interface” Java Persistence API Entities Used in the Main Interface “Java Persistence API Entities Used in the Main Interface” Enterprise Beans Used in the Main Interface “Enterprise Beans Used in the Main Interface” WebSocket Endpoint Used in the Main Interface “WebSocket Endpoint Used in the Main Interface” Facelets Files Used in the Main Interface “Facelets Files Used in the Main Interface” Helper Classes Used in the Main Interface “Helper Classes Used in the Main Interface” Properties Files “Properties Files” Deployment Descriptors Used in Duke's Tutoring “Deployment Descriptors Used in Duke's Tutoring” Administration Interface “Administration Interface” Enterprise Beans Used in the Administration Interface “Enterprise Beans Used in the Administration Interface” Facelets Files Used in the Administration Interface “Facelets Files Used in the Administration Interface” CDI Managed Beans Used in the Administration Interface “CDI Managed Beans Used in the Administration Interface” Helper Classes Used in the Administration Interface “Helper Classes Used in the Administration Interface” Running the Duke's Tutoring Case Study Application “Running the Duke's Tutoring Case Study Application” Running Duke's Tutoring “Running Duke's Tutoring” To Build and Deploy Duke's Tutoring Using NetBeans IDE “To Build and Deploy Duke's Tutoring Using NetBeans IDE” Before You Begin “Before You Begin” To Build and Deploy Duke's Tutoring Using Maven “To Build and Deploy Duke's Tutoring Using Maven” Using Duke's Tutoring “Using Duke's Tutoring” Duke's Forest Case Study Example “Duke's Forest Case Study Example” This chapter describes… the paragraph beginning “This chapter describes…” Overview of the Duke's Forest Case Study Example “Overview of the Duke's Forest Case Study Example” Design and Architecture of Duke's Forest “Design and Architecture of Duke's Forest” Architecture of the Duke's Forest Example Application “Architecture of the Duke's Forest Example Application” Interactions between Duke's Forest Components “Interactions between Duke's Forest Components” The events Project “The events Project” The entities Project “The entities Project” Duke's Forest Database Tables and Their Relationships “Duke's Forest Database Tables and Their Relationships” The dukes-payment Project “The dukes-payment Project” The dukes-resources Project “The dukes-resources Project” The Duke's Store Project “The Duke's Store Project” Enterprise Beans Used in Duke's Store “Enterprise Beans Used in Duke's Store” Facelets Files Used in the Main Interface of Duke's Store “Facelets Files Used in the Main Interface of Duke's Store” Facelets Files Used in the Administration Interface of Duke's Store “Facelets Files Used in the Administration Interface of Duke's Store” Managed Beans Used in Duke's Store “Managed Beans Used in Duke's Store” Helper Classes Used in Duke's Store “Helper Classes Used in Duke's Store” Qualifiers Used in Duke's Store “Qualifiers Used in Duke's Store” Event Handlers Used in Duke's Store “Event Handlers Used in Duke's Store” Deployment Descriptors Used in Duke's Store “Deployment Descriptors Used in Duke's Store” The Duke's Shipment Project “The Duke's Shipment Project” Enterprise Beans Used in Duke's Shipment “Enterprise Beans Used in Duke's Shipment” Facelets Files Used in Duke's Shipment “Facelets Files Used in Duke's Shipment” Managed Beans Used in Duke's Shipment “Managed Beans Used in Duke's Shipment” Helper Class Used in Duke's Shipment “Helper Class Used in Duke's Shipment” Qualifier Used in Duke's Shipment “Qualifier Used in Duke's Shipment” Deployment Descriptors Used in Duke's Shipment “Deployment Descriptors Used in Duke's Shipment” Building and Deploying the Duke's Forest Case Study Application “Building and Deploying the Duke's Forest Case Study Application” To Build and Deploy the Duke's Forest Application Using NetBeans IDE “To Build and Deploy the Duke's Forest Application Using NetBeans IDE” To Build and Deploy the Duke's Forest Application Using Maven “To Build and Deploy the Duke's Forest Application Using Maven” Running the Duke's Forest Application “Running the Duke's Forest Application” To Register as a Duke's Store Customer “To Register as a Duke's Store Customer” To Purchase Products “To Purchase Products” To Approve Shipment of a Product “To Approve Shipment of a Product” To Create a New Product “To Create a New Product” + + + + + +
    +

    Java Platform, Enterprise Edition The Java EE Tutorial Java Platform, Enterprise Edition Java Platform, Enterprise Edition The Java EE Tutorial Java Platform, Enterprise Edition Preface “Preface” Audience “Audience” Documentation Accessibility “Documentation Accessibility” Access to Oracle Support “Access to Oracle Support” Before You Read This Book “Before You Read This Book” Related Documentation “Related Documentation” Conventions “Conventions” Default Paths and File Names “Default Paths and File Names” Overview “Overview” This chapter introduces… the paragraph beginning “This chapter introduces…” Introduction to Java EE “Introduction to Java EE” Java EE 7 Platform Highlights “Java EE 7 Platform Highlights” Java EE Application Model “Java EE Application Model” Distributed Multitiered Applications “Distributed Multitiered Applications” Multitiered Applications “Multitiered Applications” Security “Security” Java EE Components “Java EE Components” Java EE Clients “Java EE Clients” Web Clients “Web Clients” Application Clients “Application Clients” Applets “Applets” The JavaBeans Component Architecture “The JavaBeans Component Architecture” Java EE Server Communications “Java EE Server Communications” Server Communication “Server Communication” Web Components “Web Components” Web Tier and Java EE Applications “Web Tier and Java EE Applications” Business Components “Business Components” Business and EIS Tiers “Business and EIS Tiers” Enterprise Information System Tier “Enterprise Information System Tier” Java EE Containers “Java EE Containers” Container Services “Container Services” Container Types “Container Types” Java EE Server and Containers “Java EE Server and Containers” Web Services Support “Web Services Support” XML “XML” SOAP Transport Protocol “SOAP Transport Protocol” WSDL Standard Format “WSDL Standard Format” Java EE Application Assembly and Deployment “Java EE Application Assembly and Deployment” Java EE 7 APIs “Java EE 7 APIs” Java EE Containers “Java EE Containers” Java EE APIs in the Web Container “Java EE APIs in the Web Container” Java EE APIs in the EJB Container “Java EE APIs in the EJB Container” Java EE APIs in the Application Client Container “Java EE APIs in the Application Client Container” Enterprise JavaBeans Technology “Enterprise JavaBeans Technology” Java Servlet Technology “Java Servlet Technology” JavaServer Faces Technology “JavaServer Faces Technology” JavaServer Pages Technology “JavaServer Pages Technology” JavaServer Pages Standard Tag Library “JavaServer Pages Standard Tag Library” Java Persistence API “Java Persistence API” Java Transaction API “Java Transaction API” Java API for RESTful Web Services “Java API for RESTful Web Services” Managed Beans “Managed Beans” Contexts and Dependency Injection for Java EE “Contexts and Dependency Injection for Java EE” Dependency Injection for Java “Dependency Injection for Java” Bean Validation “Bean Validation” Java Message Service API “Java Message Service API” Java EE Connector Architecture “Java EE Connector Architecture” JavaMail API “JavaMail API” Java Authorization Contract for Containers “Java Authorization Contract for Containers” Java Authentication Service Provider Interface for Containers “Java Authentication Service Provider Interface for Containers” Java API for WebSocket “Java API for WebSocket” Java API for JSON Processing “Java API for JSON Processing” Concurrency Utilities for Java EE “Concurrency Utilities for Java EE” Batch Applications for the Java Platform “Batch Applications for the Java Platform” Java EE 7 APIs in the Java Platform, Standard Edition 7 “Java EE 7 APIs in the Java Platform, Standard Edition 7” Java Database Connectivity API “Java Database Connectivity API” Java Naming and Directory Interface API “Java Naming and Directory Interface API” JavaBeans Activation Framework “JavaBeans Activation Framework” Java API for XML Processing “Java API for XML Processing” Java Architecture for XML Binding “Java Architecture for XML Binding” Java API for XML Web Services “Java API for XML Web Services” SOAP with Attachments API for Java “SOAP with Attachments API for Java” Java Authentication and Authorization Service “Java Authentication and Authorization Service” Common Annotations for the Java Platform “Common Annotations for the Java Platform” GlassFish Server Tools “GlassFish Server Tools” GlassFish Server Tools “GlassFish Server Tools” Using the Tutorial Examples “Using the Tutorial Examples” This chapter tells… the paragraph beginning “This chapter tells…” Required Software “Required Software” Java Platform, Standard Edition “Java Platform, Standard Edition” Java EE 7 Software Development Kit “Java EE 7 Software Development Kit” SDK Installation Tips “SDK Installation Tips” Java EE 7 Tutorial Component “Java EE 7 Tutorial Component” NetBeans IDE “NetBeans IDE” To Install NetBeans IDE without GlassFish Server “To Install NetBeans IDE without GlassFish Server” To Add GlassFish Server as a Server Using NetBeans IDE “To Add GlassFish Server as a Server Using NetBeans IDE” Apache Maven “Apache Maven” Starting and Stopping GlassFish Server “Starting and Stopping GlassFish Server” To Start GlassFish Server Using NetBeans IDE “To Start GlassFish Server Using NetBeans IDE” To Stop GlassFish Server Using NetBeans IDE “To Stop GlassFish Server Using NetBeans IDE” To Start GlassFish Server Using the Command Line “To Start GlassFish Server Using the Command Line” To Stop GlassFish Server Using the Command Line “To Stop GlassFish Server Using the Command Line” Starting the Administration Console “Starting the Administration Console” To Start the Administration Console Using NetBeans IDE “To Start the Administration Console Using NetBeans IDE” Starting and Stopping the Java DB Server “Starting and Stopping the Java DB Server” To Start the Database Server Using NetBeans IDE “To Start the Database Server Using NetBeans IDE” Next Steps “Next Steps” Building the Examples “Building the Examples” Tutorial Example Directory Structure “Tutorial Example Directory Structure” Java EE 7 Maven Archetypes in the Tutorial “Java EE 7 Maven Archetypes in the Tutorial” Installing the Tutorial Archetypes “Installing the Tutorial Archetypes” Installing the Tutorial Archetypes Using NetBeans IDE “Installing the Tutorial Archetypes Using NetBeans IDE” Installing the Tutorial Archetypes Using Maven “Installing the Tutorial Archetypes Using Maven” Getting the Latest Updates to the Tutorial “Getting the Latest Updates to the Tutorial” To Update the Tutorial Using NetBeans IDE “To Update the Tutorial Using NetBeans IDE” To Update the Tutorial Using the Command Line “To Update the Tutorial Using the Command Line” Debugging Java EE Applications “Debugging Java EE Applications” Using the Server Log “Using the Server Log” To Use the Administration Console Log Viewer “To Use the Administration Console Log Viewer” Using a Debugger “Using a Debugger” To Debug an Application Using a Debugger “To Debug an Application Using a Debugger” Resource Creation “Resource Creation” A resource is… the paragraph beginning “A resource is…” Resources and JNDI Naming “Resources and JNDI Naming” DataSource Objects and Connection Pools “DataSource Objects and Connection Pools” Creating Resources Administratively “Creating Resources Administratively” Injection “Injection” This chapter provides… the paragraph beginning “This chapter provides…” Resource Injection “Resource Injection” Dependency Injection “Dependency Injection” The Main Differences between Resource Injection and Dependency Injection “The Main Differences between Resource Injection and Dependency Injection” Differences between Resource Injection and Dependency Injection “Differences between Resource Injection and Dependency Injection” Packaging “Packaging” This chapter describes… the paragraph beginning “This chapter describes…” Packaging Applications “Packaging Applications” EAR File Structure “EAR File Structure” Packaging Enterprise Beans “Packaging Enterprise Beans” Packaging Enterprise Beans in EJB JAR Modules “Packaging Enterprise Beans in EJB JAR Modules” Structure of an Enterprise Bean JAR “Structure of an Enterprise Bean JAR” Packaging Enterprise Beans in WAR Modules “Packaging Enterprise Beans in WAR Modules” Packaging Web Archives “Packaging Web Archives” Web Module Structure “Web Module Structure” Packaging Resource Adapter Archives “Packaging Resource Adapter Archives” Getting Started with Web Applications “Getting Started with Web Applications” This chapter introduces… the paragraph beginning “This chapter introduces…” Web Applications “Web Applications” Java Web Application Request Handling “Java Web Application Request Handling” Web Application Lifecycle “Web Application Lifecycle” A Web Module That Uses JavaServer Faces Technology: The hello1 Example “A Web Module That Uses JavaServer Faces Technology: The hello1 Example” To View the hello1 Web Module Using NetBeans IDE “To View the hello1 Web Module Using NetBeans IDE” Introduction to Scopes “Introduction to Scopes” Packaging and Deploying the hello1 Web Module “Packaging and Deploying the hello1 Web Module” To Build and Package the hello1 Web Module Using NetBeans IDE “To Build and Package the hello1 Web Module Using NetBeans IDE” To Build and Package the hello1 Web Module Using Maven “To Build and Package the hello1 Web Module Using Maven” Viewing Deployed Web Modules “Viewing Deployed Web Modules” To View Deployed Web Modules Using the Administration Console “To View Deployed Web Modules Using the Administration Console” To View Deployed Web Modules Using the asadmin Command “To View Deployed Web Modules Using the asadmin Command” To View Deployed Web Modules Using NetBeans IDE “To View Deployed Web Modules Using NetBeans IDE” Running the Deployed hello1 Web Module “Running the Deployed hello1 Web Module” Dynamic Reloading of Deployed Modules “Dynamic Reloading of Deployed Modules” Undeploying the hello1 Web Module “Undeploying the hello1 Web Module” To Undeploy the hello1 Web Module Using NetBeans IDE “To Undeploy the hello1 Web Module Using NetBeans IDE” To Undeploy the hello1 Web Module Using Maven “To Undeploy the hello1 Web Module Using Maven” A Web Module That Uses Java Servlet Technology: The hello2 Example “A Web Module That Uses Java Servlet Technology: The hello2 Example” Mapping URLs to Web Components “Mapping URLs to Web Components” Examining the hello2 Web Module “Examining the hello2 Web Module” To View the hello2 Web Module Using NetBeans IDE “To View the hello2 Web Module Using NetBeans IDE” Running the hello2 Example “Running the hello2 Example” To Run the hello2 Example Using NetBeans IDE “To Run the hello2 Example Using NetBeans IDE” To Run the hello2 Example Using Maven “To Run the hello2 Example Using Maven” Configuring Web Applications “Configuring Web Applications” Setting Context Parameters “Setting Context Parameters” To Add a Context Parameter Using NetBeans IDE “To Add a Context Parameter Using NetBeans IDE” To Create a web.xml File Using NetBeans IDE “To Create a web.xml File Using NetBeans IDE” Declaring Welcome Files “Declaring Welcome Files” Mapping Errors to Error Screens “Mapping Errors to Error Screens” To Set Up Error Mapping Using NetBeans IDE “To Set Up Error Mapping Using NetBeans IDE” Declaring Resource References “Declaring Resource References” Web Components That Accept Resource Injections “Web Components That Accept Resource Injections” Declaring a Reference to a Resource “Declaring a Reference to a Resource” Declaring a Reference to a Web Service “Declaring a Reference to a Web Service” Further Information about Web Applications “Further Information about Web Applications” JavaServer Faces Technology “JavaServer Faces Technology” JavaServer Faces technology… the paragraph beginning “JavaServer Faces technology…” Introduction to JavaServer Faces Technology “Introduction to JavaServer Faces Technology” What Is a JavaServer Faces Application? “What Is a JavaServer Faces Application?” Responding to a Client Request for a JavaServer Faces Page “Responding to a Client Request for a JavaServer Faces Page” JavaServer Faces Technology Benefits “JavaServer Faces Technology Benefits” Java Web Application Technologies “Java Web Application Technologies” A Simple JavaServer Faces Application “A Simple JavaServer Faces Application” User Interface Component Model “User Interface Component Model” User Interface Component Classes “User Interface Component Classes” Component Rendering Model “Component Rendering Model” Conversion Model “Conversion Model” Event and Listener Model “Event and Listener Model” Validation Model “Validation Model” Navigation Model “Navigation Model” The Lifecycle of a JavaServer Faces Application “The Lifecycle of a JavaServer Faces Application” Overview of the JavaServer Faces Lifecycle “Overview of the JavaServer Faces Lifecycle” JavaServer Faces Standard Request-Response Lifecycle “JavaServer Faces Standard Request-Response Lifecycle” Restore View Phase “Restore View Phase” Apply Request Values Phase “Apply Request Values Phase” Process Validations Phase “Process Validations Phase” Update Model Values Phase “Update Model Values Phase” Invoke Application Phase “Invoke Application Phase” Render Response Phase “Render Response Phase” Partial Processing and Partial Rendering “Partial Processing and Partial Rendering” Further Information about JavaServer Faces Technology “Further Information about JavaServer Faces Technology” Introduction to Facelets “Introduction to Facelets” The term Facelets… the paragraph beginning “The term Facelets…” What Is Facelets? “What Is Facelets?” Tag Libraries Supported by Facelets “Tag Libraries Supported by Facelets” The Lifecycle of a Facelets Application “The Lifecycle of a Facelets Application” Developing a Simple Facelets Application: The guessnumber-jsf Example Application “Developing a Simple Facelets Application: The guessnumber-jsf Example Application” Creating a Facelets Application “Creating a Facelets Application” Developing a Managed Bean “Developing a Managed Bean” Creating Facelets Views “Creating Facelets Views” Configuring the Application “Configuring the Application” Running the guessnumber-jsf Facelets Example “Running the guessnumber-jsf Facelets Example” To Build, Package, and Deploy the guessnumber-jsf Example Using NetBeans IDE “To Build, Package, and Deploy the guessnumber-jsf Example Using NetBeans IDE” To Build, Package, and Deploy the guessnumber-jsf Example Using Maven “To Build, Package, and Deploy the guessnumber-jsf Example Using Maven” To Run the guessnumber-jsf Example “To Run the guessnumber-jsf Example” Using Facelets Templates “Using Facelets Templates” Facelets Templating Tags “Facelets Templating Tags” Composite Components “Composite Components” Composite Component Tags “Composite Component Tags” Web Resources “Web Resources” Relocatable Resources “Relocatable Resources” Resource Library Contracts “Resource Library Contracts” The hello1-rlc Example Application “The hello1-rlc Example Application” Configuring the hello1-rlc Example “Configuring the hello1-rlc Example” The Facelets Pages for the hello1-rlc Example “The Facelets Pages for the hello1-rlc Example” To Build, Package, and Deploy the hello1-rlc Example Using NetBeans IDE “To Build, Package, and Deploy the hello1-rlc Example Using NetBeans IDE” To Build, Package, and Deploy the hello1-rlc Example Using Maven “To Build, Package, and Deploy the hello1-rlc Example Using Maven” To Run the hello1-rlc Example “To Run the hello1-rlc Example” HTML5-Friendly Markup “HTML5-Friendly Markup” Using Pass-Through Elements “Using Pass-Through Elements” How Facelets Renders HTML5 Elements “How Facelets Renders HTML5 Elements” Using Pass-Through Attributes “Using Pass-Through Attributes” The reservation Example Application “The reservation Example Application” The Facelets Pages for the reservation Application “The Facelets Pages for the reservation Application” The Managed Bean for the reservation Application “The Managed Bean for the reservation Application” To Build, Package, and Deploy the reservation Example Using NetBeans IDE “To Build, Package, and Deploy the reservation Example Using NetBeans IDE” To Build, Package, and Deploy the reservation Example Using Maven “To Build, Package, and Deploy the reservation Example Using Maven” To Run the reservation Example “To Run the reservation Example” Expression Language “Expression Language” This chapter introduces… the paragraph beginning “This chapter introduces…” Overview of the EL “Overview of the EL” Immediate and Deferred Evaluation Syntax “Immediate and Deferred Evaluation Syntax” Immediate Evaluation “Immediate Evaluation” Deferred Evaluation “Deferred Evaluation” Value and Method Expressions “Value and Method Expressions” Value Expressions “Value Expressions” Referencing Objects “Referencing Objects” Referencing Object Properties or Collection Elements “Referencing Object Properties or Collection Elements” Referencing Literals “Referencing Literals” Parameterized Method Calls “Parameterized Method Calls” Where Value Expressions Can Be Used “Where Value Expressions Can Be Used” Method Expressions “Method Expressions” Lambda Expressions “Lambda Expressions” Operations on Collection Objects “Operations on Collection Objects” Operators “Operators” Reserved Words “Reserved Words” Examples of EL Expressions “Examples of EL Expressions” Example Expressions “Example Expressions” Further Information about the Expression Language “Further Information about the Expression Language” Using JavaServer Faces Technology in Web Pages “Using JavaServer Faces Technology in Web Pages” Web pages (Facelets… the paragraph beginning “Web pages (Facelets…” Setting Up a Page “Setting Up a Page” Adding Components to a Page Using HTML Tag Library Tags “Adding Components to a Page Using HTML Tag Library Tags” The Component Tags “The Component Tags” Common Component Tag Attributes “Common Component Tag Attributes” Common Component Tag Attributes “Common Component Tag Attributes” The id Attribute “The id Attribute” The immediate Attribute “The immediate Attribute” The rendered Attribute “The rendered Attribute” The style and styleClass Attributes “The style and styleClass Attributes” The value and binding Attributes “The value and binding Attributes” Adding HTML Head and Body Tags “Adding HTML Head and Body Tags” Adding a Form Component “Adding a Form Component” A Typical Form “A Typical Form” Using Text Components “Using Text Components” Example Text Components “Example Text Components” Input Tags “Input Tags” Input Tag Attributes “Input Tag Attributes” Output Tags “Output Tags” Rendering a Field with the h:inputText Tag “Rendering a Field with the h:inputText Tag” Rendering a Password Field with the h:inputSecret Tag “Rendering a Password Field with the h:inputSecret Tag” Rendering a Label with the h:outputLabel Tag “Rendering a Label with the h:outputLabel Tag” Rendering a Link with the h:outputLink Tag “Rendering a Link with the h:outputLink Tag” Displaying a Formatted Message with the h:outputFormat Tag “Displaying a Formatted Message with the h:outputFormat Tag” Using Command Component Tags for Performing Actions and Navigation “Using Command Component Tags for Performing Actions and Navigation” Rendering a Button with the h:commandButton Tag “Rendering a Button with the h:commandButton Tag” Rendering a Link with the h:commandLink Tag “Rendering a Link with the h:commandLink Tag” Adding Graphics and Images with the h:graphicImage Tag “Adding Graphics and Images with the h:graphicImage Tag” Laying Out Components with the h:panelGrid and h:panelGroup Tags “Laying Out Components with the h:panelGrid and h:panelGroup Tags” Panel Component Tags “Panel Component Tags” Displaying Components for Selecting One Value “Displaying Components for Selecting One Value” Example Components for Selecting One Item “Example Components for Selecting One Item” Displaying a Check Box Using the h:selectBooleanCheckbox Tag “Displaying a Check Box Using the h:selectBooleanCheckbox Tag” Displaying a Menu Using the h:selectOneMenu Tag “Displaying a Menu Using the h:selectOneMenu Tag” Displaying Components for Selecting Multiple Values “Displaying Components for Selecting Multiple Values” Example Components for Selecting Multiple Values “Example Components for Selecting Multiple Values” Using the f:selectItem and f:selectItems Tags “Using the f:selectItem and f:selectItems Tags” Using the f:selectItems Tag “Using the f:selectItems Tag” Using the f:selectItem Tag “Using the f:selectItem Tag” Displaying the Results from Selection Components “Displaying the Results from Selection Components” Using Data-Bound Table Components “Using Data-Bound Table Components” Optional Attributes for the h:dataTable Tag “Optional Attributes for the h:dataTable Tag” Displaying Error Messages with the h:message and h:messages Tags “Displaying Error Messages with the h:message and h:messages Tags” Creating Bookmarkable URLs with the h:button and h:link Tags “Creating Bookmarkable URLs with the h:button and h:link Tags” Using View Parameters to Configure Bookmarkable URLs “Using View Parameters to Configure Bookmarkable URLs” The bookmarks Example Application “The bookmarks Example Application” To Build, Package, and Deploy the bookmarks Example Using NetBeans IDE “To Build, Package, and Deploy the bookmarks Example Using NetBeans IDE” To Build, Package, and Deploy the bookmarks Example Using Maven “To Build, Package, and Deploy the bookmarks Example Using Maven” To Run the bookmarks Example “To Run the bookmarks Example” Resource Relocation Using h:outputScript and h:outputStylesheet Tags “Resource Relocation Using h:outputScript and h:outputStylesheet Tags” Using Core Tags “Using Core Tags” Event-Handling Core Tags “Event-Handling Core Tags” Data-Conversion Core Tags “Data-Conversion Core Tags” Facet Core Tags “Facet Core Tags” Core Tags That Represent Items in a List “Core Tags That Represent Items in a List” Validator Core Tags “Validator Core Tags” Miscellaneous Core Tags “Miscellaneous Core Tags” Where the Core Tags Are Explained “Where the Core Tags Are Explained” Using Converters, Listeners, and Validators “Using Converters, Listeners, and Validators” The previous chapter… the paragraph beginning “The previous chapter…” Using the Standard Converters “Using the Standard Converters” Converter Classes and Converter IDs “Converter Classes and Converter IDs” Converting a Component’s Value “Converting a Component’s Value” Using DateTimeConverter “Using DateTimeConverter” Attributes for the f:convertDateTime Tag “Attributes for the f:convertDateTime Tag” Using NumberConverter “Using NumberConverter” Attributes for the f:convertNumber Tag “Attributes for the f:convertNumber Tag” Registering Listeners on Components “Registering Listeners on Components” Registering a Value-Change Listener on a Component “Registering a Value-Change Listener on a Component” Attributes for the f:valueChangeListener Tag “Attributes for the f:valueChangeListener Tag” Registering an Action Listener on a Component “Registering an Action Listener on a Component” Using the Standard Validators “Using the Standard Validators” The Validator Classes “The Validator Classes” Validating a Component’s Value “Validating a Component’s Value” Using Validator Tags “Using Validator Tags” Referencing a Managed Bean Method “Referencing a Managed Bean Method” Component Tag Attributes That Reference Managed Bean Methods “Component Tag Attributes That Reference Managed Bean Methods” Referencing a Method That Performs Navigation “Referencing a Method That Performs Navigation” Referencing a Method That Handles an Action Event “Referencing a Method That Handles an Action Event” Referencing a Method That Performs Validation “Referencing a Method That Performs Validation” Referencing a Method That Handles a Value-Change Event “Referencing a Method That Handles a Value-Change Event” Developing with JavaServer Faces Technology “Developing with JavaServer Faces Technology” This chapter provides… the paragraph beginning “This chapter provides…” Managed Beans in JavaServer Faces Technology “Managed Beans in JavaServer Faces Technology” Creating a Managed Bean “Creating a Managed Bean” Using the EL to Reference Managed Beans “Using the EL to Reference Managed Beans” Writing Bean Properties “Writing Bean Properties” Writing Properties Bound to Component Values “Writing Properties Bound to Component Values” Acceptable Types of Component Values “Acceptable Types of Component Values” UIInput and UIOutput Properties “UIInput and UIOutput Properties” UIData Properties “UIData Properties” UISelectBoolean Properties “UISelectBoolean Properties” UISelectMany Properties “UISelectMany Properties” UISelectOne Properties “UISelectOne Properties” UISelectItem Properties “UISelectItem Properties” UISelectItems Properties “UISelectItems Properties” Writing Properties Bound to Component Instances “Writing Properties Bound to Component Instances” Writing Properties Bound to Converters, Listeners, or Validators “Writing Properties Bound to Converters, Listeners, or Validators” Writing Managed Bean Methods “Writing Managed Bean Methods” Why Use Managed Beans “Why Use Managed Beans” Writing a Method to Handle Navigation “Writing a Method to Handle Navigation” Writing a Method to Handle an Action Event “Writing a Method to Handle an Action Event” Writing a Method to Perform Validation “Writing a Method to Perform Validation” Writing a Method to Handle a Value-Change Event “Writing a Method to Handle a Value-Change Event” Using Ajax with JavaServer Faces Technology “Using Ajax with JavaServer Faces Technology” This chapter describes… the paragraph beginning “This chapter describes…” Overview of Ajax “Overview of Ajax” Using Ajax Functionality with JavaServer Faces Technology “Using Ajax Functionality with JavaServer Faces Technology” Using Ajax with Facelets “Using Ajax with Facelets” Using the f:ajax Tag “Using the f:ajax Tag” Attributes of the f:ajax Tag “Attributes of the f:ajax Tag” Execute and Render Keywords “Execute and Render Keywords” Sending an Ajax Request “Sending an Ajax Request” Using the event Attribute “Using the event Attribute” Using the execute Attribute “Using the execute Attribute” Using the immediate Attribute “Using the immediate Attribute” Using the listener Attribute “Using the listener Attribute” Monitoring Events on the Client “Monitoring Events on the Client” Properties of the onevent Data Object “Properties of the onevent Data Object” Handling Errors “Handling Errors” Valid Error Values for the Data Object status Property “Valid Error Values for the Data Object status Property” Receiving an Ajax Response “Receiving an Ajax Response” Ajax Request Lifecycle “Ajax Request Lifecycle” Grouping of Components “Grouping of Components” Loading JavaScript as a Resource “Loading JavaScript as a Resource” Using JavaScript API in a Facelets Application “Using JavaScript API in a Facelets Application” Possible Values for the Options Parameter “Possible Values for the Options Parameter” Using the @ResourceDependency Annotation in a Bean Class “Using the @ResourceDependency Annotation in a Bean Class” The ajaxguessnumber Example Application “The ajaxguessnumber Example Application” The ajaxguessnumber Source Files “The ajaxguessnumber Source Files” The ajaxgreeting.xhtml Facelets Page “The ajaxgreeting.xhtml Facelets Page” The UserNumberBean Backing Bean “The UserNumberBean Backing Bean” The DukesNumberBean CDI Managed Bean “The DukesNumberBean CDI Managed Bean” Running the ajaxguessnumber Example “Running the ajaxguessnumber Example” To Build, Package, and Deploy the ajaxguessnumber Example Using NetBeans IDE “To Build, Package, and Deploy the ajaxguessnumber Example Using NetBeans IDE” To Build, Package, and Deploy the ajaxguessnumber Example Using Maven “To Build, Package, and Deploy the ajaxguessnumber Example Using Maven” To Run the ajaxguessnumber Example “To Run the ajaxguessnumber Example” Further Information about Ajax in JavaServer Faces Technology “Further Information about Ajax in JavaServer Faces Technology” Composite Components: Advanced Topics and an Example “Composite Components: Advanced Topics and an Example” This chapter describes… the paragraph beginning “This chapter describes…” Attributes of a Composite Component “Attributes of a Composite Component” Commonly Used Attributes of the composite:attribute Tag “Commonly Used Attributes of the composite:attribute Tag” Invoking a Managed Bean “Invoking a Managed Bean” Validating Composite Component Values “Validating Composite Component Values” Validator Tags “Validator Tags” The compositecomponentexample Example Application “The compositecomponentexample Example Application” The Composite Component File “The Composite Component File” The Using Page “The Using Page” The Managed Bean “The Managed Bean” Running the compositecomponentexample Example “Running the compositecomponentexample Example” To Build, Package, and Deploy the compositecomponentexample Example Using NetBeans IDE “To Build, Package, and Deploy the compositecomponentexample Example Using NetBeans IDE” To Build, Package, and Deploy the compositecomponentexample Example Using Maven “To Build, Package, and Deploy the compositecomponentexample Example Using Maven” To Run the compositecomponentexample Example “To Run the compositecomponentexample Example” Creating Custom UI Components and Other Custom Objects “Creating Custom UI Components and Other Custom Objects” This chapter describes… the paragraph beginning “This chapter describes…” Introduction to Creating Custom Components “Introduction to Creating Custom Components” Determining Whether You Need a Custom Component or Renderer “Determining Whether You Need a Custom Component or Renderer” When to Use a Custom Component “When to Use a Custom Component” When to Use a Custom Renderer “When to Use a Custom Renderer” Component, Renderer, and Tag Combinations “Component, Renderer, and Tag Combinations” Requirements for Custom Components, Custom Renderers, and Custom Tags “Requirements for Custom Components, Custom Renderers, and Custom Tags” Understanding the Image Map Example “Understanding the Image Map Example” Why Use JavaServer Faces Technology to Implement an Image Map? “Why Use JavaServer Faces Technology to Implement an Image Map?” Understanding the Rendered HTML “Understanding the Rendered HTML” Understanding the Facelets Page “Understanding the Facelets Page” Configuring Model Data “Configuring Model Data” Summary of the Image Map Application Classes “Summary of the Image Map Application Classes” Image Map Classes “Image Map Classes” Steps for Creating a Custom Component “Steps for Creating a Custom Component” Creating Custom Component Classes “Creating Custom Component Classes” Specifying the Component Family “Specifying the Component Family” Performing Encoding “Performing Encoding” Performing Decoding “Performing Decoding” Enabling Component Properties to Accept Expressions “Enabling Component Properties to Accept Expressions” Saving and Restoring State “Saving and Restoring State” Delegating Rendering to a Renderer “Delegating Rendering to a Renderer” Creating the Renderer Class “Creating the Renderer Class” Identifying the Renderer Type “Identifying the Renderer Type” Implementing an Event Listener “Implementing an Event Listener” Implementing Value-Change Listeners “Implementing Value-Change Listeners” Implementing Action Listeners “Implementing Action Listeners” Handling Events for Custom Components “Handling Events for Custom Components” Defining the Custom Component Tag in a Tag Library Descriptor “Defining the Custom Component Tag in a Tag Library Descriptor” Using a Custom Component “Using a Custom Component” Creating and Using a Custom Converter “Creating and Using a Custom Converter” Creating a Custom Converter “Creating a Custom Converter” Using a Custom Converter “Using a Custom Converter” Creating and Using a Custom Validator “Creating and Using a Custom Validator” Implementing the Validator Interface “Implementing the Validator Interface” Specifying a Custom Tag “Specifying a Custom Tag” Using a Custom Validator “Using a Custom Validator” Binding Component Values and Instances to Managed Bean Properties “Binding Component Values and Instances to Managed Bean Properties” Examples of Value-Binding Expressions “Examples of Value-Binding Expressions” Binding a Component Value to a Property “Binding a Component Value to a Property” Binding a Component Value to an Implicit Object “Binding a Component Value to an Implicit Object” Implicit Objects “Implicit Objects” Binding a Component Instance to a Bean Property “Binding a Component Instance to a Bean Property” Binding Converters, Listeners, and Validators to Managed Bean Properties “Binding Converters, Listeners, and Validators to Managed Bean Properties” Configuring JavaServer Faces Applications “Configuring JavaServer Faces Applications” This chapter describes… the paragraph beginning “This chapter describes…” Introduction to Configuring JavaServer Faces Applications “Introduction to Configuring JavaServer Faces Applications” Using Annotations to Configure Managed Beans “Using Annotations to Configure Managed Beans” Using Managed Bean Scopes “Using Managed Bean Scopes” Application Configuration Resource File “Application Configuration Resource File” Configuring Eager Application-Scoped Managed Beans “Configuring Eager Application-Scoped Managed Beans” Ordering of Application Configuration Resource Files “Ordering of Application Configuration Resource Files” Using Faces Flows “Using Faces Flows” Two Faces Flows and Their Interactions “Two Faces Flows and Their Interactions” Packaging Flows in an Application “Packaging Flows in an Application” The Simplest Possible Flow: The simple-flow Example Application “The Simplest Possible Flow: The simple-flow Example Application” To Build, Package, and Deploy the simple-flow Example Using NetBeans IDE “To Build, Package, and Deploy the simple-flow Example Using NetBeans IDE” To Build, Package, and Deploy the simple-flow Example Using Maven “To Build, Package, and Deploy the simple-flow Example Using Maven” To Run the simple-flow Example “To Run the simple-flow Example” The checkout-module Example Application “The checkout-module Example Application” The Facelets Pages for the checkout-module Example “The Facelets Pages for the checkout-module Example” Using a Configuration File to Configure a Flow “Using a Configuration File to Configure a Flow” Using a Java Class to Configure a Flow “Using a Java Class to Configure a Flow” The Flow-Scoped Managed Beans “The Flow-Scoped Managed Beans” To Build, Package, and Deploy the checkout-module Example Using NetBeans IDE “To Build, Package, and Deploy the checkout-module Example Using NetBeans IDE” To Build, Package, and Deploy the checkout-module Example Using Maven “To Build, Package, and Deploy the checkout-module Example Using Maven” To Run the checkout-module Example “To Run the checkout-module Example” Configuring Managed Beans “Configuring Managed Beans” Using the managed-bean Element “Using the managed-bean Element” Initializing Properties Using the managed-property Element “Initializing Properties Using the managed-property Element” Subelements of managed-property Elements That Define Property Values “Subelements of managed-property Elements That Define Property Values” Referencing a Java Enum Type “Referencing a Java Enum Type” Referencing a Context Initialization Parameter “Referencing a Context Initialization Parameter” Initializing Map Properties “Initializing Map Properties” Initializing Array and List Properties “Initializing Array and List Properties” Initializing Managed Bean Properties “Initializing Managed Bean Properties” Allowable Connections between Scoped Objects “Allowable Connections between Scoped Objects” Initializing Maps and Lists “Initializing Maps and Lists” Registering Application Messages “Registering Application Messages” Using FacesMessage to Create a Message “Using FacesMessage to Create a Message” Referencing Error Messages “Referencing Error Messages” Using Default Validators “Using Default Validators” Registering a Custom Validator “Registering a Custom Validator” Registering a Custom Converter “Registering a Custom Converter” Configuring Navigation Rules “Configuring Navigation Rules” Common Outcome Strings “Common Outcome Strings” Registering a Custom Renderer with a Render Kit “Registering a Custom Renderer with a Render Kit” Registering a Custom Component “Registering a Custom Component” Basic Requirements of a JavaServer Faces Application “Basic Requirements of a JavaServer Faces Application” Configuring an Application with a Web Deployment Descriptor “Configuring an Application with a Web Deployment Descriptor” Identifying the Servlet for Lifecycle Processing “Identifying the Servlet for Lifecycle Processing” To Specify a Path to an Application Configuration Resource File “To Specify a Path to an Application Configuration Resource File” To Specify Where State Is Saved “To Specify Where State Is Saved” Configuring Project Stage “Configuring Project Stage” Including the Classes, Pages, and Other Resources “Including the Classes, Pages, and Other Resources” Java Servlet Technology “Java Servlet Technology” Java Servlet technology… the paragraph beginning “Java Servlet technology…” What Is a Servlet? “What Is a Servlet?” Servlet Lifecycle “Servlet Lifecycle” Handling Servlet Lifecycle Events “Handling Servlet Lifecycle Events” Defining the Listener Class “Defining the Listener Class” Servlet Lifecycle Events “Servlet Lifecycle Events” Handling Servlet Errors “Handling Servlet Errors” Sharing Information “Sharing Information” Using Scope Objects “Using Scope Objects” Scope Objects “Scope Objects” Controlling Concurrent Access to Shared Resources “Controlling Concurrent Access to Shared Resources” Creating and Initializing a Servlet “Creating and Initializing a Servlet” Writing Service Methods “Writing Service Methods” Getting Information from Requests “Getting Information from Requests” Constructing Responses “Constructing Responses” Filtering Requests and Responses “Filtering Requests and Responses” Programming Filters “Programming Filters” Programming Customized Requests and Responses “Programming Customized Requests and Responses” Specifying Filter Mappings “Specifying Filter Mappings” Filter-to-Servlet Mapping “Filter-to-Servlet Mapping” To Specify Filter Mappings Using NetBeans IDE “To Specify Filter Mappings Using NetBeans IDE” Invoking Other Web Resources “Invoking Other Web Resources” Including Other Resources in the Response “Including Other Resources in the Response” Transferring Control to Another Web Component “Transferring Control to Another Web Component” Accessing the Web Context “Accessing the Web Context” Maintaining Client State “Maintaining Client State” Accessing a Session “Accessing a Session” Associating Objects with a Session “Associating Objects with a Session” Session Management “Session Management” To Set the Timeout Period Using NetBeans IDE “To Set the Timeout Period Using NetBeans IDE” Session Tracking “Session Tracking” Finalizing a Servlet “Finalizing a Servlet” Tracking Service Requests “Tracking Service Requests” Notifying Methods to Shut Down “Notifying Methods to Shut Down” Creating Polite Long-Running Methods “Creating Polite Long-Running Methods” Uploading Files with Java Servlet Technology “Uploading Files with Java Servlet Technology” The @MultipartConfig Annotation “The @MultipartConfig Annotation” The getParts and getPart Methods “The getParts and getPart Methods” Asynchronous Processing “Asynchronous Processing” Asynchronous Processing in Servlets “Asynchronous Processing in Servlets” Functionality Provided by the AsyncContext Class “Functionality Provided by the AsyncContext Class” Waiting for a Resource “Waiting for a Resource” Nonblocking I/O “Nonblocking I/O” Nonblocking I/O Support in javax.servlet.ServletInputStream “Nonblocking I/O Support in javax.servlet.ServletInputStream” Nonblocking I/O Support in javax.servlet.ServletOutputStream “Nonblocking I/O Support in javax.servlet.ServletOutputStream” Listener Interfaces for Nonblocking I/O Support “Listener Interfaces for Nonblocking I/O Support” Reading a Large HTTP POST Request Using Nonblocking I/O “Reading a Large HTTP POST Request Using Nonblocking I/O” Protocol Upgrade Processing “Protocol Upgrade Processing” Protocol Upgrade Support “Protocol Upgrade Support” The mood Example Application “The mood Example Application” Components of the mood Example Application “Components of the mood Example Application” Running the mood Example “Running the mood Example” To Run the mood Example Using NetBeans IDE “To Run the mood Example Using NetBeans IDE” To Run the mood Example Using Maven “To Run the mood Example Using Maven” The fileupload Example Application “The fileupload Example Application” Architecture of the fileupload Example Application “Architecture of the fileupload Example Application” Running the fileupload Example “Running the fileupload Example” To Build, Package, and Deploy the fileupload Example Using NetBeans IDE “To Build, Package, and Deploy the fileupload Example Using NetBeans IDE” To Build, Package, and Deploy the fileupload Example Using Maven “To Build, Package, and Deploy the fileupload Example Using Maven” To Run the fileupload Example “To Run the fileupload Example” The dukeetf Example Application “The dukeetf Example Application” Architecture of the dukeetf Example Application “Architecture of the dukeetf Example Application” The Servlet “The Servlet” The Enterprise Bean “The Enterprise Bean” The HTML Page “The HTML Page” Running the dukeetf Example Application “Running the dukeetf Example Application” To Run the dukeetf Example Application Using NetBeans IDE “To Run the dukeetf Example Application Using NetBeans IDE” To Run the dukeetf Example Application Using Maven “To Run the dukeetf Example Application Using Maven” Further Information about Java Servlet Technology “Further Information about Java Servlet Technology” Java API for WebSocket “Java API for WebSocket” This chapter describes… the paragraph beginning “This chapter describes…” Introduction to WebSocket “Introduction to WebSocket” Creating WebSocket Applications in the Java EE Platform “Creating WebSocket Applications in the Java EE Platform” Creating and Deploying a WebSocket Endpoint “Creating and Deploying a WebSocket Endpoint” Programmatic Endpoints “Programmatic Endpoints” Annotated Endpoints “Annotated Endpoints” WebSocket Endpoint Lifecycle Annotations “WebSocket Endpoint Lifecycle Annotations” Sending and Receiving Messages “Sending and Receiving Messages” Sending Messages “Sending Messages” Sending Messages to All Peers Connected to an Endpoint “Sending Messages to All Peers Connected to an Endpoint” Receiving Messages “Receiving Messages” Maintaining Client State “Maintaining Client State” Using Encoders and Decoders “Using Encoders and Decoders” Implementing Encoders to Convert Java Objects into WebSocket Messages “Implementing Encoders to Convert Java Objects into WebSocket Messages” Implementing Decoders to Convert WebSocket Messages into Java Objects “Implementing Decoders to Convert WebSocket Messages into Java Objects” Path Parameters “Path Parameters” Handling Errors “Handling Errors” Specifying an Endpoint Configurator Class “Specifying an Endpoint Configurator Class” The dukeetf2 Example Application “The dukeetf2 Example Application” Architecture of the dukeetf2 Sample Application “Architecture of the dukeetf2 Sample Application” The Endpoint “The Endpoint” The Enterprise Bean “The Enterprise Bean” The HTML Page “The HTML Page” Running the dukeetf2 Example Application “Running the dukeetf2 Example Application” To Run the dukeetf2 Example Application Using NetBeans IDE “To Run the dukeetf2 Example Application Using NetBeans IDE” To Run the dukeetf2 Example Application Using Maven “To Run the dukeetf2 Example Application Using Maven” The websocketbot Example Application “The websocketbot Example Application” Architecture of the websocketbot Example Application “Architecture of the websocketbot Example Application” The CDI Bean “The CDI Bean” The WebSocket Endpoint “The WebSocket Endpoint” The Application Messages “The Application Messages” The Encoder Classes “The Encoder Classes” The Message Decoder “The Message Decoder” The HTML Page “The HTML Page” Running the websocketbot Example Application “Running the websocketbot Example Application” To Run the websocketbot Example Application Using NetBeans IDE “To Run the websocketbot Example Application Using NetBeans IDE” To Run the websocketbot Example Application Using Maven “To Run the websocketbot Example Application Using Maven” To Test the websocketbot Example Application “To Test the websocketbot Example Application” Further Information about WebSocket “Further Information about WebSocket” JSON Processing “JSON Processing” This chapter describes… the paragraph beginning “This chapter describes…” Introduction to JSON “Introduction to JSON” JSON Syntax “JSON Syntax” Uses of JSON “Uses of JSON” Generating and Parsing JSON Data “Generating and Parsing JSON Data” JSON Processing in the Java EE Platform “JSON Processing in the Java EE Platform” Main Classes and Interfaces in javax.json “Main Classes and Interfaces in javax.json” Main Classes and Interfaces in javax.json.stream “Main Classes and Interfaces in javax.json.stream” Using the Object Model API “Using the Object Model API” Creating an Object Model from JSON Data “Creating an Object Model from JSON Data” Creating an Object Model from Application Code “Creating an Object Model from Application Code” Navigating an Object Model “Navigating an Object Model” Writing an Object Model to a Stream “Writing an Object Model to a Stream” Using the Streaming API “Using the Streaming API” Reading JSON Data Using a Parser “Reading JSON Data Using a Parser” Writing JSON Data Using a Generator “Writing JSON Data Using a Generator” JSON in Java EE RESTful Web Services “JSON in Java EE RESTful Web Services” The jsonpmodel Example Application “The jsonpmodel Example Application” Components of the jsonpmodel Example Application “Components of the jsonpmodel Example Application” Running the jsonpmodel Example Application “Running the jsonpmodel Example Application” To Run the jsonpmodel Example Application Using NetBeans IDE “To Run the jsonpmodel Example Application Using NetBeans IDE” To Run the jsonpmodel Example Application Using Maven “To Run the jsonpmodel Example Application Using Maven” The jsonpstreaming Example Application “The jsonpstreaming Example Application” Components of the jsonpstreaming Example Application “Components of the jsonpstreaming Example Application” Running the jsonpstreaming Example Application “Running the jsonpstreaming Example Application” To Run the jsonpstreaming Example Application Using NetBeans IDE “To Run the jsonpstreaming Example Application Using NetBeans IDE” To Run the jsonpstreaming Example Application Using Maven “To Run the jsonpstreaming Example Application Using Maven” Further Information about the Java API for JSON Processing “Further Information about the Java API for JSON Processing” Internationalizing and Localizing Web Applications “Internationalizing and Localizing Web Applications” The process of… the paragraph beginning “The process of…” Java Platform Localization Classes “Java Platform Localization Classes” Providing Localized Messages and Labels “Providing Localized Messages and Labels” Establishing the Locale “Establishing the Locale” Setting the Resource Bundle “Setting the Resource Bundle” Retrieving Localized Messages “Retrieving Localized Messages” Date and Number Formatting “Date and Number Formatting” Character Sets and Encodings “Character Sets and Encodings” Character Sets “Character Sets” Character Encoding “Character Encoding” Introduction to Bean Validation “Introduction to Bean Validation” This chapter describes… the paragraph beginning “This chapter describes…” Overview of Bean Validation “Overview of Bean Validation” Using Bean Validation Constraints “Using Bean Validation Constraints” Built-In Bean Validation Constraints “Built-In Bean Validation Constraints” Validating Null and Empty Strings “Validating Null and Empty Strings” Validating Constructors and Methods “Validating Constructors and Methods” Cross-Parameter Constraints “Cross-Parameter Constraints” Identifying Parameter Constraint Violations “Identifying Parameter Constraint Violations” Adding Constraints to Method Return Values “Adding Constraints to Method Return Values” Further Information about Bean Validation “Further Information about Bean Validation” Bean Validation: Advanced Topics “Bean Validation: Advanced Topics” This chapter describes… the paragraph beginning “This chapter describes…” Creating Custom Constraints “Creating Custom Constraints” Using the Built-In Constraints to Make a New Constraint “Using the Built-In Constraints to Make a New Constraint” Removing Ambiguity in Constraint Targets “Removing Ambiguity in Constraint Targets” Customizing Validator Messages “Customizing Validator Messages” The ValidationMessages Resource Bundle “The ValidationMessages Resource Bundle” Localizing Validation Messages “Localizing Validation Messages” Grouping Constraints “Grouping Constraints” Customizing Group Validation Order “Customizing Group Validation Order” Using Method Constraints in Type Hierarchies “Using Method Constraints in Type Hierarchies” Rules for Using Method Constraints in Type Hierarchies “Rules for Using Method Constraints in Type Hierarchies” Introduction to Contexts and Dependency Injection for Java EE “Introduction to Contexts and Dependency Injection for Java EE” This chapter describes… the paragraph beginning “This chapter describes…” Getting Started “Getting Started” Overview of CDI “Overview of CDI” About Beans “About Beans” About CDI Managed Beans “About CDI Managed Beans” Beans as Injectable Objects “Beans as Injectable Objects” Using Qualifiers “Using Qualifiers” Injecting Beans “Injecting Beans” Using Scopes “Using Scopes” Scopes “Scopes” Giving Beans EL Names “Giving Beans EL Names” Adding Setter and Getter Methods “Adding Setter and Getter Methods” Using a Managed Bean in a Facelets Page “Using a Managed Bean in a Facelets Page” Injecting Objects by Using Producer Methods “Injecting Objects by Using Producer Methods” Configuring a CDI Application “Configuring a CDI Application” Using the @PostConstruct and @PreDestroy Annotations with CDI Managed Bean Classes “Using the @PostConstruct and @PreDestroy Annotations with CDI Managed Bean Classes” To Initialize a Managed Bean Using the @PostConstruct Annotation “To Initialize a Managed Bean Using the @PostConstruct Annotation” To Prepare for the Destruction of a Managed Bean Using the @PreDestroy Annotation “To Prepare for the Destruction of a Managed Bean Using the @PreDestroy Annotation” Further Information about CDI “Further Information about CDI” Running the Basic Contexts and Dependency Injection Examples “Running the Basic Contexts and Dependency Injection Examples” This chapter describes… the paragraph beginning “This chapter describes…” Building and Running the CDI Samples “Building and Running the CDI Samples” The simplegreeting CDI Example “The simplegreeting CDI Example” The simplegreeting Source Files “The simplegreeting Source Files” The Facelets Template and Page “The Facelets Template and Page” Running the simplegreeting Example “Running the simplegreeting Example” To Build, Package, and Run the simplegreeting Example Using NetBeans IDE “To Build, Package, and Run the simplegreeting Example Using NetBeans IDE” To Build, Package, and Deploy the simplegreeting Example Using Maven “To Build, Package, and Deploy the simplegreeting Example Using Maven” To Run the simplegreeting Example “To Run the simplegreeting Example” The guessnumber-cdi CDI Example “The guessnumber-cdi CDI Example” The guessnumber-cdi Source Files “The guessnumber-cdi Source Files” The @MaxNumber and @Random Qualifier Interfaces “The @MaxNumber and @Random Qualifier Interfaces” The Generator Managed Bean “The Generator Managed Bean” The UserNumberBean Managed Bean “The UserNumberBean Managed Bean” The Facelets Page “The Facelets Page” Running the guessnumber-cdi Example “Running the guessnumber-cdi Example” To Build, Package, and Deploy the guessnumber-cdi Example Using NetBeans IDE “To Build, Package, and Deploy the guessnumber-cdi Example Using NetBeans IDE” To Build, Package, and Deploy the guessnumber-cdi Example Using Maven “To Build, Package, and Deploy the guessnumber-cdi Example Using Maven” To Run the guessnumber Example “To Run the guessnumber Example” Contexts and Dependency Injection for Java EE: Advanced Topics “Contexts and Dependency Injection for Java EE: Advanced Topics” This chapter describes… the paragraph beginning “This chapter describes…” Packaging CDI Applications “Packaging CDI Applications” Using Alternatives in CDI Applications “Using Alternatives in CDI Applications” Using Specialization “Using Specialization” Using Producer Methods, Producer Fields, and Disposer Methods in CDI Applications “Using Producer Methods, Producer Fields, and Disposer Methods in CDI Applications” Using Producer Methods “Using Producer Methods” Using Producer Fields to Generate Resources “Using Producer Fields to Generate Resources” Using a Disposer Method “Using a Disposer Method” Using Predefined Beans in CDI Applications “Using Predefined Beans in CDI Applications” Injection of Predefined Beans “Injection of Predefined Beans” Using Events in CDI Applications “Using Events in CDI Applications” Defining Events “Defining Events” Using Observer Methods to Handle Events “Using Observer Methods to Handle Events” Firing Events “Firing Events” Using Interceptors in CDI Applications “Using Interceptors in CDI Applications” Using Decorators in CDI Applications “Using Decorators in CDI Applications” Using Stereotypes in CDI Applications “Using Stereotypes in CDI Applications” Running the Advanced Contexts and Dependency Injection Examples “Running the Advanced Contexts and Dependency Injection Examples” This chapter describes… the paragraph beginning “This chapter describes…” Building and Running the CDI Advanced Examples “Building and Running the CDI Advanced Examples” The encoder Example: Using Alternatives “The encoder Example: Using Alternatives” The Coder Interface and Implementations “The Coder Interface and Implementations” The encoder Facelets Page and Managed Bean “The encoder Facelets Page and Managed Bean” Running the encoder Example “Running the encoder Example” To Build, Package, and Deploy the encoder Example Using NetBeans IDE “To Build, Package, and Deploy the encoder Example Using NetBeans IDE” To Run the encoder Example Using NetBeans IDE “To Run the encoder Example Using NetBeans IDE” To Build, Package, and Deploy the encoder Example Using Maven “To Build, Package, and Deploy the encoder Example Using Maven” To Run the encoder Example Using Maven “To Run the encoder Example Using Maven” The producermethods Example: Using a Producer Method to Choose a Bean Implementation “The producermethods Example: Using a Producer Method to Choose a Bean Implementation” Components of the producermethods Example “Components of the producermethods Example” Running the producermethods Example “Running the producermethods Example” To Build, Package, and Deploy the producermethods Example Using NetBeans IDE “To Build, Package, and Deploy the producermethods Example Using NetBeans IDE” To Build, Package, and Deploy the producermethods Example Using Maven “To Build, Package, and Deploy the producermethods Example Using Maven” To Run the producermethods Example “To Run the producermethods Example” The producerfields Example: Using Producer Fields to Generate Resources “The producerfields Example: Using Producer Fields to Generate Resources” The Producer Field for the producerfields Example “The Producer Field for the producerfields Example” The producerfields Entity and Session Bean “The producerfields Entity and Session Bean” The producerfields Facelets Pages and Managed Bean “The producerfields Facelets Pages and Managed Bean” Running the producerfields Example “Running the producerfields Example” To Build, Package, and Deploy the producerfields Example Using NetBeans IDE “To Build, Package, and Deploy the producerfields Example Using NetBeans IDE” To Build, Package, and Deploy the producerfields Example Using Maven “To Build, Package, and Deploy the producerfields Example Using Maven” To Run the producerfields Example “To Run the producerfields Example” The billpayment Example: Using Events and Interceptors “The billpayment Example: Using Events and Interceptors” Overview of the billpayment Example “Overview of the billpayment Example” The PaymentEvent Event Class “The PaymentEvent Event Class” The PaymentHandler Event Listener “The PaymentHandler Event Listener” The billpayment Facelets Pages and Managed Bean “The billpayment Facelets Pages and Managed Bean” The LoggedInterceptor Interceptor Class “The LoggedInterceptor Interceptor Class” Running the billpayment Example “Running the billpayment Example” To Build, Package, and Deploy the billpayment Example Using NetBeans IDE “To Build, Package, and Deploy the billpayment Example Using NetBeans IDE” To Build, Package, and Deploy the billpayment Example Using Maven “To Build, Package, and Deploy the billpayment Example Using Maven” To Run the billpayment Example “To Run the billpayment Example” The decorators Example: Decorating a Bean “The decorators Example: Decorating a Bean” Overview of the decorators Example “Overview of the decorators Example” Components of the decorators Example “Components of the decorators Example” Running the decorators Example “Running the decorators Example” To Build, Package, and Deploy the decorators Example Using NetBeans IDE “To Build, Package, and Deploy the decorators Example Using NetBeans IDE” To Build, Package, and Deploy the decorators Example Using Maven “To Build, Package, and Deploy the decorators Example Using Maven” To Run the decorators Example “To Run the decorators Example” Introduction to Web Services “Introduction to Web Services” This part of… the paragraph beginning “This part of…” What Are Web Services? “What Are Web Services?” Types of Web Services “Types of Web Services” "Big" Web Services “"Big" Web Services” RESTful Web Services “RESTful Web Services” Deciding Which Type of Web Service to Use “Deciding Which Type of Web Service to Use” Building Web Services with JAX-WS “Building Web Services with JAX-WS” This chapter describes… the paragraph beginning “This chapter describes…” Overview of Java API for XML Web Services “Overview of Java API for XML Web Services” Creating a Simple Web Service and Clients with JAX-WS “Creating a Simple Web Service and Clients with JAX-WS” Communication between a JAX-WS Web Service and a Client “Communication between a JAX-WS Web Service and a Client” Basic Steps for Creating a Web Service and Client “Basic Steps for Creating a Web Service and Client” Requirements of a JAX-WS Endpoint “Requirements of a JAX-WS Endpoint” Coding the Service Endpoint Implementation Class “Coding the Service Endpoint Implementation Class” Building, Packaging, and Deploying the Service “Building, Packaging, and Deploying the Service” To Build, Package, and Deploy the Service Using NetBeans IDE “To Build, Package, and Deploy the Service Using NetBeans IDE” Next Steps “Next Steps” To Build, Package, and Deploy the Service Using Maven “To Build, Package, and Deploy the Service Using Maven” Next Steps “Next Steps” Testing the Methods of a Web Service Endpoint “Testing the Methods of a Web Service Endpoint” To Test the Service without a Client “To Test the Service without a Client” A Simple JAX-WS Application Client “A Simple JAX-WS Application Client” Coding the Application Client “Coding the Application Client” Running the Application Client “Running the Application Client” To Run the Application Client Using NetBeans IDE “To Run the Application Client Using NetBeans IDE” To Run the Application Client Using Maven “To Run the Application Client Using Maven” A Simple JAX-WS Web Client “A Simple JAX-WS Web Client” Coding the Servlet “Coding the Servlet” Running the Web Client “Running the Web Client” To Run the Web Client Using NetBeans IDE “To Run the Web Client Using NetBeans IDE” To Run the Web Client Using Maven “To Run the Web Client Using Maven” Types Supported by JAX-WS “Types Supported by JAX-WS” Schema-to-Java Mapping “Schema-to-Java Mapping” Mapping of XML Data Types to Java Data Types in JAXB “Mapping of XML Data Types to Java Data Types in JAXB” Java-to-Schema Mapping “Java-to-Schema Mapping” Mapping of Java Classes to XML Data Types in JAXB “Mapping of Java Classes to XML Data Types in JAXB” Web Services Interoperability and JAX-WS “Web Services Interoperability and JAX-WS” Further Information about JAX-WS “Further Information about JAX-WS” Building RESTful Web Services with JAX-RS “Building RESTful Web Services with JAX-RS” This chapter describes… the paragraph beginning “This chapter describes…” What Are RESTful Web Services? “What Are RESTful Web Services?” Creating a RESTful Root Resource Class “Creating a RESTful Root Resource Class” Developing RESTful Web Services with JAX-RS “Developing RESTful Web Services with JAX-RS” Summary of JAX-RS Annotations “Summary of JAX-RS Annotations” Overview of a JAX-RS Application “Overview of a JAX-RS Application” The @Path Annotation and URI Path Templates “The @Path Annotation and URI Path Templates” Examples of URI Path Templates “Examples of URI Path Templates” Responding to HTTP Methods and Requests “Responding to HTTP Methods and Requests” The Request Method Designator Annotations “The Request Method Designator Annotations” Using Entity Providers to Map HTTP Response and Request Entity Bodies “Using Entity Providers to Map HTTP Response and Request Entity Bodies” Types Supported for HTTP Request and Response Entity Bodies “Types Supported for HTTP Request and Response Entity Bodies” Using @Consumes and @Produces to Customize Requests and Responses “Using @Consumes and @Produces to Customize Requests and Responses” The @Produces Annotation “The @Produces Annotation” The @Consumes Annotation “The @Consumes Annotation” Extracting Request Parameters “Extracting Request Parameters” Configuring JAX-RS Applications “Configuring JAX-RS Applications” Configuring a JAX-RS Application Using a Subclass of Application “Configuring a JAX-RS Application Using a Subclass of Application” Configuring the Base URI in web.xml “Configuring the Base URI in web.xml” Example Applications for JAX-RS “Example Applications for JAX-RS” Creating a Simple RESTful Web Service “Creating a Simple RESTful Web Service” To Create a RESTful Web Service Using NetBeans IDE “To Create a RESTful Web Service Using NetBeans IDE” The rsvp Example Application “The rsvp Example Application” Components of the rsvp Example Application “Components of the rsvp Example Application” Running the rsvp Example Application “Running the rsvp Example Application” To Run the rsvp Example Application Using NetBeans IDE “To Run the rsvp Example Application Using NetBeans IDE” To Run the rsvp Example Application Using Maven “To Run the rsvp Example Application Using Maven” Real-World Examples “Real-World Examples” Further Information about JAX-RS “Further Information about JAX-RS” Accessing REST Resources with the JAX-RS Client API “Accessing REST Resources with the JAX-RS Client API” This chapter describes… the paragraph beginning “This chapter describes…” Overview of the Client API “Overview of the Client API” Creating a Basic Client Request Using the Client API “Creating a Basic Client Request Using the Client API” Obtaining the Client Instance “Obtaining the Client Instance” Setting the Client Target “Setting the Client Target” Setting Path Parameters in Targets “Setting Path Parameters in Targets” Invoking the Request “Invoking the Request” Using the Client API in the JAX-RS Example Applications “Using the Client API in the JAX-RS Example Applications” The Client API in the rsvp Example Application “The Client API in the rsvp Example Application” The Client API in the customer Example Application “The Client API in the customer Example Application” Advanced Features of the Client API “Advanced Features of the Client API” Configuring the Client Request “Configuring the Client Request” Setting Message Headers in the Client Request “Setting Message Headers in the Client Request” Setting Cookies in the Client Request “Setting Cookies in the Client Request” Adding Filters to the Client “Adding Filters to the Client” Asynchronous Invocations in the Client API “Asynchronous Invocations in the Client API” Using Custom Callbacks in Asynchronous Invocations “Using Custom Callbacks in Asynchronous Invocations” Using Reactive Approach in Asynchronous Invocations “Using Reactive Approach in Asynchronous Invocations” Using Server-Sent Events “Using Server-Sent Events” Overview of the SSE API “Overview of the SSE API” Broadcasting Using SSE “Broadcasting Using SSE” Listening and Receiving Events “Listening and Receiving Events” JAX-RS: Advanced Topics and an Example “JAX-RS: Advanced Topics and an Example” The Java API… the paragraph beginning “The Java API…” Annotations for Field and Bean Properties of Resource Classes “Annotations for Field and Bean Properties of Resource Classes” Advanced JAX-RS Annotations “Advanced JAX-RS Annotations” Extracting Path Parameters “Extracting Path Parameters” Extracting Query Parameters “Extracting Query Parameters” Extracting Form Data “Extracting Form Data” Extracting the Java Type of a Request or Response “Extracting the Java Type of a Request or Response” Validating Resource Data with Bean Validation “Validating Resource Data with Bean Validation” Using Constraint Annotations on Resource Methods “Using Constraint Annotations on Resource Methods” Validating Entity Data “Validating Entity Data” Validation Exception Handling and Response Codes “Validation Exception Handling and Response Codes” Subresources and Runtime Resource Resolution “Subresources and Runtime Resource Resolution” Subresource Methods “Subresource Methods” Subresource Locators “Subresource Locators” Integrating JAX-RS with EJB Technology and CDI “Integrating JAX-RS with EJB Technology and CDI” Conditional HTTP Requests “Conditional HTTP Requests” Runtime Content Negotiation “Runtime Content Negotiation” Using JAX-RS with JAXB “Using JAX-RS with JAXB” Using Java Objects to Model Your Data “Using Java Objects to Model Your Data” Starting from an Existing XML Schema Definition “Starting from an Existing XML Schema Definition” Using JSON with JAX-RS and JAXB “Using JSON with JAX-RS and JAXB” The customer Example Application “The customer Example Application” Overview of the customer Example Application “Overview of the customer Example Application” The Customer and Address Entity Classes “The Customer and Address Entity Classes” The CustomerService Class “The CustomerService Class” Using the JAX-RS Client in the CustomerBean Classes “Using the JAX-RS Client in the CustomerBean Classes” Running the customer Example “Running the customer Example” To Build, Package, and Deploy the customer Example Using NetBeans IDE “To Build, Package, and Deploy the customer Example Using NetBeans IDE” To Build, Package, and Deploy the customer Example Using Maven “To Build, Package, and Deploy the customer Example Using Maven” Enterprise Beans “Enterprise Beans” Enterprise beans are… the paragraph beginning “Enterprise beans are…” What Is an Enterprise Bean? “What Is an Enterprise Bean?” Benefits of Enterprise Beans “Benefits of Enterprise Beans” When to Use Enterprise Beans “When to Use Enterprise Beans” Types of Enterprise Beans “Types of Enterprise Beans” Enterprise Bean Types “Enterprise Bean Types” What Is a Session Bean? “What Is a Session Bean?” Types of Session Beans “Types of Session Beans” Stateful Session Beans “Stateful Session Beans” Stateless Session Beans “Stateless Session Beans” Singleton Session Beans “Singleton Session Beans” When to Use Session Beans “When to Use Session Beans” What Is a Message-Driven Bean? “What Is a Message-Driven Bean?” What Makes Message-Driven Beans Different from Session Beans? “What Makes Message-Driven Beans Different from Session Beans?” When to Use Message-Driven Beans “When to Use Message-Driven Beans” Accessing Enterprise Beans “Accessing Enterprise Beans” Using Enterprise Beans in Clients “Using Enterprise Beans in Clients” Portable JNDI Syntax “Portable JNDI Syntax” Deciding on Remote or Local Access “Deciding on Remote or Local Access” Local Clients “Local Clients” Accessing Local Enterprise Beans Using the No-Interface View “Accessing Local Enterprise Beans Using the No-Interface View” Accessing Local Enterprise Beans That Implement Business Interfaces “Accessing Local Enterprise Beans That Implement Business Interfaces” Remote Clients “Remote Clients” Interfaces for an Enterprise Bean with Remote Access “Interfaces for an Enterprise Bean with Remote Access” Web Service Clients “Web Service Clients” Method Parameters and Access “Method Parameters and Access” Isolation “Isolation” Granularity of Accessed Data “Granularity of Accessed Data” The Contents of an Enterprise Bean “The Contents of an Enterprise Bean” Naming Conventions for Enterprise Beans “Naming Conventions for Enterprise Beans” Naming Conventions for Enterprise Beans “Naming Conventions for Enterprise Beans” The Lifecycles of Enterprise Beans “The Lifecycles of Enterprise Beans” The Lifecycle of a Stateful Session Bean “The Lifecycle of a Stateful Session Bean” Lifecycle of a Stateful Session Bean “Lifecycle of a Stateful Session Bean” The Lifecycle of a Stateless Session Bean “The Lifecycle of a Stateless Session Bean” Lifecycle of a Stateless or Singleton Session Bean “Lifecycle of a Stateless or Singleton Session Bean” The Lifecycle of a Singleton Session Bean “The Lifecycle of a Singleton Session Bean” The Lifecycle of a Message-Driven Bean “The Lifecycle of a Message-Driven Bean” Lifecycle of a Message-Driven Bean “Lifecycle of a Message-Driven Bean” Further Information about Enterprise Beans “Further Information about Enterprise Beans” Getting Started with Enterprise Beans “Getting Started with Enterprise Beans” This chapter shows… the paragraph beginning “This chapter shows…” Starting With Enterprise Beans “Starting With Enterprise Beans” Creating the Enterprise Bean “Creating the Enterprise Bean” Coding the Enterprise Bean Class “Coding the Enterprise Bean Class” Creating the converter Web Client “Creating the converter Web Client” Running the converter Example “Running the converter Example” To Run the converter Example Using NetBeans IDE “To Run the converter Example Using NetBeans IDE” To Run the converter Example Using Maven “To Run the converter Example Using Maven” Modifying the Java EE Application “Modifying the Java EE Application” To Modify a Class File “To Modify a Class File” Running the Enterprise Bean Examples “Running the Enterprise Bean Examples” This chapter describes… the paragraph beginning “This chapter describes…” Overview of the EJB Examples “Overview of the EJB Examples” The cart Example “The cart Example” The Business Interface “The Business Interface” Session Bean Class “Session Bean Class” Lifecycle Callback Methods “Lifecycle Callback Methods” Business Methods “Business Methods” The @Remove Method “The @Remove Method” Helper Classes “Helper Classes” Running the cart Example “Running the cart Example” To Run the cart Example Using NetBeans IDE “To Run the cart Example Using NetBeans IDE” To Run the cart Example Using Maven “To Run the cart Example Using Maven” A Singleton Session Bean Example: counter “A Singleton Session Bean Example: counter” Creating a Singleton Session Bean “Creating a Singleton Session Bean” Initializing Singleton Session Beans “Initializing Singleton Session Beans” Managing Concurrent Access in a Singleton Session Bean “Managing Concurrent Access in a Singleton Session Bean” Handling Errors in a Singleton Session Bean “Handling Errors in a Singleton Session Bean” The Architecture of the counter Example “The Architecture of the counter Example” Running the counter Example “Running the counter Example” To Run the counter Example Using NetBeans IDE “To Run the counter Example Using NetBeans IDE” To Run the counter Example Using Maven “To Run the counter Example Using Maven” A Web Service Example: helloservice “A Web Service Example: helloservice” The Web Service Endpoint Implementation Class “The Web Service Endpoint Implementation Class” Stateless Session Bean Implementation Class “Stateless Session Bean Implementation Class” Running the helloservice Example “Running the helloservice Example” To Build, Package, and Deploy the helloservice Example Using NetBeans IDE “To Build, Package, and Deploy the helloservice Example Using NetBeans IDE” To Build, Package, and Deploy the helloservice Example Using Maven “To Build, Package, and Deploy the helloservice Example Using Maven” To Test the Service without a Client “To Test the Service without a Client” Using the Timer Service “Using the Timer Service” Creating Calendar-Based Timer Expressions “Creating Calendar-Based Timer Expressions” Calendar-Based Timer Attributes “Calendar-Based Timer Attributes” Specifying Multiple Values in Calendar Expressions “Specifying Multiple Values in Calendar Expressions” Programmatic Timers “Programmatic Timers” The @Timeout Method “The @Timeout Method” Creating Programmatic Timers “Creating Programmatic Timers” Automatic Timers “Automatic Timers” Canceling and Saving Timers “Canceling and Saving Timers” Getting Timer Information “Getting Timer Information” Transactions and Timers “Transactions and Timers” The timersession Example “The timersession Example” Running the timersession Example “Running the timersession Example” To Run the timersession Example Using NetBeans IDE “To Run the timersession Example Using NetBeans IDE” To Build, Package, and Deploy the timersession Example Using Maven “To Build, Package, and Deploy the timersession Example Using Maven” To Run the Web Client “To Run the Web Client” Handling Exceptions “Handling Exceptions” Using the Embedded Enterprise Bean Container “Using the Embedded Enterprise Bean Container” This chapter demonstrates… the paragraph beginning “This chapter demonstrates…” Overview of the Embedded Enterprise Bean Container “Overview of the Embedded Enterprise Bean Container” Developing Embeddable Enterprise Bean Applications “Developing Embeddable Enterprise Bean Applications” Required Enterprise Bean Features in the Embeddable Container “Required Enterprise Bean Features in the Embeddable Container” Running Embedded Applications “Running Embedded Applications” Creating the Enterprise Bean Container “Creating the Enterprise Bean Container” Explicitly Specifying Enterprise Bean Modules to Be Initialized “Explicitly Specifying Enterprise Bean Modules to Be Initialized” Looking Up Session Bean References “Looking Up Session Bean References” Shutting Down the Enterprise Bean Container “Shutting Down the Enterprise Bean Container” The standalone Example Application “The standalone Example Application” Overview of the standalone Example Application “Overview of the standalone Example Application” To Run the standalone Example Application Using NetBeans IDE “To Run the standalone Example Application Using NetBeans IDE” To Run the standalone Example Application Using Maven “To Run the standalone Example Application Using Maven” Using Asynchronous Method Invocation in Session Beans “Using Asynchronous Method Invocation in Session Beans” This chapter discusses… the paragraph beginning “This chapter discusses…” Asynchronous Method Invocation “Asynchronous Method Invocation” Creating an Asynchronous Business Method “Creating an Asynchronous Business Method” Calling Asynchronous Methods from Enterprise Bean Clients “Calling Asynchronous Methods from Enterprise Bean Clients” Retrieving the Final Result from an Asynchronous Method Invocation “Retrieving the Final Result from an Asynchronous Method Invocation” Cancelling an Asynchronous Method Invocation “Cancelling an Asynchronous Method Invocation” Checking the Status of an Asynchronous Method Invocation “Checking the Status of an Asynchronous Method Invocation” The async Example Application “The async Example Application” Architecture of the async-war Module “Architecture of the async-war Module” Running the async Example “Running the async Example” To Run the async Example Application Using NetBeans IDE “To Run the async Example Application Using NetBeans IDE” To Run the async Example Application Using Maven “To Run the async Example Application Using Maven” Introduction to the Java Persistence API “Introduction to the Java Persistence API” This chapter provides… the paragraph beginning “This chapter provides…” Overview of the Java Persistence API “Overview of the Java Persistence API” Entities “Entities” Requirements for Entity Classes “Requirements for Entity Classes” Persistent Fields and Properties in Entity Classes “Persistent Fields and Properties in Entity Classes” Persistent Fields “Persistent Fields” Persistent Properties “Persistent Properties” Using Collections in Entity Fields and Properties “Using Collections in Entity Fields and Properties” Validating Persistent Fields and Properties “Validating Persistent Fields and Properties” Primary Keys in Entities “Primary Keys in Entities” Multiplicity in Entity Relationships “Multiplicity in Entity Relationships” Direction in Entity Relationships “Direction in Entity Relationships” Bidirectional Relationships “Bidirectional Relationships” Unidirectional Relationships “Unidirectional Relationships” Queries and Relationship Direction “Queries and Relationship Direction” Cascade Operations and Relationships “Cascade Operations and Relationships” Cascade Operations for Entities “Cascade Operations for Entities” Orphan Removal in Relationships “Orphan Removal in Relationships” Embeddable Classes in Entities “Embeddable Classes in Entities” Entity Inheritance “Entity Inheritance” Abstract Entities “Abstract Entities” Mapped Superclasses “Mapped Superclasses” Non-Entity Superclasses “Non-Entity Superclasses” Entity Inheritance Mapping Strategies “Entity Inheritance Mapping Strategies” The Single Table per Class Hierarchy Strategy “The Single Table per Class Hierarchy Strategy” @DiscriminatorColumn Elements “@DiscriminatorColumn Elements” The Table per Concrete Class Strategy “The Table per Concrete Class Strategy” The Joined Subclass Strategy “The Joined Subclass Strategy” Managing Entities “Managing Entities” The EntityManager Interface “The EntityManager Interface” Container-Managed Entity Managers “Container-Managed Entity Managers” Application-Managed Entity Managers “Application-Managed Entity Managers” Finding Entities Using the EntityManager “Finding Entities Using the EntityManager” Managing an Entity Instance’s Lifecycle “Managing an Entity Instance’s Lifecycle” Persisting Entity Instances “Persisting Entity Instances” Removing Entity Instances “Removing Entity Instances” Synchronizing Entity Data to the Database “Synchronizing Entity Data to the Database” Persistence Units “Persistence Units” Querying Entities “Querying Entities” Database Schema Creation “Database Schema Creation” Configuring an Application to Create or Drop Database Tables “Configuring an Application to Create or Drop Database Tables” Schema Creation Actions “Schema Creation Actions” Settings for Create and Delete Source Properties “Settings for Create and Delete Source Properties” Loading Data Using SQL Scripts “Loading Data Using SQL Scripts” Further Information about Persistence “Further Information about Persistence” Running the Persistence Examples “Running the Persistence Examples” This chapter explains… the paragraph beginning “This chapter explains…” Overview of the Persistence Examples “Overview of the Persistence Examples” The order Application “The order Application” Database Schema for the order Application “Database Schema for the order Application” Entity Relationships in the order Application “Entity Relationships in the order Application” Self-Referential Relationships “Self-Referential Relationships” One-to-One Relationships “One-to-One Relationships” One-to-Many Relationship Mapped to Overlapping Primary and Foreign Keys “One-to-Many Relationship Mapped to Overlapping Primary and Foreign Keys” Unidirectional Relationships “Unidirectional Relationships” Primary Keys in the order Application “Primary Keys in the order Application” Generated Primary Keys “Generated Primary Keys” Compound Primary Keys “Compound Primary Keys” Entity Mapped to More Than One Database Table “Entity Mapped to More Than One Database Table” Cascade Operations in the order Application “Cascade Operations in the order Application” BLOB and CLOB Database Types in the order Application “BLOB and CLOB Database Types in the order Application” Temporal Types in the order Application “Temporal Types in the order Application” Managing the order Application’s Entities “Managing the order Application’s Entities” Creating Entities “Creating Entities” Finding Entities “Finding Entities” Setting Entity Relationships “Setting Entity Relationships” Using Queries “Using Queries” Removing Entities “Removing Entities” Running the order Example “Running the order Example” To Run the order Example Using NetBeans IDE “To Run the order Example Using NetBeans IDE” To Run the order Example Using Maven “To Run the order Example Using Maven” The roster Application “The roster Application” Database Schema for the roster Application “Database Schema for the roster Application” Relationships in the roster Application “Relationships in the roster Application” The Many-To-Many Relationship in roster “The Many-To-Many Relationship in roster” Entity Inheritance in the roster Application “Entity Inheritance in the roster Application” Criteria Queries in the roster Application “Criteria Queries in the roster Application” Metamodel Classes in the roster Application “Metamodel Classes in the roster Application” Obtaining a CriteriaBuilder Instance in RequestBean “Obtaining a CriteriaBuilder Instance in RequestBean” Creating Criteria Queries in RequestBean’s Business Methods “Creating Criteria Queries in RequestBean’s Business Methods” Automatic Table Generation in the roster Application “Automatic Table Generation in the roster Application” Running the roster Example “Running the roster Example” To Run the roster Example Using NetBeans IDE “To Run the roster Example Using NetBeans IDE” To Run the roster Example Using Maven “To Run the roster Example Using Maven” The address-book Application “The address-book Application” Bean Validation Constraints in address-book “Bean Validation Constraints in address-book” Specifying Error Messages for Constraints in address-book “Specifying Error Messages for Constraints in address-book” Validating Contact Input from a JavaServer Faces Application “Validating Contact Input from a JavaServer Faces Application” Running the address-book Example “Running the address-book Example” To Run the address-book Example Using NetBeans IDE “To Run the address-book Example Using NetBeans IDE” To Run the address-book Example Using Maven “To Run the address-book Example Using Maven” The Java Persistence Query Language “The Java Persistence Query Language” This chapter describes… the paragraph beginning “This chapter describes…” Overview of the Java Persistence Query Language “Overview of the Java Persistence Query Language” Query Language Terminology “Query Language Terminology” Creating Queries Using the Java Persistence Query Language “Creating Queries Using the Java Persistence Query Language” Named Parameters in Queries “Named Parameters in Queries” Positional Parameters in Queries “Positional Parameters in Queries” Simplified Query Language Syntax “Simplified Query Language Syntax” Select Statements “Select Statements” Update and Delete Statements “Update and Delete Statements” Example Queries “Example Queries” Simple Queries “Simple Queries” A Basic Select Query “A Basic Select Query” Eliminating Duplicate Values “Eliminating Duplicate Values” Using Named Parameters “Using Named Parameters” Queries That Navigate to Related Entities “Queries That Navigate to Related Entities” A Simple Query with Relationships “A Simple Query with Relationships” Navigating to Single-Valued Relationship Fields “Navigating to Single-Valued Relationship Fields” Traversing Relationships with an Input Parameter “Traversing Relationships with an Input Parameter” Traversing Multiple Relationships “Traversing Multiple Relationships” Navigating According to Related Fields “Navigating According to Related Fields” Queries with Other Conditional Expressions “Queries with Other Conditional Expressions” The LIKE Expression “The LIKE Expression” The IS NULL Expression “The IS NULL Expression” The IS EMPTY Expression “The IS EMPTY Expression” The BETWEEN Expression “The BETWEEN Expression” Comparison Operators “Comparison Operators” Bulk Updates and Deletes “Bulk Updates and Deletes” Update Queries “Update Queries” Delete Queries “Delete Queries” Full Query Language Syntax “Full Query Language Syntax” BNF Symbols “BNF Symbols” BNF Symbol Summary “BNF Symbol Summary” BNF Grammar of the Java Persistence Query Language “BNF Grammar of the Java Persistence Query Language” FROM Clause “FROM Clause” Identifiers “Identifiers” Identification Variables “Identification Variables” Range Variable Declarations “Range Variable Declarations” Collection Member Declarations “Collection Member Declarations” Joins “Joins” Path Expressions “Path Expressions” Examples of Path Expressions “Examples of Path Expressions” Expression Types “Expression Types” Navigation “Navigation” WHERE Clause “WHERE Clause” Literals “Literals” Input Parameters “Input Parameters” Conditional Expressions “Conditional Expressions” Operators and Their Precedence “Operators and Their Precedence” Query Language Order Precedence “Query Language Order Precedence” BETWEEN Expressions “BETWEEN Expressions” IN Expressions “IN Expressions” LIKE Expressions “LIKE Expressions” LIKE Expression Examples “LIKE Expression Examples” NULL Comparison Expressions “NULL Comparison Expressions” Empty Collection Comparison Expressions “Empty Collection Comparison Expressions” Collection Member Expressions “Collection Member Expressions” Subqueries “Subqueries” Functional Expressions “Functional Expressions” String Expressions “String Expressions” Arithmetic Expressions “Arithmetic Expressions” Date/Time Expressions “Date/Time Expressions” Case Expressions “Case Expressions” NULL Values “NULL Values” AND Operator Logic “AND Operator Logic” OR Operator Logic “OR Operator Logic” Equality Semantics “Equality Semantics” NOT Operator Logic “NOT Operator Logic” Conditional Test “Conditional Test” SELECT Clause “SELECT Clause” Return Types “Return Types” Aggregate Functions in Select Statements “Aggregate Functions in Select Statements” The DISTINCT Keyword “The DISTINCT Keyword” Constructor Expressions “Constructor Expressions” ORDER BY Clause “ORDER BY Clause” GROUP BY and HAVING Clauses “GROUP BY and HAVING Clauses” Using the Criteria API to Create Queries “Using the Criteria API to Create Queries” The Criteria API… the paragraph beginning “The Criteria API…” Overview of the Criteria and Metamodel APIs “Overview of the Criteria and Metamodel APIs” Using the Metamodel API to Model Entity Classes “Using the Metamodel API to Model Entity Classes” Using Metamodel Classes “Using Metamodel Classes” Using the Criteria API and Metamodel API to Create Basic Typesafe Queries “Using the Criteria API and Metamodel API to Create Basic Typesafe Queries” Creating a Criteria Query “Creating a Criteria Query” Query Roots “Query Roots” Querying Relationships Using Joins “Querying Relationships Using Joins” Path Navigation in Criteria Queries “Path Navigation in Criteria Queries” Restricting Criteria Query Results “Restricting Criteria Query Results” The Expression Interface Methods “The Expression Interface Methods” Conditional Methods in the Expression Interface “Conditional Methods in the Expression Interface” Expression Methods in the CriteriaBuilder Interface “Expression Methods in the CriteriaBuilder Interface” Conditional Methods in the CriteriaBuilder Interface “Conditional Methods in the CriteriaBuilder Interface” Compound Predicate Methods in the CriteriaBuilder Interface “Compound Predicate Methods in the CriteriaBuilder Interface” Managing Criteria Query Results “Managing Criteria Query Results” Ordering Results “Ordering Results” Grouping Results “Grouping Results” Executing Queries “Executing Queries” Single-Valued Query Results “Single-Valued Query Results” Collection-Valued Query Results “Collection-Valued Query Results” Creating and Using String-Based Criteria Queries “Creating and Using String-Based Criteria Queries” This chapter describes… the paragraph beginning “This chapter describes…” Overview of String-Based Criteria API Queries “Overview of String-Based Criteria API Queries” Creating String-Based Queries “Creating String-Based Queries” Executing String-Based Queries “Executing String-Based Queries” Controlling Concurrent Access to Entity Data with Locking “Controlling Concurrent Access to Entity Data with Locking” This chapter details… the paragraph beginning “This chapter details…” Overview of Entity Locking and Concurrency “Overview of Entity Locking and Concurrency” Using Optimistic Locking “Using Optimistic Locking” Lock Modes “Lock Modes” Lock Modes for Concurrent Entity Access “Lock Modes for Concurrent Entity Access” Setting the Lock Mode “Setting the Lock Mode” Using Pessimistic Locking “Using Pessimistic Locking” Pessimistic Locking Timeouts “Pessimistic Locking Timeouts” Creating Fetch Plans with Entity Graphs “Creating Fetch Plans with Entity Graphs” This chapter explains… the paragraph beginning “This chapter explains…” Overview of Using Fetch Plans and Entity Graphs “Overview of Using Fetch Plans and Entity Graphs” Entity Graph Basics “Entity Graph Basics” The Default Entity Graph “The Default Entity Graph” Using Entity Graphs in Persistence Operations “Using Entity Graphs in Persistence Operations” Fetch Graphs “Fetch Graphs” Load Graphs “Load Graphs” Using Named Entity Graphs “Using Named Entity Graphs” Applying Named Entity Graph Annotations to Entity Classes “Applying Named Entity Graph Annotations to Entity Classes” Obtaining EntityGraph Instances from Named Entity Graphs “Obtaining EntityGraph Instances from Named Entity Graphs” Using Entity Graphs in Query Operations “Using Entity Graphs in Query Operations” Using a Second-Level Cache with Java Persistence API Applications “Using a Second-Level Cache with Java Persistence API Applications” This chapter explains… the paragraph beginning “This chapter explains…” Overview of the Second-Level Cache “Overview of the Second-Level Cache” Cache Mode Settings for the Second-Level Cache “Cache Mode Settings for the Second-Level Cache” Controlling whether Entities May Be Cached “Controlling whether Entities May Be Cached” Specifying the Cache Mode Settings to Improve Performance “Specifying the Cache Mode Settings to Improve Performance” Setting the Cache Retrieval and Store Modes “Setting the Cache Retrieval and Store Modes” Cache Retrieval Mode “Cache Retrieval Mode” Cache Store Mode “Cache Store Mode” Setting the Cache Retrieval or Store Mode “Setting the Cache Retrieval or Store Mode” Controlling the Second-Level Cache Programmatically “Controlling the Second-Level Cache Programmatically” Overview of the javax.persistence.Cache Interface “Overview of the javax.persistence.Cache Interface” Checking whether an Entity’s Data Is Cached “Checking whether an Entity’s Data Is Cached” Removing an Entity from the Cache “Removing an Entity from the Cache” Removing All Data from the Cache “Removing All Data from the Cache” Java Message Service Concepts “Java Message Service Concepts” This chapter provides… the paragraph beginning “This chapter provides…” Overview of the JMS API “Overview of the JMS API” What Is Messaging? “What Is Messaging?” What Is the JMS API? “What Is the JMS API?” When Can You Use the JMS API? “When Can You Use the JMS API?” Messaging in an Enterprise Application “Messaging in an Enterprise Application” How Does the JMS API Work with the Java EE Platform? “How Does the JMS API Work with the Java EE Platform?” Basic JMS API Concepts “Basic JMS API Concepts” JMS API Architecture “JMS API Architecture” JMS API Architecture “JMS API Architecture” Messaging Styles “Messaging Styles” Point-to-Point Messaging Style “Point-to-Point Messaging Style” Point-to-Point Messaging “Point-to-Point Messaging” Publish/Subscribe Messaging Style “Publish/Subscribe Messaging Style” Publish/Subscribe Messaging “Publish/Subscribe Messaging” Message Consumption “Message Consumption” The JMS API Programming Model “The JMS API Programming Model” The JMS API Programming Model “The JMS API Programming Model” JMS Administered Objects “JMS Administered Objects” JMS Connection Factories “JMS Connection Factories” JMS Destinations “JMS Destinations” Connections “Connections” Sessions “Sessions” JMSContext Objects “JMSContext Objects” JMS Message Producers “JMS Message Producers” JMS Message Consumers “JMS Message Consumers” JMS Message Listeners “JMS Message Listeners” JMS Message Selectors “JMS Message Selectors” Consuming Messages from Topics “Consuming Messages from Topics” Creating Durable Subscriptions “Creating Durable Subscriptions” Nondurable Subscriptions and Consumers “Nondurable Subscriptions and Consumers” Consumers on a Durable Subscription “Consumers on a Durable Subscription” Creating Shared Subscriptions “Creating Shared Subscriptions” JMS Messages “JMS Messages” Message Headers “Message Headers” How JMS Message Header Field Values Are Set “How JMS Message Header Field Values Are Set” Message Properties “Message Properties” Message Bodies “Message Bodies” JMS Message Types “JMS Message Types” JMS Queue Browsers “JMS Queue Browsers” JMS Exception Handling “JMS Exception Handling” Using Advanced JMS Features “Using Advanced JMS Features” Controlling Message Acknowledgment “Controlling Message Acknowledgment” Specifying Options for Sending Messages “Specifying Options for Sending Messages” Specifying Message Persistence “Specifying Message Persistence” Setting Message Priority Levels “Setting Message Priority Levels” Allowing Messages to Expire “Allowing Messages to Expire” Specifying a Delivery Delay “Specifying a Delivery Delay” Using JMSProducer Method Chaining “Using JMSProducer Method Chaining” Creating Temporary Destinations “Creating Temporary Destinations” Using JMS Local Transactions “Using JMS Local Transactions” Using JMS Local Transactions “Using JMS Local Transactions” Sending Messages Asynchronously “Sending Messages Asynchronously” Using the JMS API in Java EE Applications “Using the JMS API in Java EE Applications” Overview of Using the JMS API “Overview of Using the JMS API” Creating Resources for Java EE Applications “Creating Resources for Java EE Applications” Using Resource Injection in Enterprise Bean or Web Components “Using Resource Injection in Enterprise Bean or Web Components” Injecting a ConnectionFactory, Queue, or Topic “Injecting a ConnectionFactory, Queue, or Topic” Injecting a JMSContext Object “Injecting a JMSContext Object” Using Java EE Components to Produce and to Synchronously Receive Messages “Using Java EE Components to Produce and to Synchronously Receive Messages” Managing JMS Resources in Web and EJB Components “Managing JMS Resources in Web and EJB Components” Managing Transactions in Session Beans “Managing Transactions in Session Beans” Using Message-Driven Beans to Receive Messages Asynchronously “Using Message-Driven Beans to Receive Messages Asynchronously” @ActivationConfigProperty Settings for Message-Driven Beans “@ActivationConfigProperty Settings for Message-Driven Beans” Managing JTA Transactions “Managing JTA Transactions” Further Information about JMS “Further Information about JMS” Java Message Service Examples “Java Message Service Examples” This chapter provides… the paragraph beginning “This chapter provides…” Building and Running Java Message Service Examples “Building and Running Java Message Service Examples” Overview of the JMS Examples “Overview of the JMS Examples” JMS Examples That Show the Use of Java EE Application Clients “JMS Examples That Show the Use of Java EE Application Clients” JMS Examples That Show the Use of Java EE Web and EJB Components “JMS Examples That Show the Use of Java EE Web and EJB Components” Writing Simple JMS Applications “Writing Simple JMS Applications” Overview of Writing Simple JMS Application “Overview of Writing Simple JMS Application” Starting the JMS Provider “Starting the JMS Provider” Creating JMS Administered Objects “Creating JMS Administered Objects” To Create Resources for the Simple Examples “To Create Resources for the Simple Examples” Building All the Simple Examples “Building All the Simple Examples” To Build All the Simple Examples Using NetBeans IDE “To Build All the Simple Examples Using NetBeans IDE” To Build All the Simple Examples Using Maven “To Build All the Simple Examples Using Maven” Sending Messages “Sending Messages” General Steps Performed in the Example “General Steps Performed in the Example” The Producer.java Client “The Producer.java Client” To Run the Producer Client “To Run the Producer Client” Receiving Messages Synchronously “Receiving Messages Synchronously” The SynchConsumer.java Client “The SynchConsumer.java Client” To Run the SynchConsumer and Producer Clients “To Run the SynchConsumer and Producer Clients” Using a Message Listener for Asynchronous Message Delivery “Using a Message Listener for Asynchronous Message Delivery” Writing the AsynchConsumer.java and TextListener.java Clients “Writing the AsynchConsumer.java and TextListener.java Clients” To Run the AsynchConsumer and Producer Clients “To Run the AsynchConsumer and Producer Clients” Browsing Messages on a Queue “Browsing Messages on a Queue” The MessageBrowser.java Client “The MessageBrowser.java Client” To Run the QueueBrowser Client “To Run the QueueBrowser Client” Running Multiple Consumers on the Same Destination “Running Multiple Consumers on the Same Destination” Acknowledging Messages “Acknowledging Messages” Message Acknowledgment with Synchronous and Asynchronous Consumers “Message Acknowledgment with Synchronous and Asynchronous Consumers” To Run the ClientAckConsumer Client “To Run the ClientAckConsumer Client” Writing More Advanced JMS Applications “Writing More Advanced JMS Applications” Using Durable Subscriptions “Using Durable Subscriptions” To Create Resources for the Durable Subscription Example “To Create Resources for the Durable Subscription Example” To Run the Durable Subscription Example “To Run the Durable Subscription Example” To Run the unsubscriber Example “To Run the unsubscriber Example” Using Local Transactions “Using Local Transactions” Transactions: JMS Client Example “Transactions: JMS Client Example” To Create Resources for the transactedexample Example “To Create Resources for the transactedexample Example” To Run the transactedexample Clients “To Run the transactedexample Clients” Writing High Performance and Scalable JMS Applications “Writing High Performance and Scalable JMS Applications” Using Shared Nondurable Subscriptions “Using Shared Nondurable Subscriptions” Writing the Clients for the Shared Consumer Example “Writing the Clients for the Shared Consumer Example” To Run the SharedConsumer and Producer Clients “To Run the SharedConsumer and Producer Clients” Using Shared Durable Subscriptions “Using Shared Durable Subscriptions” To Run the SharedDurableConsumer and Producer Clients “To Run the SharedDurableConsumer and Producer Clients” Sending and Receiving Messages Using a Simple Web Application “Sending and Receiving Messages Using a Simple Web Application” The websimplemessage Application “The websimplemessage Application” The websimplemessage Facelets Pages “The websimplemessage Facelets Pages” The websimplemessage Managed Beans “The websimplemessage Managed Beans” Running the websimplemessage Example “Running the websimplemessage Example” Creating Resources for the websimplemessage Example “Creating Resources for the websimplemessage Example” To Package and Deploy websimplemessage Using NetBeans IDE “To Package and Deploy websimplemessage Using NetBeans IDE” To Package and Deploy websimplemessage Using Maven “To Package and Deploy websimplemessage Using Maven” To Run the websimplemessage Example “To Run the websimplemessage Example” Receiving Messages Asynchronously Using a Message-Driven Bean “Receiving Messages Asynchronously Using a Message-Driven Bean” Overview of the simplemessage Example “Overview of the simplemessage Example” The simplemessage Application “The simplemessage Application” The simplemessage Application Client “The simplemessage Application Client” The simplemessage Message-Driven Bean Class “The simplemessage Message-Driven Bean Class” The onMessage Method “The onMessage Method” Running the simplemessage Example “Running the simplemessage Example” Creating Resources for the simplemessage Example “Creating Resources for the simplemessage Example” To Run the simplemessage Example Using NetBeans IDE “To Run the simplemessage Example Using NetBeans IDE” To Run the simplemessage Example Using Maven “To Run the simplemessage Example Using Maven” Sending Messages from a Session Bean to an MDB “Sending Messages from a Session Bean to an MDB” Writing the Application Components for the clientsessionmdb Example “Writing the Application Components for the clientsessionmdb Example” An Enterprise Bean Application: Client to Session Bean to Message-Driven Bean “An Enterprise Bean Application: Client to Session Bean to Message-Driven Bean” Coding the Application Client: MyAppClient.java “Coding the Application Client: MyAppClient.java” Coding the Publisher Session Bean “Coding the Publisher Session Bean” Coding the Message-Driven Bean: MessageBean.java “Coding the Message-Driven Bean: MessageBean.java” Running the clientsessionmdb Example “Running the clientsessionmdb Example” To Run clientsessionmdb Using NetBeans IDE “To Run clientsessionmdb Using NetBeans IDE” To Run clientsessionmdb Using Maven “To Run clientsessionmdb Using Maven” Using an Entity to Join Messages from Two MDBs “Using an Entity to Join Messages from Two MDBs” Overview of the clientmdbentity Example Application “Overview of the clientmdbentity Example Application” An Enterprise Bean Application: Client to Message-Driven Beans to Entity “An Enterprise Bean Application: Client to Message-Driven Beans to Entity” Writing the Application Components for the clientmdbentity Example “Writing the Application Components for the clientmdbentity Example” Coding the Application Client: HumanResourceClient.java “Coding the Application Client: HumanResourceClient.java” Coding the Message-Driven Beans for the clientmdbentity Example “Coding the Message-Driven Beans for the clientmdbentity Example” Coding the Entity Class for the clientmdbentity Example “Coding the Entity Class for the clientmdbentity Example” Running the clientmdbentity Example “Running the clientmdbentity Example” To Run clientmdbentity Using NetBeans IDE “To Run clientmdbentity Using NetBeans IDE” To Run clientmdbentity Using Maven “To Run clientmdbentity Using Maven” Viewing the Application Output “Viewing the Application Output” Using NetBeans IDE to Create JMS Resources “Using NetBeans IDE to Create JMS Resources” To Create JMS Resources Using NetBeans IDE “To Create JMS Resources Using NetBeans IDE” To Delete JMS Resources Using NetBeans IDE “To Delete JMS Resources Using NetBeans IDE” Introduction to Security in the Java EE Platform “Introduction to Security in the Java EE Platform” This chapter introduces… the paragraph beginning “This chapter introduces…” Overview of Java EE Security “Overview of Java EE Security” A Simple Application Security Walkthrough “A Simple Application Security Walkthrough” Step 1: Initial Request “Step 1: Initial Request” Initial Request “Initial Request” Step 2: Initial Authentication “Step 2: Initial Authentication” Initial Authentication “Initial Authentication” Step 3: URL Authorization “Step 3: URL Authorization” URL Authorization “URL Authorization” Step 4: Fulfilling the Original Request “Step 4: Fulfilling the Original Request” Fulfilling the Original Request “Fulfilling the Original Request” Step 5: Invoking Enterprise Bean Business Methods “Step 5: Invoking Enterprise Bean Business Methods” Invoking an Enterprise Bean Business Method “Invoking an Enterprise Bean Business Method” Features of a Security Mechanism “Features of a Security Mechanism” Characteristics of Application Security “Characteristics of Application Security” Security Mechanisms “Security Mechanisms” Java SE Security Mechanisms “Java SE Security Mechanisms” Java EE Security Mechanisms “Java EE Security Mechanisms” Application-Layer Security “Application-Layer Security” Transport-Layer Security “Transport-Layer Security” Message-Layer Security “Message-Layer Security” Securing Containers “Securing Containers” Using Annotations to Specify Security Information “Using Annotations to Specify Security Information” Using Deployment Descriptors for Declarative Security “Using Deployment Descriptors for Declarative Security” Using Programmatic Security “Using Programmatic Security” Securing GlassFish Server “Securing GlassFish Server” Working with Realms, Users, Groups, and Roles “Working with Realms, Users, Groups, and Roles” What Are Realms, Users, Groups, and Roles? “What Are Realms, Users, Groups, and Roles?” Mapping Roles to Users and Groups “Mapping Roles to Users and Groups” What Is a Realm? “What Is a Realm?” What Is a User? “What Is a User?” What Is a Group? “What Is a Group?” What Is a Role? “What Is a Role?” Some Other Terminology “Some Other Terminology” Managing Users and Groups in GlassFish Server “Managing Users and Groups in GlassFish Server” To Add Users to GlassFish Server “To Add Users to GlassFish Server” Setting Up Security Roles “Setting Up Security Roles” Mapping Roles to Users and Groups “Mapping Roles to Users and Groups” Establishing a Secure Connection Using SSL “Establishing a Secure Connection Using SSL” Verifying and Configuring SSL Support “Verifying and Configuring SSL Support” Further Information about Security “Further Information about Security” Getting Started Securing Web Applications “Getting Started Securing Web Applications” This chapter describes… the paragraph beginning “This chapter describes…” Overview of Web Application Security “Overview of Web Application Security” Securing Web Applications “Securing Web Applications” Overview of Securing Web Applications “Overview of Securing Web Applications” Specifying Security Constraints “Specifying Security Constraints” Specifying a Web Resource Collection “Specifying a Web Resource Collection” Specifying an Authorization Constraint “Specifying an Authorization Constraint” Specifying a Secure Connection “Specifying a Secure Connection” Specifying Security Constraints for Resources “Specifying Security Constraints for Resources” Specifying Authentication Mechanisms “Specifying Authentication Mechanisms” HTTP Basic Authentication “HTTP Basic Authentication” HTTP Basic Authentication “HTTP Basic Authentication” Form-Based Authentication “Form-Based Authentication” Form-Based Authentication “Form-Based Authentication” Digest Authentication “Digest Authentication” Specifying an Authentication Mechanism in the Deployment Descriptor “Specifying an Authentication Mechanism in the Deployment Descriptor” Declaring Security Roles “Declaring Security Roles” Using Programmatic Security with Web Applications “Using Programmatic Security with Web Applications” Authenticating Users Programmatically “Authenticating Users Programmatically” Checking Caller Identity Programmatically “Checking Caller Identity Programmatically” Example Code for Programmatic Security “Example Code for Programmatic Security” Declaring and Linking Role References “Declaring and Linking Role References” Examples: Securing Web Applications “Examples: Securing Web Applications” Overview of Examples of Securing Web Applications “Overview of Examples of Securing Web Applications” To Set Up Your System for Running the Security Examples “To Set Up Your System for Running the Security Examples” The hello2-basicauth Example: Basic Authentication with a Servlet “The hello2-basicauth Example: Basic Authentication with a Servlet” Specifying Security for Basic Authentication Using Annotations “Specifying Security for Basic Authentication Using Annotations” To Build, Package, and Deploy the hello2-basicauth Example Using NetBeans IDE “To Build, Package, and Deploy the hello2-basicauth Example Using NetBeans IDE” To Build, Package, and Deploy the hello2-basicauth Example Using Maven “To Build, Package, and Deploy the hello2-basicauth Example Using Maven” To Run the hello2-basicauth Example “To Run the hello2-basicauth Example” The hello1-formauth Example: Form-Based Authentication with a JavaServer Faces Application “The hello1-formauth Example: Form-Based Authentication with a JavaServer Faces Application” Creating the Login Form and the Error Page “Creating the Login Form and the Error Page” Specifying Security for the Form-Based Authentication Example “Specifying Security for the Form-Based Authentication Example” To Build, Package, and Deploy the hello1-formauth Example Using NetBeans IDE “To Build, Package, and Deploy the hello1-formauth Example Using NetBeans IDE” To Build, Package, and Deploy the hello1-formauth Example Using Maven and the asadmin Command “To Build, Package, and Deploy the hello1-formauth Example Using Maven and the asadmin Command” To Run the hello1-formauth Example “To Run the hello1-formauth Example” Next Steps “Next Steps” Getting Started Securing Enterprise Applications “Getting Started Securing Enterprise Applications” This chapter describes… the paragraph beginning “This chapter describes…” Basic Security Tasks for Enterprise Applications “Basic Security Tasks for Enterprise Applications” Securing Enterprise Beans “Securing Enterprise Beans” Securing an Enterprise Bean Using Declarative Security “Securing an Enterprise Bean Using Declarative Security” Specifying Authorized Users by Declaring Security Roles “Specifying Authorized Users by Declaring Security Roles” Specifying an Authentication Mechanism and Secure Connection “Specifying an Authentication Mechanism and Secure Connection” Securing an Enterprise Bean Programmatically “Securing an Enterprise Bean Programmatically” Accessing an Enterprise Bean Caller’s Security Context “Accessing an Enterprise Bean Caller’s Security Context” Propagating a Security Identity (Run-As) “Propagating a Security Identity (Run-As)” Security Identity Propagation “Security Identity Propagation” Configuring a Component’s Propagated Security Identity “Configuring a Component’s Propagated Security Identity” Trust between Containers “Trust between Containers” Deploying Secure Enterprise Beans “Deploying Secure Enterprise Beans” Examples: Securing Enterprise Beans “Examples: Securing Enterprise Beans” The cart-secure Example: Securing an Enterprise Bean with Declarative Security “The cart-secure Example: Securing an Enterprise Bean with Declarative Security” Annotating the Bean “Annotating the Bean” To Run the cart-secure Example Using NetBeans IDE “To Run the cart-secure Example Using NetBeans IDE” To Run the cart-secure Example Using Maven “To Run the cart-secure Example Using Maven” The converter-secure Example: Securing an Enterprise Bean with Programmatic Security “The converter-secure Example: Securing an Enterprise Bean with Programmatic Security” Modifying ConverterBean “Modifying ConverterBean” Modifying ConverterServlet “Modifying ConverterServlet” To Run the converter-secure Example Using NetBeans IDE “To Run the converter-secure Example Using NetBeans IDE” To Run the converter-secure Example Using Maven “To Run the converter-secure Example Using Maven” To Run the converter-secure Example “To Run the converter-secure Example” Java EE Security: Advanced Topics “Java EE Security: Advanced Topics” This chapter provides… the paragraph beginning “This chapter provides…” Working with Digital Certificates “Working with Digital Certificates” Creating a Server Certificate “Creating a Server Certificate” To Use keytool to Create a Server Certificate “To Use keytool to Create a Server Certificate” Adding Users to the Certificate Realm “Adding Users to the Certificate Realm” Using a Different Server Certificate with GlassFish Server “Using a Different Server Certificate with GlassFish Server” To Specify a Different Server Certificate “To Specify a Different Server Certificate” Authentication Mechanisms “Authentication Mechanisms” Client Authentication “Client Authentication” Mutual Authentication “Mutual Authentication” Certificate-Based Mutual Authentication “Certificate-Based Mutual Authentication” User Name/Password-Based Mutual Authentication “User Name/Password-Based Mutual Authentication” Enabling Mutual Authentication over SSL “Enabling Mutual Authentication over SSL” Creating a Client Certificate for Mutual Authentication “Creating a Client Certificate for Mutual Authentication” Using the JDBC Realm for User Authentication “Using the JDBC Realm for User Authentication” To Configure a JDBC Authentication Realm “To Configure a JDBC Authentication Realm” Securing HTTP Resources “Securing HTTP Resources” Securing Application Clients “Securing Application Clients” Using Login Modules “Using Login Modules” Using Programmatic Login “Using Programmatic Login” Securing Enterprise Information Systems Applications “Securing Enterprise Information Systems Applications” Overview of Securing Enterprise Information Systems Applications “Overview of Securing Enterprise Information Systems Applications” Container-Managed Sign-On “Container-Managed Sign-On” Component-Managed Sign-On “Component-Managed Sign-On” Configuring Resource Adapter Security “Configuring Resource Adapter Security” Mapping an Application Principal to EIS Principals “Mapping an Application Principal to EIS Principals” Configuring Security Using Deployment Descriptors “Configuring Security Using Deployment Descriptors” Specifying Security for Basic Authentication in the Deployment Descriptor “Specifying Security for Basic Authentication in the Deployment Descriptor” Specifying Non-Default Principal-to-Role Mapping in the Deployment Descriptor “Specifying Non-Default Principal-to-Role Mapping in the Deployment Descriptor” Further Information about Advanced Security Topics “Further Information about Advanced Security Topics” Transactions “Transactions” This chapter describes… the paragraph beginning “This chapter describes…” Overview of Transactions “Overview of Transactions” Transactions in Java EE Applications “Transactions in Java EE Applications” What Is a Transaction? “What Is a Transaction?” Container-Managed Transactions “Container-Managed Transactions” Transaction Attributes “Transaction Attributes” Transaction Scope “Transaction Scope” Required Attribute “Required Attribute” RequiresNew Attribute “RequiresNew Attribute” Mandatory Attribute “Mandatory Attribute” NotSupported Attribute “NotSupported Attribute” Supports Attribute “Supports Attribute” Never Attribute “Never Attribute” Summary of Transaction Attributes “Summary of Transaction Attributes” Transaction Attributes and Scope “Transaction Attributes and Scope” Setting Transaction Attributes “Setting Transaction Attributes” TransactionAttributeType Constants “TransactionAttributeType Constants” Rolling Back a Container-Managed Transaction “Rolling Back a Container-Managed Transaction” Synchronizing a Session Bean’s Instance Variables “Synchronizing a Session Bean’s Instance Variables” Methods Not Allowed in Container-Managed Transactions “Methods Not Allowed in Container-Managed Transactions” Bean-Managed Transactions “Bean-Managed Transactions” JTA Transactions “JTA Transactions” Returning without Committing “Returning without Committing” Methods Not Allowed in Bean-Managed Transactions “Methods Not Allowed in Bean-Managed Transactions” Transaction Timeouts “Transaction Timeouts” To Set a Transaction Timeout “To Set a Transaction Timeout” Updating Multiple Databases “Updating Multiple Databases” Updating Multiple Databases “Updating Multiple Databases” Updating Multiple Databases Across Java EE Servers “Updating Multiple Databases Across Java EE Servers” Transactions in Web Components “Transactions in Web Components” Further Information about Transactions “Further Information about Transactions” Resource Adapters and Contracts “Resource Adapters and Contracts” This chapter examines… the paragraph beginning “This chapter examines…” What Is a Resource Adapter? “What Is a Resource Adapter?” Resource Adapters “Resource Adapters” Management Contracts “Management Contracts” Lifecycle Management “Lifecycle Management” Work Management Contract “Work Management Contract” Generic Work Context Contract “Generic Work Context Contract” Outbound and Inbound Contracts “Outbound and Inbound Contracts” Metadata Annotations “Metadata Annotations” Common Client Interface “Common Client Interface” Using Resource Adapters with Contexts and Dependency Injection for Java EE (CDI) “Using Resource Adapters with Contexts and Dependency Injection for Java EE (CDI)” Further Information about Resource Adapters “Further Information about Resource Adapters” The Resource Adapter Examples “The Resource Adapter Examples” This chapter describes… the paragraph beginning “This chapter describes…” Overview of the Resource Adapter Examples “Overview of the Resource Adapter Examples” The trading Example “The trading Example” The trading Example “The trading Example” Using the Outbound Resource Adapter “Using the Outbound Resource Adapter” Classes and Interfaces in the javaeetutorial.trading.rar.api Package “Classes and Interfaces in the javaeetutorial.trading.rar.api Package” Implementing the Outbound Resource Adapter “Implementing the Outbound Resource Adapter” Architecture of the trading Example “Architecture of the trading Example” Interfaces Implemented in the trading-rar Module “Interfaces Implemented in the trading-rar Module” Running the trading Example “Running the trading Example” To Run the trading Example Using NetBeans IDE “To Run the trading Example Using NetBeans IDE” To Run the trading Example Using Maven “To Run the trading Example Using Maven” The traffic Example “The traffic Example” The traffic Example “The traffic Example” Using the Inbound Resource Adapter “Using the Inbound Resource Adapter” Implementing the Inbound Resource Adapter “Implementing the Inbound Resource Adapter” Architecture of the traffic Example “Architecture of the traffic Example” Interfaces Implemented in the traffic-rar Module “Interfaces Implemented in the traffic-rar Module” Running the traffic Example “Running the traffic Example” To Run the traffic Example Using NetBeans IDE “To Run the traffic Example Using NetBeans IDE” To Run the traffic Example Using Maven “To Run the traffic Example Using Maven” Using Java EE Interceptors “Using Java EE Interceptors” This chapter discusses… the paragraph beginning “This chapter discusses…” Overview of Interceptors “Overview of Interceptors” Interceptor Metadata Annotations “Interceptor Metadata Annotations” Interceptor Classes “Interceptor Classes” Interceptor Lifecycle “Interceptor Lifecycle” Interceptors and CDI “Interceptors and CDI” Using Interceptors “Using Interceptors” Intercepting Method Invocations “Intercepting Method Invocations” Using Multiple Method Interceptors “Using Multiple Method Interceptors” Accessing Target Method Parameters from an Interceptor Class “Accessing Target Method Parameters from an Interceptor Class” Intercepting Lifecycle Callback Events “Intercepting Lifecycle Callback Events” Using AroundConstruct Interceptor Methods “Using AroundConstruct Interceptor Methods” Using Multiple Lifecycle Callback Interceptors “Using Multiple Lifecycle Callback Interceptors” Intercepting Timeout Events “Intercepting Timeout Events” Using Multiple Timeout Interceptors “Using Multiple Timeout Interceptors” Binding Interceptors to Components “Binding Interceptors to Components” Declaring the Interceptor Bindings on an Interceptor Class “Declaring the Interceptor Bindings on an Interceptor Class” Binding a Component to an Interceptor “Binding a Component to an Interceptor” Ordering Interceptors “Ordering Interceptors” Interceptor Priority Constants “Interceptor Priority Constants” The interceptor Example Application “The interceptor Example Application” Running the interceptor Example “Running the interceptor Example” To Run the interceptor Example Using NetBeans IDE “To Run the interceptor Example Using NetBeans IDE” To Run the interceptor Example Using Maven “To Run the interceptor Example Using Maven” Batch Processing “Batch Processing” This chapter describes… the paragraph beginning “This chapter describes…” Introduction to Batch Processing “Introduction to Batch Processing” Steps in Batch Jobs “Steps in Batch Jobs” Chunk Steps in a Batch Job “Chunk Steps in a Batch Job” Parallel Processing “Parallel Processing” Status and Decision Elements “Status and Decision Elements” Steps and Decision Elements in a Job “Steps and Decision Elements in a Job” Batch Framework Functionality “Batch Framework Functionality” Batch Processing in Java EE “Batch Processing in Java EE” The Batch Processing Framework “The Batch Processing Framework” Creating Batch Applications “Creating Batch Applications” Elements of a Batch Job “Elements of a Batch Job” Properties and Parameters “Properties and Parameters” Job Instances and Job Executions “Job Instances and Job Executions” Batch and Exit Status “Batch and Exit Status” Batch Status Values “Batch Status Values” Simple Use Case “Simple Use Case” Chunk Step “Chunk Step” Task Step “Task Step” Using the Job Specification Language “Using the Job Specification Language” The job Element “The job Element” The step Element “The step Element” The chunk Element “The chunk Element” Attributes of the chunk Element “Attributes of the chunk Element” The batchlet Element “The batchlet Element” The partition Element “The partition Element” The flow Element “The flow Element” The split Element “The split Element” The decision Element “The decision Element” Creating Batch Artifacts “Creating Batch Artifacts” Batch Artifact Interfaces “Batch Artifact Interfaces” Main Batch Artifact Interfaces “Main Batch Artifact Interfaces” Partition Batch Artifact Interfaces “Partition Batch Artifact Interfaces” Listener Batch Artifact Interfaces “Listener Batch Artifact Interfaces” Dependency Injection in Batch Artifacts “Dependency Injection in Batch Artifacts” Using the Context Objects from the Batch Runtime “Using the Context Objects from the Batch Runtime” Submitting Jobs to the Batch Runtime “Submitting Jobs to the Batch Runtime” Starting a Job “Starting a Job” Checking the Status of a Job “Checking the Status of a Job” Invoking the Batch Runtime in Your Application “Invoking the Batch Runtime in Your Application” Packaging Batch Applications “Packaging Batch Applications” The webserverlog Example Application “The webserverlog Example Application” Architecture of the webserverlog Example Application “Architecture of the webserverlog Example Application” The Job Definition File “The Job Definition File” The LogLine and LogFilteredLine Items “The LogLine and LogFilteredLine Items” The Chunk Step Batch Artifacts “The Chunk Step Batch Artifacts” The Listener Batch Artifacts “The Listener Batch Artifacts” The Task Step Batch Artifact “The Task Step Batch Artifact” The JavaServer Faces Pages “The JavaServer Faces Pages” The Managed Bean “The Managed Bean” Running the webserverlog Example Application “Running the webserverlog Example Application” To Run the webserverlog Example Application Using NetBeans IDE “To Run the webserverlog Example Application Using NetBeans IDE” To Run the webserverlog Example Application Using Maven “To Run the webserverlog Example Application Using Maven” The phonebilling Example Application “The phonebilling Example Application” Architecture of the phonebilling Example Application “Architecture of the phonebilling Example Application” The Job Definition File “The Job Definition File” The CallRecord and PhoneBill Entities “The CallRecord and PhoneBill Entities” The Call Records Chunk Step “The Call Records Chunk Step” The Phone Billing Chunk Step “The Phone Billing Chunk Step” The JavaServer Faces Pages “The JavaServer Faces Pages” The Managed Bean “The Managed Bean” Running the phonebilling Example Application “Running the phonebilling Example Application” To Run the phonebilling Example Application Using NetBeans IDE “To Run the phonebilling Example Application Using NetBeans IDE” To Run the phonebilling Example Application Using Maven “To Run the phonebilling Example Application Using Maven” Further Information about Batch Processing “Further Information about Batch Processing” Concurrency Utilities for Java EE “Concurrency Utilities for Java EE” This chapter describes… the paragraph beginning “This chapter describes…” Concurrency Basics “Concurrency Basics” Threads and Processes “Threads and Processes” Main Components of the Concurrency Utilities “Main Components of the Concurrency Utilities” Concurrency and Transactions “Concurrency and Transactions” Concurrency and Security “Concurrency and Security” The jobs Concurrency Example “The jobs Concurrency Example” Running the jobs Example “Running the jobs Example” To Configure GlassFish Server for the Basic Concurrency Example “To Configure GlassFish Server for the Basic Concurrency Example” To Build, Package, and Deploy the jobs Example Using NetBeans IDE “To Build, Package, and Deploy the jobs Example Using NetBeans IDE” To Build, Package, and Deploy the jobs Example Using Maven “To Build, Package, and Deploy the jobs Example Using Maven” To Run the jobs Example and Submit Jobs with Low Priority “To Run the jobs Example and Submit Jobs with Low Priority” To Run the jobs Example and Submit Jobs with High Priority “To Run the jobs Example and Submit Jobs with High Priority” The taskcreator Concurrency Example “The taskcreator Concurrency Example” Architecture of the taskcreator Example “Architecture of the taskcreator Example” Running the taskcreator Example “Running the taskcreator Example” To Build, Package, and Deploy the taskcreator Example Using NetBeans IDE “To Build, Package, and Deploy the taskcreator Example Using NetBeans IDE” To Build, Package, and Deploy the taskcreator Example Using Maven “To Build, Package, and Deploy the taskcreator Example Using Maven” To Run the taskcreator Example “To Run the taskcreator Example” Further Information about the Concurrency Utilities “Further Information about the Concurrency Utilities” Duke’s Bookstore Case Study Example “Duke’s Bookstore Case Study Example” The Duke’s Bookstore… the paragraph beginning “The Duke’s Bookstore…” Design and Architecture of Duke’s Bookstore “Design and Architecture of Duke’s Bookstore” The Duke’s Bookstore Interface “The Duke’s Bookstore Interface” The Book Java Persistence API Entity “The Book Java Persistence API Entity” Enterprise Beans Used in Duke’s Bookstore “Enterprise Beans Used in Duke’s Bookstore” Facelets Pages and Managed Beans Used in Duke’s Bookstore “Facelets Pages and Managed Beans Used in Duke’s Bookstore” Custom Components and Other Custom Objects Used in Duke’s Bookstore “Custom Components and Other Custom Objects Used in Duke’s Bookstore” Properties Files Used in Duke’s Bookstore “Properties Files Used in Duke’s Bookstore” Deployment Descriptors Used in Duke’s Bookstore “Deployment Descriptors Used in Duke’s Bookstore” Running the Duke’s Bookstore Case Study Application “Running the Duke’s Bookstore Case Study Application” To Build and Deploy Duke’s Bookstore Using NetBeans IDE “To Build and Deploy Duke’s Bookstore Using NetBeans IDE” To Build and Deploy Duke’s Bookstore Using Maven “To Build and Deploy Duke’s Bookstore Using Maven” To Run Duke’s Bookstore “To Run Duke’s Bookstore” Duke’s Tutoring Case Study Example “Duke’s Tutoring Case Study Example” The Duke’s Tutoring… the paragraph beginning “The Duke’s Tutoring…” Design and Architecture of Duke’s Tutoring “Design and Architecture of Duke’s Tutoring” Architecture of the Duke’s Tutoring Example Application “Architecture of the Duke’s Tutoring Example Application” Main Interface “Main Interface” Java Persistence API Entities Used in the Main Interface “Java Persistence API Entities Used in the Main Interface” Enterprise Beans Used in the Main Interface “Enterprise Beans Used in the Main Interface” WebSocket Endpoint Used in the Main Interface “WebSocket Endpoint Used in the Main Interface” Facelets Files Used in the Main Interface “Facelets Files Used in the Main Interface” Helper Classes Used in the Main Interface “Helper Classes Used in the Main Interface” Properties Files “Properties Files” Deployment Descriptors Used in Duke’s Tutoring “Deployment Descriptors Used in Duke’s Tutoring” Administration Interface “Administration Interface” Enterprise Beans Used in the Administration Interface “Enterprise Beans Used in the Administration Interface” Facelets Files Used in the Administration Interface “Facelets Files Used in the Administration Interface” CDI Managed Beans Used in the Administration Interface “CDI Managed Beans Used in the Administration Interface” Helper Classes Used in the Administration Interface “Helper Classes Used in the Administration Interface” Running the Duke’s Tutoring Case Study Application “Running the Duke’s Tutoring Case Study Application” Running Duke’s Tutoring “Running Duke’s Tutoring” To Build and Deploy Duke’s Tutoring Using NetBeans IDE “To Build and Deploy Duke’s Tutoring Using NetBeans IDE” Before You Begin “Before You Begin” To Build and Deploy Duke’s Tutoring Using Maven “To Build and Deploy Duke’s Tutoring Using Maven” Using Duke’s Tutoring “Using Duke’s Tutoring” Duke’s Forest Case Study Example “Duke’s Forest Case Study Example” This chapter describes… the paragraph beginning “This chapter describes…” Overview of the Duke’s Forest Case Study Example “Overview of the Duke’s Forest Case Study Example” Design and Architecture of Duke’s Forest “Design and Architecture of Duke’s Forest” Architecture of the Duke’s Forest Example Application “Architecture of the Duke’s Forest Example Application” Interactions between Duke’s Forest Components “Interactions between Duke’s Forest Components” The events Project “The events Project” The entities Project “The entities Project” Duke’s Forest Database Tables and Their Relationships “Duke’s Forest Database Tables and Their Relationships” The dukes-payment Project “The dukes-payment Project” The dukes-resources Project “The dukes-resources Project” The Duke’s Store Project “The Duke’s Store Project” Enterprise Beans Used in Duke’s Store “Enterprise Beans Used in Duke’s Store” Facelets Files Used in the Main Interface of Duke’s Store “Facelets Files Used in the Main Interface of Duke’s Store” Facelets Files Used in the Administration Interface of Duke’s Store “Facelets Files Used in the Administration Interface of Duke’s Store” Managed Beans Used in Duke’s Store “Managed Beans Used in Duke’s Store” Helper Classes Used in Duke’s Store “Helper Classes Used in Duke’s Store” Qualifiers Used in Duke’s Store “Qualifiers Used in Duke’s Store” Event Handlers Used in Duke’s Store “Event Handlers Used in Duke’s Store” Deployment Descriptors Used in Duke’s Store “Deployment Descriptors Used in Duke’s Store” The Duke’s Shipment Project “The Duke’s Shipment Project” Enterprise Beans Used in Duke’s Shipment “Enterprise Beans Used in Duke’s Shipment” Facelets Files Used in Duke’s Shipment “Facelets Files Used in Duke’s Shipment” Managed Beans Used in Duke’s Shipment “Managed Beans Used in Duke’s Shipment” Helper Class Used in Duke’s Shipment “Helper Class Used in Duke’s Shipment” Qualifier Used in Duke’s Shipment “Qualifier Used in Duke’s Shipment” Deployment Descriptors Used in Duke’s Shipment “Deployment Descriptors Used in Duke’s Shipment” Building and Deploying the Duke’s Forest Case Study Application “Building and Deploying the Duke’s Forest Case Study Application” To Build and Deploy the Duke’s Forest Application Using NetBeans IDE “To Build and Deploy the Duke’s Forest Application Using NetBeans IDE” To Build and Deploy the Duke’s Forest Application Using Maven “To Build and Deploy the Duke’s Forest Application Using Maven” Running the Duke’s Forest Application “Running the Duke’s Forest Application” To Register as a Duke’s Store Customer “To Register as a Duke’s Store Customer” To Purchase Products “To Purchase Products” To Approve Shipment of a Product “To Approve Shipment of a Product” To Create a New Product “To Create a New Product”

    +
    + +
    + + + \ No newline at end of file diff --git a/title.html b/title.html index 130c4e9..c839fd0 100644 --- a/title.html +++ b/title.html @@ -3,37 +3,50 @@ - Java EE Tutorial + Java Platform, Enterprise Edition The Java EE Tutorial, Release 8 - + - - - - + + + +
    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 7 Java Platform, Enterprise Edition
    -E39031-02
    - + +
    +
    +
    +++++ + - - - -
     Go To Table Of Contents
    -Contents
    -

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

    Go To Table Of Contents
    +Contents

    -
    - +
    +
    +++++ + - - - + + + +
    Previous
    -Previous
     
    Next
    -Next
     

    Previous
    +Previous
     

    Next
    +Next

     

    + +

    Java Platform, Enterprise Edition

    @@ -41,26 +54,24 @@

    Java Platform, Enterprise Edition

    The Java EE Tutorial

    -

    Release 7

    -
    -
    -

    E39031-02

    +

    Release 8

    -

    September 2014

    +

    E63026-01

    -

    Beta Draft

    +

    August 2017


    -

    Java Platform, Enterprise Edition The Java EE Tutorial, Release 7

    +

    Java Platform, Enterprise Edition The Java EE Tutorial, Release 8

    -

    E39031-02

    +

    E63026-01

    -

    Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

    +

    Copyright © 2014, 2017 Oracle and/or its affiliates. All rights +reserved.

    Primary Author:  Eric Jendrock, Ricardo Cervera-Navarro, Ian Evans, Kim @@ -139,73 +150,32 @@

    Java Platform, Enterprise Edition

    products, or services, except as set forth in an applicable agreement between you and Oracle.

    -
    -

    This documentation is in preproduction status and is intended for -demonstration and preliminary use only. It may not be specific to the -hardware on which you are using the software. Oracle Corporation and its -affiliates are not responsible for and expressly disclaim all warranties -of any kind with respect to this documentation and will not be -responsible for any loss, costs, or damages incurred due to the use of -this documentation.

    -
    -
    -

    The information contained in this document is for informational sharing -purposes only and should be considered in your capacity as a customer -advisory board member or pursuant to your beta trial agreement only. It -is not a commitment to deliver any material, code, or functionality, and -should not be relied upon in making purchasing decisions. The -development, release, and timing of any features or functionality -described in this document remains at the sole discretion of Oracle.

    -
    -
    -

    This document in any form, software or printed matter, contains -proprietary information that is the exclusive property of Oracle. Your -access to and use of this confidential material is subject to the terms -and conditions of your Oracle Master Agreement, Oracle License and -Services Agreement, Oracle PartnerNetwork Agreement, Oracle distribution -agreement, or other license agreement which has been executed by you and -Oracle and with which you agree to comply. This document and information -contained herein may not be disclosed, copied, reproduced, or -distributed to anyone outside Oracle without prior written consent of -Oracle. This document is not part of your license agreement nor can it -be incorporated into any contractual agreement with Oracle or its -subsidiaries or affiliates.

    -
    -
    - ---- - - - + + + + + + +
    - ---- - - - - -
     Previous
    -Previous
     
    Next
    -Next
    -
    Oracle Logo
    -Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

    -
    - +
    +
    ++++++++ + - - - -
     Go To Table Of Contents
    -Contents
    -

    Previous
    +Previous
     

    Next
    +Next

    Oracle Logo +
    +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    +Contents

    -

    diff --git a/toc.html b/toc.html index ad057e3..3bb6a48 100644 --- a/toc.html +++ b/toc.html @@ -3,47 +3,54 @@ - Table Of Content + Java Platform, Enterprise Edition The Java EE Tutorial Java Platform, Enterprise Edition, Release 8 - + - - - - + + + +
    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 7 Java Platform, Enterprise Edition
    -E39031-02
    - + +
    +
    +
    +++++ + - - - -
     Go To Table Of Contents
    -Contents
    -

    Java Platform, Enterprise Edition The Java EE Tutorial
    +Release 8 Java Platform, Enterprise Edition
    +E63026-01

     

    -
    - +
    +
    +++++ + - - + + + +
    Next
    -Next
     

    Next
    +Next

     

    + +

    Contents

    Preface

    @@ -1028,7 +1035,7 @@

    9 Expression Language

    -

    10 Using JavaServer Faces Technology in Web Pages

    +

    10 Using JavaServer Faces Technology in WebPages

    • @@ -1207,7 +1214,7 @@

      -

      11 Using Converters, Listeners, and Validators

      +

      11 Using Converters, Listeners, andValidators

      • @@ -1285,7 +1292,7 @@

        -

        12 Developing with JavaServer Faces Technology

        +

        12 Developing with JavaServer FacesTechnology

        • @@ -1502,7 +1509,7 @@

          -

          14 Composite Components: Advanced Topics and an Example

          +

          14 Composite Components: Advanced Topicsand an Example

          • @@ -1558,7 +1565,7 @@

            -

            15 Creating Custom UI Components and Other Custom Objects

            +

            15 Creating Custom UI Components and OtherCustom Objects

            -

            20 Internationalizing and Localizing Web Applications

            +

            20 Internationalizing and Localizing WebApplications

            • @@ -2628,7 +2635,7 @@

            -

            22 Bean Validation: Advanced Topics

            +

            22 Bean Validation: AdvancedTopics

            -

            33 Getting Started with Enterprise Beans

            +

            33 Getting Started with EnterpriseBeans

            • @@ -3813,7 +3837,7 @@

              -

              34 Running the Enterprise Bean Examples

              +

              34 Running the Enterprise BeanExamples

              • @@ -4024,7 +4048,7 @@

                -

                35 Using the Embedded Enterprise Bean Container

                +

                35 Using the Embedded Enterprise BeanContainer

                • @@ -4086,7 +4110,7 @@

                  -

                  36 Using Asynchronous Method Invocation in Session Beans

                  +

                  36 Using Asynchronous Method Invocation inSession Beans

                  • @@ -4129,7 +4153,7 @@

                    36.2.2 Running the async Example

                    +

                    36.2.2 Running the async Example

                    -

                    37 Introduction to the Java Persistence API

                    +

                    37 Introduction to the Java PersistenceAPI

                    • @@ -4323,11 +4347,11 @@

                      @@ -4341,7 +4365,7 @@

                      -

                      38 Running the Persistence Examples

                      +

                      38 Running the PersistenceExamples

                      • @@ -4559,7 +4583,7 @@

                        -

                        39 The Java Persistence Query Language

                        +

                        39 The Java Persistence QueryLanguage

                        • @@ -4847,7 +4871,7 @@

                          -

                          40 Using the Criteria API to Create Queries

                          +

                          40 Using the Criteria API to CreateQueries

                          • @@ -4938,7 +4962,7 @@

                            -

                            41 Creating and Using String-Based Criteria Queries

                            +

                            41 Creating and UsingString-Based Criteria Queries

                            • @@ -4957,7 +4981,7 @@

                              -

                              42 Controlling Concurrent Access to Entity Data with Locking

                              +

                              42 Controlling Concurrent Access toEntity Data with Locking

                              • @@ -4998,7 +5022,7 @@

                                -

                                43 Creating Fetch Plans with Entity Graphs

                                +

                                43 Creating Fetch Plans withEntity Graphs

                                • @@ -5011,11 +5035,11 @@

                                  • -

                                    43.2.1 The Default +

                                    43.2.1 The Default Entity Graph

                                  • -

                                    43.2.2 Using Entity +

                                    43.2.2 Using Entity Graphs in Persistence Operations

                                      @@ -5037,11 +5061,11 @@

                                      @@ -5055,7 +5079,7 @@

                                      -

                                      44 Using a Second-Level Cache with Java Persistence API Applications

                                      +

                                      44 Using a Second-Level Cache with JavaPersistence API Applications

                                      • @@ -5511,7 +5535,7 @@

                                        46 Java
                                        @@ -5530,7 +5554,7 @@

                                        46 Java
                                        • -

                                          46.4.2.1 To Create Resources for +

                                          46.4.2.1 To Create Resources for the transactedexample Example

                                        • @@ -5554,11 +5578,11 @@

                                          46 Java
                                          @@ -5570,7 +5594,7 @@

                                          46 Java
                                          @@ -5585,15 +5609,15 @@

                                          46 Java
                                          • -

                                            46.6.1 The websimplemessage +

                                            46.6.1 The websimplemessage Facelets Pages

                                          • -

                                            46.6.2 The websimplemessage +

                                            46.6.2 The websimplemessage Managed Beans

                                          • -

                                            46.6.3 Running the +

                                            46.6.3 Running the websimplemessage Example

                                              @@ -5786,7 +5810,7 @@

                                              Part X Security
                                              -

                                              47 Introduction to Security in the Java EE Platform

                                              +

                                              47 Introduction to Security in the Java EEPlatform

                                              • @@ -5948,7 +5972,7 @@

                                                -

                                                48 Getting Started Securing Web Applications

                                                +

                                                48 Getting Started Securing WebApplications

                                                • @@ -6112,7 +6136,7 @@

                                                  -

                                                  49 Getting Started Securing Enterprise Applications

                                                  +

                                                  49 Getting Started Securing EnterpriseApplications

                                                  • @@ -6261,7 +6285,7 @@

                                                    @@ -6301,7 +6325,7 @@

                                                    @@ -6464,7 +6488,7 @@

                                                    51 Transactions

                                                  • -

                                                    53.2.2 Implementing the +

                                                    53.2.2 Implementing the Outbound Resource Adapter

                                                  • -

                                                    53.2.3 Running the trading +

                                                    53.2.3 Running the trading Example

                                                      @@ -6574,15 +6598,15 @@

                                                      53
                                                      -

                                                      56 Concurrency Utilities for Java EE

                                                      +

                                                      56 Concurrency Utilities for JavaEE

                                                      diff --git a/transactions.html b/transactions.html new file mode 100644 index 0000000..f28f661 --- /dev/null +++ b/transactions.html @@ -0,0 +1,121 @@ + + + + + + Transactions + + + + + +
                                                      +
                                                      + +++++ + + + + + + + +

                                                      Java Platform, Enterprise Edition The Java EE Tutorial
                                                      +Release 8 Java Platform, Enterprise Edition
                                                      +E63026-01

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      + +++++ + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                       

                                                      +
                                                      +
                                                      +
                                                      + + + \ No newline at end of file diff --git a/transactions001.html b/transactions001.html new file mode 100644 index 0000000..57520da --- /dev/null +++ b/transactions001.html @@ -0,0 +1,96 @@ + + + + + + Overview of Transactions + + + + + +
                                                      +
                                                      + +++++ + + + + + + + +

                                                      Java Platform, Enterprise Edition The Java EE Tutorial
                                                      +Release 8 Java Platform, Enterprise Edition
                                                      +E63026-01

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      + +++++ + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                       

                                                      +
                                                      +
                                                      +
                                                      +

                                                      51.1 Overview of Transactions

                                                      +
                                                      +
                                                      +

                                                      A typical enterprise application accesses and stores information in one +or more databases. Because this information is critical for business +operations, it must be accurate, current, and reliable. Data integrity +would be lost if multiple programs were allowed to update the same +information simultaneously or if a system that failed while processing a +business transaction were to leave the affected data only partially +updated. By preventing both of these scenarios, software transactions +ensure data integrity. Transactions control the concurrent access of +data by multiple programs. In the event of a system failure, +transactions make sure that after recovery, the data will be in a +consistent state.

                                                      +
                                                      +
                                                      + ++++++++ + + + + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                      Oracle Logo +
                                                      +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      +
                                                      + + + \ No newline at end of file diff --git a/transactions002.html b/transactions002.html new file mode 100644 index 0000000..e6a61e8 --- /dev/null +++ b/transactions002.html @@ -0,0 +1,111 @@ + + + + + + Transactions in Java EE Applications + + + + + +
                                                      +
                                                      + +++++ + + + + + + + +

                                                      Java Platform, Enterprise Edition The Java EE Tutorial
                                                      +Release 8 Java Platform, Enterprise Edition
                                                      +E63026-01

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      + +++++ + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                       

                                                      +
                                                      +
                                                      +
                                                      +

                                                      51.2 Transactions in Java EE Applications

                                                      +
                                                      +
                                                      +

                                                      In a Java EE application, a transaction is a series of actions that must +all complete successfully, or else all the changes in each action are +backed out. Transactions end in either a commit or a rollback.

                                                      +
                                                      +
                                                      +

                                                      The Java Transaction API (JTA) allows applications to access +transactions in a manner that is independent of specific +implementations. JTA specifies standard Java interfaces between a +transaction manager and the parties involved in a distributed +transaction system: the transactional application, the Java EE server, +and the manager that controls access to the shared resources affected by +the transactions.

                                                      +
                                                      +
                                                      +

                                                      The JTA defines the UserTransaction interface that applications use to +start, commit, or roll back transactions. Application components get a +UserTransaction object through a JNDI lookup by using the name +java:comp/UserTransaction or by requesting injection of a +UserTransaction object. An application server uses a number of +JTA-defined interfaces to communicate with a transaction manager; a +transaction manager uses JTA-defined interfaces to interact with a +resource manager.

                                                      +
                                                      +
                                                      +

                                                      The JTA 1.2 specification is available at +http://jcp.org/en/jsr/detail?id=907.

                                                      +
                                                      +
                                                      + ++++++++ + + + + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                      Oracle Logo +
                                                      +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      +
                                                      + + + \ No newline at end of file diff --git a/transactions003.html b/transactions003.html new file mode 100644 index 0000000..369dc3c --- /dev/null +++ b/transactions003.html @@ -0,0 +1,120 @@ + + + + + + What Is a Transaction? + + + + + +
                                                      +
                                                      + +++++ + + + + + + + +

                                                      Java Platform, Enterprise Edition The Java EE Tutorial
                                                      +Release 8 Java Platform, Enterprise Edition
                                                      +E63026-01

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      + +++++ + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                       

                                                      +
                                                      +
                                                      +
                                                      +

                                                      51.3 What Is a Transaction?

                                                      +
                                                      +
                                                      +

                                                      To emulate a business transaction, a program may need to perform several +steps. A financial program, for example, might transfer funds from a +checking account to a savings account by using the steps listed in the +following pseudocode:

                                                      +
                                                      +
                                                      +
                                                      +
                                                      begin transaction
                                                      +    debit checking account
                                                      +    credit savings account
                                                      +    update history log
                                                      +commit transaction
                                                      +
                                                      +
                                                      +
                                                      +

                                                      Either all or none of the three steps must complete. Otherwise, data +integrity is lost. Because the steps within a transaction are a unified +whole, a transaction is often defined as an indivisible unit of work.

                                                      +
                                                      +
                                                      +

                                                      A transaction can end in two ways: with a commit or with a rollback. +When a transaction commits, the data modifications made by its +statements are saved. If a statement within a transaction fails, the +transaction rolls back, undoing the effects of all statements in the +transaction. In the pseudocode, for example, if a disk drive were to +crash during the credit step, the transaction would roll back and undo +the data modifications made by the debit statement. Although the +transaction fails, data integrity would be intact because the accounts +still balance.

                                                      +
                                                      +
                                                      +

                                                      In the preceding pseudocode, the begin and commit statements mark +the boundaries of the transaction. When designing an enterprise bean, +you determine how the boundaries are set by specifying either +container-managed or bean-managed transactions.

                                                      +
                                                      +
                                                      + ++++++++ + + + + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                      Oracle Logo +
                                                      +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      +
                                                      + + + \ No newline at end of file diff --git a/transactions004.html b/transactions004.html new file mode 100644 index 0000000..53879ff --- /dev/null +++ b/transactions004.html @@ -0,0 +1,542 @@ + + + + + + Container-Managed Transactions + + + + + +
                                                      +
                                                      + +++++ + + + + + + + +

                                                      Java Platform, Enterprise Edition The Java EE Tutorial
                                                      +Release 8 Java Platform, Enterprise Edition
                                                      +E63026-01

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      + +++++ + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                       

                                                      +
                                                      +
                                                      +
                                                      +

                                                      51.4 Container-Managed Transactions

                                                      +
                                                      +
                                                      +

                                                      In an enterprise bean with container-managed transaction demarcation, +the EJB container sets the boundaries of the transactions. You can use +container-managed transactions with any type of enterprise bean: session +or message-driven. Container-managed transactions simplify development +because the enterprise bean code does not explicitly mark the +transaction’s boundaries. The code does not include statements that +begin and end the transaction. By default, if no transaction demarcation +is specified, enterprise beans use container-managed transaction +demarcation.

                                                      +
                                                      +
                                                      +

                                                      Typically, the container begins a transaction immediately before an +enterprise bean method starts and commits the transaction just before +the method exits. Each method can be associated with a single +transaction. Nested or multiple transactions are not allowed within a +method.

                                                      +
                                                      +
                                                      +

                                                      Container-managed transactions do not require all methods to be +associated with transactions. When developing a bean, you can set the +transaction attributes to specify which of the bean’s methods are +associated with transactions.

                                                      +
                                                      +
                                                      +

                                                      Enterprise beans that use container-managed transaction demarcation must +not use any transaction-management methods that interfere with the +container’s transaction demarcation boundaries. Examples of such methods +are the commit, setAutoCommit, and rollback methods of +java.sql.Connection or the commit and rollback methods of +javax.jms.Session. If you require control over the transaction +demarcation, you must use application-managed transaction demarcation.

                                                      +
                                                      +
                                                      +

                                                      Enterprise beans that use container-managed transaction demarcation also +must not use the javax.transaction.UserTransaction interface.

                                                      +
                                                      +
                                                      +

                                                      51.4.1 Transaction Attributes

                                                      +
                                                      +

                                                      A transaction attribute controls the scope of a transaction. +Figure 51-1 illustrates why controlling the scope is +important. In the diagram, method-A begins a transaction and then +invokes method-B of Bean-2. When method-B executes, does it run +within the scope of the transaction started by method-A, or does it +execute with a new transaction? The answer depends on the transaction +attribute of method-B.

                                                      +
                                                      +
                                                      +

                                                      Figure 51-1 Transaction Scope

                                                      +
                                                      + +
                                                      +

                                                      A transaction attribute can have one of the following values:

                                                      +
                                                      +
                                                      +
                                                        +
                                                      • +

                                                        Required

                                                        +
                                                      • +
                                                      • +

                                                        RequiresNew

                                                        +
                                                      • +
                                                      • +

                                                        Mandatory

                                                        +
                                                      • +
                                                      • +

                                                        NotSupported

                                                        +
                                                      • +
                                                      • +

                                                        Supports

                                                        +
                                                      • +
                                                      • +

                                                        Never

                                                        +
                                                      • +
                                                      +
                                                      +
                                                      +

                                                      51.4.1.1 Required Attribute

                                                      +
                                                      +

                                                      If the client is running within a transaction and invokes the enterprise +bean’s method, the method executes within the client’s transaction. If +the client is not associated with a transaction, the container starts a +new transaction before running the method.

                                                      +
                                                      +
                                                      +

                                                      The Required attribute is the implicit transaction attribute for all +enterprise bean methods running with container-managed transaction +demarcation. You typically do not set the Required attribute unless +you need to override another transaction attribute. Because transaction +attributes are declarative, you can easily change them later.

                                                      +
                                                      +
                                                      +
                                                      +

                                                      51.4.1.2 RequiresNew Attribute

                                                      +
                                                      +

                                                      If the client is running within a transaction and invokes the enterprise +bean’s method, the container takes the following steps:

                                                      +
                                                      +
                                                      +
                                                        +
                                                      1. +

                                                        Suspends the client’s transaction

                                                        +
                                                      2. +
                                                      3. +

                                                        Starts a new transaction

                                                        +
                                                      4. +
                                                      5. +

                                                        Delegates the call to the method

                                                        +
                                                      6. +
                                                      7. +

                                                        Resumes the client’s transaction after the method completes

                                                        +
                                                      8. +
                                                      +
                                                      +
                                                      +

                                                      If the client is not associated with a transaction, the container starts +a new transaction before running the method.

                                                      +
                                                      +
                                                      +

                                                      You should use the RequiresNew attribute when you want to ensure that +the method always runs within a new transaction.

                                                      +
                                                      +
                                                      +
                                                      +

                                                      51.4.1.3 Mandatory Attribute

                                                      +
                                                      +

                                                      If the client is running within a transaction and invokes the enterprise +bean’s method, the method executes within the client’s transaction. If +the client is not associated with a transaction, the container throws a +TransactionRequiredException.

                                                      +
                                                      +
                                                      +

                                                      Use the Mandatory attribute if the enterprise bean’s method must use +the transaction of the client.

                                                      +
                                                      +
                                                      +
                                                      +

                                                      51.4.1.4 NotSupported Attribute

                                                      +
                                                      +

                                                      If the client is running within a transaction and invokes the enterprise +bean’s method, the container suspends the client’s transaction before +invoking the method. After the method has completed, the container +resumes the client’s transaction.

                                                      +
                                                      +
                                                      +

                                                      If the client is not associated with a transaction, the container does +not start a new transaction before running the method.

                                                      +
                                                      +
                                                      +

                                                      Use the NotSupported attribute for methods that don’t need +transactions. Because transactions involve overhead, this attribute may +improve performance.

                                                      +
                                                      +
                                                      +
                                                      +

                                                      51.4.1.5 Supports Attribute

                                                      +
                                                      +

                                                      If the client is running within a transaction and invokes the enterprise +bean’s method, the method executes within the client’s transaction. If +the client is not associated with a transaction, the container does not +start a new transaction before running the method.

                                                      +
                                                      +
                                                      +

                                                      Because the transactional behavior of the method may vary, you should +use the Supports attribute with caution.

                                                      +
                                                      +
                                                      +
                                                      +

                                                      51.4.1.6 Never Attribute

                                                      +
                                                      +

                                                      If the client is running within a transaction and invokes the enterprise +bean’s method, the container throws a RemoteException. If the client +is not associated with a transaction, the container does not start a new +transaction before running the method.

                                                      +
                                                      +
                                                      +
                                                      +

                                                      51.4.1.7 Summary of Transaction Attributes

                                                      +
                                                      +

                                                      Table 51-1 summarizes the effects of the transaction +attributes. Both the T1 and the T2 transactions are controlled by +the container. A T1 transaction is associated with the client that +calls a method in the enterprise bean. In most cases, the client is +another enterprise bean. A T2 transaction is started by the container +just before the method executes.

                                                      +
                                                      +
                                                      +

                                                      In the last column of Table 51-1, the word "None" means +that the business method does not execute within a transaction +controlled by the container. However, the database calls in such a +business method might be controlled by the transaction manager of the +database management system.

                                                      +
                                                      +
                                                      +

                                                      +
                                                      +
                                                      +

                                                      Table 51-1 Transaction Attributes and Scope

                                                      +
                                                      + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                      Transaction AttributeClient’s TransactionBusiness Method’s +Transaction

                                                      Required

                                                      None

                                                      T2

                                                      Required

                                                      T1

                                                      T1

                                                      RequiresNew

                                                      None

                                                      T2

                                                      RequiresNew

                                                      T1

                                                      T2

                                                      Mandatory

                                                      None

                                                      Error

                                                      Mandatory

                                                      T1

                                                      T1

                                                      NotSupported

                                                      None

                                                      None

                                                      NotSupported

                                                      T1

                                                      None

                                                      Supports

                                                      None

                                                      None

                                                      Supports

                                                      T1

                                                      T1

                                                      Never

                                                      None

                                                      None

                                                      Never

                                                      T1

                                                      Error

                                                      +
                                                      +
                                                      +
                                                      +
                                                      +
                                                      +
                                                      +
                                                      +
                                                      +

                                                      51.4.1.8 Setting Transaction Attributes

                                                      +
                                                      +

                                                      Transaction attributes are specified by decorating the enterprise bean +class or method with a javax.ejb.TransactionAttribute annotation and +setting it to one of the javax.ejb.TransactionAttributeType constants.

                                                      +
                                                      +
                                                      +

                                                      If you decorate the enterprise bean class with @TransactionAttribute, +the specified TransactionAttributeType is applied to all the business +methods in the class. Decorating a business method with +@TransactionAttribute applies the TransactionAttributeType only to +that method. If a @TransactionAttribute annotation decorates both the +class and the method, the method TransactionAttributeType overrides +the class TransactionAttributeType.

                                                      +
                                                      +
                                                      +

                                                      The TransactionAttributeType constants shown in Table +51-2 encapsulate the transaction attributes described earlier in this +section.

                                                      +
                                                      +
                                                      +

                                                      +
                                                      +
                                                      +

                                                      Table 51-2 TransactionAttributeType Constants

                                                      +
                                                      + ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                      Transaction AttributeTransactionAttributeType Constant

                                                      Required

                                                      TransactionAttributeType.REQUIRED

                                                      RequiresNew

                                                      TransactionAttributeType.REQUIRES_NEW

                                                      Mandatory

                                                      TransactionAttributeType.MANDATORY

                                                      NotSupported

                                                      TransactionAttributeType.NOT_SUPPORTED

                                                      Supports

                                                      TransactionAttributeType.SUPPORTS

                                                      Never

                                                      TransactionAttributeType.NEVER

                                                      +
                                                      +
                                                      +
                                                      +
                                                      +
                                                      +
                                                      +
                                                      +

                                                      The following code snippet demonstrates how to use the +@TransactionAttribute annotation:

                                                      +
                                                      +
                                                      +
                                                      +
                                                      @TransactionAttribute(NOT_SUPPORTED)
                                                      +@Stateful
                                                      +public class TransactionBean implements Transaction {
                                                      +...
                                                      +    @TransactionAttribute(REQUIRES_NEW)
                                                      +    public void firstMethod() {...}
                                                      +
                                                      +    @TransactionAttribute(REQUIRED)
                                                      +    public void secondMethod() {...}
                                                      +
                                                      +    public void thirdMethod() {...}
                                                      +
                                                      +    public void fourthMethod() {...}
                                                      +}
                                                      +
                                                      +
                                                      +
                                                      +

                                                      In this example, the TransactionBean class’s transaction attribute has +been set to NotSupported, firstMethod has been set to RequiresNew, +and secondMethod has been set to Required. Because a +@TransactionAttribute set on a method overrides the class +@TransactionAttribute, calls to firstMethod will create a new +transaction, and calls to secondMethod will either run in the current +transaction or start a new transaction. Calls to thirdMethod or +fourthMethod do not take place within a transaction.

                                                      +
                                                      +
                                                      +
                                                      +
                                                      +

                                                      51.4.2 Rolling Back a Container-Managed Transaction

                                                      +
                                                      +

                                                      There are two ways to roll back a container-managed transaction. First, +if a system exception is thrown, the container will automatically roll +back the transaction. Second, by invoking the setRollbackOnly method +of the EJBContext interface, the bean method instructs the container +to roll back the transaction. If the bean throws an application +exception, the rollback is not automatic but can be initiated by a call +to setRollbackOnly.

                                                      +
                                                      +
                                                      +
                                                      +

                                                      51.4.3 Synchronizing a Session Bean’s Instance Variables

                                                      +
                                                      +

                                                      The SessionSynchronization interface, which is optional, allows +stateful session bean instances to receive transaction synchronization +notifications. For example, you could synchronize the instance variables +of an enterprise bean with their corresponding values in the database. +The container invokes the SessionSynchronization methods +(afterBegin, beforeCompletion, and afterCompletion) at each of the +main stages of a transaction.

                                                      +
                                                      +
                                                      +

                                                      The afterBegin method informs the instance that a new transaction has +begun. The container invokes afterBegin immediately before it invokes +the business method.

                                                      +
                                                      +
                                                      +

                                                      The container invokes the beforeCompletion method after the business +method has finished but just before the transaction commits. The +beforeCompletion method is the last opportunity for the session bean +to roll back the transaction (by calling setRollbackOnly).

                                                      +
                                                      +
                                                      +

                                                      The afterCompletion method indicates that the transaction has +completed. This method has a single boolean parameter whose value is +true if the transaction was committed and false if it was rolled +back.

                                                      +
                                                      +
                                                      +
                                                      +

                                                      51.4.4 Methods Not Allowed in Container-Managed Transactions

                                                      +
                                                      +

                                                      You should not invoke any method that might interfere with the +transaction boundaries set by the container. The following methods are +prohibited:

                                                      +
                                                      +
                                                      +
                                                        +
                                                      • +

                                                        The commit, setAutoCommit, and rollback methods of +java.sql.Connection

                                                        +
                                                      • +
                                                      • +

                                                        The getUserTransaction method of javax.ejb.EJBContext

                                                        +
                                                      • +
                                                      • +

                                                        Any method of javax.transaction.UserTransaction

                                                        +
                                                      • +
                                                      +
                                                      +
                                                      +

                                                      You can, however, use these methods to set boundaries in +application-managed transactions.

                                                      +
                                                      +
                                                      + ++++++++ + + + + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                      Oracle Logo +
                                                      +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      +
                                                      +
                                                      + + + \ No newline at end of file diff --git a/transactions005.html b/transactions005.html new file mode 100644 index 0000000..c46e47c --- /dev/null +++ b/transactions005.html @@ -0,0 +1,177 @@ + + + + + + Bean-Managed Transactions + + + + + +
                                                      +
                                                      + +++++ + + + + + + + +

                                                      Java Platform, Enterprise Edition The Java EE Tutorial
                                                      +Release 8 Java Platform, Enterprise Edition
                                                      +E63026-01

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      + +++++ + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                       

                                                      +
                                                      +
                                                      +
                                                      +

                                                      51.5 Bean-Managed Transactions

                                                      +
                                                      +
                                                      +

                                                      In bean-managed transaction demarcation, the code in the session or +message-driven bean explicitly marks the boundaries of the transaction. +Although beans with container-managed transactions require less coding, +they have one limitation: When a method is executing, it can be +associated with either a single transaction or no transaction at all. If +this limitation will make coding your bean difficult, you should +consider using bean-managed transactions.

                                                      +
                                                      +
                                                      +

                                                      The following pseudocode illustrates the kind of fine-grained control +you can obtain with application-managed transactions. By checking +various conditions, the pseudocode decides whether to start or stop +certain transactions within the business method:

                                                      +
                                                      +
                                                      +
                                                      +
                                                      begin transaction
                                                      +...
                                                      +    update table-a
                                                      +...
                                                      +    if (condition-x)
                                                      +   commit transaction
                                                      +    else if (condition-y)
                                                      +   update table-b
                                                      +   commit transaction
                                                      +    else
                                                      +   rollback transaction
                                                      +   begin transaction
                                                      +   update table-c
                                                      +   commit transaction
                                                      +
                                                      +
                                                      +
                                                      +

                                                      When coding an application-managed transaction for session or +message-driven beans, you must decide whether to use Java Database +Connectivity or JTA transactions. The sections that follow discuss both +types of transactions.

                                                      +
                                                      +
                                                      +

                                                      51.5.1 JTA Transactions

                                                      +
                                                      +

                                                      JTA, or the Java Transaction API, allows you to demarcate transactions +in a manner that is independent of the transaction manager +implementation. GlassFish Server implements the transaction manager with +the Java Transaction Service (JTS). However, your code doesn’t call the +JTS methods directly but instead invokes the JTA methods, which then +call the lower-level JTS routines.

                                                      +
                                                      +
                                                      +

                                                      A JTA transaction is controlled by the Java EE transaction manager. You +may want to use a JTA transaction because it can span updates to +multiple databases from different vendors. A particular DBMS’s +transaction manager may not work with heterogeneous databases. However, +the Java EE transaction manager does have one limitation: It does not +support nested transactions. In other words, it cannot start a +transaction for an instance until the preceding transaction has ended.

                                                      +
                                                      +
                                                      +

                                                      To demarcate a JTA transaction, you invoke the begin, commit, and +rollback methods of the javax.transaction.UserTransaction interface.

                                                      +
                                                      +
                                                      +
                                                      +

                                                      51.5.2 Returning without Committing

                                                      +
                                                      +

                                                      In a stateless session bean with bean-managed transactions, a business +method must commit or roll back a transaction before returning. However, +a stateful session bean does not have this restriction.

                                                      +
                                                      +
                                                      +

                                                      In a stateful session bean with a JTA transaction, the association +between the bean instance and the transaction is retained across +multiple client calls. Even if each business method called by the client +opens and closes the database connection, the association is retained +until the instance completes the transaction.

                                                      +
                                                      +
                                                      +

                                                      In a stateful session bean with a JDBC transaction, the JDBC connection +retains the association between the bean instance and the transaction +across multiple calls. If the connection is closed, the association is +not retained.

                                                      +
                                                      +
                                                      +
                                                      +

                                                      51.5.3 Methods Not Allowed in Bean-Managed Transactions

                                                      +
                                                      +

                                                      Do not invoke the getRollbackOnly and setRollbackOnly methods of the +EJBContext interface in bean-managed transactions. These methods +should be used only in container-managed transactions. For bean-managed +transactions, invoke the getStatus and rollback methods of the +UserTransaction interface.

                                                      +
                                                      +
                                                      + ++++++++ + + + + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                      Oracle Logo +
                                                      +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      +
                                                      +
                                                      + + + \ No newline at end of file diff --git a/transactions006.html b/transactions006.html new file mode 100644 index 0000000..506371b --- /dev/null +++ b/transactions006.html @@ -0,0 +1,117 @@ + + + + + + Transaction Timeouts + + + + + +
                                                      +
                                                      + +++++ + + + + + + + +

                                                      Java Platform, Enterprise Edition The Java EE Tutorial
                                                      +Release 8 Java Platform, Enterprise Edition
                                                      +E63026-01

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      + +++++ + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                       

                                                      +
                                                      +
                                                      +
                                                      +

                                                      51.6 Transaction Timeouts

                                                      +
                                                      +
                                                      +

                                                      For container-managed transactions, you can use the Administration +Console to configure the transaction timeout interval. See +Starting the Administration Console.

                                                      +
                                                      +
                                                      +

                                                      For enterprise beans with bean-managed JTA transactions, you invoke the +setTransactionTimeout method of the UserTransaction interface.

                                                      +
                                                      +
                                                      +

                                                      51.6.1 To Set a Transaction Timeout

                                                      +
                                                      +
                                                        +
                                                      1. +

                                                        In the Administration Console, expand the Configurations node, then +expand the server-config node and select Transaction Service.

                                                        +
                                                      2. +
                                                      3. +

                                                        On the Transaction Service page, set the value of the Transaction +Timeout field to the value of your choice (for example, 5).

                                                        +
                                                        +

                                                        With this setting, if the transaction has not completed within 5 +seconds, the EJB container rolls it back.

                                                        +
                                                        +
                                                        +

                                                        The default value is 0, meaning that the transaction will not time out.

                                                        +
                                                        +
                                                      4. +
                                                      5. +

                                                        Click Save.

                                                        +
                                                      6. +
                                                      +
                                                      +
                                                      + ++++++++ + + + + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                      Oracle Logo +
                                                      +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      +
                                                      +
                                                      + + + \ No newline at end of file diff --git a/transactions007.html b/transactions007.html new file mode 100644 index 0000000..c6d127d --- /dev/null +++ b/transactions007.html @@ -0,0 +1,125 @@ + + + + + + Updating Multiple Databases + + + + + +
                                                      +
                                                      + +++++ + + + + + + + +

                                                      Java Platform, Enterprise Edition The Java EE Tutorial
                                                      +Release 8 Java Platform, Enterprise Edition
                                                      +E63026-01

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      + +++++ + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                       

                                                      +
                                                      +
                                                      +
                                                      +

                                                      51.7 Updating Multiple Databases

                                                      +
                                                      +
                                                      +

                                                      The Java EE transaction manager controls all enterprise bean +transactions except for bean-managed JDBC transactions. The Java EE +transaction manager allows an enterprise bean to update multiple +databases within a transaction. Figure 51-2 and +Figure 51-3 show two scenarios for updating multiple +databases in a single transaction.

                                                      +
                                                      +
                                                      +

                                                      In Figure 51-2, the client invokes a business method in +Bean-A. The business method begins a transaction, updates Database X, +updates Database Y, and invokes a business method in Bean-B. The +second business method updates Database Z and returns control to the +business method in Bean-A, which commits the transaction. All three +database updates occur in the same transaction.

                                                      +
                                                      +
                                                      +

                                                      In Figure 51-3, the client calls a business method in +Bean-A, which begins a transaction and updates Database X. Then +Bean-A invokes a method in Bean-B, which resides in a remote Java EE +server. The method in Bean-B updates Database Y. The transaction +managers of the Java EE servers ensure that both databases are updated +in the same transaction.

                                                      +
                                                      +
                                                      +

                                                      Figure 51-2 Updating Multiple Databases

                                                      +
                                                      + +
                                                      +

                                                      Figure 51-3 Updating Multiple Databases Across Java EE Servers

                                                      +
                                                      + +
                                                      + ++++++++ + + + + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                      Oracle Logo +
                                                      +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      +
                                                      + + + \ No newline at end of file diff --git a/transactions008.html b/transactions008.html new file mode 100644 index 0000000..c2ed892 --- /dev/null +++ b/transactions008.html @@ -0,0 +1,91 @@ + + + + + + Transactions in Web Components + + + + + +
                                                      +
                                                      + +++++ + + + + + + + +

                                                      Java Platform, Enterprise Edition The Java EE Tutorial
                                                      +Release 8 Java Platform, Enterprise Edition
                                                      +E63026-01

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      + +++++ + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                       

                                                      +
                                                      +
                                                      +
                                                      +

                                                      51.8 Transactions in Web Components

                                                      +
                                                      +
                                                      +

                                                      You can demarcate a transaction in a web component by using either the +java.sql.Connection or the javax.transaction.UserTransaction +interface. These are the same interfaces that a session bean with +bean-managed transactions can use. Transactions demarcated with the +UserTransaction interface are discussed in +JTA Transactions.

                                                      +
                                                      +
                                                      + ++++++++ + + + + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                      Oracle Logo +
                                                      +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      +
                                                      + + + \ No newline at end of file diff --git a/transactions009.html b/transactions009.html new file mode 100644 index 0000000..7d1078d --- /dev/null +++ b/transactions009.html @@ -0,0 +1,87 @@ + + + + + + Further Information about Transactions + + + + + +
                                                      +
                                                      + +++++ + + + + + + + +

                                                      Java Platform, Enterprise Edition The Java EE Tutorial
                                                      +Release 8 Java Platform, Enterprise Edition
                                                      +E63026-01

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      + +++++ + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                       

                                                      +
                                                      +
                                                      +
                                                      +

                                                      51.9 Further Information about Transactions

                                                      +
                                                      +
                                                      +

                                                      For more information about transactions, see the Java Transaction API +1.2 specification at https://www.jcp.org/en/jsr/detail?id=907.

                                                      +
                                                      +
                                                      + ++++++++ + + + + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                      Oracle Logo +
                                                      +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      +
                                                      + + + \ No newline at end of file diff --git a/usingexamples.html b/usingexamples.html new file mode 100644 index 0000000..d1b1727 --- /dev/null +++ b/usingexamples.html @@ -0,0 +1,125 @@ + + + + + + Using the Tutorial Examples + + + + + +
                                                      +
                                                      + +++++ + + + + + + + +

                                                      Java Platform, Enterprise Edition The Java EE Tutorial
                                                      +Release 8 Java Platform, Enterprise Edition
                                                      +E63026-01

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      + +++++ + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                       

                                                      +
                                                      +
                                                      +
                                                      +

                                                      2 Using the Tutorial Examples

                                                      + +
                                                      + + + \ No newline at end of file diff --git a/usingexamples001.html b/usingexamples001.html new file mode 100644 index 0000000..17f0112 --- /dev/null +++ b/usingexamples001.html @@ -0,0 +1,260 @@ + + + + + + Required Software + + + + + +
                                                      +
                                                      + +++++ + + + + + + + +

                                                      Java Platform, Enterprise Edition The Java EE Tutorial
                                                      +Release 8 Java Platform, Enterprise Edition
                                                      +E63026-01

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      + +++++ + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                       

                                                      +
                                                      +
                                                      +
                                                      +

                                                      2.1 Required Software

                                                      +
                                                      +
                                                      +

                                                      The following software is required to run the examples:

                                                      +
                                                      + +
                                                      +

                                                      2.1.1 Java Platform, Standard Edition

                                                      +
                                                      +

                                                      To build, deploy, and run the examples, you need a copy of the Java +Platform, Standard Edition Development Kit (JDK). You must use JDK 7 +Update 65 or above or JDK 8 Update 20 or above. You can download JDK +software from +http://www.oracle.com/technetwork/java/javase/downloads/index.html.

                                                      +
                                                      +
                                                      +
                                                      +

                                                      2.1.2 Java EE 7 Software Development Kit

                                                      +
                                                      +

                                                      GlassFish Server Open Source Edition 4.1 is targeted as the build and +runtime environment for the tutorial examples. To build, deploy, and run +the examples, you need a copy of GlassFish Server and, optionally, +NetBeans IDE. To obtain GlassFish Server, you must install the Java EE 7 +Software Development Kit (SDK) Update 1, which you can download from +http://www.oracle.com/technetwork/java/javaee/downloads/index.html. +Make sure that you download the Java EE 7 SDK Update 1, not the Java EE +7 Web Profile SDK Update 1.

                                                      +
                                                      +
                                                      +

                                                      2.1.2.1 SDK Installation Tips

                                                      +
                                                      +

                                                      The Java EE 7 SDK Update 1 is installed from a ZIP file. It sets the +default administration user name as admin with no required password. +The Admin Port is set to 4848, and the HTTP Port is set to 8080.

                                                      +
                                                      +
                                                      +

                                                      This tutorial refers to as-install-parent, the directory where you +install GlassFish Server. For example, the default installation +directory on Microsoft Windows is C:\glassfish4, so as-install-parent +is C:\glassfish4. GlassFish Server itself is installed in as-install, +the glassfish directory under as-install-parent. So on Microsoft +Windows, as-install is C:\glassfish4\glassfish.

                                                      +
                                                      +
                                                      +

                                                      After you install GlassFish Server, add the following directories to +your PATH to avoid having to specify the full path when you use +commands:

                                                      +
                                                      +
                                                      +
                                                      +
                                                      as-install-parent/bin
                                                      +as-install/bin
                                                      +
                                                      +
                                                      +
                                                      +
                                                      +
                                                      +

                                                      2.1.3 Java EE 7 Tutorial Component

                                                      +
                                                      +

                                                      The tutorial component, including the documentation and example source, +is contained in the Java EE 7 SDK Update 1.

                                                      +
                                                      +
                                                      +

                                                      Updates to the Java EE 7 Tutorial are published periodically. For +details on obtaining these updates, see +Getting the Latest Updates to the +Tutorial.

                                                      +
                                                      +
                                                      +
                                                      +

                                                      2.1.4 NetBeans IDE

                                                      +
                                                      +

                                                      The NetBeans integrated development environment (IDE) is a free, +open-source IDE for developing Java applications, including enterprise +applications. NetBeans IDE supports the Java EE platform. You can build, +package, deploy, and run the tutorial examples from within NetBeans IDE.

                                                      +
                                                      +
                                                      +

                                                      To run the tutorial examples, you need the latest version of NetBeans +IDE. You can download NetBeans IDE from +https://netbeans.org/downloads/index.html. Make sure that you download +the Java EE bundle.

                                                      +
                                                      +
                                                      +

                                                      2.1.4.1 To Install NetBeans IDE without GlassFish Server

                                                      +
                                                      +

                                                      When you install NetBeans IDE, do not install the version of GlassFish +Server that comes with NetBeans IDE. To skip the installation of +GlassFish Server, follow these steps.

                                                      +
                                                      +
                                                      +
                                                        +
                                                      1. +

                                                        On the first page of the NetBeans IDE Installer wizard, deselect the +check box for GlassFish Server and click OK.

                                                        +
                                                      2. +
                                                      3. +

                                                        Accept both the License Agreement and the Junit License Agreement.

                                                        +
                                                        +

                                                        A few of the tutorial examples use the Junit library, so you should +install it.

                                                        +
                                                        +
                                                      4. +
                                                      5. +

                                                        Continue with the installation of NetBeans IDE.

                                                        +
                                                      6. +
                                                      +
                                                      +
                                                      +
                                                      +

                                                      2.1.4.2 To Add GlassFish Server as a Server Using NetBeans IDE

                                                      +
                                                      +

                                                      To run the tutorial examples in NetBeans IDE, you must add your +GlassFish Server as a server in NetBeans IDE. Follow these instructions +to add GlassFish Server to NetBeans IDE.

                                                      +
                                                      +
                                                      +
                                                        +
                                                      1. +

                                                        From the Tools menu, choose Servers.

                                                        +
                                                      2. +
                                                      3. +

                                                        In the Servers wizard, click Add Server.

                                                        +
                                                      4. +
                                                      5. +

                                                        Under Choose Server, select GlassFish Server and click Next.

                                                        +
                                                      6. +
                                                      7. +

                                                        Under Server Location, browse to the location of the Java EE 7 SDK +and click Next.

                                                        +
                                                      8. +
                                                      9. +

                                                        Under Domain Location, select Register Local Domain.

                                                        +
                                                      10. +
                                                      11. +

                                                        Click Finish.

                                                        +
                                                      12. +
                                                      +
                                                      +
                                                      +
                                                      +
                                                      +

                                                      2.1.5 Apache Maven

                                                      +
                                                      +

                                                      Maven is a Java technology–based build tool developed by the Apache +Software Foundation and is used to build, package, and deploy the +tutorial examples. To run the tutorial examples from the command line, +you need Maven 3.0 or higher. If you do not already have Maven, you can +install it from:

                                                      +
                                                      +
                                                      +

                                                      http://maven.apache.org

                                                      +
                                                      +
                                                      +

                                                      Be sure to add the maven-install`/bin` directory to your path.

                                                      +
                                                      +
                                                      +

                                                      If you are using NetBeans IDE to build and run the examples, it includes +a copy of Maven.

                                                      +
                                                      +
                                                      + ++++++++ + + + + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                      Oracle Logo +
                                                      +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      +
                                                      +
                                                      + + + \ No newline at end of file diff --git a/usingexamples002.html b/usingexamples002.html new file mode 100644 index 0000000..a18629c --- /dev/null +++ b/usingexamples002.html @@ -0,0 +1,165 @@ + + + + + + Starting and Stopping GlassFish Server + + + + + +
                                                      +
                                                      + +++++ + + + + + + + +

                                                      Java Platform, Enterprise Edition The Java EE Tutorial
                                                      +Release 8 Java Platform, Enterprise Edition
                                                      +E63026-01

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      + +++++ + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                       

                                                      +
                                                      +
                                                      +
                                                      +

                                                      2.2 Starting and Stopping GlassFish Server

                                                      +
                                                      +
                                                      +

                                                      You can start and stop GlassFish Server using either NetBeans IDE or the +command line.

                                                      +
                                                      +
                                                      +

                                                      2.2.1 To Start GlassFish Server Using NetBeans IDE

                                                      +
                                                      +
                                                        +
                                                      1. +

                                                        Click the Services tab.

                                                        +
                                                      2. +
                                                      3. +

                                                        Expand Servers.

                                                        +
                                                      4. +
                                                      5. +

                                                        Right-click the GlassFish Server instance and select Start.

                                                        +
                                                      6. +
                                                      +
                                                      +
                                                      +
                                                      +

                                                      2.2.2 To Stop GlassFish Server Using NetBeans IDE

                                                      +
                                                      +

                                                      To stop GlassFish Server using NetBeans IDE, right-click the GlassFish +Server instance and select Stop.

                                                      +
                                                      +
                                                      +
                                                      +

                                                      2.2.3 To Start GlassFish Server Using the Command Line

                                                      +
                                                      +

                                                      To start GlassFish Server from the command line, open a terminal window +or command prompt and execute the following:

                                                      +
                                                      +
                                                      +
                                                      +
                                                      asadmin start-domain --verbose
                                                      +
                                                      +
                                                      +
                                                      +

                                                      A domain is a set of one or more GlassFish Server instances managed by +one administration server. The following elements are associated with a +domain:

                                                      +
                                                      +
                                                      +
                                                        +
                                                      • +

                                                        The GlassFish Server port number: The default is 8080.

                                                        +
                                                      • +
                                                      • +

                                                        The administration server’s port number: The default is 4848.

                                                        +
                                                      • +
                                                      • +

                                                        An administration user name and password: The default user name is +admin, and by default no password is required.

                                                        +
                                                      • +
                                                      +
                                                      +
                                                      +

                                                      You specify these values when you install GlassFish Server. The examples +in this tutorial assume that you chose the default ports as well as the +default user name and lack of password.

                                                      +
                                                      +
                                                      +

                                                      With no arguments, the start-domain command initiates the default +domain, which is domain1. The --verbose flag causes all logging and +debugging output to appear on the terminal window or command prompt. The +output also goes into the server log, which is located in +domain-dir`/logs/server.log`.

                                                      +
                                                      +
                                                      +
                                                      +

                                                      2.2.4 To Stop GlassFish Server Using the Command Line

                                                      +
                                                      +

                                                      To stop GlassFish Server, open a terminal window or command prompt and +execute:

                                                      +
                                                      +
                                                      +
                                                      +
                                                      asadmin stop-domain domain1
                                                      +
                                                      +
                                                      +
                                                      + ++++++++ + + + + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                      Oracle Logo +
                                                      +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      +
                                                      +
                                                      + + + \ No newline at end of file diff --git a/usingexamples003.html b/usingexamples003.html new file mode 100644 index 0000000..00b327c --- /dev/null +++ b/usingexamples003.html @@ -0,0 +1,127 @@ + + + + + + Starting the Administration Console + + + + + +
                                                      +
                                                      + +++++ + + + + + + + +

                                                      Java Platform, Enterprise Edition The Java EE Tutorial
                                                      +Release 8 Java Platform, Enterprise Edition
                                                      +E63026-01

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      + +++++ + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                       

                                                      +
                                                      +
                                                      +
                                                      +

                                                      2.3 Starting the Administration Console

                                                      +
                                                      +
                                                      +

                                                      To administer GlassFish Server and manage users, resources, and Java EE +applications, use the Administration Console tool. GlassFish Server must +be running before you invoke the Administration Console. To start the +Administration Console, open a browser at http://localhost:4848/.

                                                      +
                                                      +
                                                      +

                                                      2.3.1 To Start the Administration Console Using NetBeans IDE

                                                      +
                                                      +
                                                        +
                                                      1. +

                                                        Click the Services tab.

                                                        +
                                                      2. +
                                                      3. +

                                                        Expand Servers.

                                                        +
                                                      4. +
                                                      5. +

                                                        Right-click the GlassFish Server instance and select View Domain +Admin Console.

                                                        + +++ + + + + + +
                                                        +

                                                        Note:

                                                        +
                                                        +
                                                        +

                                                        NetBeans IDE uses your default web browser to open the Administration +Console.

                                                        +
                                                        +
                                                        +
                                                        +
                                                        +
                                                        +
                                                        +
                                                        +
                                                      6. +
                                                      +
                                                      +
                                                      + ++++++++ + + + + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                      Oracle Logo +
                                                      +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      +
                                                      +
                                                      + + + \ No newline at end of file diff --git a/usingexamples004.html b/usingexamples004.html new file mode 100644 index 0000000..be6c7ea --- /dev/null +++ b/usingexamples004.html @@ -0,0 +1,136 @@ + + + + + + Starting and Stopping the Java DB Server + + + + + +
                                                      +
                                                      + +++++ + + + + + + + +

                                                      Java Platform, Enterprise Edition The Java EE Tutorial
                                                      +Release 8 Java Platform, Enterprise Edition
                                                      +E63026-01

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      + +++++ + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                       

                                                      +
                                                      +
                                                      +
                                                      +

                                                      2.4 Starting and Stopping the Java DB Server

                                                      +
                                                      +
                                                      +

                                                      GlassFish Server includes the Java DB database server.

                                                      +
                                                      +
                                                      +

                                                      To start the Java DB server from the command line, open a terminal +window or command prompt and execute:

                                                      +
                                                      +
                                                      +
                                                      +
                                                      asadmin start-database
                                                      +
                                                      +
                                                      +
                                                      +

                                                      To stop the Java DB server from the command line, open a terminal window +or command prompt and execute:

                                                      +
                                                      +
                                                      +
                                                      +
                                                      asadmin stop-database
                                                      +
                                                      +
                                                      +
                                                      +

                                                      For information about the Java DB included with GlassFish Server, see +http://www.oracle.com/technetwork/java/javadb/overview/index.html.

                                                      +
                                                      +
                                                      +

                                                      2.4.1 To Start the Database Server Using NetBeans IDE

                                                      +
                                                      +

                                                      When you start GlassFish Server using NetBeans IDE, the database server +starts automatically. If you ever need to start the server manually, +however, follow these steps.

                                                      +
                                                      +
                                                      +
                                                        +
                                                      1. +

                                                        Click the Services tab.

                                                        +
                                                      2. +
                                                      3. +

                                                        Expand Databases.

                                                        +
                                                      4. +
                                                      5. +

                                                        Right-click Java DB and select Start Server.

                                                        +
                                                      6. +
                                                      +
                                                      +
                                                      +

                                                      Next Steps

                                                      +
                                                      +
                                                      +

                                                      To stop the database using NetBeans IDE, right-click Java DB and select +Stop Server.

                                                      +
                                                      +
                                                      + ++++++++ + + + + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                      Oracle Logo +
                                                      +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      +
                                                      +
                                                      + + + \ No newline at end of file diff --git a/usingexamples005.html b/usingexamples005.html new file mode 100644 index 0000000..09eb2b9 --- /dev/null +++ b/usingexamples005.html @@ -0,0 +1,89 @@ + + + + + + Building the Examples + + + + + +
                                                      +
                                                      + +++++ + + + + + + + +

                                                      Java Platform, Enterprise Edition The Java EE Tutorial
                                                      +Release 8 Java Platform, Enterprise Edition
                                                      +E63026-01

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      + +++++ + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                       

                                                      +
                                                      +
                                                      +
                                                      +

                                                      2.5 Building the Examples

                                                      +
                                                      +
                                                      +

                                                      The tutorial examples are distributed with a configuration file for +either NetBeans IDE or Maven. Either NetBeans IDE or Maven may be used +to build, package, deploy, and run the examples. Directions for building +the examples are provided in each chapter.

                                                      +
                                                      +
                                                      + ++++++++ + + + + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                      Oracle Logo +
                                                      +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      +
                                                      + + + \ No newline at end of file diff --git a/usingexamples006.html b/usingexamples006.html new file mode 100644 index 0000000..dd5dd57 --- /dev/null +++ b/usingexamples006.html @@ -0,0 +1,142 @@ + + + + + + Tutorial Example Directory Structure + + + + + +
                                                      +
                                                      + +++++ + + + + + + + +

                                                      Java Platform, Enterprise Edition The Java EE Tutorial
                                                      +Release 8 Java Platform, Enterprise Edition
                                                      +E63026-01

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      + +++++ + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                       

                                                      +
                                                      +
                                                      +
                                                      +

                                                      2.6 Tutorial Example Directory Structure

                                                      +
                                                      +
                                                      +

                                                      To facilitate iterative development and keep application source files +separate from compiled files, the tutorial examples use the Maven +application directory structure.

                                                      +
                                                      +
                                                      +

                                                      Each application module has the following structure:

                                                      +
                                                      +
                                                      +
                                                        +
                                                      • +

                                                        pom.xml: Maven build file

                                                        +
                                                      • +
                                                      • +

                                                        src/main/java: Java source files for the module

                                                        +
                                                      • +
                                                      • +

                                                        src/main/resources: configuration files for the module, with the +exception of web applications

                                                        +
                                                      • +
                                                      • +

                                                        src/main/webapp: web pages, style sheets, tag files, and images (web +applications only)

                                                        +
                                                      • +
                                                      • +

                                                        src/main/webapp/WEB-INF: configuration files for web applications +(web applications only)

                                                        +
                                                      • +
                                                      +
                                                      +
                                                      +

                                                      When an example has multiple application modules packaged into an EAR +file, its submodule directories use the following naming conventions:

                                                      +
                                                      +
                                                      +
                                                        +
                                                      • +

                                                        example-name`-app-client`: application clients

                                                        +
                                                      • +
                                                      • +

                                                        example-name`-ejb`: enterprise bean JAR files

                                                        +
                                                      • +
                                                      • +

                                                        example-name`-war`: web applications

                                                        +
                                                      • +
                                                      • +

                                                        example-name`-ear`: enterprise applications

                                                        +
                                                      • +
                                                      • +

                                                        example-name`-common`: library JAR containing components, classes, and +files used by other modules

                                                        +
                                                      • +
                                                      +
                                                      +
                                                      +

                                                      The Maven build files (pom.xml) distributed with the examples contain +goals to compile and assemble the application into the target +directory and deploy the archive to GlassFish Server.

                                                      +
                                                      +
                                                      + ++++++++ + + + + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                      Oracle Logo +
                                                      +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      +
                                                      + + + \ No newline at end of file diff --git a/usingexamples007.html b/usingexamples007.html new file mode 100644 index 0000000..b9ed98e --- /dev/null +++ b/usingexamples007.html @@ -0,0 +1,148 @@ + + + + + + Java EE 7 Maven Archetypes in the Tutorial + + + + + +
                                                      +
                                                      + +++++ + + + + + + + +

                                                      Java Platform, Enterprise Edition The Java EE Tutorial
                                                      +Release 8 Java Platform, Enterprise Edition
                                                      +E63026-01

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      + +++++ + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                       

                                                      +
                                                      +
                                                      +
                                                      +

                                                      2.7 Java EE 7 Maven Archetypes in the Tutorial

                                                      +
                                                      +
                                                      +

                                                      Some of the chapters have instructions on how to build an example +application using Maven archetypes. Archetypes are templates for +generating a particular Maven project. The Tutorial includes several +Maven archetypes for generating Java EE 7 projects.

                                                      +
                                                      +
                                                      +

                                                      2.7.1 Installing the Tutorial Archetypes

                                                      +
                                                      +

                                                      You must install the included Maven archetypes into your local Maven +repository before you can create new projects based on the archetypes. +You can install the archetypes using NetBeans IDE or Maven.

                                                      +
                                                      +
                                                      +

                                                      2.7.1.1 Installing the Tutorial Archetypes Using NetBeans IDE

                                                      +
                                                      +
                                                        +
                                                      1. +

                                                        From the File menu, choose Open Project.

                                                        +
                                                      2. +
                                                      3. +

                                                        In the Open Project dialog box, navigate to:

                                                        +
                                                        +
                                                        +
                                                        tut-install/examples
                                                        +
                                                        +
                                                        +
                                                      4. +
                                                      5. +

                                                        Select the archetypes folder.

                                                        +
                                                      6. +
                                                      7. +

                                                        Click Open Project.

                                                        +
                                                      8. +
                                                      9. +

                                                        In the Projects tab, right-click the archetypes project and select +Build.

                                                        +
                                                      10. +
                                                      +
                                                      +
                                                      +
                                                      +

                                                      2.7.1.2 Installing the Tutorial Archetypes Using Maven

                                                      +
                                                      +
                                                        +
                                                      1. +

                                                        In a terminal window, go to:

                                                        +
                                                        +
                                                        +
                                                        tut-install/examples/archetypes/
                                                        +
                                                        +
                                                        +
                                                      2. +
                                                      3. +

                                                        Enter the following command:

                                                        +
                                                        +
                                                        +
                                                        mvn install
                                                        +
                                                        +
                                                        +
                                                      4. +
                                                      +
                                                      +
                                                      + ++++++++ + + + + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                      Oracle Logo +
                                                      +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      +
                                                      +
                                                      +
                                                      + + + \ No newline at end of file diff --git a/usingexamples008.html b/usingexamples008.html new file mode 100644 index 0000000..7792664 --- /dev/null +++ b/usingexamples008.html @@ -0,0 +1,141 @@ + + + + + + Getting the Latest Updates to the Tutorial + + + + + +
                                                      +
                                                      + +++++ + + + + + + + +

                                                      Java Platform, Enterprise Edition The Java EE Tutorial
                                                      +Release 8 Java Platform, Enterprise Edition
                                                      +E63026-01

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      + +++++ + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                       

                                                      +
                                                      +
                                                      +
                                                      +

                                                      2.8 Getting the Latest Updates to the Tutorial

                                                      +
                                                      +
                                                      +

                                                      Check for any updates to the tutorial by using the Update Tool included +with the Java EE 7 SDK.

                                                      +
                                                      +
                                                      +

                                                      2.8.1 To Update the Tutorial Using NetBeans IDE

                                                      +
                                                      +
                                                        +
                                                      1. +

                                                        Open the Services tab in NetBeans IDE and expand Servers.

                                                        +
                                                      2. +
                                                      3. +

                                                        Right-click the GlassFish Server instance and select View Domain +Update Center to display the Update Tool.

                                                        +
                                                      4. +
                                                      5. +

                                                        Select Available Updates in the tree to display a list of updated +packages.

                                                        +
                                                      6. +
                                                      7. +

                                                        Look for updates to the Java EE 7 Tutorial (javaee-tutorial) +package.

                                                        +
                                                      8. +
                                                      9. +

                                                        If there is an updated version of the Tutorial, select Java EE 7 +Tutorial (javaee-tutorial) and click Install.

                                                        +
                                                      10. +
                                                      +
                                                      +
                                                      +
                                                      +

                                                      2.8.2 To Update the Tutorial Using the Command Line

                                                      +
                                                      +
                                                        +
                                                      1. +

                                                        Open a terminal window and enter the following command to display +the Update Tool:

                                                        +
                                                        +
                                                        +
                                                        updatetool
                                                        +
                                                        +
                                                        +
                                                      2. +
                                                      3. +

                                                        Select Available Updates in the tree to display a list of updated +packages.

                                                        +
                                                      4. +
                                                      5. +

                                                        Look for updates to the Java EE 7 Tutorial (javaee-tutorial) +package.

                                                        +
                                                      6. +
                                                      7. +

                                                        If there is an updated version of the Tutorial, select Java EE 7 +Tutorial (javaee-tutorial) and click Install.

                                                        +
                                                      8. +
                                                      +
                                                      +
                                                      + ++++++++ + + + + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                      Oracle Logo +
                                                      +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      +
                                                      +
                                                      + + + \ No newline at end of file diff --git a/usingexamples009.html b/usingexamples009.html new file mode 100644 index 0000000..46b927f --- /dev/null +++ b/usingexamples009.html @@ -0,0 +1,182 @@ + + + + + + Debugging Java EE Applications + + + + + +
                                                      +
                                                      + +++++ + + + + + + + +

                                                      Java Platform, Enterprise Edition The Java EE Tutorial
                                                      +Release 8 Java Platform, Enterprise Edition
                                                      +E63026-01

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      + +++++ + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                       

                                                      +
                                                      +
                                                      +
                                                      +

                                                      2.9 Debugging Java EE Applications

                                                      +
                                                      +
                                                      +

                                                      This section explains how to determine what is causing an error in your +application deployment or execution.

                                                      +
                                                      +
                                                      +

                                                      2.9.1 Using the Server Log

                                                      +
                                                      +

                                                      One way to debug applications is to look at the server log in +domain-dir`/logs/server.log`. The log contains output from GlassFish +Server and your applications. You can log messages from any Java class +in your application with System.out.println and the Java Logging APIs +(documented at +http://docs.oracle.com/javase/7/docs/technotes/guides/logging/index.html) +and from web components with the ServletContext.log method.

                                                      +
                                                      +
                                                      +

                                                      If you use NetBeans IDE, logging output appears in the Output window as +well as the server log.

                                                      +
                                                      +
                                                      +

                                                      If you start GlassFish Server with the --verbose flag, all logging and +debugging output will appear on the terminal window or command prompt +and the server log. If you start GlassFish Server in the background, +debugging information is available only in the log. You can view the +server log with a text editor or with the Administration Console log +viewer.

                                                      +
                                                      +
                                                      +

                                                      2.9.1.1 To Use the Administration Console Log Viewer

                                                      +
                                                      +
                                                        +
                                                      1. +

                                                        Select the GlassFish Server node.

                                                        +
                                                      2. +
                                                      3. +

                                                        Click View Log Files.

                                                        +
                                                        +

                                                        The log viewer opens and displays the last 40 entries.

                                                        +
                                                        +
                                                      4. +
                                                      5. +

                                                        To display other entries, follow these steps.

                                                        +
                                                      6. +
                                                      7. +

                                                        Click Modify Search.

                                                        +
                                                      8. +
                                                      9. +

                                                        Specify any constraints on the entries you want to see.

                                                        +
                                                      10. +
                                                      11. +

                                                        Click Search at the top of the log viewer.

                                                        +
                                                      12. +
                                                      +
                                                      +
                                                      +
                                                      +
                                                      +

                                                      2.9.2 Using a Debugger

                                                      +
                                                      +

                                                      GlassFish Server supports the Java Platform Debugger Architecture +(JPDA). With JPDA, you can configure GlassFish Server to communicate +debugging information using a socket.

                                                      +
                                                      +
                                                      +

                                                      2.9.2.1 To Debug an Application Using a Debugger

                                                      +
                                                      +
                                                        +
                                                      1. +

                                                        Follow these steps to enable debugging in GlassFish Server using the +Administration Console:

                                                        +
                                                      2. +
                                                      3. +

                                                        Expand the Configurations node, then expand the server-config node.

                                                        +
                                                      4. +
                                                      5. +

                                                        Select the JVM Settings node. The default debug options are set to:

                                                        +
                                                        +
                                                        +
                                                        -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=9009
                                                        +
                                                        +
                                                        +
                                                        +

                                                        As you can see, the default debugger socket port is 9009. You can change +it to a port not in use by GlassFish Server or another service.

                                                        +
                                                        +
                                                      6. +
                                                      7. +

                                                        Select the Debug Enabled check box.

                                                        +
                                                      8. +
                                                      9. +

                                                        Click Save.

                                                        +
                                                      10. +
                                                      11. +

                                                        Stop GlassFish Server and then restart it.

                                                        +
                                                      12. +
                                                      +
                                                      +
                                                      + ++++++++ + + + + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                      Oracle Logo +
                                                      +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      +
                                                      +
                                                      +
                                                      + + + \ No newline at end of file diff --git a/webapp.html b/webapp.html new file mode 100644 index 0000000..110c5be --- /dev/null +++ b/webapp.html @@ -0,0 +1,114 @@ + + + + + + Getting Started with Web Applications + + + + + +
                                                      +
                                                      + +++++ + + + + + + + +

                                                      Java Platform, Enterprise Edition The Java EE Tutorial
                                                      +Release 8 Java Platform, Enterprise Edition
                                                      +E63026-01

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      + +++++ + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                       

                                                      +
                                                      +
                                                      +
                                                      +

                                                      6 Getting Started with Web Applications

                                                      +
                                                      +
                                                      +

                                                      This chapter introduces web applications, which typically use JavaServer +Faces technology and/or Java Servlet technology.

                                                      +
                                                      +
                                                      +

                                                      The following topics are addressed here:

                                                      +
                                                      + +
                                                      + ++++++++ + + + + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                      Oracle Logo +
                                                      +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      +
                                                      + + + \ No newline at end of file diff --git a/webapp001.html b/webapp001.html new file mode 100644 index 0000000..5dcb049 --- /dev/null +++ b/webapp001.html @@ -0,0 +1,171 @@ + + + + + + Web Applications + + + + + +
                                                      +
                                                      + +++++ + + + + + + + +

                                                      Java Platform, Enterprise Edition The Java EE Tutorial
                                                      +Release 8 Java Platform, Enterprise Edition
                                                      +E63026-01

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      + +++++ + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                       

                                                      +
                                                      +
                                                      +
                                                      +

                                                      6.1 Web Applications

                                                      +
                                                      +
                                                      +

                                                      A web application is a dynamic extension of a web or application server. +Web applications are of the following types:

                                                      +
                                                      +
                                                      + +
                                                      +
                                                      +

                                                      In the Java EE platform, web components provide the dynamic extension +capabilities for a web server. Web components can be Java servlets, web +pages implemented with JavaServer Faces technology, web service +endpoints, or JSP pages. Figure 6-1 illustrates the +interaction between a web client and a web application that uses a +servlet. The client sends an HTTP request to the web server. A web +server that implements Java Servlet and JavaServer Pages technology +converts the request into an HTTPServletRequest object. This object is +delivered to a web component, which can interact with JavaBeans +components or a database to generate dynamic content. The web component +can then generate an HTTPServletResponse or can pass the request to +another web component. A web component eventually generates a +HTTPServletResponse object. The web server converts this object to an +HTTP response and returns it to the client.

                                                      +
                                                      +
                                                      +

                                                      Figure 6-1 Java Web Application Request Handling

                                                      +
                                                      + +
                                                      +

                                                      Servlets are Java programming language classes that dynamically process +requests and construct responses. Java technologies, such as JavaServer +Faces and Facelets, are used for building interactive web applications. +(Frameworks can also be used for this purpose.) Although servlets and +JavaServer Faces and Facelets pages can be used to accomplish similar +things, each has its own strengths. Servlets are best suited for +service-oriented applications (web service endpoints can be implemented +as servlets) and the control functions of a presentation-oriented +application, such as dispatching requests and handling nontextual data. +JavaServer Faces and Facelets pages are more appropriate for generating +text-based markup, such as XHTML, and are generally used for +presentation-oriented applications.

                                                      +
                                                      +
                                                      +

                                                      Web components are supported by the services of a runtime platform +called a web container. A web container provides such services as +request dispatching, security, concurrency, and lifecycle management. A +web container also gives web components access to such APIs as naming, +transactions, and email.

                                                      +
                                                      +
                                                      +

                                                      Certain aspects of web application behavior can be configured when the +application is installed, or deployed, to the web container. The +configuration information can be specified using Java EE annotations or +can be maintained in a text file in XML format called a web application +deployment descriptor (DD). A web application DD must conform to the +schema described in the Java Servlet specification.

                                                      +
                                                      +
                                                      +

                                                      This chapter gives a brief overview of the activities involved in +developing web applications. First, it summarizes the web application +lifecycle and explains how to package and deploy very simple web +applications on GlassFish Server. The chapter then moves on to +configuring web applications and discusses how to specify the most +commonly used configuration parameters.

                                                      +
                                                      +
                                                      + ++++++++ + + + + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                      Oracle Logo +
                                                      +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      +
                                                      + + + \ No newline at end of file diff --git a/webapp002.html b/webapp002.html new file mode 100644 index 0000000..78bc610 --- /dev/null +++ b/webapp002.html @@ -0,0 +1,148 @@ + + + + + + Web Application Lifecycle + + + + + +
                                                      +
                                                      + +++++ + + + + + + + +

                                                      Java Platform, Enterprise Edition The Java EE Tutorial
                                                      +Release 8 Java Platform, Enterprise Edition
                                                      +E63026-01

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      + +++++ + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                       

                                                      +
                                                      +
                                                      +
                                                      +

                                                      6.2 Web Application Lifecycle

                                                      +
                                                      +
                                                      +

                                                      A web application consists of web components; static resource files, +such as images and cascading style sheets (CSS); and helper classes and +libraries. The web container provides many supporting services that +enhance the capabilities of web components and make them easier to +develop. However, because a web application must take these services +into account, the process for creating and running a web application is +different from that of traditional stand-alone Java classes.

                                                      +
                                                      +
                                                      +

                                                      The process for creating, deploying, and executing a web application can +be summarized as follows:

                                                      +
                                                      +
                                                      +
                                                        +
                                                      1. +

                                                        Develop the web component code.

                                                        +
                                                      2. +
                                                      3. +

                                                        Develop the web application deployment descriptor, if necessary.

                                                        +
                                                      4. +
                                                      5. +

                                                        Compile the web application components and helper classes referenced +by the components.

                                                        +
                                                      6. +
                                                      7. +

                                                        Optionally, package the application into a deployable unit.

                                                        +
                                                      8. +
                                                      9. +

                                                        Deploy the application into a web container.

                                                        +
                                                      10. +
                                                      11. +

                                                        Access a URL that references the web application.

                                                        +
                                                      12. +
                                                      +
                                                      +
                                                      +

                                                      Developing web component code is covered in the later chapters. Steps 2 +through 4 are expanded on in the following sections and illustrated with +a Hello, World–style, presentation-oriented application. This +application allows a user to enter a name into an HTML form and then +displays a greeting after the name is submitted.

                                                      +
                                                      +
                                                      +

                                                      The Hello application contains two web components that generate the +greeting and the response. This chapter discusses the following simple +applications:

                                                      +
                                                      +
                                                      +
                                                        +
                                                      • +

                                                        hello1, a JavaServer Faces technology–based application that uses +two XHTML pages and a managed bean

                                                        +
                                                      • +
                                                      • +

                                                        hello2, a servlet-based web application in which the components are +implemented by two servlet classes

                                                        +
                                                      • +
                                                      +
                                                      +
                                                      +

                                                      The applications are used to illustrate tasks involved in packaging, +deploying, configuring, and running an application that contains web +components.

                                                      +
                                                      +
                                                      + ++++++++ + + + + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                      Oracle Logo +
                                                      +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      +
                                                      + + + \ No newline at end of file diff --git a/webapp003.html b/webapp003.html new file mode 100644 index 0000000..482e0bd --- /dev/null +++ b/webapp003.html @@ -0,0 +1,667 @@ + + + + + + A Web Module That Uses JavaServer Faces Technology: The hello1 Example + + + + + +
                                                      +
                                                      + +++++ + + + + + + + +

                                                      Java Platform, Enterprise Edition The Java EE Tutorial
                                                      +Release 8 Java Platform, Enterprise Edition
                                                      +E63026-01

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      + +++++ + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                       

                                                      +
                                                      +
                                                      +
                                                      +

                                                      6.3 A Web Module That Uses JavaServer Faces Technology: The hello1Example

                                                      +
                                                      +
                                                      +

                                                      The hello1 application is a web module that uses JavaServer Faces +technology to display a greeting and response. You can use a text editor +to view the application files, or you can use NetBeans IDE.

                                                      +
                                                      +
                                                      +

                                                      The source code for this application is in the +tut-install`/examples/web/jsf/hello1/` directory.

                                                      +
                                                      +
                                                      +

                                                      The following topics are addressed here:

                                                      +
                                                      + +
                                                      +

                                                      6.3.1 To View the hello1 Web Module Using NetBeans IDE

                                                      +
                                                      +

                                                      To view the hello1 web module using NetBeans IDE:

                                                      +
                                                      +
                                                      +
                                                        +
                                                      1. +

                                                        From the File menu, choose Open Project.

                                                        +
                                                      2. +
                                                      3. +

                                                        In the Open Project dialog box, navigate to:

                                                        +
                                                        +
                                                        +
                                                        tut-install/examples/web/jsf
                                                        +
                                                        +
                                                        +
                                                      4. +
                                                      5. +

                                                        Select the hello1 folder and click Open Project.

                                                        +
                                                      6. +
                                                      7. +

                                                        Expand the Web Pages node and double-click the index.xhtml file to +view it in the editor.

                                                        +
                                                        +

                                                        The index.xhtml file is the default landing page for a Facelets +application. In a typical Facelets application, web pages are created in +XHTML. For this application, the page uses simple tag markup to display +a form with a graphic image, a header, a field, and two command buttons:

                                                        +
                                                        +
                                                        +
                                                        +
                                                        <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
                                                        +    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
                                                        +<html lang="en"
                                                        +      xmlns="http://www.w3.org/1999/xhtml"
                                                        +      xmlns:h="http://xmlns.jcp.org/jsf/html">
                                                        +    <h:head>
                                                        +        <title>Facelets Hello Greeting</title>
                                                        +    </h:head>
                                                        +    <h:body>
                                                        +        <h:form>
                                                        +            <h:graphicImage url="#{resource['images:duke.waving.gif']}"
                                                        +                            alt="Duke waving his hand"/>
                                                        +            <h2>Hello, my name is Duke. What's yours?</h2>
                                                        +            <h:inputText id="username"
                                                        +                         title="My name is: "
                                                        +                         value="#{hello.name}"
                                                        +                         required="true"
                                                        +                         requiredMessage="Error: A name is required."
                                                        +                         maxlength="25" />
                                                        +            <p></p>
                                                        +            <h:commandButton id="submit" value="Submit" action="response">
                                                        +            </h:commandButton>
                                                        +            <h:commandButton id="reset" value="Reset" type="reset">
                                                        +            </h:commandButton>
                                                        +        </h:form>
                                                        +        ...
                                                        +    </h:body>
                                                        +</html>
                                                        +
                                                        +
                                                        +
                                                        +

                                                        The most complex element on the page is the inputText field. The +maxlength attribute specifies the maximum length of the field. The +required attribute specifies that the field must be filled out; the +requiredMessage attribute provides the error message to be displayed +if the field is left empty. The title attribute provides the text to +be used by screen readers for the visually disabled. Finally, the +value attribute contains an expression that will be provided by the +Hello managed bean.

                                                        +
                                                        +
                                                        +

                                                        The web page connects to the Hello managed bean through the Expression +Language (EL) value expression #{hello.name}, which retrieves the +value of the name property from the managed bean. Note the use of +hello to reference the managed bean Hello. If no name is specified +in the @Named annotation of the managed bean, the managed bean is +always accessed with the first letter of the class name in lowercase.

                                                        +
                                                        +
                                                        +

                                                        The Submit commandButton element specifies the action as response, +meaning that when the button is clicked, the response.xhtml page is +displayed.

                                                        +
                                                        +
                                                      8. +
                                                      9. +

                                                        Double-click the response.xhtml file to view it.

                                                        +
                                                        +

                                                        The response page appears. Even simpler than the greeting page, the +response page contains a graphic image, a header that displays the +expression provided by the managed bean, and a single button whose +action element transfers you back to the index.xhtml page:

                                                        +
                                                        +
                                                        +
                                                        +
                                                        <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
                                                        +    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
                                                        +<html lang="en"
                                                        +      xmlns="http://www.w3.org/1999/xhtml"
                                                        +      xmlns:h="http://xmlns.jcp.org/jsf/html">
                                                        +    <h:head>
                                                        +        <title>Facelets Hello Response</title>
                                                        +    </h:head>
                                                        +    <h:body>
                                                        +        <h:form>
                                                        +            <h:graphicImage url="#{resource['images:duke.waving.gif']}"
                                                        +                            alt="Duke waving his hand"/>
                                                        +            <h2>Hello, #{hello.name}!</h2>
                                                        +            <p></p>
                                                        +            <h:commandButton id="back" value="Back" action="index" />
                                                        +        </h:form>
                                                        +    </h:body>
                                                        +</html>
                                                        +
                                                        +
                                                        +
                                                      10. +
                                                      11. +

                                                        Expand the Source Packages node, then the javaeetutorial.hello1 +node.

                                                        +
                                                      12. +
                                                      13. +

                                                        +
                                                        +

                                                        Double-click the Hello.java file to view it.

                                                        +
                                                        +
                                                        +

                                                        The Hello class, called a managed bean class, provides getter and +setter methods for the name property used in the Facelets page +expressions. By default, the expression language refers to the class +name, with the first letter in lowercase (hello.name).

                                                        +
                                                        +
                                                        +
                                                        +
                                                        package javaeetutorial.hello1;
                                                        +
                                                        +import javax.enterprise.context.RequestScoped;
                                                        +import javax.inject.Named;
                                                        +
                                                        +@Named
                                                        +@RequestScoped
                                                        +public class Hello {
                                                        +
                                                        +    private String name;
                                                        +
                                                        +    public Hello() {
                                                        +    }
                                                        +
                                                        +    public String getName() {
                                                        +        return name;
                                                        +    }
                                                        +
                                                        +    public void setName(String user_name) {
                                                        +        this.name = user_name;
                                                        +    }
                                                        +}
                                                        +
                                                        +
                                                        +
                                                        +

                                                        If you use the default name for the bean class, you can specify @Model +as the annotation instead of having to specify both @Named and +@RequestScoped. The @Model annotation is called a stereotype, a term +for an annotation that encapsulates other annotations. It is described +later in Using Stereotypes in CDI +Applications. Some examples will use @Model where it is appropriate.

                                                        +
                                                        +
                                                      14. +
                                                      15. +

                                                        Under the Web Pages node, expand the WEB-INF node and double-click +the web.xml file to view it.

                                                        +
                                                        +

                                                        The web.xml file contains several elements that are required for a +Facelets application. All of the following are created automatically +when you use NetBeans IDE to create an application. +* A context parameter specifying the project stage:

                                                        +
                                                        +
                                                        +

                                                        +

                                                        +
                                                        +
                                                        +
                                                        +
                                                            <context-param>
                                                        +        <param-name>javax.faces.PROJECT_STAGE</param-name>
                                                        +        <param-value>Development</param-value>
                                                        +    </context-param>
                                                        +
                                                        +
                                                        +
                                                        +

                                                        + +A context parameter provides configuration information needed by a web +application. An application can define its own context parameters. In +addition, JavaServer Faces technology and Java Servlet technology define +context parameters that an application can use.

                                                        +
                                                        +
                                                        +
                                                          +
                                                        • +

                                                          A servlet element and its servlet-mapping element specifying the +FacesServlet. All files with the .xhtml suffix will be matched:

                                                          +
                                                          +
                                                          +
                                                              <servlet>
                                                          +        <servlet-name>Faces Servlet</servlet-name>
                                                          +        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
                                                          +        <load-on-startup>1</load-on-startup>
                                                          +    </servlet>
                                                          +    <servlet-mapping>
                                                          +        <servlet-name>Faces Servlet</servlet-name>
                                                          +        <url-pattern>*.xhtml</url-pattern>
                                                          +    </servlet-mapping>
                                                          +
                                                          +
                                                          +
                                                        • +
                                                        • +

                                                          A welcome-file-list element specifying the location of the landing +page:

                                                          +
                                                          +
                                                          +
                                                              <welcome-file-list>
                                                          +        <welcome-file>index.xhtml</welcome-file>
                                                          +    </welcome-file-list>
                                                          +
                                                          +
                                                          +
                                                        • +
                                                        +
                                                        +
                                                      16. +
                                                      +
                                                      +
                                                      +

                                                      6.3.1.1 Introduction to Scopes

                                                      +
                                                      +

                                                      In the Hello.java class, the annotations javax.inject.Named and +javax.enterprise.context.RequestScoped identify the class as a managed +bean using request scope. Scope defines how application data persists +and is shared.

                                                      +
                                                      +
                                                      +

                                                      The most commonly used scopes in JavaServer Faces applications are the +following:

                                                      +
                                                      +
                                                      +
                                                        +
                                                      • +

                                                        Request (@RequestScoped): Request scope persists during a single +HTTP request in a web application. In an application like hello1, in +which the application consists of a single request and response, the +bean uses request scope.

                                                        +
                                                      • +
                                                      • +

                                                        Session (@SessionScoped): Session scope persists across multiple +HTTP requests in a web application. When an application consists of +multiple requests and responses where data needs to be maintained, beans +use session scope.

                                                        +
                                                      • +
                                                      • +

                                                        Application (@ApplicationScoped): Application scope persists across +all users' interactions with a web application.

                                                        +
                                                      • +
                                                      +
                                                      +
                                                      +

                                                      For more information on scopes in JavaServer Faces technology, see +Using Managed Bean Scopes.

                                                      +
                                                      +
                                                      +
                                                      +
                                                      +

                                                      6.3.2 Packaging and Deploying the hello1 Web Module

                                                      +
                                                      +

                                                      A web module must be packaged into a WAR in certain deployment scenarios +and whenever you want to distribute the web module. You can package a +web module into a WAR file by using Maven or by using the IDE tool of +your choice. This tutorial shows you how to use NetBeans IDE or Maven to +build, package, and deploy the hello1 sample application.

                                                      +
                                                      +
                                                      +

                                                      You can deploy a WAR file to GlassFish Server by:

                                                      +
                                                      +
                                                      +
                                                        +
                                                      • +

                                                        Using NetBeans IDE

                                                        +
                                                      • +
                                                      • +

                                                        Using the asadmin command

                                                        +
                                                      • +
                                                      • +

                                                        Using the Administration Console

                                                        +
                                                      • +
                                                      • +

                                                        Copying the WAR file into the domain-dir`/autodeploy/` directory

                                                        +
                                                      • +
                                                      +
                                                      +
                                                      +

                                                      Throughout the tutorial, you will use NetBeans IDE or Maven for +packaging and deploying.

                                                      +
                                                      +
                                                      +

                                                      6.3.2.1 To Build and Package the hello1 Web Module Using NetBeans IDE

                                                      +
                                                      +

                                                      To build and package the hello1 web module using NetBeans IDE:

                                                      +
                                                      +
                                                      +
                                                        +
                                                      1. +

                                                        Start GlassFish Server as described in +To Start GlassFish Server Using +NetBeans IDE, if you have not already done so.

                                                        +
                                                      2. +
                                                      3. +

                                                        From the File menu, choose Open Project.

                                                        +
                                                      4. +
                                                      5. +

                                                        In the Open Project dialog box, navigate to:

                                                        +
                                                        +
                                                        +
                                                        tut-install/examples/web/jsf
                                                        +
                                                        +
                                                        +
                                                      6. +
                                                      7. +

                                                        Select the hello1 folder.

                                                        +
                                                      8. +
                                                      9. +

                                                        Click Open Project.

                                                        +
                                                      10. +
                                                      11. +

                                                        In the Projects tab, right-click the hello1 project and select +Build. This command deploys the project to the server.

                                                        +
                                                      12. +
                                                      +
                                                      +
                                                      +
                                                      +

                                                      6.3.2.2 To Build and Package the hello1 Web Module Using Maven

                                                      +
                                                      +

                                                      To build and package the hello1 web module using Maven:

                                                      +
                                                      +
                                                      +
                                                        +
                                                      1. +

                                                        Start GlassFish Server as described in +To Start GlassFish Server Using the +Command Line, if you have not already done so.

                                                        +
                                                      2. +
                                                      3. +

                                                        In a terminal window, go to:

                                                        +
                                                        +
                                                        +
                                                        tut-install/examples/web/jsf/hello1/
                                                        +
                                                        +
                                                        +
                                                      4. +
                                                      5. +

                                                        Enter the following command:

                                                        +
                                                        +
                                                        +
                                                        mvn install
                                                        +
                                                        +
                                                        +
                                                        +

                                                        This command spawns any necessary compilations and creates the WAR file +in tut-install`/examples/web/jsf/hello1/target/`. It then deploys the +project to the server.

                                                        +
                                                        +
                                                      6. +
                                                      +
                                                      +
                                                      +
                                                      +
                                                      +

                                                      6.3.3 Viewing Deployed Web Modules

                                                      +
                                                      +

                                                      GlassFish Server provides two ways to view the deployed web modules: the +Administration Console and the asadmin command. You can also use +NetBeans IDE to view deployed modules.

                                                      +
                                                      +
                                                      +

                                                      6.3.3.1 To View Deployed Web Modules Using the Administration Console

                                                      +
                                                      +

                                                      To view deployed web modules using the Administration Console:

                                                      +
                                                      +
                                                      +
                                                        +
                                                      1. +

                                                        Open the URL http://localhost:4848/ in a browser.

                                                        +
                                                      2. +
                                                      3. +

                                                        Select the Applications node.

                                                        +
                                                        +

                                                        The deployed web modules appear in the Deployed Applications table.

                                                        +
                                                        +
                                                      4. +
                                                      +
                                                      +
                                                      +
                                                      +

                                                      6.3.3.2 To View Deployed Web Modules Using the asadmin Command

                                                      +
                                                      +

                                                      Enter the following command:

                                                      +
                                                      +
                                                      +
                                                      +
                                                      asadmin list-applications
                                                      +
                                                      +
                                                      +
                                                      +
                                                      +

                                                      6.3.3.3 To View Deployed Web Modules Using NetBeans IDE

                                                      +
                                                      +

                                                      To view deployed web modules using NetBeans IDE:

                                                      +
                                                      +
                                                      +
                                                        +
                                                      1. +

                                                        In the Services tab, expand the Servers node, then expand the +GlassFish Server node.

                                                        +
                                                      2. +
                                                      3. +

                                                        Expand the Applications node to view the deployed modules.

                                                        +
                                                      4. +
                                                      +
                                                      +
                                                      +
                                                      +
                                                      +

                                                      6.3.4 Running the Deployed hello1 Web Module

                                                      +
                                                      +

                                                      Now that the web module is deployed, you can view it by opening the +application in a web browser. By default, the application is deployed to +host localhost on port 8080. The context root of the web application +is hello1.

                                                      +
                                                      +
                                                      +

                                                      To run the deployed hello1 web module:

                                                      +
                                                      +
                                                      +
                                                        +
                                                      1. +

                                                        Open a web browser.

                                                        +
                                                      2. +
                                                      3. +

                                                        Enter the following URL:

                                                        +
                                                        +
                                                        +
                                                        http://localhost:8080/hello1/
                                                        +
                                                        +
                                                        +
                                                      4. +
                                                      5. +

                                                        In the field, enter your name and click Submit.

                                                        +
                                                        +

                                                        The response page displays the name you submitted. Click Back to try +again.

                                                        +
                                                        +
                                                      6. +
                                                      +
                                                      +
                                                      +

                                                      6.3.4.1 Dynamic Reloading of Deployed Modules

                                                      +
                                                      +

                                                      If dynamic reloading is enabled, you do not have to redeploy an +application or module when you change its code or deployment +descriptors. All you have to do is copy the changed pages or class files +into the deployment directory for the application or module. The +deployment directory for a web module named context-root is +domain-dir`/applications/`context-root. The server checks for changes +periodically and redeploys the application, automatically and +dynamically, with the changes.

                                                      +
                                                      +
                                                      +

                                                      This capability is useful in a development environment because it allows +code changes to be tested quickly. Dynamic reloading is not recommended +for a production environment, however, because it may degrade +performance. In addition, whenever a reload takes place, the sessions at +that time become invalid, and the client must restart the session.

                                                      +
                                                      +
                                                      +

                                                      In GlassFish Server, dynamic reloading is enabled by default.

                                                      +
                                                      +
                                                      +
                                                      +
                                                      +

                                                      6.3.5 Undeploying the hello1 Web Module

                                                      +
                                                      +

                                                      You can undeploy web modules and other types of enterprise applications +by using either NetBeans IDE or Maven.

                                                      +
                                                      +
                                                      +

                                                      6.3.5.1 To Undeploy the hello1 Web Module Using NetBeans IDE

                                                      +
                                                      +

                                                      To undeploy the hello1 web module using NetBeans IDE:

                                                      +
                                                      +
                                                      +
                                                        +
                                                      1. +

                                                        In the Services tab, expand the Servers node, then expand the +GlassFish Server node.

                                                        +
                                                      2. +
                                                      3. +

                                                        Expand the Applications node.

                                                        +
                                                      4. +
                                                      5. +

                                                        Right-click the hello1 module and select Undeploy.

                                                        +
                                                      6. +
                                                      7. +

                                                        To delete the class files and other build artifacts, go back to the +Projects tab, right-click the project, and select Clean.

                                                        +
                                                      8. +
                                                      +
                                                      +
                                                      +
                                                      +

                                                      6.3.5.2 To Undeploy the hello1 Web Module Using Maven

                                                      +
                                                      +

                                                      To undeploy the hello1 web module using Maven:

                                                      +
                                                      +
                                                      +
                                                        +
                                                      1. +

                                                        In a terminal window, go to:

                                                        +
                                                        +
                                                        +
                                                        tut-install/examples/web/jsf/hello1/
                                                        +
                                                        +
                                                        +
                                                      2. +
                                                      3. +

                                                        Enter the following command:

                                                        +
                                                        +
                                                        +
                                                        mvn cargo:undeploy
                                                        +
                                                        +
                                                        +
                                                      4. +
                                                      5. +

                                                        To delete the class files and other build artifacts, enter the +following command:

                                                        +
                                                        +
                                                        +
                                                        mvn clean
                                                        +
                                                        +
                                                        +
                                                      6. +
                                                      +
                                                      +
                                                      + ++++++++ + + + + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                      Oracle Logo +
                                                      +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      +
                                                      +
                                                      +
                                                      + + + \ No newline at end of file diff --git a/webapp004.html b/webapp004.html new file mode 100644 index 0000000..628c5df --- /dev/null +++ b/webapp004.html @@ -0,0 +1,395 @@ + + + + + + A Web Module That Uses Java Servlet Technology: The hello2 Example + + + + + +
                                                      +
                                                      + +++++ + + + + + + + +

                                                      Java Platform, Enterprise Edition The Java EE Tutorial
                                                      +Release 8 Java Platform, Enterprise Edition
                                                      +E63026-01

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      + +++++ + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                       

                                                      +
                                                      +
                                                      +
                                                      +

                                                      6.4 A Web Module That Uses Java Servlet Technology: The hello2 Example

                                                      +
                                                      +
                                                      +

                                                      The hello2 application is a web module that uses Java Servlet +technology to display a greeting and response. You can use a text editor +to view the application files, or you can use NetBeans IDE.

                                                      +
                                                      +
                                                      +

                                                      The source code for this application is in the +tut-install`/examples/web/servlet/hello2/` directory.

                                                      +
                                                      +
                                                      +

                                                      The following topics are addressed here:

                                                      +
                                                      + +
                                                      +

                                                      6.4.1 Mapping URLs to Web Components

                                                      +
                                                      +

                                                      When it receives a request, the web container must determine which web +component should handle the request. The web container does so by +mapping the URL path contained in the request to a web application and a +web component. A URL path contains the context root and, optionally, a +URL pattern:

                                                      +
                                                      +
                                                      +
                                                      +
                                                      http://host:port/context-root[/url-pattern]
                                                      +
                                                      +
                                                      +
                                                      +

                                                      You set the URL pattern for a servlet by using the @WebServlet +annotation in the servlet source file. For example, the +GreetingServlet.java file in the hello2 application contains the +following annotation, specifying the URL pattern as /greeting:

                                                      +
                                                      +
                                                      +
                                                      +
                                                      @WebServlet("/greeting")
                                                      +public class GreetingServlet extends HttpServlet {
                                                      +    ...
                                                      +
                                                      +
                                                      +
                                                      +

                                                      This annotation indicates that the URL pattern /greeting follows the +context root. Therefore, when the servlet is deployed locally, it is +accessed with the following URL:

                                                      +
                                                      +
                                                      +
                                                      +
                                                      http://localhost:8080/hello2/greeting
                                                      +
                                                      +
                                                      +
                                                      +

                                                      To access the servlet by using only the context root, specify "/" as +the URL pattern.

                                                      +
                                                      +
                                                      +
                                                      +

                                                      6.4.2 Examining the hello2 Web Module

                                                      +
                                                      +

                                                      The hello2 application behaves almost identically to the hello1 +application, but it is implemented using Java Servlet technology instead +of JavaServer Faces technology. You can use a text editor to view the +application files, or you can use NetBeans IDE.

                                                      +
                                                      +
                                                      +

                                                      6.4.2.1 To View the hello2 Web Module Using NetBeans IDE

                                                      +
                                                      +

                                                      To view the hello2 web module using NetBeans IDE:

                                                      +
                                                      +
                                                      +
                                                        +
                                                      1. +

                                                        From the File menu, choose Open Project.

                                                        +
                                                      2. +
                                                      3. +

                                                        In the Open Project dialog box, navigate to:

                                                        +
                                                        +
                                                        +
                                                        tut-install/examples/web/servlet
                                                        +
                                                        +
                                                        +
                                                      4. +
                                                      5. +

                                                        Select the hello2 folder and click Open Project.

                                                        +
                                                      6. +
                                                      7. +

                                                        Expand the Source Packages node, then expand the +javaeetutorial.hello2 node.

                                                        +
                                                      8. +
                                                      9. +

                                                        Double-click the GreetingServlet.java file to view it.

                                                        +
                                                        +

                                                        This servlet overrides the doGet method, implementing the GET method +of HTTP. The servlet displays a simple HTML greeting form whose Submit +button, like that of hello1, specifies a response page for its action. +The following excerpt begins with the @WebServlet annotation, which +specifies the URL pattern relative to the context root:

                                                        +
                                                        +
                                                        +
                                                        +
                                                        @WebServlet("/greeting")
                                                        +public class GreetingServlet extends HttpServlet {
                                                        +
                                                        +    @Override
                                                        +    public void doGet(HttpServletRequest request,
                                                        +            HttpServletResponse response)
                                                        +            throws ServletException, IOException {
                                                        +
                                                        +        response.setContentType("text/html");
                                                        +        response.setBufferSize(8192);
                                                        +        try (PrintWriter out = response.getWriter()) {
                                                        +            out.println("<html lang=\"en\">"
                                                        +                    + "<head><title>Servlet Hello</title></head>");
                                                        +
                                                        +            // then write the data of the response
                                                        +            out.println("<body  bgcolor=\"#ffffff\">"
                                                        +                + "<img src=\"duke.waving.gif\" "
                                                        +                + "alt=\"Duke waving his hand\">"
                                                        +                + "<form method=\"get\">"
                                                        +                + "<h2>Hello, my name is Duke. What's yours?</h2>"
                                                        +                + "<input title=\"My name is: \"type=\"text\" "
                                                        +                + "name=\"username\" size=\"25\">"
                                                        +                + "<p></p>"
                                                        +                + "<input type=\"submit\" value=\"Submit\">"
                                                        +                + "<input type=\"reset\" value=\"Reset\">"
                                                        +                + "</form>");
                                                        +
                                                        +            String username = request.getParameter("username");
                                                        +            if (username != null && username.length()> 0) {
                                                        +                RequestDispatcher dispatcher =
                                                        +                    getServletContext().getRequestDispatcher("/response");
                                                        +
                                                        +                if (dispatcher != null) {
                                                        +                    dispatcher.include(request, response);
                                                        +                }
                                                        +            }
                                                        +            out.println("</body></html>");
                                                        +        }
                                                        +    }
                                                        +    ...
                                                        +
                                                        +
                                                        +
                                                      10. +
                                                      11. +

                                                        Double-click the ResponseServlet.java file to view it.

                                                        +
                                                        +

                                                        This servlet also overrides the doGet method, displaying only the +response. The following excerpt begins with the @WebServlet +annotation, which specifies the URL pattern relative to the context +root:

                                                        +
                                                        +
                                                        +
                                                        +
                                                        @WebServlet("/response")
                                                        +public class ResponseServlet extends HttpServlet {
                                                        +
                                                        +    @Override
                                                        +    public void doGet(HttpServletRequest request,
                                                        +            HttpServletResponse response)
                                                        +            throws ServletException, IOException {
                                                        +        try (PrintWriter out = response.getWriter()) {
                                                        +
                                                        +            // then write the data of the response
                                                        +            String username = request.getParameter("username");
                                                        +            if (username != null && username.length()> 0) {
                                                        +                out.println("<h2>Hello, " + username + "!</h2>");
                                                        +            }
                                                        +        }
                                                        +    }
                                                        +    ...
                                                        +
                                                        +
                                                        +
                                                      12. +
                                                      +
                                                      +
                                                      +
                                                      +
                                                      +

                                                      6.4.3 Running the hello2 Example

                                                      +
                                                      +

                                                      You can use either NetBeans IDE or Maven to build, package, deploy, and +run the hello2 example.

                                                      +
                                                      +
                                                      +

                                                      The following topics are addressed here:

                                                      +
                                                      + +
                                                      +

                                                      6.4.3.1 To Run the hello2 Example Using NetBeans IDE

                                                      +
                                                      +

                                                      To run the hello2 example using NetBeans IDE:

                                                      +
                                                      +
                                                      +
                                                        +
                                                      1. +

                                                        Start GlassFish Server as described in +To Start GlassFish Server Using +NetBeans IDE, if you have not already done so.

                                                        +
                                                      2. +
                                                      3. +

                                                        From the File menu, choose Open Project.

                                                        +
                                                      4. +
                                                      5. +

                                                        In the Open Project dialog box, navigate to:

                                                        +
                                                        +
                                                        +
                                                        tut-install/examples/web/servlet
                                                        +
                                                        +
                                                        +
                                                      6. +
                                                      7. +

                                                        Select the hello2 folder.

                                                        +
                                                      8. +
                                                      9. +

                                                        Click Open Project.

                                                        +
                                                      10. +
                                                      11. +

                                                        In the Projects tab, right-click the hello2 project and select +Build to package and deploy the project.

                                                        +
                                                      12. +
                                                      13. +

                                                        In a web browser, open the following URL:

                                                        +
                                                        +
                                                        +
                                                        http://localhost:8080/hello2/greeting
                                                        +
                                                        +
                                                        +
                                                        +

                                                        The URL specifies the context root, followed by the URL pattern.

                                                        +
                                                        +
                                                        +

                                                        The application looks much like the hello1 application. The major +difference is that after you click Submit the response appears below the +greeting, not on a separate page.

                                                        +
                                                        +
                                                      14. +
                                                      +
                                                      +
                                                      +
                                                      +

                                                      6.4.3.2 To Run the hello2 Example Using Maven

                                                      +
                                                      +

                                                      To run the hello2 example using Maven:

                                                      +
                                                      +
                                                      +
                                                        +
                                                      1. +

                                                        Start GlassFish Server as described in +To Start GlassFish Server Using the +Command Line, if you have not already done so.

                                                        +
                                                      2. +
                                                      3. +

                                                        In a terminal window, go to:

                                                        +
                                                        +
                                                        +
                                                        tut-install/examples/web/servlet/hello2/
                                                        +
                                                        +
                                                        +
                                                      4. +
                                                      5. +

                                                        Enter the following command:

                                                        +
                                                        +
                                                        +
                                                        mvn install
                                                        +
                                                        +
                                                        +
                                                        +

                                                        This target builds the WAR file, copies it to the +tut-install`/examples/web/hello2/target/` directory, and deploys it.

                                                        +
                                                        +
                                                      6. +
                                                      7. +

                                                        In a web browser, open the following URL:

                                                        +
                                                        +
                                                        +
                                                        http://localhost:8080/hello2/greeting
                                                        +
                                                        +
                                                        +
                                                        +

                                                        The URL specifies the context root, followed by the URL pattern.

                                                        +
                                                        +
                                                        +

                                                        The application looks much like the hello1 application. The major +difference is that after you click Submit the response appears below the +greeting, not on a separate page.

                                                        +
                                                        +
                                                      8. +
                                                      +
                                                      +
                                                      + ++++++++ + + + + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                      Oracle Logo +
                                                      +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      +
                                                      +
                                                      +
                                                      + + + \ No newline at end of file diff --git a/webapp005.html b/webapp005.html new file mode 100644 index 0000000..0dd6793 --- /dev/null +++ b/webapp005.html @@ -0,0 +1,493 @@ + + + + + + Configuring Web Applications + + + + + +
                                                      +
                                                      + +++++ + + + + + + + +

                                                      Java Platform, Enterprise Edition The Java EE Tutorial
                                                      +Release 8 Java Platform, Enterprise Edition
                                                      +E63026-01

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      + +++++ + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                       

                                                      +
                                                      +
                                                      +
                                                      +

                                                      6.5 Configuring Web Applications

                                                      +
                                                      +
                                                      +

                                                      This section describes the following tasks involved with configuring web +applications:

                                                      +
                                                      +
                                                      +
                                                        +
                                                      • +

                                                        Setting context parameters

                                                        +
                                                      • +
                                                      • +

                                                        Declaring welcome files

                                                        +
                                                      • +
                                                      • +

                                                        Mapping errors to error screens

                                                        +
                                                      • +
                                                      • +

                                                        Declaring resource references

                                                        +
                                                      • +
                                                      +
                                                      +
                                                      +

                                                      6.5.1 Setting Context Parameters

                                                      +
                                                      +

                                                      The web components in a web module share an object that represents their +application context. You can pass context parameters to the context, or +you can pass initialization parameters to a servlet. Context parameters +are available to the entire application. For information on +initialization parameters, see Creating and +Initializing a Servlet.

                                                      +
                                                      +
                                                      +

                                                      6.5.1.1 To Add a Context Parameter Using NetBeans IDE

                                                      +
                                                      +

                                                      These steps apply generally to web applications but do not apply +specifically to the examples in this chapter.

                                                      +
                                                      +
                                                      +

                                                      To add a context parameter using NetBeans IDE:

                                                      +
                                                      +
                                                      +
                                                        +
                                                      1. +

                                                        Open the project.

                                                        +
                                                      2. +
                                                      3. +

                                                        Expand the project’s node in the Projects tree.

                                                        +
                                                      4. +
                                                      5. +

                                                        Expand the Web Pages node and then the WEB-INF node.

                                                        +
                                                      6. +
                                                      7. +

                                                        Double-click web.xml.

                                                        +
                                                        +

                                                        If the project does not have a web.xml file, create one by following +the steps in To Create a web.xml File Using NetBeans IDE.

                                                        +
                                                        +
                                                      8. +
                                                      9. +

                                                        Click General at the top of the editor window.

                                                        +
                                                      10. +
                                                      11. +

                                                        Expand the Context Parameters node.

                                                        +
                                                      12. +
                                                      13. +

                                                        Click Add.

                                                        +
                                                      14. +
                                                      15. +

                                                        In the Add Context Parameter dialog box, in the Parameter Name +field, enter the name that specifies the context object.

                                                        +
                                                      16. +
                                                      17. +

                                                        In the Parameter Value field, enter the parameter to pass to the +context object.

                                                        +
                                                      18. +
                                                      19. +

                                                        Click OK.

                                                        +
                                                      20. +
                                                      +
                                                      +
                                                      +
                                                      +

                                                      6.5.1.2 To Create a web.xml File Using NetBeans IDE

                                                      +
                                                      +

                                                      To create a web.xml file using NetBeans IDE:

                                                      +
                                                      +
                                                      +
                                                        +
                                                      1. +

                                                        From the File menu, choose New File.

                                                        +
                                                      2. +
                                                      3. +

                                                        In the New File wizard, select the Web category, then select +Standard Deployment Descriptor under File Types.

                                                        +
                                                      4. +
                                                      5. +

                                                        Click Next.

                                                        +
                                                      6. +
                                                      7. +

                                                        Click Finish.

                                                        +
                                                        +

                                                        A basic web.xml file appears in web/WEB-INF/.

                                                        +
                                                        +
                                                      8. +
                                                      +
                                                      +
                                                      +
                                                      +
                                                      +

                                                      6.5.2 Declaring Welcome Files

                                                      +
                                                      +

                                                      The welcome files mechanism allows you to specify a list of files that +the web container can append to a request for a URL (called a valid +partial request) that is not mapped to a web component. For example, +suppose that you define a welcome file welcome.html. When a client +requests a URL such as host`:port/webapp/directory, where directory +is not mapped to a servlet or XHTML page, the file +host:port/webapp/directory/welcome.html` is returned to the +client.

                                                      +
                                                      +
                                                      +

                                                      If a web container receives a valid partial request, the web container +examines the welcome file list, appends to the partial request each +welcome file in the order specified, and checks whether a static +resource or servlet in the WAR is mapped to that request URL. The web +container then sends the request to the first resource that matches in +the WAR.

                                                      +
                                                      +
                                                      +

                                                      If no welcome file is specified, GlassFish Server will use a file named +index.html as the default welcome file. If there is no welcome file +and no file named index.html, GlassFish Server returns a directory +listing.

                                                      +
                                                      +
                                                      +

                                                      You specify welcome files in the web.xml file. The welcome file +specification for the hello1 example looks like this:

                                                      +
                                                      +
                                                      +
                                                      +
                                                      <welcome-file-list>
                                                      +    <welcome-file>index.xhtml</welcome-file>
                                                      +</welcome-file-list>
                                                      +
                                                      +
                                                      +
                                                      +

                                                      A specified welcome file must not have a leading or trailing slash +(/).

                                                      +
                                                      +
                                                      +

                                                      The hello2 example does not specify a welcome file, because the URL +request is mapped to the GreetingServlet web component through the URL +pattern /greeting.

                                                      +
                                                      +
                                                      +
                                                      +

                                                      6.5.3 Mapping Errors to Error Screens

                                                      +
                                                      +

                                                      When an error occurs during execution of a web application, you can have +the application display a specific error screen according to the type of +error. In particular, you can specify a mapping between the status code +returned in an HTTP response or a Java programming language exception +returned by any web component and any type of error screen.

                                                      +
                                                      +
                                                      +

                                                      You can have multiple error-page elements in your deployment +descriptor. Each element identifies a different error that causes an +error page to open. This error page can be the same for any number of +error-page elements.

                                                      +
                                                      +
                                                      +

                                                      6.5.3.1 To Set Up Error Mapping Using NetBeans IDE

                                                      +
                                                      +

                                                      These steps apply generally to web applications but do not apply +specifically to the examples in this chapter.

                                                      +
                                                      +
                                                      +

                                                      To set up error mapping using NetBeans IDE:

                                                      +
                                                      +
                                                      +
                                                        +
                                                      1. +

                                                        Open the project.

                                                        +
                                                      2. +
                                                      3. +

                                                        Expand the project’s node in the Projects tab.

                                                        +
                                                      4. +
                                                      5. +

                                                        Expand the Web Pages node and then the WEB-INF node.

                                                        +
                                                      6. +
                                                      7. +

                                                        Double-click web.xml.

                                                        +
                                                        +

                                                        If the project does not have a web.xml file, create one by following +the steps in To Create a web.xml File Using NetBeans IDE.

                                                        +
                                                        +
                                                      8. +
                                                      9. +

                                                        Click Pages at the top of the editor window.

                                                        +
                                                      10. +
                                                      11. +

                                                        Expand the Error Pages node.

                                                        +
                                                      12. +
                                                      13. +

                                                        Click Add.

                                                        +
                                                      14. +
                                                      15. +

                                                        In the Add Error Page dialog box, click Browse to locate the page +that you want to act as the error page.

                                                        +
                                                      16. +
                                                      17. +

                                                        Specify either an error code or an exception type.

                                                        +
                                                        +
                                                          +
                                                        • +

                                                          To specify an error code, in the Error Code field enter the HTTP +status code that will cause the error page to be opened, or leave the +field blank to include all error codes.

                                                          +
                                                        • +
                                                        • +

                                                          To specify an exception type, in the Exception Type field enter the +exception that will cause the error page to load. To specify all +throwable errors and exceptions, enter java.lang.Throwable.

                                                          +
                                                        • +
                                                        +
                                                        +
                                                      18. +
                                                      19. +

                                                        Click OK.

                                                        +
                                                      20. +
                                                      +
                                                      +
                                                      +
                                                      +
                                                      +

                                                      6.5.4 Declaring Resource References

                                                      +
                                                      +

                                                      If your web component uses such objects as enterprise beans, data +sources, or web services, you use Java EE annotations to inject these +resources into your application. Annotations eliminate a lot of the +boilerplate lookup code and configuration elements that previous +versions of Java EE required.

                                                      +
                                                      +
                                                      +

                                                      Although resource injection using annotations can be more convenient for +the developer, there are some restrictions on using it in web +applications. First, you can inject resources only into +container-managed objects, because a container must have control over +the creation of a component so that it can perform the injection into a +component. As a result, you cannot inject resources into such objects as +simple JavaBeans components. However, managed beans are managed by the +container; therefore, they can accept resource injections.

                                                      +
                                                      +
                                                      +

                                                      Components that can accept resource injections are listed in +Table 6-1.

                                                      +
                                                      +
                                                      +

                                                      This section explains how to use a couple of the annotations supported +by a web container to inject resources. +Chapter 38, "Running the +Persistence Examples", explains how web applications use annotations +supported by the Java Persistence API. +Chapter 48, "Getting Started Securing +Web Applications", explains how to use annotations to specify +information about securing web applications. See +Chapter 52, "Resource Adapters and Contracts", +for more information on resources.

                                                      +
                                                      +
                                                      +

                                                      +
                                                      +
                                                      +

                                                      Table 6-1 Web Components That Accept Resource Injections

                                                      +
                                                      + ++++ + + + + + + + + + + + + + + + + + + + + + + + + +
                                                      ComponentInterface/Class

                                                      Servlets

                                                      javax.servlet.Servlet

                                                      Servlet filters

                                                      javax.servlet.ServletFilter

                                                      Event listeners

                                                      +

                                                      javax.servlet.ServletContextListener

                                                      +
                                                      +
                                                      +

                                                      javax.servlet.ServletContextAttributeListener

                                                      +
                                                      +
                                                      +

                                                      javax.servlet.ServletRequestListener

                                                      +
                                                      +
                                                      +

                                                      javax.servlet.ServletRequestAttributeListener

                                                      +
                                                      +
                                                      +

                                                      javax.servlet.http.HttpSessionListener

                                                      +
                                                      +
                                                      +

                                                      javax.servlet.http.HttpSessionAttributeListener

                                                      +
                                                      +
                                                      +

                                                      javax.servlet.http.HttpSessionBindingListener

                                                      +

                                                      Managed beans

                                                      Plain Old Java Objects

                                                      +
                                                      +
                                                      +
                                                      +
                                                      +
                                                      +
                                                      +
                                                      +

                                                      6.5.4.1 Declaring a Reference to a Resource

                                                      +
                                                      +

                                                      The @Resource annotation is used to declare a reference to a resource, +such as a data source, an enterprise bean, or an environment entry.

                                                      +
                                                      +
                                                      +

                                                      The @Resource annotation is specified on a class, a method, or a +field. The container is responsible for injecting references to +resources declared by the @Resource annotation and mapping it to the +proper JNDI resources.

                                                      +
                                                      +
                                                      +

                                                      In the following example, the @Resource annotation is used to inject a +data source into a component that needs to make a connection to the data +source, as is done when using JDBC technology to access a relational +database:

                                                      +
                                                      +
                                                      +
                                                      +
                                                      @Resource javax.sql.DataSource catalogDS;
                                                      +public getProductsByCategory() {
                                                      +    // get a connection and execute the query
                                                      +    Connection conn = catalogDS.getConnection();
                                                      +    ...
                                                      +}
                                                      +
                                                      +
                                                      +
                                                      +

                                                      The container injects this data source prior to the component’s being +made available to the application. The data source JNDI mapping is +inferred from the field name, catalogDS, and the type, +javax.sql.DataSource.

                                                      +
                                                      +
                                                      +

                                                      If you have multiple resources that you need to inject into one +component, you need to use the @Resources annotation to contain them, +as shown by the following example:

                                                      +
                                                      +
                                                      +
                                                      +
                                                      @Resources ({
                                                      +    @Resource(name="myDB" type=javax.sql.DataSource.class),
                                                      +    @Resource(name="myMQ" type=javax.jms.ConnectionFactory.class)
                                                      +})
                                                      +
                                                      +
                                                      +
                                                      +

                                                      The web application examples in this tutorial use the Java Persistence +API to access relational databases. This API does not require you to +explicitly create a connection to a data source. Therefore, the examples +do not use the @Resource annotation to inject a data source. However, +this API supports the @PersistenceUnit and @PersistenceContext +annotations for injecting EntityManagerFactory and EntityManager +instances, respectively. +Chapter 38, "Running the +Persistence Examples" describes these annotations and the use of the +Java Persistence API in web applications.

                                                      +
                                                      +
                                                      +
                                                      +

                                                      6.5.4.2 Declaring a Reference to a Web Service

                                                      +
                                                      +

                                                      The @WebServiceRef annotation provides a reference to a web service. +The following example shows uses the @WebServiceRef annotation to +declare a reference to a web service. WebServiceRef uses the +wsdlLocation element to specify the URI of the deployed service’s WSDL +file:

                                                      +
                                                      +
                                                      +
                                                      +
                                                      ...
                                                      +import javax.xml.ws.WebServiceRef;
                                                      +...
                                                      +public class ResponseServlet extends HTTPServlet {
                                                      +@WebServiceRef(wsdlLocation="http://localhost:8080/helloservice/hello?wsdl")
                                                      +static HelloService service;
                                                      +
                                                      +
                                                      +
                                                      + ++++++++ + + + + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                      Oracle Logo +
                                                      +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      +
                                                      +
                                                      +
                                                      + + + \ No newline at end of file diff --git a/webapp006.html b/webapp006.html new file mode 100644 index 0000000..8de57d7 --- /dev/null +++ b/webapp006.html @@ -0,0 +1,102 @@ + + + + + + Further Information about Web Applications + + + + + +
                                                      +
                                                      + +++++ + + + + + + + +

                                                      Java Platform, Enterprise Edition The Java EE Tutorial
                                                      +Release 8 Java Platform, Enterprise Edition
                                                      +E63026-01

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      + +++++ + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                       

                                                      +
                                                      +
                                                      +
                                                      +

                                                      6.6 Further Information about Web Applications

                                                      +
                                                      +
                                                      +

                                                      For more information on web applications, see

                                                      +
                                                      +
                                                      +
                                                        +
                                                      • +

                                                        JavaServer Faces 2.3 specification:

                                                        +
                                                        +

                                                        http://jcp.org/en/jsr/detail?id=372

                                                        +
                                                        +
                                                      • +
                                                      • +

                                                        Java Servlet 4.0 specification:

                                                        +
                                                        +

                                                        http://jcp.org/en/jsr/detail?id=369

                                                        +
                                                        +
                                                      • +
                                                      +
                                                      +
                                                      + ++++++++ + + + + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                      Oracle Logo +
                                                      +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      +
                                                      + + + \ No newline at end of file diff --git a/webi18n.html b/webi18n.html new file mode 100644 index 0000000..355ac18 --- /dev/null +++ b/webi18n.html @@ -0,0 +1,112 @@ + + + + + + Internationalizing and Localizing Web Applications + + + + + +
                                                      +
                                                      + +++++ + + + + + + + +

                                                      Java Platform, Enterprise Edition The Java EE Tutorial
                                                      +Release 8 Java Platform, Enterprise Edition
                                                      +E63026-01

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      + +++++ + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                       

                                                      +
                                                      +
                                                      +
                                                      +

                                                      20 Internationalizing and Localizing Web Applications

                                                      +
                                                      +
                                                      +

                                                      The process of preparing an application to support more than one +language and data format is called internationalization. Localization is +the process of adapting an internationalized application to support a +specific region or locale. Examples of locale-dependent information +include messages and user interface labels, character sets and encoding, +and date and currency formats. Although all client user interfaces +should be internationalized and localized, it is particularly important +for web applications because of the global nature of the web.

                                                      +
                                                      +
                                                      +

                                                      The following topics are addressed here:

                                                      +
                                                      + +
                                                      + ++++++++ + + + + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                      Oracle Logo +
                                                      +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      +
                                                      + + + \ No newline at end of file diff --git a/webi18n001.html b/webi18n001.html new file mode 100644 index 0000000..de4ae01 --- /dev/null +++ b/webi18n001.html @@ -0,0 +1,115 @@ + + + + + + Java Platform Localization Classes + + + + + +
                                                      +
                                                      + +++++ + + + + + + + +

                                                      Java Platform, Enterprise Edition The Java EE Tutorial
                                                      +Release 8 Java Platform, Enterprise Edition
                                                      +E63026-01

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      + +++++ + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                       

                                                      +
                                                      +
                                                      +
                                                      +

                                                      20.1 Java Platform Localization Classes

                                                      +
                                                      +
                                                      +

                                                      In the Java platform, java.util.Locale +(http://docs.oracle.com/javase/7/docs/api/java/util/Locale.html) +represents a specific geographical, political, or cultural region. The +string representation of a locale consists of the international standard +two-character abbreviation for language and country and an optional +variant, all separated by underscore (_) characters. Examples of +locale strings include fr (French), de_CH (Swiss German), and +en_US_POSIX (English on a POSIX-compliant platform).

                                                      +
                                                      +
                                                      +

                                                      Locale-sensitive data is stored in a java.util.ResourceBundle +(http://docs.oracle.com/javase/7/docs/api/java/util/ResourceBundle.html). +A resource bundle contains key-value pairs, where the keys uniquely +identify a locale-specific object in the bundle. A resource bundle can +be backed by a text file (properties resource bundle) or a class (list +resource bundle) containing the pairs. You construct a resource bundle +instance by appending a locale string representation to a base name.

                                                      +
                                                      +
                                                      +

                                                      The Duke’s Bookstore application (see +Chapter 57, "Duke’s Bookstore Case Study +Example") contains resource bundles with the base name +messages.properties for the locales de (German), es (Spanish), and +fr (French). The default locale, en (English), which is specified in +the faces-config.xml file, uses the resource bundle with the base +name, messages.properties.

                                                      +
                                                      +
                                                      +

                                                      For more details on internationalization and localization in the Java +platform, see http://docs.oracle.com/javase/tutorial/i18n/index.html.

                                                      +
                                                      +
                                                      + ++++++++ + + + + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                      Oracle Logo +
                                                      +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      +
                                                      + + + \ No newline at end of file diff --git a/webi18n002.html b/webi18n002.html new file mode 100644 index 0000000..9da57bd --- /dev/null +++ b/webi18n002.html @@ -0,0 +1,296 @@ + + + + + + Providing Localized Messages and Labels + + + + + +
                                                      +
                                                      + +++++ + + + + + + + +

                                                      Java Platform, Enterprise Edition The Java EE Tutorial
                                                      +Release 8 Java Platform, Enterprise Edition
                                                      +E63026-01

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      + +++++ + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                       

                                                      +
                                                      +
                                                      +
                                                      +

                                                      20.2 Providing Localized Messages and Labels

                                                      +
                                                      +
                                                      +

                                                      Messages and labels should be tailored according to the conventions of a +user’s language and region. There are two approaches to providing +localized messages and labels in a web application.

                                                      +
                                                      +
                                                      +
                                                        +
                                                      • +

                                                        Provide a version of the web page in each of the target locales and +have a controller servlet dispatch the request to the appropriate page +depending on the requested locale. This approach is useful if large +amounts of data on a page or an entire web application need to be +internationalized.

                                                        +
                                                      • +
                                                      • +

                                                        Isolate any locale-sensitive data on a page into resource bundles, and +access the data so that the corresponding translated message is fetched +automatically and inserted into the page. Thus, instead of creating +strings directly in your code, you create a resource bundle that +contains translations and read the translations from that bundle using +the corresponding key.

                                                        +
                                                      • +
                                                      +
                                                      +
                                                      +

                                                      The Duke’s Bookstore application follows the second approach. Here are a +few lines from the default resource bundle messages.properties:

                                                      +
                                                      +
                                                      +
                                                      +
                                                      TitleShoppingCart=Shopping Cart
                                                      +TitleReceipt=Receipt
                                                      +TitleBookCatalog=Book Catalog
                                                      +TitleCashier=Cashier
                                                      +TitleBookDescription=Book Description
                                                      +Visitor=You are visitor number
                                                      +What=What We\'re Reading
                                                      +
                                                      +
                                                      +
                                                      +

                                                      20.2.1 Establishing the Locale

                                                      +
                                                      +

                                                      To get the correct strings for a given user, a web application either +retrieves the locale (set by a browser language preference) from the +request using the getLocale method, or allows the user to explicitly +select the locale.

                                                      +
                                                      +
                                                      +

                                                      A component can explicitly set the locale by using the fmt:setLocale +tag.

                                                      +
                                                      +
                                                      +

                                                      The locale-config element in the configuration file registers the +default locale and also registers other supported locales. This element +in Duke’s Bookstore registers English as the default locale and +indicates that German, French, and Spanish are supported locales.

                                                      +
                                                      +
                                                      +
                                                      +
                                                      <locale-config>
                                                      +    <default-locale>en</default-locale>
                                                      +    <supported-locale>es</supported-locale>
                                                      +    <supported-locale>de</supported-locale>
                                                      +    <supported-locale>fr</supported-locale>
                                                      +</locale-config>
                                                      +
                                                      +
                                                      +
                                                      +

                                                      The LocaleBean in the Duke’s Bookstore application uses the +getLocale method to retrieve the locale.

                                                      +
                                                      +
                                                      +
                                                      +
                                                      public class LocaleBean {
                                                      +
                                                      +    ...
                                                      +    private FacesContext ctx = FacesContext.getCurrentInstance();
                                                      +    private Locale locale = ctx.getViewRoot().getLocale();;
                                                      +
                                                      +    ...
                                                      +}
                                                      +
                                                      +
                                                      +
                                                      +
                                                      +

                                                      20.2.2 Setting the Resource Bundle

                                                      +
                                                      +

                                                      The resource bundle is set with the resource-bundle element in the +configuration file. The setting for Duke’s Bookstore looks like this:

                                                      +
                                                      +
                                                      +
                                                      +
                                                      <resource-bundle>
                                                      +    <base-name>
                                                      +        javaeetutorial.dukesbookstore.web.messages.Messages
                                                      +    </base-name>
                                                      +    <var>bundle</var>
                                                      +</resource-bundle>
                                                      +
                                                      +
                                                      +
                                                      +

                                                      After the locale is set, the controller of a web application could +retrieve the resource bundle for that locale and save it as a session +attribute (see Associating Objects with a +Session) for use by other components or simply be used to return a text +string appropriate for the selected locale:

                                                      +
                                                      +
                                                      +
                                                      +
                                                      public String toString(Locale locale) {
                                                      +    ResourceBundle res =
                                                      +        ResourceBundle.getBundle(
                                                      +            "javaeetutorial.dukesbookstore.web.messages.Messages", locale);
                                                      +    return res.getString(name() + ".string");
                                                      +}
                                                      +
                                                      +
                                                      +
                                                      +

                                                      Alternatively, an application could use the f:loadBundle tag to set +the resource bundle. This tag loads the correct resource bundle +according to the locale stored in FacesContext.

                                                      +
                                                      +
                                                      +
                                                      +
                                                      <f:loadBundle basename="javaeetutorial.dukesbookstore.web.messages.Messages"
                                                      +    var="bundle"/>
                                                      +
                                                      +
                                                      +
                                                      +

                                                      Resource bundles containing messages that are explicitly referenced from +a JavaServer Faces tag attribute using a value expression must be +registered using the resource-bundle element of the configuration +file.

                                                      +
                                                      +
                                                      +

                                                      For more information on using this element, see +Registering Application Messages.

                                                      +
                                                      +
                                                      +
                                                      +

                                                      20.2.3 Retrieving Localized Messages

                                                      +
                                                      +

                                                      A web component written in the Java programming language retrieves the +resource bundle from the session:

                                                      +
                                                      +
                                                      +
                                                      +
                                                      ResourceBundle messages = (ResourceBundle)session.getAttribute("messages");
                                                      +
                                                      +
                                                      +
                                                      +

                                                      Then it looks up the string associated with the key person.lastName as +follows:

                                                      +
                                                      +
                                                      +
                                                      +
                                                      messages.getString("person.lastName");
                                                      +
                                                      +
                                                      +
                                                      +

                                                      You can only use a message or messages tag to display messages that +are queued onto a component as a result of a converter or validator +being registered on the component. The following example shows a +message tag that displays the error message queued on the userNo +input component if the validator registered on the component fails to +validate the value the user enters into the component.

                                                      +
                                                      +
                                                      +
                                                      +
                                                      <h:inputText id="userNo" value="#{UserNumberBean.userNumber}">
                                                      +    <f:validateLongRange minimum="0" maximum="10" />
                                                      +</h:inputText>
                                                      +...
                                                      +<h:message style="color: red; text-decoration: overline"
                                                      +           id="errors1" for="userNo"/>
                                                      +
                                                      +
                                                      +
                                                      +

                                                      For more information on using the message or messages tags, see +Displaying Error Messages with the h:message +and h:messages Tags.

                                                      +
                                                      +
                                                      +

                                                      Messages that are not queued on a component and are therefore not loaded +automatically are referenced using a value expression. You can reference +a localized message from almost any JavaServer Faces tag attribute.

                                                      +
                                                      +
                                                      +

                                                      The value expression that references a message has the same notation +whether you loaded the resource bundle with the loadBundle tag or +registered it with the resource-bundle element in the configuration +file.

                                                      +
                                                      +
                                                      +

                                                      The value expression notation is var.message, in which var matches +the var attribute of the loadBundle tag or the var element defined +in the resource-bundle element of the configuration file, and +message matches the key of the message contained in the resource +bundle, referred to by the var attribute.

                                                      +
                                                      +
                                                      +

                                                      Here is an example from bookcashier.xhtml in Duke’s Bookstore:

                                                      +
                                                      +
                                                      +
                                                      +
                                                      <h:outputLabel for="name" value="#{bundle.Name}" />
                                                      +
                                                      +
                                                      +
                                                      +

                                                      Notice that bundle matches the var element from the configuration +file and that Name matches the key in the resource bundle.

                                                      +
                                                      +
                                                      + ++++++++ + + + + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                      Oracle Logo +
                                                      +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      +
                                                      +
                                                      + + + \ No newline at end of file diff --git a/webi18n003.html b/webi18n003.html new file mode 100644 index 0000000..edd2e9c --- /dev/null +++ b/webi18n003.html @@ -0,0 +1,106 @@ + + + + + + Date and Number Formatting + + + + + +
                                                      +
                                                      + +++++ + + + + + + + +

                                                      Java Platform, Enterprise Edition The Java EE Tutorial
                                                      +Release 8 Java Platform, Enterprise Edition
                                                      +E63026-01

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      + +++++ + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                       

                                                      +
                                                      +
                                                      +
                                                      +

                                                      20.3 Date and Number Formatting

                                                      +
                                                      +
                                                      +

                                                      Java programs use the DateFormat.getDateInstance(int, locale) method +to parse and format dates in a locale-sensitive manner. Java programs +use the NumberFormat.get`XXX`Instance(locale) method, where XXX can be +Currency, Number, or Percent, to parse and format numerical values +in a locale-sensitive manner.

                                                      +
                                                      +
                                                      +

                                                      An application can use date/time and number converters to format dates +and numbers in a locale-sensitive manner. For example, a shipping date +could be converted as follows:

                                                      +
                                                      +
                                                      +
                                                      +
                                                      <h:outputText value="#{cashier.shipDate}">
                                                      +    <f:convertDateTime dateStyle="full"/>
                                                      +</h:outputText>
                                                      +
                                                      +
                                                      +
                                                      +

                                                      For information on JavaServer Faces converters, see +Using the Standard Converters.

                                                      +
                                                      +
                                                      + ++++++++ + + + + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                      Oracle Logo +
                                                      +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      +
                                                      + + + \ No newline at end of file diff --git a/webi18n004.html b/webi18n004.html new file mode 100644 index 0000000..841169d --- /dev/null +++ b/webi18n004.html @@ -0,0 +1,166 @@ + + + + + + Character Sets and Encodings + + + + + +
                                                      +
                                                      + +++++ + + + + + + + +

                                                      Java Platform, Enterprise Edition The Java EE Tutorial
                                                      +Release 8 Java Platform, Enterprise Edition
                                                      +E63026-01

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      + +++++ + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                       

                                                      +
                                                      +
                                                      +
                                                      +

                                                      20.4 Character Sets and Encodings

                                                      +
                                                      +
                                                      +

                                                      The following sections describe character sets and character encodings.

                                                      +
                                                      +
                                                      +

                                                      The following topics are addressed here:

                                                      +
                                                      + +
                                                      +

                                                      20.4.1 Character Sets

                                                      +
                                                      +

                                                      A character set is a set of textual and graphic symbols, each of which +is mapped to a set of nonnegative integers.

                                                      +
                                                      +
                                                      +

                                                      The first character set used in computing was US-ASCII. It is limited in +that it can represent only American English. US-ASCII contains uppercase +and lowercase Latin alphabets, numerals, punctuation, a set of control +codes, and a few miscellaneous symbols.

                                                      +
                                                      +
                                                      +

                                                      Unicode defines a standardized, universal character set that can be +extended to accommodate additions. When the Java program source file +encoding doesn’t support Unicode, you can represent Unicode characters +as escape sequences by using the notation `\u`XXXX, where XXXX is the +character’s 16-bit representation in hexadecimal. For example, the +Spanish version of a message file could use Unicode for non-ASCII +characters, as follows:

                                                      +
                                                      +
                                                      +
                                                      +
                                                      admin.nav.main=P\u00e1gina principal de administraci\u00f3n
                                                      +
                                                      +
                                                      +
                                                      +
                                                      +

                                                      20.4.2 Character Encoding

                                                      +
                                                      +

                                                      A character encoding maps a character set to units of a specific width +and defines byte serialization and ordering rules. Many character sets +have more than one encoding. For example, Java programs can represent +Japanese character sets using the EUC-JP or Shift-JIS encodings, +among others. Each encoding has rules for representing and serializing a +character set.

                                                      +
                                                      +
                                                      +

                                                      The ISO 8859 series defines 13 character encodings that can represent +texts in dozens of languages. Each ISO 8859 character encoding can have +up to 256 characters. ISO-8859-1 (Latin-1) comprises the ASCII character +set, characters with diacritics (accents, diaereses, cedillas, +circumflexes, and so on), and additional symbols.

                                                      +
                                                      +
                                                      +

                                                      UTF-8 (Unicode Transformation Format, 8-bit form) is a variable-width +character encoding that encodes 16-bit Unicode characters as one to four +bytes. A byte in UTF-8 is equivalent to 7-bit ASCII if its high-order +bit is zero; otherwise, the character comprises a variable number of +bytes.

                                                      +
                                                      +
                                                      +

                                                      UTF-8 is compatible with the majority of existing web content and +provides access to the Unicode character set. Current versions of +browsers and email clients support UTF-8. In addition, many web +standards specify UTF-8 as their character encoding. For example, UTF-8 +is one of the two required encodings for XML documents (the other is +UTF-16).

                                                      +
                                                      +
                                                      +

                                                      Web components usually use PrintWriter to produce responses; +PrintWriter automatically encodes using ISO-8859-1. Servlets can also +output binary data using OutputStream classes, which perform no +encoding. An application that uses a character set that cannot use the +default encoding must explicitly set a different encoding.

                                                      +
                                                      +
                                                      + ++++++++ + + + + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                      Oracle Logo +
                                                      +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      +
                                                      +
                                                      + + + \ No newline at end of file diff --git a/webservices-intro.html b/webservices-intro.html new file mode 100644 index 0000000..e49e3c9 --- /dev/null +++ b/webservices-intro.html @@ -0,0 +1,105 @@ + + + + + + Introduction to Web Services + + + + + +
                                                      +
                                                      + +++++ + + + + + + + +

                                                      Java Platform, Enterprise Edition The Java EE Tutorial
                                                      +Release 8 Java Platform, Enterprise Edition
                                                      +E63026-01

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      + +++++ + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                       

                                                      +
                                                      +
                                                      +
                                                      +

                                                      27 Introduction to Web Services

                                                      +
                                                      +
                                                      +

                                                      This part of the tutorial discusses Java EE 7 web services technologies. +These technologies include Java API for XML Web Services (JAX-WS) and +Java API for RESTful Web Services (JAX-RS).

                                                      +
                                                      +
                                                      +

                                                      The following topics are addressed here:

                                                      +
                                                      + +
                                                      + ++++++++ + + + + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                      Oracle Logo +
                                                      +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      +
                                                      + + + \ No newline at end of file diff --git a/webservices-intro001.html b/webservices-intro001.html new file mode 100644 index 0000000..1b90da0 --- /dev/null +++ b/webservices-intro001.html @@ -0,0 +1,95 @@ + + + + + + What Are Web Services? + + + + + +
                                                      +
                                                      + +++++ + + + + + + + +

                                                      Java Platform, Enterprise Edition The Java EE Tutorial
                                                      +Release 8 Java Platform, Enterprise Edition
                                                      +E63026-01

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      + +++++ + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                       

                                                      +
                                                      +
                                                      +
                                                      +

                                                      27.1 What Are Web Services?

                                                      +
                                                      +
                                                      +

                                                      Web services are client and server applications that communicate over +the World Wide Web’s (WWW) HyperText Transfer Protocol (HTTP). As +described by the World Wide Web Consortium (W3C), web services provide a +standard means of interoperating between software applications running +on a variety of platforms and frameworks. Web services are characterized +by their great interoperability and extensibility as well as their +machine-processable descriptions, thanks to the use of XML. Web services +can be combined in a loosely coupled way to achieve complex operations. +Programs providing simple services can interact with each other to +deliver sophisticated added-value services.

                                                      +
                                                      +
                                                      + ++++++++ + + + + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                      Oracle Logo +
                                                      +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      +
                                                      + + + \ No newline at end of file diff --git a/webservices-intro002.html b/webservices-intro002.html new file mode 100644 index 0000000..b1b0660 --- /dev/null +++ b/webservices-intro002.html @@ -0,0 +1,232 @@ + + + + + + Types of Web Services + + + + + +
                                                      +
                                                      + +++++ + + + + + + + +

                                                      Java Platform, Enterprise Edition The Java EE Tutorial
                                                      +Release 8 Java Platform, Enterprise Edition
                                                      +E63026-01

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      + +++++ + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                       

                                                      +
                                                      +
                                                      +
                                                      +

                                                      27.2 Types of Web Services

                                                      +
                                                      +
                                                      +

                                                      On the conceptual level, a service is a software component provided +through a network-accessible endpoint. The service consumer and provider +use messages to exchange invocation request and response information in +the form of self-containing documents that make very few assumptions +about the technological capabilities of the receiver.

                                                      +
                                                      +
                                                      +

                                                      On a technical level, web services can be implemented in various ways. +The two types of web services discussed in this section can be +distinguished as "big" web services and "RESTful" web services.

                                                      +
                                                      +
                                                      +

                                                      The following topics are addressed here:

                                                      +
                                                      + +
                                                      +

                                                      27.2.1 "Big" Web Services

                                                      +
                                                      +

                                                      In Java EE 7, JAX-WS provides the functionality for "big" web services, +which are described in Chapter 28, "Building Web +Services with JAX-WS". Big web services use XML messages that follow +the Simple Object Access Protocol (SOAP) standard, an XML language +defining a message architecture and message formats. Such systems often +contain a machine-readable description of the operations offered by the +service, written in the Web Services Description Language (WSDL), an XML +language for defining interfaces syntactically.

                                                      +
                                                      +
                                                      +

                                                      The SOAP message format and the WSDL interface definition language have +gained widespread adoption. Many development tools, such as NetBeans +IDE, can reduce the complexity of developing web service applications.

                                                      +
                                                      +
                                                      +

                                                      A SOAP-based design must include the following elements.

                                                      +
                                                      +
                                                      +
                                                        +
                                                      • +

                                                        A formal contract must be established to describe the interface that +the web service offers. WSDL can be used to describe the details of the +contract, which may include messages, operations, bindings, and the +location of the web service. You may also process SOAP messages in a +JAX-WS service without publishing a WSDL.

                                                        +
                                                      • +
                                                      • +

                                                        The architecture must address complex nonfunctional requirements. Many +web service specifications address such requirements and establish a +common vocabulary for them. Examples include transactions, security, +addressing, trust, coordination, and so on.

                                                        +
                                                      • +
                                                      • +

                                                        The architecture needs to handle asynchronous processing and +invocation. In such cases, the infrastructure provided by standards, +such as Web Services Reliable Messaging (WSRM), and APIs, such as +JAX-WS, with their client-side asynchronous invocation support, can be +leveraged out of the box.

                                                        +
                                                      • +
                                                      +
                                                      +
                                                      +
                                                      +

                                                      27.2.2 RESTful Web Services

                                                      +
                                                      +

                                                      In Java EE 7, JAX-RS provides the functionality for Representational +State Transfer (RESTful) web services. REST is well suited for basic, ad +hoc integration scenarios. RESTful web services, often better integrated +with HTTP than SOAP-based services are, do not require XML messages or +WSDL service-API definitions.

                                                      +
                                                      +
                                                      +

                                                      Project Jersey is the production-ready reference implementation for the +JAX-RS specification. Jersey implements support for the annotations +defined in the JAX-RS specification, making it easy for developers to +build RESTful web services with Java and the Java Virtual Machine (JVM).

                                                      +
                                                      +
                                                      +

                                                      Because RESTful web services use existing well-known W3C and Internet +Engineering Task Force (IETF) standards (HTTP, XML, URI, MIME) and have +a lightweight infrastructure that allows services to be built with +minimal tooling, developing RESTful web services is inexpensive and thus +has a very low barrier for adoption. You can use a development tool such +as NetBeans IDE to further reduce the complexity of developing RESTful +web services.

                                                      +
                                                      +
                                                      +

                                                      A RESTful design may be appropriate when the following conditions are +met.

                                                      +
                                                      +
                                                      +
                                                        +
                                                      • +

                                                        The web services are completely stateless. A good test is to consider +whether the interaction can survive a restart of the server.

                                                        +
                                                      • +
                                                      • +

                                                        A caching infrastructure can be leveraged for performance. If the data +that the web service returns is not dynamically generated and can be +cached, the caching infrastructure that web servers and other +intermediaries inherently provide can be leveraged to improve +performance. However, the developer must take care because such caches +are limited to the HTTP GET method for most servers.

                                                        +
                                                      • +
                                                      • +

                                                        The service producer and service consumer have a mutual understanding +of the context and content being passed along. Because there is no +formal way to describe the web services interface, both parties must +agree out of band on the schemas that describe the data being exchanged +and on ways to process it meaningfully. In the real world, most +commercial applications that expose services as RESTful implementations +also distribute so-called value-added toolkits that describe the +interfaces to developers in popular programming languages.

                                                        +
                                                      • +
                                                      • +

                                                        Bandwidth is particularly important and needs to be limited. REST is +particularly useful for limited-profile devices, such as PDAs and mobile +phones, for which the overhead of headers and additional layers of SOAP +elements on the XML payload must be restricted.

                                                        +
                                                      • +
                                                      • +

                                                        Web service delivery or aggregation into existing websites can be +enabled easily with a RESTful style. Developers can use such +technologies as JAX-RS and Asynchronous JavaScript with XML (Ajax) and +such toolkits as Direct Web Remoting (DWR) to consume the services in +their web applications. Rather than starting from scratch, services can +be exposed with XML and consumed by HTML pages without significantly +refactoring the existing website architecture. Existing developers will +be more productive because they are adding to something they are already +familiar with rather than having to start from scratch with new +technology.

                                                        +
                                                      • +
                                                      +
                                                      +
                                                      +

                                                      RESTful web services are discussed in Chapter 29, +"Building RESTful Web Services with JAX-RS". This chapter contains +information about generating the skeleton of a RESTful web service using +both NetBeans IDE and the Maven project-management tool.

                                                      +
                                                      +
                                                      + ++++++++ + + + + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                      Oracle Logo +
                                                      +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      +
                                                      +
                                                      + + + \ No newline at end of file diff --git a/webservices-intro003.html b/webservices-intro003.html new file mode 100644 index 0000000..80c8200 --- /dev/null +++ b/webservices-intro003.html @@ -0,0 +1,111 @@ + + + + + + Deciding Which Type of Web Service to Use + + + + + +
                                                      +
                                                      + +++++ + + + + + + + +

                                                      Java Platform, Enterprise Edition The Java EE Tutorial
                                                      +Release 8 Java Platform, Enterprise Edition
                                                      +E63026-01

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      + +++++ + + + + + + + +

                                                      Previous
                                                      +Previous

                                                      Next
                                                      +Next

                                                       

                                                      +
                                                      +
                                                      +
                                                      +

                                                      27.3 Deciding Which Type of Web Service to Use

                                                      +
                                                      +
                                                      +

                                                      Basically, you want to use RESTful web services for integration over the +web and big web services in enterprise application–integration scenarios +that have advanced quality-of-service (QoS) requirements.

                                                      +
                                                      +
                                                      +
                                                        +
                                                      • +

                                                        JAX-WS: Addresses advanced QoS requirements that commonly occur in +enterprise computing. When compared to JAX-RS, JAX-WS makes it easier to +support the WS-* set of protocols, which provide standards for security +and reliability, among other things, and interoperate with other WS-* +conforming clients and servers.

                                                        +
                                                      • +
                                                      • +

                                                        JAX-RS: Makes it easier to write web applications that apply some or +all of the constraints of the REST style to induce desirable properties +in the application, such as loose coupling (evolving the server is +easier without breaking existing clients), scalability (start small and +grow), and architectural simplicity (use off-the-shelf components, such +as proxies or HTTP routers). You would choose to use JAX-RS for your web +application because it is easier for many types of clients to consume +RESTful web services while enabling the server side to evolve and scale. +Clients can choose to consume some or all aspects of the service and +mash it up with other web-based services.

                                                        +
                                                      • +
                                                      +
                                                      +
                                                      + ++++++++ + + + + + + + + + + +

                                                      Previous
                                                      +Previous

                                                      Next
                                                      +Next

                                                      Oracle Logo +
                                                      +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      +
                                                      + + + \ No newline at end of file diff --git a/websocket.html b/websocket.html new file mode 100644 index 0000000..3f4dfd1 --- /dev/null +++ b/websocket.html @@ -0,0 +1,137 @@ + + + + + + Java API for WebSocket + + + + + +
                                                      +
                                                      + +++++ + + + + + + + +

                                                      Java Platform, Enterprise Edition The Java EE Tutorial
                                                      +Release 8 Java Platform, Enterprise Edition
                                                      +E63026-01

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      + +++++ + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                       

                                                      +
                                                      +
                                                      +
                                                      +

                                                      18 Java API for WebSocket

                                                      +
                                                      +
                                                      +

                                                      This chapter describes the Java API for WebSocket (JSR 356), which +provides support for creating WebSocket applications. WebSocket is an +application protocol that provides full-duplex communications between +two peers over the TCP protocol.

                                                      +
                                                      +
                                                      +

                                                      The following topics are addressed here:

                                                      +
                                                      + +
                                                      + ++++++++ + + + + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                      Oracle Logo +
                                                      +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      +
                                                      + + + \ No newline at end of file diff --git a/websocket001.html b/websocket001.html new file mode 100644 index 0000000..e9fd0d8 --- /dev/null +++ b/websocket001.html @@ -0,0 +1,175 @@ + + + + + + Introduction to WebSocket + + + + + +
                                                      +
                                                      + +++++ + + + + + + + +

                                                      Java Platform, Enterprise Edition The Java EE Tutorial
                                                      +Release 8 Java Platform, Enterprise Edition
                                                      +E63026-01

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      + +++++ + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                       

                                                      +
                                                      +
                                                      +
                                                      +

                                                      18.1 Introduction to WebSocket

                                                      +
                                                      +
                                                      +

                                                      In the traditional request-response model used in HTTP, the client +requests resources, and the server provides responses. The exchange is +always initiated by the client; the server cannot send any data without +the client requesting it first. This model worked well for the World +Wide Web when clients made occasional requests for documents that +changed infrequently, but the limitations of this approach are +increasingly relevant as content changes quickly and users expect a more +interactive experience on the Web. The WebSocket protocol addresses +these limitations by providing a full-duplex communication channel +between the client and the server. Combined with other client +technologies, such as JavaScript and HTML5, WebSocket enables web +applications to deliver a richer user experience.

                                                      +
                                                      +
                                                      +

                                                      In a WebSocket application, the server publishes a WebSocket endpoint, +and the client uses the endpoint’s URI to connect to the server. The +WebSocket protocol is symmetrical after the connection has been +established; the client and the server can send messages to each other +at any time while the connection is open, and they can close the +connection at any time. Clients usually connect only to one server, and +servers accept connections from multiple clients.

                                                      +
                                                      +
                                                      +

                                                      The WebSocket protocol has two parts: handshake and data transfer. The +client initiates the handshake by sending a request to a WebSocket +endpoint using its URI. The handshake is compatible with existing +HTTP-based infrastructure: web servers interpret it as an HTTP +connection upgrade request. An example handshake from a client looks +like this:

                                                      +
                                                      +
                                                      +
                                                      +
                                                      GET /path/to/websocket/endpoint HTTP/1.1
                                                      +Host: localhost
                                                      +Upgrade: websocket
                                                      +Connection: Upgrade
                                                      +Sec-WebSocket-Key: xqBt3ImNzJbYqRINxEFlkg==
                                                      +Origin: http://localhost
                                                      +Sec-WebSocket-Version: 13
                                                      +
                                                      +
                                                      +
                                                      +

                                                      An example handshake from the server in response to the client looks +like this:

                                                      +
                                                      +
                                                      +
                                                      +
                                                      HTTP/1.1 101 Switching Protocols
                                                      +Upgrade: websocket
                                                      +Connection: Upgrade
                                                      +Sec-WebSocket-Accept: K7DJLdLooIwIG/MOpvWFB3y3FE8=
                                                      +
                                                      +
                                                      +
                                                      +

                                                      The server applies a known operation to the value of the +Sec-WebSocket-Key header to generate the value of the +Sec-WebSocket-Accept header. The client applies the same operation to +the value of the Sec-WebSocket-Key header, and the connection is +established successfully if the result matches the value received from +the server. The client and the server can send messages to each other +after a successful handshake.

                                                      +
                                                      +
                                                      +

                                                      WebSocket supports text messages (encoded as UTF-8) and binary messages. +The control frames in WebSocket are close, ping, and pong (a response to +a ping frame). Ping and pong frames may also contain application data.

                                                      +
                                                      +
                                                      +

                                                      WebSocket endpoints are represented by URIs that have the following +form:

                                                      +
                                                      +
                                                      +
                                                      +
                                                      ws://host:port/path?query
                                                      +wss://host:port/path?query
                                                      +
                                                      +
                                                      +
                                                      +

                                                      The ws scheme represents an unencrypted WebSocket connection, and the +wss scheme represents an encrypted connection. The port component is +optional; the default port number is 80 for unencrypted connections and +443 for encrypted connections. The path component indicates the +location of an endpoint within a server. The query component is +optional.

                                                      +
                                                      +
                                                      +

                                                      Modern web browsers implement the WebSocket protocol and provide a +JavaScript API to connect to endpoints, send messages, and assign +callback methods for WebSocket events (such as opened connections, +received messages, and closed connections).

                                                      +
                                                      +
                                                      + ++++++++ + + + + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                      Oracle Logo +
                                                      +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      +
                                                      + + + \ No newline at end of file diff --git a/websocket002.html b/websocket002.html new file mode 100644 index 0000000..3e4eb84 --- /dev/null +++ b/websocket002.html @@ -0,0 +1,201 @@ + + + + + + Creating WebSocket Applications in the Java EE Platform + + + + + +
                                                      +
                                                      + +++++ + + + + + + + +

                                                      Java Platform, Enterprise Edition The Java EE Tutorial
                                                      +Release 8 Java Platform, Enterprise Edition
                                                      +E63026-01

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      + +++++ + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                       

                                                      +
                                                      +
                                                      +
                                                      +

                                                      18.2 Creating WebSocket Applications in the Java EE Platform

                                                      +
                                                      +
                                                      +

                                                      The Java EE platform includes the Java API for WebSocket (JSR 356), +which enables you to create, configure, and deploy WebSocket endpoints +in web applications. The WebSocket client API specified in JSR 356 also +enables you to access remote WebSocket endpoints from any Java +application.

                                                      +
                                                      +
                                                      +

                                                      The Java API for WebSocket consists of the following packages.

                                                      +
                                                      +
                                                      +
                                                        +
                                                      • +

                                                        The javax.websocket.server package contains annotations, classes, +and interfaces to create and configure server endpoints.

                                                        +
                                                      • +
                                                      • +

                                                        The javax.websocket package contains annotations, classes, +interfaces, and exceptions that are common to client and server +endpoints.

                                                        +
                                                      • +
                                                      +
                                                      +
                                                      +

                                                      WebSocket endpoints are instances of the javax.websocket.Endpoint +class. The Java API for WebSocket enables you to create two kinds of +endpoints: programmatic endpoints and annotated endpoints. To create a +programmatic endpoint, you extend the Endpoint class and override its +lifecycle methods. To create an annotated endpoint, you decorate a Java +class and some of its methods with the annotations provided by the +packages mentioned previously. After you have created an endpoint, you +deploy it to an specific URI in the application so that remote clients +can connect to it.

                                                      +
                                                      +
                                                      +
                                                      +
                                                      +
                                                      +
                                                      +
                                                      + +++ + + + + + +
                                                      +

                                                      Note:

                                                      +
                                                      +
                                                      +

                                                      In most cases, it is easier to create and deploy an annotated endpoint +than a programmatic endpoint. This chapter provides a simple example of +a programmatic endpoint, but it focuses on annotated endpoints.

                                                      +
                                                      +
                                                      +
                                                      +
                                                      +
                                                      +
                                                      +
                                                      +
                                                      +

                                                      18.2.1 Creating and Deploying a WebSocket Endpoint

                                                      +
                                                      +

                                                      The process for creating and deploying a WebSocket endpoint:

                                                      +
                                                      +
                                                      +
                                                        +
                                                      1. +

                                                        Create an endpoint class.

                                                        +
                                                      2. +
                                                      3. +

                                                        Implement the lifecycle methods of the endpoint.

                                                        +
                                                      4. +
                                                      5. +

                                                        Add your business logic to the endpoint.

                                                        +
                                                      6. +
                                                      7. +

                                                        Deploy the endpoint inside a web application.

                                                        +
                                                      8. +
                                                      +
                                                      +
                                                      +

                                                      The process is slightly different for programmatic endpoints and +annotated endpoints, and it is covered in detail in the following +sections.

                                                      +
                                                      +
                                                      +
                                                      +
                                                      +
                                                      +
                                                      +
                                                      + +++ + + + + + +
                                                      +

                                                      Note:

                                                      +
                                                      +
                                                      +

                                                      As opposed to servlets, WebSocket endpoints are instantiated multiple +times. The container creates an instance of an endpoint per connection +to its deployment URI. Each instance is associated with one and only one +connection. This facilitates keeping user state for each connection and +makes development easier, because there is only one thread executing the +code of an endpoint instance at any given time.

                                                      +
                                                      +
                                                      +
                                                      +
                                                      +
                                                      +
                                                      +
                                                      +
                                                      + ++++++++ + + + + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                      Oracle Logo +
                                                      +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      +
                                                      +
                                                      + + + \ No newline at end of file diff --git a/websocket003.html b/websocket003.html new file mode 100644 index 0000000..fea65a7 --- /dev/null +++ b/websocket003.html @@ -0,0 +1,136 @@ + + + + + + Programmatic Endpoints + + + + + +
                                                      +
                                                      + +++++ + + + + + + + +

                                                      Java Platform, Enterprise Edition The Java EE Tutorial
                                                      +Release 8 Java Platform, Enterprise Edition
                                                      +E63026-01

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      + +++++ + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                       

                                                      +
                                                      +
                                                      +
                                                      +

                                                      18.3 Programmatic Endpoints

                                                      +
                                                      +
                                                      +

                                                      The following example shows how to create an endpoint by extending the +Endpoint class:

                                                      +
                                                      +
                                                      +
                                                      +
                                                      public class EchoEndpoint extends Endpoint {
                                                      +   @Override
                                                      +   public void onOpen(final Session session, EndpointConfig config) {
                                                      +      session.addMessageHandler(new MessageHandler.Whole<String>() {
                                                      +         @Override
                                                      +         public void onMessage(String msg) {
                                                      +            try {
                                                      +               session.getBasicRemote().sendText(msg);
                                                      +            } catch (IOException e) { ... }
                                                      +         }
                                                      +      });
                                                      +   }
                                                      +}
                                                      +
                                                      +
                                                      +
                                                      +

                                                      This endpoint echoes every message received. The Endpoint class +defines three lifecycle methods: onOpen, onClose, and onError. The +EchoEndpoint class implements the onOpen method, which is the only +abstract method in the Endpoint class.

                                                      +
                                                      +
                                                      +

                                                      The Session parameter represents a conversation between this endpoint +and the remote endpoint. The addMessageHandler method registers +message handlers, and the getBasicRemote method returns an object that +represents the remote endpoint. The Session interface is covered in +detail in the rest of this chapter.

                                                      +
                                                      +
                                                      +

                                                      The message handler is implemented as an anonymous inner class. The +onMessage method of the message handler is invoked when the endpoint +receives a text message.

                                                      +
                                                      +
                                                      +

                                                      To deploy this programmatic endpoint, use the following code in your +Java EE application:

                                                      +
                                                      +
                                                      +
                                                      +
                                                      ServerEndpointConfig.Builder.create(EchoEndpoint.class, "/echo").build();
                                                      +
                                                      +
                                                      +
                                                      +

                                                      When you deploy your application, the endpoint is available at +ws://<host>:<port>/<application>/echo; for example, +ws://localhost:8080/echoapp/echo.

                                                      +
                                                      +
                                                      + ++++++++ + + + + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                      Oracle Logo +
                                                      +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      +
                                                      + + + \ No newline at end of file diff --git a/websocket004.html b/websocket004.html new file mode 100644 index 0000000..298a8d1 --- /dev/null +++ b/websocket004.html @@ -0,0 +1,187 @@ + + + + + + Annotated Endpoints + + + + + +
                                                      +
                                                      + +++++ + + + + + + + +

                                                      Java Platform, Enterprise Edition The Java EE Tutorial
                                                      +Release 8 Java Platform, Enterprise Edition
                                                      +E63026-01

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      + +++++ + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                       

                                                      +
                                                      +
                                                      +
                                                      +

                                                      18.4 Annotated Endpoints

                                                      +
                                                      +
                                                      +

                                                      The following example shows how to create the same endpoint from +Programmatic Endpoints using annotations +instead:

                                                      +
                                                      +
                                                      +
                                                      +
                                                      @ServerEndpoint("/echo")
                                                      +public class EchoEndpoint {
                                                      +   @OnMessage
                                                      +   public void onMessage(Session session, String msg) {
                                                      +      try {
                                                      +         session.getBasicRemote().sendText(msg);
                                                      +      } catch (IOException e) { ... }
                                                      +   }
                                                      +}
                                                      +
                                                      +
                                                      +
                                                      +

                                                      The annotated endpoint is simpler than the equivalent programmatic +endpoint, and it is deployed automatically with the application to the +relative path defined in the ServerEndpoint annotation. Instead of +having to create an additional class for the message handler, this +example uses the OnMessage annotation to designate the method invoked +to handle messages.

                                                      +
                                                      +
                                                      +

                                                      Table 18-1 lists the annotations available in the +javax.websocket package to designate the methods that handle lifecycle +events. The examples in the table show the most common parameters for +these methods. See the API reference for details on what combinations of +parameters are allowed in each case.

                                                      +
                                                      +
                                                      +

                                                      +
                                                      +
                                                      +

                                                      Table 18-1 WebSocket Endpoint Lifecycle Annotations

                                                      +
                                                      + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                      AnnotationEventExample

                                                      OnOpen

                                                      Connection opened

                                                      +
                                                      +
                                                      @OnOpen
                                                      +public void open(Session session,
                                                      +                 EndpointConfig conf) { }
                                                      +
                                                      +

                                                      OnMessage

                                                      Message received

                                                      +
                                                      +
                                                      @OnMessage
                                                      +public void message(Session session,
                                                      +                    String msg) { }
                                                      +
                                                      +

                                                      OnError

                                                      Connection error

                                                      +
                                                      +
                                                      @OnError
                                                      +public void error(Session session,
                                                      +                  Throwable error) { }
                                                      +
                                                      +

                                                      OnClose

                                                      Connection closed

                                                      +
                                                      +
                                                      @OnClose
                                                      +public void close(Session session,
                                                      +                  CloseReason reason) { }
                                                      +
                                                      +
                                                      +
                                                      +
                                                      +
                                                      +
                                                      +
                                                      +
                                                      +
                                                      + ++++++++ + + + + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                      Oracle Logo +
                                                      +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      +
                                                      + + + \ No newline at end of file diff --git a/websocket005.html b/websocket005.html new file mode 100644 index 0000000..5103da0 --- /dev/null +++ b/websocket005.html @@ -0,0 +1,236 @@ + + + + + + Sending and Receiving Messages + + + + + +
                                                      +
                                                      + +++++ + + + + + + + +

                                                      Java Platform, Enterprise Edition The Java EE Tutorial
                                                      +Release 8 Java Platform, Enterprise Edition
                                                      +E63026-01

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      + +++++ + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                       

                                                      +
                                                      +
                                                      +
                                                      +

                                                      18.5 Sending and Receiving Messages

                                                      +
                                                      +
                                                      +

                                                      WebSocket endpoints can send and receive text and binary messages. In +addition, they can also send ping frames and receive pong frames. This +section describes how to use the Session and RemoteEndpoint +interfaces to send messages to the connected peer and how to use the +OnMessage annotation to receive messages from it.

                                                      +
                                                      +
                                                      +

                                                      The following topics are addressed here:

                                                      +
                                                      + +
                                                      +

                                                      18.5.1 Sending Messages

                                                      +
                                                      +

                                                      Follow these steps to send messages in an endpoint.

                                                      +
                                                      +
                                                      +
                                                        +
                                                      1. +

                                                        Obtain the Session object from the connection.

                                                        +
                                                        +

                                                        The Session object is available as a parameter in the annotated +lifecycle methods of the endpoint, like those in +Table 18-1. When your message is a +response to a message from the peer, you have the Session object +available inside the method that received the message (the method +annotated with @OnMessage). If you have to send messages that are not +responses, store the Session object as an instance variable of the +endpoint class in the method annotated with @OnOpen so that you can +access it from other methods.

                                                        +
                                                        +
                                                      2. +
                                                      3. +

                                                        Use the Session object to obtain a RemoteEndpoint object.

                                                        +
                                                        +

                                                        The Session.getBasicRemote method and the Session.getAsyncRemote +method return RemoteEndpoint.Basic and RemoteEndpoint.Async objects +respectively. The RemoteEndpoint.Basic interface provides blocking +methods to send messages; the RemoteEndpoint.Async interface provides +nonblocking methods.

                                                        +
                                                        +
                                                      4. +
                                                      5. +

                                                        Use the RemoteEndpoint object to send messages to the peer.

                                                        +
                                                        +

                                                        The following list shows some of the methods you can use to send +messages to the peer. +* void RemoteEndpoint.Basic.sendText(String text)

                                                        +
                                                        +
                                                        +

                                                        + +Send a text message to the peer. This method blocks until the whole +message has been transmitted.

                                                        +
                                                        +
                                                        +
                                                          +
                                                        • +

                                                          void RemoteEndpoint.Basic.sendBinary(ByteBuffer data)

                                                          +
                                                          +

                                                          Send a binary message to the peer. This method blocks until the whole +message has been transmitted.

                                                          +
                                                          +
                                                        • +
                                                        • +

                                                          void RemoteEndpoint.sendPing(ByteBuffer appData)

                                                          +
                                                          +

                                                          Send a ping frame to the peer.

                                                          +
                                                          +
                                                        • +
                                                        • +

                                                          void RemoteEndpoint.sendPong(ByteBuffer appData)

                                                          +
                                                          +

                                                          Send a pong frame to the peer.

                                                          +
                                                          +
                                                        • +
                                                        +
                                                        +
                                                      6. +
                                                      +
                                                      +
                                                      +

                                                      The example in Annotated Endpoints +demonstrates how to use this procedure to reply to every incoming text +message.

                                                      +
                                                      +
                                                      +

                                                      18.5.1.1 Sending Messages to All Peers Connected to an Endpoint

                                                      +
                                                      +

                                                      Each instance of an endpoint class is associated with one and only one +connection and peer; however, there are cases in which an endpoint +instance needs to send messages to all connected peers. Examples include +chat applications and online auctions. The Session interface provides +the getOpenSessions method for this purpose. The following example +demonstrates how to use this method to forward incoming text messages to +all connected peers:

                                                      +
                                                      +
                                                      +
                                                      +
                                                      @ServerEndpoint("/echoall")
                                                      +public class EchoAllEndpoint {
                                                      +   @OnMessage
                                                      +   public void onMessage(Session session, String msg) {
                                                      +      try {
                                                      +         for (Session sess : session.getOpenSessions()) {
                                                      +            if (sess.isOpen())
                                                      +               sess.getBasicRemote().sendText(msg);
                                                      +         }
                                                      +      } catch (IOException e) { ... }
                                                      +   }
                                                      +}
                                                      +
                                                      +
                                                      +
                                                      +
                                                      +
                                                      +

                                                      18.5.2 Receiving Messages

                                                      +
                                                      +

                                                      The OnMessage annotation designates methods that handle incoming +messages. You can have at most three methods annotated with @OnMessage +in an endpoint, one for each message type: text, binary, and pong. The +following example demonstrates how to designate methods to receive all +three types of messages:

                                                      +
                                                      +
                                                      +
                                                      +
                                                      @ServerEndpoint("/receive")
                                                      +public class ReceiveEndpoint {
                                                      +   @OnMessage
                                                      +   public void textMessage(Session session, String msg) {
                                                      +      System.out.println("Text message: " + msg);
                                                      +   }
                                                      +   @OnMessage
                                                      +   public void binaryMessage(Session session, ByteBuffer msg) {
                                                      +      System.out.println("Binary message: " + msg.toString());
                                                      +   }
                                                      +   @OnMessage
                                                      +   public void pongMessage(Session session, PongMessage msg) {
                                                      +      System.out.println("Pong message: " +
                                                      +                          msg.getApplicationData().toString());
                                                      +   }
                                                      +}
                                                      +
                                                      +
                                                      +
                                                      + ++++++++ + + + + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                      Oracle Logo +
                                                      +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      +
                                                      +
                                                      + + + \ No newline at end of file diff --git a/websocket006.html b/websocket006.html new file mode 100644 index 0000000..9d0ad77 --- /dev/null +++ b/websocket006.html @@ -0,0 +1,116 @@ + + + + + + Maintaining Client State + + + + + +
                                                      +
                                                      + +++++ + + + + + + + +

                                                      Java Platform, Enterprise Edition The Java EE Tutorial
                                                      +Release 8 Java Platform, Enterprise Edition
                                                      +E63026-01

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      + +++++ + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                       

                                                      +
                                                      +
                                                      +
                                                      +

                                                      18.6 Maintaining Client State

                                                      +
                                                      +
                                                      +

                                                      Because the container creates an instance of the endpoint class for +every connection, you can define and use instance variables to store +client state information. In addition, the Session.getUserProperties +method provides a modifiable map to store user properties. For example, +the following endpoint replies to incoming text messages with the +contents of the previous message from each client:

                                                      +
                                                      +
                                                      +
                                                      +
                                                      @ServerEndpoint("/delayedecho")
                                                      +public class DelayedEchoEndpoint {
                                                      +   @OnOpen
                                                      +   public void open(Session session) {
                                                      +      session.getUserProperties().put("previousMsg", " ");
                                                      +   }
                                                      +   @OnMessage
                                                      +   public void message(Session session, String msg) {
                                                      +      String prev = (String) session.getUserProperties()
                                                      +                                    .get("previousMsg");
                                                      +      session.getUserProperties().put("previousMsg", msg);
                                                      +      try {
                                                      +         session.getBasicRemote().sendText(prev);
                                                      +      } catch (IOException e) { ... }
                                                      +   }
                                                      +}
                                                      +
                                                      +
                                                      +
                                                      +

                                                      To store information common to all connected clients, you can use class +(static) variables; however, you are responsible for ensuring +thread-safe access to them.

                                                      +
                                                      +
                                                      + ++++++++ + + + + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                      Oracle Logo +
                                                      +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      +
                                                      + + + \ No newline at end of file diff --git a/websocket007.html b/websocket007.html new file mode 100644 index 0000000..11c5d2b --- /dev/null +++ b/websocket007.html @@ -0,0 +1,322 @@ + + + + + + Using Encoders and Decoders + + + + + +
                                                      +
                                                      + +++++ + + + + + + + +

                                                      Java Platform, Enterprise Edition The Java EE Tutorial
                                                      +Release 8 Java Platform, Enterprise Edition
                                                      +E63026-01

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      + +++++ + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                       

                                                      +
                                                      +
                                                      +
                                                      +

                                                      18.7 Using Encoders and Decoders

                                                      +
                                                      +
                                                      +

                                                      The Java API for WebSocket provides support for converting between +WebSocket messages and custom Java types using encoders and decoders. An +encoder takes a Java object and produces a representation that can be +transmitted as a WebSocket message; for example, encoders typically +produce JSON, XML, or binary representations. A decoder performs the +reverse function; it reads a WebSocket message and creates a Java +object.

                                                      +
                                                      +
                                                      +

                                                      This mechanism simplifies WebSocket applications, because it decouples +the business logic from the serialization and deserialization of +objects.

                                                      +
                                                      +
                                                      +

                                                      The following topics are addressed here:

                                                      +
                                                      + +
                                                      +

                                                      18.7.1 Implementing Encoders to Convert Java Objects into WebSocketMessages

                                                      +
                                                      +

                                                      The procedure to implement and use encoders in endpoints follows.

                                                      +
                                                      +
                                                      +
                                                        +
                                                      1. +

                                                        Implement one of the following interfaces:

                                                        +
                                                        +
                                                          +
                                                        • +

                                                          Encoder.Text<T> for text messages

                                                          +
                                                        • +
                                                        • +

                                                          Encoder.Binary<T> for binary messages

                                                          +
                                                          +

                                                          These interfaces specify the encode method. Implement an encoder class +for each custom Java type that you want to send as a WebSocket message.

                                                          +
                                                          +
                                                        • +
                                                        +
                                                        +
                                                      2. +
                                                      3. +

                                                        Add the names of your encoder implementations to the encoders +optional parameter of the ServerEndpoint annotation.

                                                        +
                                                      4. +
                                                      5. +

                                                        Use the sendObject(Object data) method of the +RemoteEndpoint.Basic or RemoteEndpoint.Async interfaces to send your +objects as messages. The container looks for an encoder that matches +your type and uses it to convert the object to a WebSocket message.

                                                        +
                                                      6. +
                                                      +
                                                      +
                                                      +

                                                      For example, if you have two Java types (MessageA and MessageB) that +you want to send as text messages, implement the +Encoder.Text<MessageA> and Encoder.Text<MessageB> interfaces as +follows:

                                                      +
                                                      +
                                                      +
                                                      +
                                                      public class MessageATextEncoder implements Encoder.Text<MessageA> {
                                                      +   @Override
                                                      +   public void init(EndpointConfig ec) { }
                                                      +   @Override
                                                      +   public void destroy() { }
                                                      +   @Override
                                                      +   public String encode(MessageA msgA) throws EncodeException {
                                                      +      // Access msgA's properties and convert to JSON text...
                                                      +      return msgAJsonString;
                                                      +   }
                                                      +}
                                                      +
                                                      +
                                                      +
                                                      +

                                                      Implement Encoder.Text<MessageB> similarly. Then, add the encoders +parameter to the ServerEndpoint annotation as follows:

                                                      +
                                                      +
                                                      +
                                                      +
                                                      @ServerEndpoint(
                                                      +   value = "/myendpoint",
                                                      +   encoders = { MessageATextEncoder.class, MessageBTextEncoder.class }
                                                      +)
                                                      +public class EncEndpoint { ... }
                                                      +
                                                      +
                                                      +
                                                      +

                                                      Now, you can send MessageA and MessageB objects as WebSocket +messages using the sendObject method as follows:

                                                      +
                                                      +
                                                      +
                                                      +
                                                      MessageA msgA = new MessageA(...);
                                                      +MessageB msgB = new MessageB(...);
                                                      +session.getBasicRemote.sendObject(msgA);
                                                      +session.getBasicRemote.sendObject(msgB);
                                                      +
                                                      +
                                                      +
                                                      +

                                                      As in this example, you can have more than one encoder for text messages +and more than one encoder for binary messages. Like endpoints, encoder +instances are associated with one and only one WebSocket connection and +peer, so there is only one thread executing the code of an encoder +instance at any given time.

                                                      +
                                                      +
                                                      +
                                                      +

                                                      18.7.2 Implementing Decoders to Convert WebSocket Messages into JavaObjects

                                                      +
                                                      +

                                                      The procedure to implement and use decoders in endpoints follows.

                                                      +
                                                      +
                                                      +
                                                        +
                                                      1. +

                                                        Implement one of the following interfaces:

                                                        +
                                                        +
                                                          +
                                                        • +

                                                          Decoder.Text<T> for text messages

                                                          +
                                                        • +
                                                        • +

                                                          Decoder.Binary<T> for binary messages

                                                          +
                                                          +

                                                          These interfaces specify the willDecode and decode methods.

                                                          +
                                                          + +++ + + + + + +
                                                          +

                                                          Note:

                                                          +
                                                          +
                                                          +

                                                          Unlike with encoders, you can specify at most one decoder for binary +messages and one decoder for text messages.

                                                          +
                                                          +
                                                          +
                                                          +
                                                           +
                                                          +2.  Add the names of your decoder implementations to the `decoders`
                                                          +optional parameter of the `ServerEndpoint` annotation.
                                                          +3.  Use the `OnMessage` annotation in the endpoint to designate a method
                                                          +that takes your custom Java type as a parameter. When the endpoint
                                                          +receives a message that can be decoded by one of the decoders you
                                                          +specified, the container calls the method annotated with `@OnMessage`
                                                          +that takes your custom Java type as a parameter if this method exists.
                                                          +
                                                          +
                                                          +
                                                        • +
                                                        +
                                                        +
                                                      2. +
                                                      +
                                                      +
                                                      +

                                                      For example, if you have two Java types (MessageA and MessageB) that +you want to send and receive as text messages, define them so that they +extend a common class (Message). Because you can only define one +decoder for text messages, implement a decoder for the Message class +as follows:

                                                      +
                                                      +
                                                      +
                                                      +
                                                      public class MessageTextDecoder implements Decoder.Text<Message> {
                                                      +   @Override
                                                      +   public void init(EndpointConfig ec) { }
                                                      +   @Override
                                                      +   public void destroy() { }
                                                      +   @Override
                                                      +   public Message decode(String string) throws DecodeException {
                                                      +      // Read message...
                                                      +      if ( /* message is an A message */ )
                                                      +         return new MessageA(...);
                                                      +      else if ( /* message is a B message */ )
                                                      +         return new MessageB(...);
                                                      +   }
                                                      +   @Override
                                                      +   public boolean willDecode(String string) {
                                                      +      // Determine if the message can be converted into either a
                                                      +      // MessageA object or a MessageB object...
                                                      +      return canDecode;
                                                      +   }
                                                      +}
                                                      +
                                                      +
                                                      +
                                                      +

                                                      Then, add the decoder parameter to the ServerEndpoint annotation as +follows:

                                                      +
                                                      +
                                                      +
                                                      +
                                                      @ServerEndpoint(
                                                      +   value = "/myendpoint",
                                                      +   encoders = { MessageATextEncoder.class, MessageBTextEncoder.class },
                                                      +   decoders = { MessageTextDecoder.class }
                                                      +)
                                                      +public class EncDecEndpoint { ... }
                                                      +
                                                      +
                                                      +
                                                      +

                                                      Now, define a method in the endpoint class that receives MessageA and +MessageB objects as follows:

                                                      +
                                                      +
                                                      +
                                                      +
                                                      @OnMessage
                                                      +public void message(Session session, Message msg) {
                                                      +   if (msg instanceof MessageA) {
                                                      +      // We received a MessageA object...
                                                      +   } else if (msg instanceof MessageB) {
                                                      +      // We received a MessageB object...
                                                      +   }
                                                      +}
                                                      +
                                                      +
                                                      +
                                                      +

                                                      Like endpoints, decoder instances are associated with one and only one +WebSocket connection and peer, so there is only one thread executing the +code of a decoder instance at any given time.

                                                      +
                                                      +
                                                      + ++++++++ + + + + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                      Oracle Logo +
                                                      +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      +
                                                      +
                                                      + + + \ No newline at end of file diff --git a/websocket008.html b/websocket008.html new file mode 100644 index 0000000..40c3694 --- /dev/null +++ b/websocket008.html @@ -0,0 +1,132 @@ + + + + + + Path Parameters + + + + + +
                                                      +
                                                      + +++++ + + + + + + + +

                                                      Java Platform, Enterprise Edition The Java EE Tutorial
                                                      +Release 8 Java Platform, Enterprise Edition
                                                      +E63026-01

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      + +++++ + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                       

                                                      +
                                                      +
                                                      +
                                                      +

                                                      18.8 Path Parameters

                                                      +
                                                      +
                                                      +

                                                      The ServerEndpoint annotation enables you to use URI templates to +specify parts of an endpoint deployment URI as application parameters. +For example, consider this endpoint:

                                                      +
                                                      +
                                                      +
                                                      +
                                                      @ServerEndpoint("/chatrooms/{room-name}")
                                                      +public class ChatEndpoint {
                                                      +   ...
                                                      +}
                                                      +
                                                      +
                                                      +
                                                      +

                                                      If the endpoint is deployed inside a web application called chatapp at +a local Java EE server in port 8080, clients can connect to the endpoint +using any of the following URIs:

                                                      +
                                                      +
                                                      +
                                                      +
                                                      http://localhost:8080/chatapp/chatrooms/currentnews
                                                      +http://localhost:8080/chatapp/chatrooms/music
                                                      +http://localhost:8080/chatapp/chatrooms/cars
                                                      +http://localhost:8080/chatapp/chatrooms/technology
                                                      +
                                                      +
                                                      +
                                                      +

                                                      Annotated endpoints can receive path parameters as arguments in methods +annotated with @OnOpen, @OnMessage, and @OnClose. In this example, +the endpoint uses the parameter in the @OnOpen method to determine +which chat room the client wants to join:

                                                      +
                                                      +
                                                      +
                                                      +
                                                      @ServerEndpoint("/chatrooms/{room-name}")
                                                      +public class ChatEndpoint {
                                                      +   @OnOpen
                                                      +   public void open(Session session,
                                                      +                    EndpointConfig c,
                                                      +                    @PathParam("room-name") String roomName) {
                                                      +      // Add the client to the chat room of their choice ...
                                                      +   }
                                                      +}
                                                      +
                                                      +
                                                      +
                                                      +

                                                      The path parameters used as arguments in these methods can be strings, +primitive types, or the corresponding wrapper types.

                                                      +
                                                      +
                                                      + ++++++++ + + + + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                      Oracle Logo +
                                                      +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      +
                                                      + + + \ No newline at end of file diff --git a/websocket009.html b/websocket009.html new file mode 100644 index 0000000..18b97b6 --- /dev/null +++ b/websocket009.html @@ -0,0 +1,112 @@ + + + + + + Handling Errors + + + + + +
                                                      +
                                                      + +++++ + + + + + + + +

                                                      Java Platform, Enterprise Edition The Java EE Tutorial
                                                      +Release 8 Java Platform, Enterprise Edition
                                                      +E63026-01

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      + +++++ + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                       

                                                      +
                                                      +
                                                      +
                                                      +

                                                      18.9 Handling Errors

                                                      +
                                                      +
                                                      +

                                                      To designate a method that handles errors in an annotated WebSocket +endpoint:

                                                      +
                                                      +
                                                      +
                                                        +
                                                      1. +

                                                        Decorate it with @OnError:

                                                        +
                                                        +
                                                        +
                                                        @ServerEndpoint("/testendpoint")
                                                        +public class TestEndpoint {
                                                        +   ...
                                                        +   @OnError
                                                        +   public void error(Session session, Throwable t) {
                                                        +      t.printStackTrace();
                                                        +      ...
                                                        +   }
                                                        +}
                                                        +
                                                        +
                                                        +
                                                        +

                                                        This method is invoked when there are connection problems, runtime +errors from message handlers, or conversion errors when decoding +messages.

                                                        +
                                                        +
                                                      2. +
                                                      +
                                                      +
                                                      + ++++++++ + + + + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                      Oracle Logo +
                                                      +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      +
                                                      + + + \ No newline at end of file diff --git a/websocket010.html b/websocket010.html new file mode 100644 index 0000000..4be40c2 --- /dev/null +++ b/websocket010.html @@ -0,0 +1,165 @@ + + + + + + Specifying an Endpoint Configurator Class + + + + + +
                                                      +
                                                      + +++++ + + + + + + + +

                                                      Java Platform, Enterprise Edition The Java EE Tutorial
                                                      +Release 8 Java Platform, Enterprise Edition
                                                      +E63026-01

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      + +++++ + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                       

                                                      +
                                                      +
                                                      +
                                                      +

                                                      18.10 Specifying an Endpoint Configurator Class

                                                      +
                                                      +
                                                      +

                                                      The Java API for WebSocket enables you to configure how the container +creates server endpoint instances. You can provide custom endpoint +configuration logic to:

                                                      +
                                                      +
                                                      +
                                                        +
                                                      • +

                                                        Access the details of the initial HTTP request for a WebSocket +connection

                                                        +
                                                      • +
                                                      • +

                                                        Perform custom checks on the Origin HTTP header

                                                        +
                                                      • +
                                                      • +

                                                        Modify the WebSocket handshake response

                                                        +
                                                      • +
                                                      • +

                                                        Choose a WebSocket subprotocol from those requested by the client

                                                        +
                                                      • +
                                                      • +

                                                        Control the instantiation and initialization of endpoint instances

                                                        +
                                                      • +
                                                      +
                                                      +
                                                      +

                                                      To provide custom endpoint configuration logic, you extend the +ServerEndpointConfig.Configurator class and override some of its +methods. In the endpoint class, you specify the configurator class using +the configurator parameter of the ServerEndpoint annotation.

                                                      +
                                                      +
                                                      +

                                                      For example, the following configurator class makes the handshake +request object available to endpoint instances:

                                                      +
                                                      +
                                                      +
                                                      +
                                                      public class CustomConfigurator extends ServerEndpointConfig.Configurator {
                                                      +
                                                      +    @Override
                                                      +    public void modifyHandshake(ServerEndpointConfig conf,
                                                      +                                HandshakeRequest req,
                                                      +                                HandshakeResponse resp) {
                                                      +
                                                      +        conf.getUserProperties().put("handshakereq", req);
                                                      +    }
                                                      +
                                                      +}
                                                      +
                                                      +
                                                      +
                                                      +

                                                      The following endpoint class configures endpoint instances with the +custom configurator, which enables them to access the handshake request +object:

                                                      +
                                                      +
                                                      +
                                                      +
                                                      @ServerEndpoint(
                                                      +    value = "/myendpoint",
                                                      +    configurator = CustomConfigurator.class
                                                      +)
                                                      +public class MyEndpoint {
                                                      +
                                                      +    @OnOpen
                                                      +    public void open(Session s, EndpointConfig conf) {
                                                      +        HandshakeRequest req = (HandshakeRequest) conf.getUserProperties()
                                                      +                                                      .get("handshakereq");
                                                      +        Map<String,List<String>> headers = req.getHeaders();
                                                      +        ...
                                                      +    }
                                                      +}
                                                      +
                                                      +
                                                      +
                                                      +

                                                      The endpoint class can use the handshake request object to access the +details of the initial HTTP request, such as its headers or the +HttpSession object.

                                                      +
                                                      +
                                                      +

                                                      For more information on endpoint configuration, see the API reference +for the ServerEndpointConfig.Configurator class.

                                                      +
                                                      +
                                                      + ++++++++ + + + + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                      Oracle Logo +
                                                      +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      +
                                                      + + + \ No newline at end of file diff --git a/websocket011.html b/websocket011.html new file mode 100644 index 0000000..cfff642 --- /dev/null +++ b/websocket011.html @@ -0,0 +1,397 @@ + + + + + + The dukeetf2 Example Application + + + + + +
                                                      +
                                                      + +++++ + + + + + + + +

                                                      Java Platform, Enterprise Edition The Java EE Tutorial
                                                      +Release 8 Java Platform, Enterprise Edition
                                                      +E63026-01

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      + +++++ + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                       

                                                      +
                                                      +
                                                      +
                                                      +

                                                      18.11 The dukeetf2 Example Application

                                                      +
                                                      +
                                                      +

                                                      The dukeetf2 example application, located in the +tut-install`/examples/web/websocket/dukeetf2/` directory, demonstrates +how to use a WebSocket endpoint to provide data updates to web clients. +The example resembles a service that provides periodic updates on the +price and trading volume of an electronically traded fund (ETF).

                                                      +
                                                      +
                                                      +

                                                      The following topics are addressed here:

                                                      +
                                                      + +
                                                      +

                                                      18.11.1 Architecture of the dukeetf2 Sample Application

                                                      +
                                                      +

                                                      The dukeetf2 example application consists of a WebSocket endpoint, an +enterprise bean, and an HTML page.

                                                      +
                                                      +
                                                      +
                                                        +
                                                      • +

                                                        The endpoint accepts connections from clients and sends them updates +when new data for price and trading volume becomes available.

                                                        +
                                                      • +
                                                      • +

                                                        The enterprise bean updates the price and volume information once +every second.

                                                        +
                                                      • +
                                                      • +

                                                        The HTML page uses JavaScript code to connect to the WebSocket +endpoint, parse incoming messages, and update the price and volume +information without reloading the page.

                                                        +
                                                      • +
                                                      +
                                                      +
                                                      +

                                                      18.11.1.1 The Endpoint

                                                      +
                                                      +

                                                      The WebSocket endpoint is implemented in the ETFEndpoint class, which +stores all connected sessions in a queue and provides a method that the +enterprise bean calls when there is new information available to send:

                                                      +
                                                      +
                                                      +
                                                      +
                                                      @ServerEndpoint("/dukeetf")
                                                      +public class ETFEndpoint {
                                                      +   private static final Logger logger = Logger.getLogger("ETFEndpoint");
                                                      +   /* Queue for all open WebSocket sessions */
                                                      +   static Queue<Session> queue = new ConcurrentLinkedQueue<>();
                                                      +
                                                      +   /* PriceVolumeBean calls this method to send updates */
                                                      +   public static void send(double price, int volume) {
                                                      +      String msg = String.format("%.2f / %d", price, volume);
                                                      +      try {
                                                      +         /* Send updates to all open WebSocket sessions */
                                                      +         for (Session session : queue) {
                                                      +            session.getBasicRemote().sendText(msg);
                                                      +            logger.log(Level.INFO, "Sent: {0}", msg);
                                                      +         }
                                                      +      } catch (IOException e) {
                                                      +         logger.log(Level.INFO, e.toString());
                                                      +      }
                                                      +    }
                                                      +    ...
                                                      +}
                                                      +
                                                      +
                                                      +
                                                      +

                                                      The lifecycle methods of the endpoint add and remove sessions to and +from the queue:

                                                      +
                                                      +
                                                      +
                                                      +
                                                      @ServerEndpoint("/dukeetf")
                                                      +public class ETFEndpoint {
                                                      +   ...
                                                      +   @OnOpen
                                                      +   public void openConnection(Session session) {
                                                      +      /* Register this connection in the queue */
                                                      +      queue.add(session);
                                                      +      logger.log(Level.INFO, "Connection opened.");
                                                      +   }
                                                      +
                                                      +   @OnClose
                                                      +   public void closedConnection(Session session) {
                                                      +      /* Remove this connection from the queue */
                                                      +      queue.remove(session);
                                                      +      logger.log(Level.INFO, "Connection closed.");
                                                      +   }
                                                      +
                                                      +   @OnError
                                                      +   public void error(Session session, Throwable t) {
                                                      +      /* Remove this connection from the queue */
                                                      +      queue.remove(session);
                                                      +      logger.log(Level.INFO, t.toString());
                                                      +      logger.log(Level.INFO, "Connection error.");
                                                      +   }
                                                      +}
                                                      +
                                                      +
                                                      +
                                                      +
                                                      +

                                                      18.11.1.2 The Enterprise Bean

                                                      +
                                                      +

                                                      The enterprise bean uses the timer service to generate new price and +volume information every second:

                                                      +
                                                      +
                                                      +
                                                      +
                                                      @Startup
                                                      +@Singleton
                                                      +public class PriceVolumeBean {
                                                      +   /* Use the container's timer service */
                                                      +   @Resource TimerService tservice;
                                                      +   private Random random;
                                                      +   private volatile double price = 100.0;
                                                      +   private volatile int volume = 300000;
                                                      +   private static final Logger logger = Logger.getLogger("PriceVolumeBean");
                                                      +
                                                      +   @PostConstruct
                                                      +   public void init() {
                                                      +       /* Initialize the EJB and create a timer */
                                                      +       logger.log(Level.INFO, "Initializing EJB.");
                                                      +       random = new Random();
                                                      +       tservice.createIntervalTimer(1000, 1000, new TimerConfig());
                                                      +   }
                                                      +
                                                      +   @Timeout
                                                      +   public void timeout() {
                                                      +       /* Adjust price and volume and send updates */
                                                      +       price += 1.0*(random.nextInt(100)-50)/100.0;
                                                      +       volume += random.nextInt(5000) - 2500;
                                                      +       ETFEndpoint.send(price, volume);
                                                      +   }
                                                      +}
                                                      +
                                                      +
                                                      +
                                                      +

                                                      The enterprise bean calls the send method of the ETFEndpoint class +in the timeout method. See Using the +Timer Service in Chapter 34, "Running +the Enterprise Bean Examples" for more information on the timer +service.

                                                      +
                                                      +
                                                      +
                                                      +

                                                      18.11.1.3 The HTML Page

                                                      +
                                                      +

                                                      The HTML page consists of a table and some JavaScript code. The table +contains two fields referenced from JavaScript code:

                                                      +
                                                      +
                                                      +
                                                      +
                                                      <!DOCTYPE html>
                                                      +<html>
                                                      +<head>...</head>
                                                      +<body>
                                                      +  ...
                                                      +  <table>
                                                      +    ...
                                                      +    <td id="price">--.--</td>
                                                      +    ...
                                                      +    <td id="volume">--</td>
                                                      +    ...
                                                      +  </table>
                                                      +</body>
                                                      +</html>
                                                      +
                                                      +
                                                      +
                                                      +

                                                      The JavaScript code uses the WebSocket API to connect to the server +endpoint and to designate a callback method for incoming messages. The +callback method updates the page with the new information.

                                                      +
                                                      +
                                                      +
                                                      +
                                                      var wsocket;
                                                      +function connect() {
                                                      +   wsocket = new WebSocket("ws://localhost:8080/dukeetf2/dukeetf");
                                                      +   wsocket.onmessage = onMessage;
                                                      +}
                                                      +function onMessage(evt) {
                                                      +   var arraypv = evt.data.split("/");
                                                      +   document.getElementById("price").innerHTML = arraypv[0];
                                                      +   document.getElementById("volume").innerHTML = arraypv[1];
                                                      +}
                                                      +window.addEventListener("load", connect, false);
                                                      +
                                                      +
                                                      +
                                                      +

                                                      The WebSocket API is supported by most modern browsers, and it is widely +used in HTML5 web client development.

                                                      +
                                                      +
                                                      +
                                                      +
                                                      +

                                                      18.11.2 Running the dukeetf2 Example Application

                                                      +
                                                      +

                                                      This section describes how to run the dukeetf2 example application +using NetBeans IDE and from the command line.

                                                      +
                                                      +
                                                      +

                                                      The following topics are addressed here:

                                                      +
                                                      + +
                                                      +

                                                      18.11.2.1 To Run the dukeetf2 Example Application Using NetBeans IDE

                                                      +
                                                      +
                                                        +
                                                      1. +

                                                        Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

                                                        +
                                                      2. +
                                                      3. +

                                                        From the File menu, choose Open Project.

                                                        +
                                                      4. +
                                                      5. +

                                                        In the Open Project dialog box, navigate to:

                                                        +
                                                        +
                                                        +
                                                        tut-install/examples/web/websocket
                                                        +
                                                        +
                                                        +
                                                      6. +
                                                      7. +

                                                        Select the dukeetf2 folder.

                                                        +
                                                      8. +
                                                      9. +

                                                        Click Open Project.

                                                        +
                                                      10. +
                                                      11. +

                                                        In the Projects tab, right-click the dukeetf2 project and select +Run.

                                                        +
                                                        +

                                                        This command builds and packages the application into a WAR file +(dukeetf2.war) located in the target/ directory, deploys it to the +server, and launches a web browser window with the following URL:

                                                        +
                                                        +
                                                        +
                                                        +
                                                        http://localhost:8080/dukeetf2/
                                                        +
                                                        +
                                                        +
                                                        +

                                                        Open the same URL on a different web browser tab or window to see how +both pages get price and volume updates simultaneously.

                                                        +
                                                        +
                                                      12. +
                                                      +
                                                      +
                                                      +
                                                      +

                                                      18.11.2.2 To Run the dukeetf2 Example Application Using Maven

                                                      +
                                                      +
                                                        +
                                                      1. +

                                                        Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

                                                        +
                                                      2. +
                                                      3. +

                                                        In a terminal window, go to:

                                                        +
                                                        +
                                                        +
                                                        tut-install/examples/web/websocket/dukeetf2/
                                                        +
                                                        +
                                                        +
                                                      4. +
                                                      5. +

                                                        Enter the following command to deploy the application:

                                                        +
                                                        +
                                                        +
                                                        mvn install
                                                        +
                                                        +
                                                        +
                                                      6. +
                                                      7. +

                                                        Open a web browser window and enter the following URL:

                                                        +
                                                        +
                                                        +
                                                        http://localhost:8080/dukeetf2/
                                                        +
                                                        +
                                                        +
                                                        +

                                                        Open the same URL on a different web browser tab or window to see how +both pages get price and volume updates simultaneously.

                                                        +
                                                        +
                                                      8. +
                                                      +
                                                      +
                                                      + ++++++++ + + + + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                      Oracle Logo +
                                                      +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      +
                                                      +
                                                      +
                                                      + + + \ No newline at end of file diff --git a/websocket012.html b/websocket012.html new file mode 100644 index 0000000..2e05abc --- /dev/null +++ b/websocket012.html @@ -0,0 +1,580 @@ + + + + + + The websocketbot Example Application + + + + + +
                                                      +
                                                      + +++++ + + + + + + + +

                                                      Java Platform, Enterprise Edition The Java EE Tutorial
                                                      +Release 8 Java Platform, Enterprise Edition
                                                      +E63026-01

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      + +++++ + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                       

                                                      +
                                                      +
                                                      +
                                                      +

                                                      18.12 The websocketbot Example Application

                                                      +
                                                      +
                                                      +

                                                      The websocketbot example application, located in the +tut-install`/examples/web/websocket/websocketbot/` directory, +demonstrates how to use a WebSocket endpoint to implement a chat. The +example resembles a chat room in which many users can join and have a +conversation. Users can ask simple questions to a bot agent that is +always available in the chat room.

                                                      +
                                                      +
                                                      +

                                                      The following topics are addressed here:

                                                      +
                                                      + +
                                                      +

                                                      18.12.1 Architecture of the websocketbot Example Application

                                                      +
                                                      +

                                                      The websocketbot example application consists of the following +elements:

                                                      +
                                                      +
                                                      + +
                                                      +
                                                      +

                                                      18.12.1.1 The CDI Bean

                                                      +
                                                      +

                                                      The CDI bean (BotBean) is a Java class that contains the respond +method. This method compares the incoming chat message with a set of +predefined questions and returns a chat response.

                                                      +
                                                      +
                                                      +
                                                      +
                                                      @Named
                                                      +public class BotBean {
                                                      +    public String respond(String msg) { ... }
                                                      +}
                                                      +
                                                      +
                                                      +
                                                      +
                                                      +

                                                      18.12.1.2 The WebSocket Endpoint

                                                      +
                                                      +

                                                      The WebSocket endpoint (BotEndpoint) is an annotated endpoint that +performs the following functions:

                                                      +
                                                      +
                                                      +
                                                        +
                                                      • +

                                                        Receives messages from clients

                                                        +
                                                      • +
                                                      • +

                                                        Forwards messages to clients

                                                        +
                                                      • +
                                                      • +

                                                        Maintains a list of connected clients

                                                        +
                                                      • +
                                                      • +

                                                        Invokes the bot agent functionality

                                                        +
                                                      • +
                                                      +
                                                      +
                                                      +

                                                      The endpoint specifies its deployment URI and the message encoders and +decoders using the ServerEndpoint annotation. The endpoint obtains an +instance of the BotBean class and a managed executor service resource +through dependency injection:

                                                      +
                                                      +
                                                      +
                                                      +
                                                      @ServerEndpoint(
                                                      +   value = "/websocketbot",
                                                      +   decoders = { MessageDecoder.class },
                                                      +   encoders = { JoinMessageEncoder.class, ChatMessageEncoder.class,
                                                      +                InfoMessageEncoder.class, UsersMessageEncoder.class }
                                                      +)
                                                      +/* There is a BotEndpoint instance per connection */
                                                      +public class BotEndpoint {
                                                      +   private static final Logger logger = Logger.getLogger("BotEndpoint");
                                                      +   /* Bot functionality bean */
                                                      +   @Inject private BotBean botbean;
                                                      +   /* Executor service for asynchronous processing */
                                                      +   @Resource(name="comp/DefaultManagedExecutorService")
                                                      +   private ManagedExecutorService mes;
                                                      +
                                                      +   @OnOpen
                                                      +   public void openConnection(Session session) {
                                                      +       logger.log(Level.INFO, "Connection opened.");
                                                      +   }
                                                      +   ...
                                                      +}
                                                      +
                                                      +
                                                      +
                                                      +

                                                      The message method processes incoming messages from clients. The +decoder converts incoming text messages into JoinMessage or +ChatMessage objects, which inherit from the Message class. The +message method receives a Message object as a parameter:

                                                      +
                                                      +
                                                      +
                                                      +
                                                      @OnMessage
                                                      +public void message(Session session, Message msg) {
                                                      +   logger.log(Level.INFO, "Received: {0}", msg.toString());
                                                      +
                                                      +   if (msg instanceof JoinMessage) {
                                                      +      /* Add the new user and notify everybody */
                                                      +      JoinMessage jmsg = (JoinMessage) msg;
                                                      +      session.getUserProperties().put("name", jmsg.getName());
                                                      +      session.getUserProperties().put("active", true);
                                                      +      logger.log(Level.INFO, "Received: {0}", jmsg.toString());
                                                      +      sendAll(session, new InfoMessage(jmsg.getName() +
                                                      +              " has joined the chat"));
                                                      +      sendAll(session, new ChatMessage("Duke", jmsg.getName(),
                                                      +              "Hi there!!"));
                                                      +      sendAll(session, new UsersMessage(this.getUserList(session)));
                                                      +
                                                      +   } else if (msg instanceof ChatMessage) {
                                                      +      /* Forward the message to everybody */
                                                      +      ChatMessage cmsg = (ChatMessage) msg;
                                                      +      logger.log(Level.INFO, "Received: {0}", cmsg.toString());
                                                      +      sendAll(session, cmsg);
                                                      +      if (cmsg.getTarget().compareTo("Duke") == 0) {
                                                      +         /* The bot replies to the message */
                                                      +         mes.submit(new Runnable() {
                                                      +            @Override
                                                      +            public void run() {
                                                      +               String resp = botbean.respond(cmsg.getMessage());
                                                      +               sendAll(session, new ChatMessage("Duke",
                                                      +                       cmsg.getName(), resp));
                                                      +            }
                                                      +         });
                                                      +      }
                                                      +   }
                                                      +}
                                                      +
                                                      +
                                                      +
                                                      +

                                                      If the message is a join message, the endpoint adds the new user to the +list and notifies all connected clients. If the message is a chat +message, the endpoint forwards it to all connected clients.

                                                      +
                                                      +
                                                      +

                                                      If a chat message is for the bot agent, the endpoint obtains a response +using the BotBean instance and sends it to all connected clients. The +sendAll method is similar to the example in +Sending Messages to All Peers Connected +to an Endpoint.

                                                      +
                                                      +
                                                      +

                                                      Asynchronous Processing and Concurrency Considerations

                                                      +
                                                      +
                                                      +

                                                      The WebSocket endpoint calls the BotBean.respond method to obtain a +response from the bot. In this example, this is a blocking operation; +the user that sent the associated message would not be able to send or +receive other chat messages until the operation completes. To avoid this +problem, the endpoint obtains an executor service from the container and +executes the blocking operation in a different thread using the +ManagedExecutorService.submit method from Concurrency Utilities for +Java EE.

                                                      +
                                                      +
                                                      +

                                                      The Java API for WebSocket specification requires that Java EE +implementations instantiate endpoint classes once per connection. This +facilitates the development of WebSocket endpoints, because you are +guaranteed that only one thread is executing the code in a WebSocket +endpoint class at any given time. When you introduce a new thread in an +endpoint, as in this example, you must ensure that variables and methods +accessed by more than one thread are thread safe. In this example, the +code in BotBean is thread safe, and the BotEndpoint.sendAll method +has been declared synchronized.

                                                      +
                                                      +
                                                      +

                                                      Refer to Chapter 56, "Concurrency +Utilities for Java EE" for more information on the managed executor +service and Concurrency Utilities for Java EE.

                                                      +
                                                      +
                                                      +
                                                      +

                                                      18.12.1.3 The Application Messages

                                                      +
                                                      +

                                                      The classes that represent application messages (Message, +ChatMessage, InfoMessage, JoinMessage, and UsersMessage) contain +only properties and getter and setter methods. For example, the +ChatMessage class looks like this:

                                                      +
                                                      +
                                                      +
                                                      +
                                                      public class ChatMessage extends Message {
                                                      +    private String name;
                                                      +    private String target;
                                                      +    private String message;
                                                      +    /* ... Constructor, getters, and setters ... */
                                                      +}
                                                      +
                                                      +
                                                      +
                                                      +
                                                      +

                                                      18.12.1.4 The Encoder Classes

                                                      +
                                                      +

                                                      The encoder classes convert application message objects into JSON text +using the Java API for JSON Processing. For example, the +ChatMessageEncoder class is implemented as follows:

                                                      +
                                                      +
                                                      +
                                                      +
                                                      /* Encode a ChatMessage as JSON.
                                                      + * For example, (new ChatMessage("Peter","Duke","How are you?"))
                                                      + * is encoded as follows:
                                                      + * {"type":"chat","target":"Duke","message":"How are you?"}
                                                      + */
                                                      +public class ChatMessageEncoder implements Encoder.Text<ChatMessage> {
                                                      +   @Override
                                                      +   public void init(EndpointConfig ec) { }
                                                      +   @Override
                                                      +   public void destroy() { }
                                                      +   @Override
                                                      +   public String encode(ChatMessage chatMessage) throws EncodeException {
                                                      +      // Access properties in chatMessage and write JSON text...
                                                      +   }
                                                      +}
                                                      +
                                                      +
                                                      +
                                                      +

                                                      See Chapter 19, JSON +Processing for more information on the Java API for JSON Processing.

                                                      +
                                                      +
                                                      +
                                                      +

                                                      18.12.1.5 The Message Decoder

                                                      +
                                                      +

                                                      The message decoder (MessageDecoder) class converts WebSocket text +messages into application messages by parsing JSON text. It is +implemented as follows:

                                                      +
                                                      +
                                                      +
                                                      +
                                                      /* Decode a JSON message into a JoinMessage or a ChatMessage.
                                                      + * For example, the incoming message
                                                      + * {"type":"chat","name":"Peter","target":"Duke","message":"How are you?"}
                                                      + * is decoded as (new ChatMessage("Peter", "Duke", "How are you?"))
                                                      + */
                                                      +public class MessageDecoder implements Decoder.Text<Message> {
                                                      +    /* Stores the name-value pairs from a JSON message as a Map */
                                                      +    private Map<String,String> messageMap;
                                                      +
                                                      +    @Override
                                                      +    public void init(EndpointConfig ec) { }
                                                      +    @Override
                                                      +    public void destroy() { }
                                                      +
                                                      +    /* Create a new Message object if the message can be decoded */
                                                      +    @Override
                                                      +    public Message decode(String string) throws DecodeException {
                                                      +       Message msg = null;
                                                      +       if (willDecode(string)) {
                                                      +          switch (messageMap.get("type")) {
                                                      +             case "join":
                                                      +                msg = new JoinMessage(messageMap.get("name"));
                                                      +                break;
                                                      +             case "chat":
                                                      +                msg = new ChatMessage(messageMap.get("name"),
                                                      +                                      messageMap.get("target"),
                                                      +                                      messageMap.get("message"));
                                                      +          }
                                                      +       } else {
                                                      +          throw new DecodeException(string, "[Message] Can't decode.");
                                                      +       }
                                                      +       return msg;
                                                      +   }
                                                      +
                                                      +   /* Decode a JSON message into a Map and check if it contains
                                                      +    * all the required fields according to its type. */
                                                      +   @Override
                                                      +   public boolean willDecode(String string) {
                                                      +      // Convert JSON data from the message into a name-value map...
                                                      +      // Check if the message has all the fields for its message type...
                                                      +   }
                                                      +}
                                                      +
                                                      +
                                                      +
                                                      +
                                                      +

                                                      18.12.1.6 The HTML Page

                                                      +
                                                      +

                                                      The HTML page (index.html) contains a field for the user name. After +the user types a name and clicks Join, three text areas are available: +one to type and send messages, one for the chat room, and one with the +list of users. The page also contains a WebSocket console that shows the +messages sent and received as JSON text.

                                                      +
                                                      +
                                                      +

                                                      The JavaScript code on the page uses the WebSocket API to connect to the +endpoint, send messages, and designate callback methods. The WebSocket +API is supported by most modern browsers and is widely used for web +client development with HTML5.

                                                      +
                                                      +
                                                      +
                                                      +
                                                      +

                                                      18.12.2 Running the websocketbot Example Application

                                                      +
                                                      +

                                                      This section describes how to run the websocketbot example application +using NetBeans IDE and from the command line.

                                                      +
                                                      +
                                                      +

                                                      The following topics are addressed here:

                                                      +
                                                      + +
                                                      +

                                                      18.12.2.1 To Run the websocketbot Example Application Using NetBeans IDE

                                                      +
                                                      +
                                                        +
                                                      1. +

                                                        Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

                                                        +
                                                      2. +
                                                      3. +

                                                        From the File menu, choose Open Project.

                                                        +
                                                      4. +
                                                      5. +

                                                        In the Open Project dialog box, navigate to:

                                                        +
                                                        +
                                                        +
                                                        tut-install/examples/web/websocket
                                                        +
                                                        +
                                                        +
                                                      6. +
                                                      7. +

                                                        Select the websocketbot folder.

                                                        +
                                                      8. +
                                                      9. +

                                                        Click Open Project.

                                                        +
                                                      10. +
                                                      11. +

                                                        In the Projects tab, right-click the websocketbot project and +select Run.

                                                        +
                                                        +

                                                        This command builds and packages the application into a WAR file, +websocketbot.war, located in the target/ directory; deploys it to +the server; and launches a web browser window with the following URL:

                                                        +
                                                        +
                                                        +
                                                        +
                                                        http://localhost:8080/websocketbot/
                                                        +
                                                        +
                                                        +
                                                        +

                                                        See To Test the websocketbot Example Application for +more information.

                                                        +
                                                        +
                                                      12. +
                                                      +
                                                      +
                                                      +
                                                      +

                                                      18.12.2.2 To Run the websocketbot Example Application Using Maven

                                                      +
                                                      +
                                                        +
                                                      1. +

                                                        Make sure that GlassFish Server has been started (see +Starting and Stopping GlassFish +Server).

                                                        +
                                                      2. +
                                                      3. +

                                                        In a terminal window, go to:

                                                        +
                                                        +
                                                        +
                                                        tut-install/examples/web/websocket/websocketbot/
                                                        +
                                                        +
                                                        +
                                                      4. +
                                                      5. +

                                                        Enter the following command to deploy the application:

                                                        +
                                                        +
                                                        +
                                                        mvn install
                                                        +
                                                        +
                                                        +
                                                      6. +
                                                      7. +

                                                        Open a web browser window and type the following address:

                                                        +
                                                        +
                                                        +
                                                        http://localhost:8080/websocketbot/
                                                        +
                                                        +
                                                        +
                                                        +

                                                        See To Test the websocketbot Example Application for +more information.

                                                        +
                                                        +
                                                      8. +
                                                      +
                                                      +
                                                      +
                                                      +

                                                      18.12.2.3 To Test the websocketbot Example Application

                                                      +
                                                      +
                                                        +
                                                      1. +

                                                        On the main page, type your name on the first text field and press +the Enter key.

                                                        +
                                                        +

                                                        The list of connected users appears on the text area on the right. The +text area on the left is the chat room.

                                                        +
                                                        +
                                                      2. +
                                                      3. +

                                                        Type a message on the text area below the login button. For example, +type the messages in bold and press enter to obtain responses similar to +the following:

                                                        +
                                                        +
                                                        +
                                                        [--Peter has joined the chat--]
                                                        +Duke: @Peter Hi there!!
                                                        +Peter: @Duke how are you?
                                                        +Duke: @Peter I'm doing great, thank you!
                                                        +Peter: @Duke when is your birthday?
                                                        +Duke: @Peter My birthday is on May 23rd. Thanks for asking!
                                                        +
                                                        +
                                                        +
                                                      4. +
                                                      5. +

                                                        Join the chat from another browser window by copying and pasting the +URI on the address bar and joining with a different name.

                                                        +
                                                        +

                                                        The new user name appears in the list of users in both browser windows. +You can send messages from either window and see how they appear in the +other.

                                                        +
                                                        +
                                                      6. +
                                                      7. +

                                                        Click Show WebSocket Console.

                                                        +
                                                        +

                                                        The console shows the messages sent and received as JSON text.

                                                        +
                                                        +
                                                      8. +
                                                      +
                                                      +
                                                      + ++++++++ + + + + + + + + + + +

                                                      Previous
                                                      +Previous
                                                       

                                                      Next
                                                      +Next

                                                      Oracle Logo +
                                                      +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      +
                                                      +
                                                      +
                                                      + + + \ No newline at end of file diff --git a/websocket013.html b/websocket013.html new file mode 100644 index 0000000..483588d --- /dev/null +++ b/websocket013.html @@ -0,0 +1,90 @@ + + + + + + Further Information about WebSocket + + + + + +
                                                      +
                                                      + +++++ + + + + + + + +

                                                      Java Platform, Enterprise Edition The Java EE Tutorial
                                                      +Release 8 Java Platform, Enterprise Edition
                                                      +E63026-01

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      + +++++ + + + + + + + +

                                                      Previous
                                                      +Previous

                                                      Next
                                                      +Next

                                                       

                                                      +
                                                      +
                                                      +
                                                      +

                                                      18.13 Further Information about WebSocket

                                                      +
                                                      +
                                                      +

                                                      For more information on WebSocket in Java EE, see the Java API for +WebSocket specification:

                                                      +
                                                      +
                                                      +

                                                      http://www.jcp.org/en/jsr/detail?id=356

                                                      +
                                                      +
                                                      + ++++++++ + + + + + + + + + + +

                                                      Previous
                                                      +Previous

                                                      Next
                                                      +Next

                                                      Oracle Logo +
                                                      +Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

                                                      Go To Table Of Contents
                                                      +Contents

                                                      +
                                                      +
                                                      + + + \ No newline at end of file From 5fecc65e386cc63524b2931fd198463b40547c49 Mon Sep 17 00:00:00 2001 From: "joe.ruzzi" Date: Wed, 19 Jul 2017 17:21:40 -0400 Subject: [PATCH 4/8] Update site --- batch-processing.html | 175 +++++++---- batch-processing001.html | 175 +++++++---- batch-processing002.html | 180 +++++++---- batch-processing003.html | 185 ++++++----- batch-processing004.html | 180 +++++++---- batch-processing005.html | 210 +++++++------ batch-processing006.html | 175 +++++++---- batch-processing007.html | 175 +++++++---- batch-processing008.html | 175 +++++++---- batch-processing009.html | 175 +++++++---- batch-processing010.html | 175 +++++++---- bean-validation-advanced.html | 175 +++++++---- bean-validation-advanced001.html | 175 +++++++---- bean-validation-advanced002.html | 175 +++++++---- bean-validation-advanced003.html | 175 +++++++---- bean-validation-advanced004.html | 175 +++++++---- bean-validation.html | 175 +++++++---- bean-validation001.html | 175 +++++++---- bean-validation002.html | 180 +++++++---- bean-validation003.html | 175 +++++++---- bean-validation004.html | 185 ++++++----- bean-validation005.html | 175 +++++++---- cdi-adv-examples.html | 175 +++++++---- cdi-adv-examples001.html | 175 +++++++---- cdi-adv-examples002.html | 175 +++++++---- cdi-adv-examples003.html | 177 +++++++---- cdi-adv-examples004.html | 177 +++++++---- cdi-adv-examples005.html | 175 +++++++---- cdi-adv-examples006.html | 175 +++++++---- cdi-adv.html | 175 +++++++---- cdi-adv001.html | 175 +++++++---- cdi-adv002.html | 175 +++++++---- cdi-adv003.html | 177 +++++++---- cdi-adv004.html | 180 +++++++---- cdi-adv005.html | 175 +++++++---- cdi-adv006.html | 175 +++++++---- cdi-adv007.html | 175 +++++++---- cdi-adv008.html | 175 +++++++---- cdi-basic.html | 175 +++++++---- cdi-basic001.html | 175 +++++++---- cdi-basic002.html | 175 +++++++---- cdi-basic003.html | 175 +++++++---- cdi-basic004.html | 175 +++++++---- cdi-basic005.html | 175 +++++++---- cdi-basic006.html | 175 +++++++---- cdi-basic007.html | 175 +++++++---- cdi-basic008.html | 180 +++++++---- cdi-basic009.html | 175 +++++++---- cdi-basic010.html | 175 +++++++---- cdi-basic011.html | 175 +++++++---- cdi-basic012.html | 175 +++++++---- cdi-basic013.html | 175 +++++++---- cdi-basic014.html | 189 ++++++----- cdi-basic015.html | 175 +++++++---- cdi-basicexamples.html | 175 +++++++---- cdi-basicexamples001.html | 175 +++++++---- cdi-basicexamples002.html | 175 +++++++---- cdi-basicexamples003.html | 175 +++++++---- concurrency-utilities.html | 175 +++++++---- concurrency-utilities001.html | 175 +++++++---- concurrency-utilities002.html | 175 +++++++---- concurrency-utilities003.html | 175 +++++++---- concurrency-utilities004.html | 175 +++++++---- concurrency-utilities005.html | 175 +++++++---- concurrency-utilities006.html | 175 +++++++---- concurrency-utilities007.html | 175 +++++++---- connectorexample.html | 175 +++++++---- connectorexample001.html | 175 +++++++---- connectorexample002.html | 195 +++++++----- connectorexample003.html | 180 +++++++---- cpyr.html | 269 ++++++++++++++++ css/style.css | 78 +++++ dukes-bookstore.html | 175 +++++++---- dukes-bookstore001.html | 175 +++++++---- dukes-bookstore002.html | 177 +++++++---- dukes-bookstore003.html | 175 +++++++---- dukes-forest.html | 175 +++++++---- dukes-forest001.html | 175 +++++++---- dukes-forest002.html | 175 +++++++---- dukes-forest003.html | 177 +++++++---- dukes-forest004.html | 128 ++++++-- dukes-tutoring.html | 175 +++++++---- dukes-tutoring001.html | 175 +++++++---- dukes-tutoring002.html | 175 +++++++---- dukes-tutoring003.html | 175 +++++++---- dukes-tutoring004.html | 186 ++++++----- ejb-async.html | 175 +++++++---- ejb-async001.html | 175 +++++++---- ejb-async002.html | 175 +++++++---- ejb-basicexamples.html | 175 +++++++---- ejb-basicexamples001.html | 175 +++++++---- ejb-basicexamples002.html | 175 +++++++---- ejb-basicexamples003.html | 175 +++++++---- ejb-basicexamples004.html | 175 +++++++---- ejb-basicexamples005.html | 210 +++++++------ ejb-basicexamples006.html | 175 +++++++---- ejb-embedded.html | 175 +++++++---- ejb-embedded001.html | 175 +++++++---- ejb-embedded002.html | 180 +++++++---- ejb-embedded003.html | 175 +++++++---- ejb-gettingstarted.html | 175 +++++++---- ejb-gettingstarted001.html | 175 +++++++---- ejb-gettingstarted002.html | 175 +++++++---- ejb-gettingstarted003.html | 175 +++++++---- ejb-intro.html | 175 +++++++---- ejb-intro001.html | 180 +++++++---- ejb-intro002.html | 175 +++++++---- ejb-intro003.html | 175 +++++++---- ejb-intro004.html | 185 ++++++----- ejb-intro005.html | 175 +++++++---- ejb-intro006.html | 178 +++++++---- ejb-intro007.html | 175 +++++++---- ejb-intro008.html | 175 +++++++---- img_text/javaeett_dt_001.html | 93 ++++++ img_text/javaeett_dt_002.html | 93 ++++++ img_text/javaeett_dt_003.html | 93 ++++++ img_text/javaeett_dt_004.html | 93 ++++++ img_text/javaeett_dt_005.html | 93 ++++++ img_text/javaeett_dt_006.html | 93 ++++++ img_text/javaeett_dt_007.html | 93 ++++++ img_text/javaeett_dt_008.html | 93 ++++++ img_text/javaeett_dt_009.html | 93 ++++++ img_text/javaeett_dt_010.html | 93 ++++++ img_text/javaeett_dt_011.html | 93 ++++++ img_text/javaeett_dt_012.html | 93 ++++++ img_text/javaeett_dt_013.html | 93 ++++++ img_text/javaeett_dt_014.html | 93 ++++++ img_text/javaeett_dt_015.html | 93 ++++++ img_text/javaeett_dt_016.html | 93 ++++++ img_text/javaeett_dt_017.html | 93 ++++++ img_text/javaeett_dt_018.html | 93 ++++++ img_text/javaeett_dt_019.html | 93 ++++++ img_text/javaeett_dt_020.html | 93 ++++++ img_text/javaeett_dt_021.html | 93 ++++++ img_text/javaeett_dt_022.html | 93 ++++++ img_text/javaeett_dt_023.html | 93 ++++++ img_text/javaeett_dt_024.html | 93 ++++++ img_text/javaeett_dt_025.html | 93 ++++++ img_text/javaeett_dt_026.html | 93 ++++++ img_text/javaeett_dt_027.html | 93 ++++++ img_text/javaeett_dt_028.html | 93 ++++++ img_text/javaeett_dt_029.html | 93 ++++++ img_text/javaeett_dt_030.html | 93 ++++++ img_text/javaeett_dt_031.html | 93 ++++++ img_text/javaeett_dt_032.html | 93 ++++++ img_text/javaeett_dt_033.html | 93 ++++++ img_text/javaeett_dt_034.html | 93 ++++++ img_text/javaeett_dt_035.html | 93 ++++++ img_text/javaeett_dt_036.html | 93 ++++++ img_text/javaeett_dt_037.html | 93 ++++++ img_text/javaeett_dt_038.html | 93 ++++++ img_text/javaeett_dt_039.html | 93 ++++++ img_text/javaeett_dt_040.html | 93 ++++++ img_text/javaeett_dt_041.html | 93 ++++++ img_text/javaeett_dt_042.html | 93 ++++++ img_text/javaeett_dt_043.html | 93 ++++++ img_text/javaeett_dt_044.html | 93 ++++++ img_text/javaeett_dt_045.html | 93 ++++++ img_text/javaeett_dt_046.html | 93 ++++++ img_text/javaeett_dt_047.html | 93 ++++++ img_text/javaeett_dt_048.html | 93 ++++++ img_text/javaeett_dt_049.html | 93 ++++++ img_text/javaeett_dt_050.html | 93 ++++++ img_text/javaeett_dt_051.html | 93 ++++++ img_text/javaeett_dt_052.html | 93 ++++++ img_text/javaeett_dt_053.html | 93 ++++++ img_text/javaeett_dt_054.html | 93 ++++++ img_text/javaeett_dt_055.html | 93 ++++++ img_text/javaeett_dt_056.html | 93 ++++++ img_text/javaeett_dt_057.html | 93 ++++++ img_text/javaeett_dt_058.html | 93 ++++++ img_text/javaeett_dt_059.html | 93 ++++++ img_text/javaeett_dt_060.html | 93 ++++++ img_text/javaeett_dt_061.html | 93 ++++++ img_text/javaeett_dt_062.html | 93 ++++++ img_text/javaeett_dt_063.html | 93 ++++++ img_text/javaeett_dt_064.html | 93 ++++++ img_text/javaeett_dt_065_frmcmpnt.html | 93 ++++++ img_text/javaeett_dt_066_slctmny.html | 93 ++++++ img_text/javaeett_dt_067_slctn.html | 93 ++++++ img_text/javaeett_dt_068_txtcmpnts.html | 93 ++++++ injection.html | 175 +++++++---- injection001.html | 175 +++++++---- injection002.html | 175 +++++++---- injection003.html | 180 +++++++---- interceptors.html | 175 +++++++---- interceptors001.html | 190 ++++++----- interceptors002.html | 210 +++++++------ interceptors003.html | 175 +++++++---- jaxrs-advanced.html | 175 +++++++---- jaxrs-advanced001.html | 180 +++++++---- jaxrs-advanced002.html | 175 +++++++---- jaxrs-advanced003.html | 175 +++++++---- jaxrs-advanced004.html | 175 +++++++---- jaxrs-advanced005.html | 175 +++++++---- jaxrs-advanced006.html | 175 +++++++---- jaxrs-advanced007.html | 175 +++++++---- jaxrs-advanced008.html | 175 +++++++---- jaxrs-client.html | 175 +++++++---- jaxrs-client001.html | 175 +++++++---- jaxrs-client002.html | 175 +++++++---- jaxrs-client003.html | 175 +++++++---- jaxrs.html | 175 +++++++---- jaxrs001.html | 175 +++++++---- jaxrs002.html | 200 ++++++------ jaxrs003.html | 186 ++++++----- jaxrs004.html | 175 +++++++---- jaxws.html | 175 +++++++---- jaxws001.html | 183 ++++++----- jaxws002.html | 175 +++++++---- jaxws003.html | 185 ++++++----- jaxws004.html | 175 +++++++---- jaxws005.html | 175 +++++++---- jms-concepts.html | 175 +++++++---- jms-concepts001.html | 175 +++++++---- jms-concepts002.html | 175 +++++++---- jms-concepts003.html | 195 +++++++----- jms-concepts004.html | 190 ++++++----- jms-concepts005.html | 192 +++++++----- jms-concepts006.html | 175 +++++++---- jms-examples.html | 175 +++++++---- jms-examples001.html | 175 +++++++---- jms-examples002.html | 183 ++++++----- jms-examples003.html | 220 +++++++------ jms-examples004.html | 175 +++++++---- jms-examples005.html | 175 +++++++---- jms-examples006.html | 175 +++++++---- jms-examples007.html | 175 +++++++---- jms-examples008.html | 177 +++++++---- jms-examples009.html | 177 +++++++---- jms-examples010.html | 175 +++++++---- jsf-advanced-cc.html | 175 +++++++---- jsf-advanced-cc001.html | 180 +++++++---- jsf-advanced-cc002.html | 175 +++++++---- jsf-advanced-cc003.html | 178 +++++++---- jsf-advanced-cc004.html | 175 +++++++---- jsf-ajax.html | 175 +++++++---- jsf-ajax001.html | 175 +++++++---- jsf-ajax002.html | 175 +++++++---- jsf-ajax003.html | 185 ++++++----- jsf-ajax004.html | 195 +++++++----- jsf-ajax005.html | 180 +++++++---- jsf-ajax006.html | 180 +++++++---- jsf-ajax007.html | 183 ++++++----- jsf-ajax008.html | 175 +++++++---- jsf-ajax009.html | 175 +++++++---- jsf-ajax010.html | 185 ++++++----- jsf-ajax011.html | 175 +++++++---- jsf-ajax012.html | 175 +++++++---- jsf-configure.html | 175 +++++++---- jsf-configure001.html | 175 +++++++---- jsf-configure002.html | 175 +++++++---- jsf-configure003.html | 175 +++++++---- jsf-configure004.html | 175 +++++++---- jsf-configure005.html | 185 ++++++----- jsf-configure006.html | 175 +++++++---- jsf-configure007.html | 175 +++++++---- jsf-configure008.html | 175 +++++++---- jsf-configure009.html | 175 +++++++---- jsf-configure010.html | 180 +++++++---- jsf-configure011.html | 175 +++++++---- jsf-configure012.html | 175 +++++++---- jsf-configure013.html | 175 +++++++---- jsf-custom.html | 175 +++++++---- jsf-custom001.html | 175 +++++++---- jsf-custom002.html | 180 +++++++---- jsf-custom003.html | 180 +++++++---- jsf-custom004.html | 175 +++++++---- jsf-custom005.html | 175 +++++++---- jsf-custom006.html | 175 +++++++---- jsf-custom007.html | 185 ++++++----- jsf-custom008.html | 175 +++++++---- jsf-custom009.html | 175 +++++++---- jsf-custom010.html | 175 +++++++---- jsf-custom011.html | 175 +++++++---- jsf-custom012.html | 175 +++++++---- jsf-custom013.html | 185 ++++++----- jsf-custom014.html | 177 +++++++---- jsf-develop.html | 175 +++++++---- jsf-develop001.html | 185 ++++++----- jsf-develop002.html | 180 +++++++---- jsf-develop003.html | 175 +++++++---- jsf-el.html | 175 +++++++---- jsf-el001.html | 175 +++++++---- jsf-el002.html | 175 +++++++---- jsf-el003.html | 185 ++++++----- jsf-el004.html | 234 ++++++++------ jsf-el005.html | 175 +++++++---- jsf-el006.html | 212 ++++++++----- jsf-el007.html | 178 +++++++---- jsf-el008.html | 175 +++++++---- jsf-facelets.html | 175 +++++++---- jsf-facelets001.html | 180 +++++++---- jsf-facelets002.html | 175 +++++++---- jsf-facelets003.html | 177 +++++++---- jsf-facelets004.html | 180 +++++++---- jsf-facelets005.html | 180 +++++++---- jsf-facelets006.html | 175 +++++++---- jsf-facelets007.html | 175 +++++++---- jsf-facelets008.html | 175 +++++++---- jsf-facelets009.html | 180 +++++++---- jsf-intro.html | 175 +++++++---- jsf-intro001.html | 175 +++++++---- jsf-intro002.html | 175 +++++++---- jsf-intro003.html | 175 +++++++---- jsf-intro004.html | 175 +++++++---- jsf-intro005.html | 175 +++++++---- jsf-intro006.html | 175 +++++++---- jsf-intro007.html | 175 +++++++---- jsf-intro008.html | 175 +++++++---- jsf-intro009.html | 175 +++++++---- jsf-page-core.html | 175 +++++++---- jsf-page-core001.html | 190 ++++++----- jsf-page-core002.html | 180 +++++++---- jsf-page-core003.html | 180 +++++++---- jsf-page-core004.html | 180 +++++++---- jsf-page.html | 175 +++++++---- jsf-page001.html | 175 +++++++---- jsf-page002.html | 234 +++++++------- jsf-page003.html | 243 +++++++-------- jsonp.html | 175 +++++++---- jsonp001.html | 175 +++++++---- jsonp002.html | 183 ++++++----- jsonp003.html | 175 +++++++---- jsonp004.html | 175 +++++++---- jsonp005.html | 175 +++++++---- jsonp006.html | 175 +++++++---- jsonp007.html | 175 +++++++---- jsonp008.html | 175 +++++++---- overview.html | 175 +++++++---- overview001.html | 175 +++++++---- overview002.html | 175 +++++++---- overview003.html | 175 +++++++---- overview004.html | 175 +++++++---- overview005.html | 175 +++++++---- overview006.html | 175 +++++++---- overview007.html | 175 +++++++---- overview008.html | 175 +++++++---- overview009.html | 175 +++++++---- overview010.html | 183 ++++++----- packaging.html | 175 +++++++---- packaging001.html | 175 +++++++---- packaging002.html | 175 +++++++---- packaging003.html | 175 +++++++---- packaging004.html | 175 +++++++---- partbeanvalidation.html | 173 ++++++---- partcasestudies.html | 173 ++++++---- partcdi.html | 173 ++++++---- partentbeans.html | 173 ++++++---- partintro.html | 173 ++++++---- partmessaging.html | 173 ++++++---- partpersist.html | 173 ++++++---- partplatform.html | 173 ++++++---- partsecurity.html | 173 ++++++---- partsupporttechs.html | 173 ++++++---- partwebsvcs.html | 173 ++++++---- partwebtier.html | 173 ++++++---- persistence-basicexamples.html | 175 +++++++---- persistence-basicexamples001.html | 175 +++++++---- persistence-basicexamples002.html | 185 ++++++----- persistence-basicexamples003.html | 185 ++++++----- persistence-basicexamples004.html | 175 +++++++---- persistence-cache.html | 175 +++++++---- persistence-cache001.html | 190 ++++++----- persistence-cache002.html | 205 ++++++------ persistence-criteria.html | 175 +++++++---- persistence-criteria001.html | 175 +++++++---- persistence-criteria002.html | 185 ++++++----- persistence-criteria003.html | 192 +++++++----- persistence-entitygraphs.html | 175 +++++++---- persistence-entitygraphs001.html | 175 +++++++---- persistence-entitygraphs002.html | 175 +++++++---- persistence-entitygraphs003.html | 175 +++++++---- persistence-entitygraphs004.html | 175 +++++++---- persistence-intro.html | 175 +++++++---- persistence-intro001.html | 175 +++++++---- persistence-intro002.html | 180 +++++++---- persistence-intro003.html | 180 +++++++---- persistence-intro004.html | 180 +++++++---- persistence-intro005.html | 175 +++++++---- persistence-intro006.html | 185 ++++++----- persistence-intro007.html | 175 +++++++---- persistence-locking.html | 175 +++++++---- persistence-locking001.html | 195 +++++++----- persistence-locking002.html | 190 ++++++----- persistence-querylanguage.html | 175 +++++++---- persistence-querylanguage001.html | 175 +++++++---- persistence-querylanguage002.html | 175 +++++++---- persistence-querylanguage003.html | 175 +++++++---- persistence-querylanguage004.html | 175 +++++++---- persistence-querylanguage005.html | 175 +++++++---- persistence-querylanguage006.html | 399 ++++++++++++------------ persistence-string-queries.html | 175 +++++++---- persistence-string-queries001.html | 175 +++++++---- persistence-string-queries002.html | 185 ++++++----- persistence-string-queries003.html | 175 +++++++---- preface.html | 185 ++++++----- resource-creation.html | 175 +++++++---- resource-creation001.html | 175 +++++++---- resource-creation002.html | 175 +++++++---- resource-creation003.html | 175 +++++++---- resources.html | 175 +++++++---- resources001.html | 175 +++++++---- resources002.html | 175 +++++++---- resources003.html | 175 +++++++---- resources004.html | 177 +++++++---- resources005.html | 175 +++++++---- security-advanced.html | 175 +++++++---- security-advanced001.html | 185 ++++++----- security-advanced002.html | 175 +++++++---- security-advanced003.html | 175 +++++++---- security-advanced004.html | 175 +++++++---- security-advanced005.html | 175 +++++++---- security-advanced006.html | 175 +++++++---- security-advanced007.html | 179 +++++++---- security-advanced008.html | 175 +++++++---- security-intro.html | 175 +++++++---- security-intro001.html | 175 +++++++---- security-intro002.html | 175 +++++++---- security-intro003.html | 175 +++++++---- security-intro004.html | 175 +++++++---- security-intro005.html | 175 +++++++---- security-intro006.html | 175 +++++++---- security-intro007.html | 175 +++++++---- security-javaee.html | 175 +++++++---- security-javaee001.html | 175 +++++++---- security-javaee002.html | 175 +++++++---- security-javaee003.html | 179 +++++++---- security-webtier.html | 175 +++++++---- security-webtier001.html | 175 +++++++---- security-webtier002.html | 207 ++++++------ security-webtier003.html | 175 +++++++---- security-webtier004.html | 177 +++++++---- servlets.html | 175 +++++++---- servlets001.html | 175 +++++++---- servlets002.html | 180 +++++++---- servlets003.html | 180 +++++++---- servlets004.html | 175 +++++++---- servlets005.html | 175 +++++++---- servlets006.html | 175 +++++++---- servlets007.html | 175 +++++++---- servlets008.html | 175 +++++++---- servlets009.html | 175 +++++++---- servlets010.html | 175 +++++++---- servlets011.html | 175 +++++++---- servlets012.html | 180 +++++++---- servlets013.html | 190 ++++++----- servlets014.html | 180 +++++++---- servlets015.html | 175 +++++++---- servlets016.html | 193 +++++++----- servlets017.html | 175 +++++++---- servlets018.html | 175 +++++++---- target.html | 93 +++++- title.html | 175 +++++++---- toc.html | 221 +++++++------ transactions.html | 175 +++++++---- transactions001.html | 175 +++++++---- transactions002.html | 175 +++++++---- transactions003.html | 175 +++++++---- transactions004.html | 185 ++++++----- transactions005.html | 175 +++++++---- transactions006.html | 175 +++++++---- transactions007.html | 175 +++++++---- transactions008.html | 175 +++++++---- transactions009.html | 175 +++++++---- usingexamples.html | 175 +++++++---- usingexamples001.html | 175 +++++++---- usingexamples002.html | 175 +++++++---- usingexamples003.html | 180 +++++++---- usingexamples004.html | 175 +++++++---- usingexamples005.html | 175 +++++++---- usingexamples006.html | 175 +++++++---- usingexamples007.html | 175 +++++++---- usingexamples008.html | 175 +++++++---- usingexamples009.html | 175 +++++++---- webapp.html | 175 +++++++---- webapp001.html | 175 +++++++---- webapp002.html | 175 +++++++---- webapp003.html | 177 +++++++---- webapp004.html | 175 +++++++---- webapp005.html | 180 +++++++---- webapp006.html | 175 +++++++---- webi18n.html | 175 +++++++---- webi18n001.html | 175 +++++++---- webi18n002.html | 175 +++++++---- webi18n003.html | 175 +++++++---- webi18n004.html | 175 +++++++---- webservices-intro.html | 175 +++++++---- webservices-intro001.html | 175 +++++++---- webservices-intro002.html | 175 +++++++---- webservices-intro003.html | 175 +++++++---- websocket.html | 175 +++++++---- websocket001.html | 175 +++++++---- websocket002.html | 195 +++++++----- websocket003.html | 175 +++++++---- websocket004.html | 178 +++++++---- websocket005.html | 175 +++++++---- websocket006.html | 175 +++++++---- websocket007.html | 202 +++++++----- websocket008.html | 175 +++++++---- websocket009.html | 175 +++++++---- websocket010.html | 175 +++++++---- websocket011.html | 175 +++++++---- websocket012.html | 175 +++++++---- websocket013.html | 175 +++++++---- 505 files changed, 55563 insertions(+), 28554 deletions(-) create mode 100644 cpyr.html diff --git a/batch-processing.html b/batch-processing.html index 8107f11..cf1fdd5 100644 --- a/batch-processing.html +++ b/batch-processing.html @@ -8,45 +8,64 @@ - -
                                                      -
                                                      - ----- - - - - - - - +

                                                      Java Platform, Enterprise Edition The Java EE Tutorial
                                                      -Release 8 Java Platform, Enterprise Edition
                                                      -E63026-01

                                                      Go To Table Of Contents
                                                      -Contents

                                                      + + +
                                                      + Java Platform, Enterprise Edition The Java EE Tutorial
                                                      + Release 8 Java Platform, Enterprise Edition
                                                      + E63026-01 +
                                                      -
                                                      - ----- - - - - - - - +
                                                      +

                                                      Previous
                                                      -Previous
                                                       

                                                      Next
                                                      -Next

                                                       

                                                      + + + + + + + +
                                                      + + + + + + + + + +
                                                        + + Previous +
                                                      + Previous  +
                                                      +
                                                      + + Next +
                                                      + Next +
                                                      +
                                                      +
                                                      + + + + + + +
                                                        + + Go To Table Of Contents +
                                                      + Contents +
                                                      +
                                                      +
                                                      -
                                                      -
                                                      +

                                                      55 Batch Processing

                                                      @@ -100,34 +119,64 @@

                                                      55 Batch Processing

                                                    -
                                                    - -------- - - - - - - - - - - -

                                                    Previous
                                                    -Previous
                                                     

                                                    Next
                                                    -Next

                                                    Oracle Logo -
                                                    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

                                                    Go To Table Of Contents
                                                    -Contents

                                                +
                                                + + + + + + + + + +
                                                + + + + + + + + + +
                                                  + + Previous +
                                                + Previous  +
                                                +
                                                + + Next +
                                                + Next +
                                                +
                                                +
                                                + Oracle Logo + +
                                                + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
                                                +
                                                +
                                                + + + + + +
                                                  + + Go To Table Of Contents +
                                                + Contents +
                                                +
                                                +
                                                + \ No newline at end of file diff --git a/batch-processing001.html b/batch-processing001.html index a188435..9c65e72 100644 --- a/batch-processing001.html +++ b/batch-processing001.html @@ -8,45 +8,64 @@ - -
                                                -
                                                - ----- - - - - - - - +

                                                Java Platform, Enterprise Edition The Java EE Tutorial
                                                -Release 8 Java Platform, Enterprise Edition
                                                -E63026-01

                                                Go To Table Of Contents
                                                -Contents

                                                + + +
                                                + Java Platform, Enterprise Edition The Java EE Tutorial
                                                + Release 8 Java Platform, Enterprise Edition
                                                + E63026-01 +
                                                -
                                                - ----- - - - - - - - +
                                                +

                                                Previous
                                                -Previous
                                                 

                                                Next
                                                -Next

                                                 

                                                + + + + + + + +
                                                + + + + + + + + + +
                                                  + + Previous +
                                                + Previous  +
                                                +
                                                + + Next +
                                                + Next +
                                                +
                                                +
                                                + + + + + + +
                                                  + + Go To Table Of Contents +
                                                + Contents +
                                                +
                                                +
                                                -
                                                -
                                                +

                                                55.1 Introduction to Batch Processing

                                                @@ -276,35 +295,65 @@

                                                55.1.4 Batch Framework Functionality

                                                application programming interface (API), and a service available at runtime that manages the execution of batch jobs.

                                                -
                                                - -------- - - - - - - - - - - -

                                                Previous
                                                -Previous
                                                 

                                                Next
                                                -Next

                                                Oracle Logo -
                                                -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

                                                Go To Table Of Contents
                                                -Contents

                                              +
                                              + + + + + + + + + +
                                              + + + + + + + + + +
                                                + + Previous +
                                              + Previous  +
                                              +
                                              + + Next +
                                              + Next +
                                              +
                                              +
                                              + Oracle Logo + +
                                              + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
                                              +
                                              +
                                              + + + + + +
                                                + + Go To Table Of Contents +
                                              + Contents +
                                              +
                                              +
                                              + \ No newline at end of file diff --git a/batch-processing002.html b/batch-processing002.html index 32348eb..79ef87b 100644 --- a/batch-processing002.html +++ b/batch-processing002.html @@ -8,45 +8,64 @@ - -
                                              -
                                              - ----- - - - - - - - +

                                              Java Platform, Enterprise Edition The Java EE Tutorial
                                              -Release 8 Java Platform, Enterprise Edition
                                              -E63026-01

                                              Go To Table Of Contents
                                              -Contents

                                              + + +
                                              + Java Platform, Enterprise Edition The Java EE Tutorial
                                              + Release 8 Java Platform, Enterprise Edition
                                              + E63026-01 +
                                              -
                                              - ----- - - - - - - - +
                                              +

                                              Previous
                                              -Previous
                                               

                                              Next
                                              -Next

                                               

                                              + + + + + + + +
                                              + + + + + + + + + +
                                                + + Previous +
                                              + Previous  +
                                              +
                                              + + Next +
                                              + Next +
                                              +
                                              +
                                              + + + + + + +
                                                + + Go To Table Of Contents +
                                              + Contents +
                                              +
                                              +
                                              -
                                              -
                                              +

                                              55.2 Batch Processing in Java EE

                                              @@ -310,11 +329,6 @@

                                              55.2.6 Batch and Exit Status

                                              -
                                              -
                                              -
                                              +
                                              -
                                              -

                                              Java EE applications can submit jobs and access the batch status of a job using the JobOperator interface, as described in @@ -353,35 +367,65 @@

                                              55.2.6 Batch and Exit Status

                                              above. The default value for the exit status is the same as the batch status.

                                              -
                                              - -------- - - - - - - - - - - -

                                              Previous
                                              -Previous
                                               

                                              Next
                                              -Next

                                              Oracle Logo -
                                              -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

                                              Go To Table Of Contents
                                              -Contents

                                            +
                                            + + + + + + + + + +
                                            + + + + + + + + + +
                                              + + Previous +
                                            + Previous  +
                                            +
                                            + + Next +
                                            + Next +
                                            +
                                            +
                                            + Oracle Logo + +
                                            + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
                                            +
                                            +
                                            + + + + + +
                                              + + Go To Table Of Contents +
                                            + Contents +
                                            +
                                            +
                                            + \ No newline at end of file diff --git a/batch-processing003.html b/batch-processing003.html index 6ee2f0e..f2c4220 100644 --- a/batch-processing003.html +++ b/batch-processing003.html @@ -8,45 +8,64 @@ - -
                                            -
                                            - ----- - - - - - - - +

                                            Java Platform, Enterprise Edition The Java EE Tutorial
                                            -Release 8 Java Platform, Enterprise Edition
                                            -E63026-01

                                            Go To Table Of Contents
                                            -Contents

                                            + + +
                                            + Java Platform, Enterprise Edition The Java EE Tutorial
                                            + Release 8 Java Platform, Enterprise Edition
                                            + E63026-01 +
                                            -
                                            - ----- - - - - - - - +
                                            +

                                            Previous
                                            -Previous
                                             

                                            Next
                                            -Next

                                             

                                            + + + + + + + +
                                            + + + + + + + + + +
                                              + + Previous +
                                            + Previous  +
                                            +
                                            + + Next +
                                            + Next +
                                            +
                                            +
                                            + + + + + + +
                                              + + Go To Table Of Contents +
                                            + Contents +
                                            +
                                            +
                                            -
                                            -
                                            +

                                            55.3 Simple Use Case

                                            @@ -163,11 +182,6 @@

                                            55.3.1 Chunk Step

                                            }
                                            -
                                            -
                                            -
                                            +
                                            -
                                            -
                                            @@ -184,11 +198,6 @@

                                            55.3.1 Chunk Step

                                            -
                                            -
                                            -
                                            +
                                            -
                                            -

                                            The item writer writes the processed items to the output file. It overwrites the output file if no checkpoint is provided; otherwise, it @@ -252,35 +261,65 @@

                                            55.3.2 Task Step

                                            }
                                          -
                                          - -------- - - - - - - - - - - -

                                          Previous
                                          -Previous
                                           

                                          Next
                                          -Next

                                          Oracle Logo -
                                          -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

                                          Go To Table Of Contents
                                          -Contents

                                        +
                                        + + + + + + + + + +
                                        + + + + + + + + + +
                                          + + Previous +
                                        + Previous  +
                                        +
                                        + + Next +
                                        + Next +
                                        +
                                        +
                                        + Oracle Logo + +
                                        + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
                                        +
                                        +
                                        + + + + + +
                                          + + Go To Table Of Contents +
                                        + Contents +
                                        +
                                        +
                                        + \ No newline at end of file diff --git a/batch-processing004.html b/batch-processing004.html index ba537e2..fa4503f 100644 --- a/batch-processing004.html +++ b/batch-processing004.html @@ -8,45 +8,64 @@ - -
                                        -
                                        - ----- - - - - - - - +

                                        Java Platform, Enterprise Edition The Java EE Tutorial
                                        -Release 8 Java Platform, Enterprise Edition
                                        -E63026-01

                                        Go To Table Of Contents
                                        -Contents

                                        + + +
                                        + Java Platform, Enterprise Edition The Java EE Tutorial
                                        + Release 8 Java Platform, Enterprise Edition
                                        + E63026-01 +
                                        -
                                        - ----- - - - - - - - +
                                        +

                                        Previous
                                        -Previous
                                         

                                        Next
                                        -Next

                                         

                                        + + + + + + + +
                                        + + + + + + + + + +
                                          + + Previous +
                                        + Previous  +
                                        +
                                        + + Next +
                                        + Next +
                                        +
                                        +
                                        + + + + + + +
                                          + + Go To Table Of Contents +
                                        + Contents +
                                        +
                                        +
                                        -
                                        -
                                        +

                                        55.4 Using the Job Specification Language

                                        @@ -351,11 +370,6 @@

                                        55.4.2.1 The chunk Element

                                        -
                                        -
                                        -
                                        +
                                        -
                                        -

                                        The chunk element can contain the following elements.

                                        @@ -778,35 +792,65 @@

                                        55.4.5 The decision Element

                                        </decision>
                                        -
                                        - -------- - - - - - - - - - - -

                                        Previous
                                        -Previous
                                         

                                        Next
                                        -Next

                                        Oracle Logo -
                                        -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

                                        Go To Table Of Contents
                                        -Contents

                                    +
                                    + + + + + + + + + +
                                    + + + + + + + + + +
                                      + + Previous +
                                    + Previous  +
                                    +
                                    + + Next +
                                    + Next +
                                    +
                                    +
                                    + Oracle Logo + +
                                    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
                                    +
                                    +
                                    + + + + + +
                                      + + Go To Table Of Contents +
                                    + Contents +
                                    +
                                    +
                                    + \ No newline at end of file diff --git a/batch-processing005.html b/batch-processing005.html index fc8ee1a..ffbe8b2 100644 --- a/batch-processing005.html +++ b/batch-processing005.html @@ -8,45 +8,64 @@ - -
                                    -
                                    - ----- - - - - - - - +

                                    Java Platform, Enterprise Edition The Java EE Tutorial
                                    -Release 8 Java Platform, Enterprise Edition
                                    -E63026-01

                                    Go To Table Of Contents
                                    -Contents

                                    + + +
                                    + Java Platform, Enterprise Edition The Java EE Tutorial
                                    + Release 8 Java Platform, Enterprise Edition
                                    + E63026-01 +
                                    -
                                    - ----- - - - - - - - +
                                    +

                                    Previous
                                    -Previous
                                     

                                    Next
                                    -Next

                                     

                                    + + + + + + + +
                                    + + + + + + + + + +
                                      + + Previous +
                                    + Previous  +
                                    +
                                    + + Next +
                                    + Next +
                                    +
                                    +
                                    + + + + + + +
                                      + + Go To Table Of Contents +
                                    + Contents +
                                    +
                                    +
                                    -
                                    -
                                    +

                                    55.5 Creating Batch Artifacts

                                    @@ -162,11 +181,6 @@

                                    55.5.1 Batch Artifact Interfaces

                                    -
                                    -
                                    -
                                    +
                                    -
                                    -

                                    @@ -225,11 +239,6 @@

                                    55.5.1 Batch Artifact Interfaces

                                    -
                                    -
                                    -
                                    +
                                    -
                                    -

                                    @@ -340,11 +349,6 @@

                                    55.5.1 Batch Artifact Interfaces

                                    -
                                    -
                                    -
                                    +
                                    -
                                    -

                                    55.5.2 Dependency Injection in Batch Artifacts

                                    @@ -423,11 +427,6 @@

                                    55.5.2 Dependency Injection in Chapter 25, "Contexts and Dependency Injection for Java EE: Advanced Topics".

                                    -
                                    -
                                    -
                                    +
                                    -
                                    -

                                @@ -447,11 +446,6 @@

                                55.5.2 Dependency Injection in -
                                -
                                -
                                +
                                -
                                -

                                You may encounter the following errors if you do not follow this procedure.

                                @@ -526,11 +520,6 @@

                                55.5.3 Using the Conte instructions on how to define your batch artifacts to use dependency injection.

                                -
                                -
                                -
                                +
                                -
                                -
                                @@ -553,40 +542,65 @@

                                55.5.3 Using the Conte

                                -
                                -
                                -
                                +
                                -
                                -
                                -
                                - -------- - - - - - - - - - - -

                                Previous
                                -Previous
                                 

                                Next
                                -Next

                                Oracle Logo -
                                -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

                                Go To Table Of Contents
                                -Contents

                          +
                          + + + + + + + + + +
                          + + + + + + + + + +
                            + + Previous +
                          + Previous  +
                          +
                          + + Next +
                          + Next +
                          +
                          +
                          + Oracle Logo + +
                          + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
                          +
                          +
                          + + + + + +
                            + + Go To Table Of Contents +
                          + Contents +
                          +
                          +
                          + \ No newline at end of file diff --git a/batch-processing006.html b/batch-processing006.html index 7ee26c2..d5d0152 100644 --- a/batch-processing006.html +++ b/batch-processing006.html @@ -8,45 +8,64 @@ - -
                          -
                          - ----- - - - - - - - +

                          Java Platform, Enterprise Edition The Java EE Tutorial
                          -Release 8 Java Platform, Enterprise Edition
                          -E63026-01

                          Go To Table Of Contents
                          -Contents

                          + + +
                          + Java Platform, Enterprise Edition The Java EE Tutorial
                          + Release 8 Java Platform, Enterprise Edition
                          + E63026-01 +
                          -
                          - ----- - - - - - - - +
                          +

                          Previous
                          -Previous
                           

                          Next
                          -Next

                           

                          + + + + + + + +
                          + + + + + + + + + +
                            + + Previous +
                          + Previous  +
                          +
                          + + Next +
                          + Next +
                          +
                          +
                          + + + + + + +
                            + + Go To Table Of Contents +
                          + Contents +
                          +
                          +
                          -
                          -
                          +

                          55.6 Submitting Jobs to the Batch Runtime

                          @@ -144,35 +163,65 @@

                          55.6.3 Invoking the Batc Example Application for details on how to invoke the batch runtime from a managed bean driven by a JavaServer Faces user interface.

                          -
                          - -------- - - - - - - - - - - -

                          Previous
                          -Previous
                           

                          Next
                          -Next

                          Oracle Logo -
                          -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

                          Go To Table Of Contents
                          -Contents

                      +
                      + + + + + + + + + +
                      + + + + + + + + + +
                        + + Previous +
                      + Previous  +
                      +
                      + + Next +
                      + Next +
                      +
                      +
                      + Oracle Logo + +
                      + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
                      +
                      +
                      + + + + + +
                        + + Go To Table Of Contents +
                      + Contents +
                      +
                      +
                      + \ No newline at end of file diff --git a/batch-processing007.html b/batch-processing007.html index fd24d45..f0eac52 100644 --- a/batch-processing007.html +++ b/batch-processing007.html @@ -8,45 +8,64 @@ - -
                      -
                      - ----- - - - - - - - +

                      Java Platform, Enterprise Edition The Java EE Tutorial
                      -Release 8 Java Platform, Enterprise Edition
                      -E63026-01

                      Go To Table Of Contents
                      -Contents

                      + + +
                      + Java Platform, Enterprise Edition The Java EE Tutorial
                      + Release 8 Java Platform, Enterprise Edition
                      + E63026-01 +
                      -
                      - ----- - - - - - - - +
                      +

                      Previous
                      -Previous
                       

                      Next
                      -Next

                       

                      + + + + + + + +
                      + + + + + + + + + +
                        + + Previous +
                      + Previous  +
                      +
                      + + Next +
                      + Next +
                      +
                      +
                      + + + + + + +
                        + + Go To Table Of Contents +
                      + Contents +
                      +
                      +
                      -
                      -
                      +

                      55.7 Packaging Batch Applications

                      @@ -83,34 +102,64 @@

                      55.7 Packaging Batch Applications

                      </job>
                      -
                      - -------- - - - - - - - - - - -

                      Previous
                      -Previous
                       

                      Next
                      -Next

                      Oracle Logo -
                      -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

                      Go To Table Of Contents
                      -Contents

                    +
                    + + + + + + + + + +
                    + + + + + + + + + +
                      + + Previous +
                    + Previous  +
                    +
                    + + Next +
                    + Next +
                    +
                    +
                    + Oracle Logo + +
                    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
                    +
                    +
                    + + + + + +
                      + + Go To Table Of Contents +
                    + Contents +
                    +
                    +
                    + \ No newline at end of file diff --git a/batch-processing008.html b/batch-processing008.html index 4aecea7..6468728 100644 --- a/batch-processing008.html +++ b/batch-processing008.html @@ -8,45 +8,64 @@ - -
                    -
                    - ----- - - - - - - - +

                    Java Platform, Enterprise Edition The Java EE Tutorial
                    -Release 8 Java Platform, Enterprise Edition
                    -E63026-01

                    Go To Table Of Contents
                    -Contents

                    + + +
                    + Java Platform, Enterprise Edition The Java EE Tutorial
                    + Release 8 Java Platform, Enterprise Edition
                    + E63026-01 +
                    -
                    - ----- - - - - - - - +
                    +

                    Previous
                    -Previous
                     

                    Next
                    -Next

                     

                    + + + + + + + +
                    + + + + + + + + + +
                      + + Previous +
                    + Previous  +
                    +
                    + + Next +
                    + Next +
                    +
                    +
                    + + + + + + +
                      + + Go To Table Of Contents +
                    + Contents +
                    +
                    +
                    -
                    -
                    +

                    55.8 The webserverlog Example Application

                    @@ -574,36 +593,66 @@

                    55.8.2.2 To Run

                  -
                  - -------- - - - - - - - - - - -

                  Previous
                  -Previous
                   

                  Next
                  -Next

                  Oracle Logo -
                  -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

                  Go To Table Of Contents
                  -Contents

            +
            + + + + + + + + + +
            + + + + + + + + + +
              + + Previous +
            + Previous  +
            +
            + + Next +
            + Next +
            +
            +
            + Oracle Logo + +
            + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
            +
            +
            + + + + + +
              + + Go To Table Of Contents +
            + Contents +
            +
            +
            + \ No newline at end of file diff --git a/batch-processing009.html b/batch-processing009.html index a33c1ac..32d540d 100644 --- a/batch-processing009.html +++ b/batch-processing009.html @@ -8,45 +8,64 @@ - -
            -
            - ----- - - - - - - - +

            Java Platform, Enterprise Edition The Java EE Tutorial
            -Release 8 Java Platform, Enterprise Edition
            -E63026-01

            Go To Table Of Contents
            -Contents

            + + +
            + Java Platform, Enterprise Edition The Java EE Tutorial
            + Release 8 Java Platform, Enterprise Edition
            + E63026-01 +
            -
            - ----- - - - - - - - +
            +

            Previous
            -Previous
             

            Next
            -Next

             

            + + + + + + + +
            + + + + + + + + + +
              + + Previous +
            + Previous  +
            +
            + + Next +
            + Next +
            +
            +
            + + + + + + +
              + + Go To Table Of Contents +
            + Contents +
            +
            +
            -
            -
            +

            55.9 The phonebilling Example Application

            @@ -671,36 +690,66 @@

            55.9.2.2 To Run

          -
          - -------- - - - - - - - - - - -

          Previous
          -Previous
           

          Next
          -Next

          Oracle Logo -
          -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

          Go To Table Of Contents
          -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/batch-processing010.html b/batch-processing010.html index 2bc372c..354ce25 100644 --- a/batch-processing010.html +++ b/batch-processing010.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    55.10 Further Information about Batch Processing

    @@ -57,34 +76,64 @@

    55.10 Further Information ab

    http://www.jcp.org/en/jsr/detail?id=352

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/bean-validation-advanced.html b/bean-validation-advanced.html index 3d349f4..0c7aa76 100644 --- a/bean-validation-advanced.html +++ b/bean-validation-advanced.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    22 Bean Validation: Advanced Topics

    @@ -77,34 +96,64 @@

    22 Bean Validation: Advanced Topics

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/bean-validation-advanced001.html b/bean-validation-advanced001.html index 198deca..56563f1 100644 --- a/bean-validation-advanced001.html +++ b/bean-validation-advanced001.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    22.1 Creating Custom Constraints

    @@ -160,35 +179,65 @@

    22.1.2 Removing Ambiguity in C

    In the preceding example, the target is set to the return value of the method.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/bean-validation-advanced002.html b/bean-validation-advanced002.html index 6126679..8777f01 100644 --- a/bean-validation-advanced002.html +++ b/bean-validation-advanced002.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    22.2 Customizing Validator Messages

    @@ -82,36 +101,66 @@

    22.2.1.1 Localizing Validation Messages< file. For example, the Spanish locale variant resource bundle would be ValidationMessages_es.properties.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/bean-validation-advanced003.html b/bean-validation-advanced003.html index cf55bec..7f69cf2 100644 --- a/bean-validation-advanced003.html +++ b/bean-validation-advanced003.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    22.3 Grouping Constraints

    @@ -128,35 +147,65 @@

    22.3.1 Customizing Group Validation constraint is validated as part of the Default group and will not be validated on the subsequent ExpensiveValidationGroup pass.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/bean-validation-advanced004.html b/bean-validation-advanced004.html index 8d377d4..37e8fd4 100644 --- a/bean-validation-advanced004.html +++ b/bean-validation-advanced004.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    22.4 Using Method Constraints in Type Hierarchies

    @@ -180,35 +199,65 @@

    22.4.1 Rules for

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/bean-validation.html b/bean-validation.html index dfbec64..991b26c 100644 --- a/bean-validation.html +++ b/bean-validation.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    21 Introduction to Bean Validation

    @@ -79,34 +98,64 @@

    21 Introduction to Bean Validation

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/bean-validation001.html b/bean-validation001.html index 6eace2b..0f70272 100644 --- a/bean-validation001.html +++ b/bean-validation001.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    21.1 Overview of Bean Validation

    @@ -68,34 +87,64 @@

    21.1 Overview of Bean Validation

    enforce validation constraints. Bean Validation is available as part of the Java EE 7 platform.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/bean-validation002.html b/bean-validation002.html index 0666bb9..b00a47b 100644 --- a/bean-validation002.html +++ b/bean-validation002.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    21.2 Using Bean Validation Constraints

    @@ -230,11 +249,6 @@

    21.2 Using Bean Validation Constraint -
    -
    -
    +
    -
    -

    In the following example, a constraint is placed on a field using the built-in @NotNull constraint:

    @@ -317,34 +331,64 @@

    21.2 Using Bean Validation Constraint

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/bean-validation003.html b/bean-validation003.html index 7644dcf..f5f9ee8 100644 --- a/bean-validation003.html +++ b/bean-validation003.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    21.3 Validating Null and Empty Strings

    @@ -112,34 +131,64 @@

    21.3 Validating Null and Empty String Validation runtime as a null value, causing the @NotNull constraint to fail.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/bean-validation004.html b/bean-validation004.html index 15cd157..f2bd2c4 100644 --- a/bean-validation004.html +++ b/bean-validation004.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    21.4 Validating Constructors and Methods

    @@ -109,11 +128,6 @@

    21.4.1 Cross-Parameter Constraints

    numbers passed into the constructor match. The @NotNull constraint applies to all the parameters in the constructor.

    -
    -
    -
    +
    -
    -
    @@ -143,11 +157,6 @@

    21.4.1 Cross-Parameter Constraints

    -
    -
    -
    +
    -
    -

    21.4.2 Identifying Parameter Constraint Violations

    @@ -190,35 +199,65 @@

    21.4.3 Adding Constraints to

    See Removing Ambiguity in Constraint Targets for more information.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/bean-validation005.html b/bean-validation005.html index 0895efe..7562edc 100644 --- a/bean-validation005.html +++ b/bean-validation005.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    21.5 Further Information about Bean Validation

    @@ -69,34 +88,64 @@

    21.5 Further Information abou

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/cdi-adv-examples.html b/cdi-adv-examples.html index a3b057b..a6b5e92 100644 --- a/cdi-adv-examples.html +++ b/cdi-adv-examples.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    26 Running the Advanced Contexts and Dependency Injection Examples

    @@ -85,34 +104,64 @@

    26 Runn

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/cdi-adv-examples001.html b/cdi-adv-examples001.html index f505edd..c5df6d6 100644 --- a/cdi-adv-examples001.html +++ b/cdi-adv-examples001.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    26.1 Building and Running the CDI Advanced Examples

    @@ -97,34 +116,64 @@

    26.1 Building and Runnin

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/cdi-adv-examples002.html b/cdi-adv-examples002.html index b88c566..0eeeea2 100644 --- a/cdi-adv-examples002.html +++ b/cdi-adv-examples002.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    26.2 The encoder Example: Using Alternatives

    @@ -476,36 +495,66 @@

    26.2.3.4 To Run the encoder Exam

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/cdi-adv-examples003.html b/cdi-adv-examples003.html index 235866c..406656c 100644 --- a/cdi-adv-examples003.html +++ b/cdi-adv-examples003.html @@ -8,47 +8,66 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +
    -

    26.3 The producermethods Example: Using a Producer Method to Choose aBean Implementation

    +

    26.3 The producermethods Example: Using a Producer Method to Choose a Bean Implementation

    The producermethods example shows how to use a producer method to @@ -293,36 +312,66 @@

    26.3.2.3 To Run the producermethods

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/cdi-adv-examples004.html b/cdi-adv-examples004.html index a7b1436..b613282 100644 --- a/cdi-adv-examples004.html +++ b/cdi-adv-examples004.html @@ -8,47 +8,66 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +
    -

    26.4 The producerfields Example: Using Producer Fields to GenerateResources

    +

    26.4 The producerfields Example: Using Producer Fields to Generate Resources

    The producerfields example, which allows you to create a to-do list, @@ -547,36 +566,66 @@

    26.4.4.3 To Run the producerfields Ex

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/cdi-adv-examples005.html b/cdi-adv-examples005.html index b332a49..6002853 100644 --- a/cdi-adv-examples005.html +++ b/cdi-adv-examples005.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    26.5 The billpayment Example: Using Events and Interceptors

    @@ -577,36 +596,66 @@

    26.5.6.3 To Run the billpayment Example<

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/cdi-adv-examples006.html b/cdi-adv-examples006.html index defa76e..7ea4c3c 100644 --- a/cdi-adv-examples006.html +++ b/cdi-adv-examples006.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    26.6 The decorators Example: Decorating a Bean

    @@ -295,36 +314,66 @@

    26.6.3.3 To Run the decorators Example

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/cdi-adv.html b/cdi-adv.html index c5bd189..1b706ae 100644 --- a/cdi-adv.html +++ b/cdi-adv.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    25 Contexts and Dependency Injection for Java EE: Advanced Topics

    @@ -90,34 +109,64 @@

    25 Contex

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/cdi-adv001.html b/cdi-adv001.html index fa5adc9..ef55d51 100644 --- a/cdi-adv001.html +++ b/cdi-adv001.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    25.1 Packaging CDI Applications

    @@ -94,34 +113,64 @@

    25.1 Packaging CDI Applications

    files, the beans.xml deployment descriptor, if present, must be in the META-INF directory.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/cdi-adv002.html b/cdi-adv002.html index 5d414ff..6f486e6 100644 --- a/cdi-adv002.html +++ b/cdi-adv002.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    25.2 Using Alternatives in CDI Applications

    @@ -233,35 +252,65 @@

    25.2.1 Using Specialization

    inherits all qualifiers of the default implementation as well as its EL name, if it has one.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/cdi-adv003.html b/cdi-adv003.html index 290fdf4..b7ee9a7 100644 --- a/cdi-adv003.html +++ b/cdi-adv003.html @@ -8,47 +8,66 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +
    -

    25.3 Using Producer Methods, Producer Fields, and Disposer Methods inCDI Applications

    +

    25.3 Using Producer Methods, Producer Fields, and Disposer Methods in CDI Applications

    A producer method generates an object that can then be injected. @@ -197,35 +216,65 @@

    25.3.3 Using a Disposer Method

    conversation scope), and the parameter in the close method receives the object produced by the producer field.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/cdi-adv004.html b/cdi-adv004.html index 5dec3ac..a5f5492 100644 --- a/cdi-adv004.html +++ b/cdi-adv004.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    25.4 Using Predefined Beans in CDI Applications

    @@ -161,11 +180,6 @@

    25.4 Using Predefined Beans -
    -
    -
    +
    -
    -

    Predefined beans are injected with dependent scope and the predefined default qualifier @Default.

    @@ -197,34 +211,64 @@

    25.4 Using Predefined Beans }

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/cdi-adv005.html b/cdi-adv005.html index e748d90..36d0b0d 100644 --- a/cdi-adv005.html +++ b/cdi-adv005.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    25.5 Using Events in CDI Applications

    @@ -236,35 +255,65 @@

    25.5.3 Firing Events

    The argument to the fire method is a PaymentEvent that contains the payload. The fired event is then consumed by the observer methods.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/cdi-adv006.html b/cdi-adv006.html index e6f7acf..d7bbefa 100644 --- a/cdi-adv006.html +++ b/cdi-adv006.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    25.6 Using Interceptors in CDI Applications

    @@ -182,34 +201,64 @@

    25.6 Using Interceptors in CDI A need to specify the interceptor in the beans.xml file when you use the @Priority annotation.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/cdi-adv007.html b/cdi-adv007.html index b9209d6..21f2aec 100644 --- a/cdi-adv007.html +++ b/cdi-adv007.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    25.7 Using Decorators in CDI Applications

    @@ -148,34 +167,64 @@

    25.7 Using Decorators in CDI Appli to specify the decorator in the beans.xml when you use the @Priority annotation.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/cdi-adv008.html b/cdi-adv008.html index 8f65c88..7916941 100644 --- a/cdi-adv008.html +++ b/cdi-adv008.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    25.8 Using Stereotypes in CDI Applications

    @@ -156,34 +175,64 @@

    25.8 Using Stereotypes in CDI App public @interface Model {}

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/cdi-basic.html b/cdi-basic.html index 6fd34a5..32c9fb3 100644 --- a/cdi-basic.html +++ b/cdi-basic.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    23 Introduction to Contexts and Dependency Injection for Java EE

    @@ -110,34 +129,64 @@

    23 Introd

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/cdi-basic001.html b/cdi-basic001.html index c0749cd..ac4d45a 100644 --- a/cdi-basic001.html +++ b/cdi-basic001.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    + +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/cdi-basic002.html b/cdi-basic002.html index 3c211f7..ec4a57a 100644 --- a/cdi-basic002.html +++ b/cdi-basic002.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    23.2 Overview of CDI

    @@ -170,34 +189,64 @@

    23.2 Overview of CDI

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/cdi-basic003.html b/cdi-basic003.html index 34ab193..d0037ab 100644 --- a/cdi-basic003.html +++ b/cdi-basic003.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    23.3 About Beans

    @@ -112,34 +131,64 @@

    23.3 About Beans

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/cdi-basic004.html b/cdi-basic004.html index 0ffc6df..3acd147 100644 --- a/cdi-basic004.html +++ b/cdi-basic004.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    23.4 About CDI Managed Beans

    @@ -89,34 +108,64 @@

    23.4 About CDI Managed Beans

    No special declaration, such as an annotation, is required to define a managed bean.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/cdi-basic005.html b/cdi-basic005.html index 4289e36..014584b 100644 --- a/cdi-basic005.html +++ b/cdi-basic005.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    23.5 Beans as Injectable Objects

    @@ -110,34 +129,64 @@

    23.5 Beans as Injectable Objects

    Giving Beans EL Names explains how you can make a bean accessible to the EL.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/cdi-basic006.html b/cdi-basic006.html index b4a6767..332676f 100644 --- a/cdi-basic006.html +++ b/cdi-basic006.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    23.6 Using Qualifiers

    @@ -121,34 +140,64 @@

    23.6 Using Qualifiers

    }
    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/cdi-basic007.html b/cdi-basic007.html index e9abf90..067346e 100644 --- a/cdi-basic007.html +++ b/cdi-basic007.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    23.7 Injecting Beans

    @@ -87,34 +106,64 @@

    23.7 Injecting Beans

    needs to be understood. In addition, for a JavaServer Faces application, the bean needs to be accessible through the EL.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/cdi-basic008.html b/cdi-basic008.html index b161ef8..2ab60c3 100644 --- a/cdi-basic008.html +++ b/cdi-basic008.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    23.8 Using Scopes

    @@ -114,11 +133,6 @@

    23.8 Using Scopes

    -
    -
    -
    +
    -
    -

    The first three scopes are defined by both JSR 346 and the JavaServer Faces specification. The last two are defined by JSR 346.

    @@ -195,34 +209,64 @@

    23.8 Using Scopes

    serializable, but beans that use request scope do not have to be serializable.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/cdi-basic009.html b/cdi-basic009.html index ba0f687..857f7c4 100644 --- a/cdi-basic009.html +++ b/cdi-basic009.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    23.9 Giving Beans EL Names

    @@ -93,34 +112,64 @@

    23.9 Giving Beans EL Names

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/cdi-basic010.html b/cdi-basic010.html index 2316f78..63f4fed 100644 --- a/cdi-basic010.html +++ b/cdi-basic010.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    23.10 Adding Setter and Getter Methods

    @@ -103,34 +122,64 @@

    23.10 Adding Setter and Getter Methods

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/cdi-basic011.html b/cdi-basic011.html index cc28f11..9743834 100644 --- a/cdi-basic011.html +++ b/cdi-basic011.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    23.11 Using a Managed Bean in a Facelets Page

    @@ -77,34 +96,64 @@

    23.11 Using a Managed Bean in a

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/cdi-basic012.html b/cdi-basic012.html index 31e57f1..da9d440 100644 --- a/cdi-basic012.html +++ b/cdi-basic012.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    23.12 Injecting Objects by Using Producer Methods

    @@ -113,34 +132,64 @@

    23.12 Injecting Objects by
    this.number = randomInt.get();

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/cdi-basic013.html b/cdi-basic013.html index f9f247e..cc57a06 100644 --- a/cdi-basic013.html +++ b/cdi-basic013.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    23.13 Configuring a CDI Application

    @@ -72,34 +91,64 @@

    23.13 Configuring a CDI Application

    files, the beans.xml deployment descriptor, if present, must be in the META-INF directory.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/cdi-basic014.html b/cdi-basic014.html index 33536ba..0d3698e 100644 --- a/cdi-basic014.html +++ b/cdi-basic014.html @@ -8,47 +8,66 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +
    -

    23.14 Using the @PostConstruct and @PreDestroy Annotations with CDIManaged Bean Classes

    +

    23.14 Using the @PostConstruct and @PreDestroy Annotations with CDI Managed Bean Classes

    CDI managed bean classes and their superclasses support the annotations @@ -95,11 +114,6 @@

    23.14.1 after all injection has occurred and after all initializers have been called.

    -
    -
    -
    +
    -
    -
    @@ -117,11 +131,6 @@

    23.14.1

    -
    -
    -
    +
    -
    -

    The UserNumberBean managed bean in The guessnumber-cdi CDI Example @@ -141,7 +150,7 @@

    23.14.1

    -

    23.14.2 To Prepare for the Destruction of a Managed Bean Using the@PreDestroy Annotation

    +

    23.14.2 To Prepare for the Destruction of a Managed Bean Using the @PreDestroy Annotation

    Preparing for the destruction of a managed bean specifies the lifecycle call back method that signals that an application component is about to @@ -166,35 +175,65 @@

    CDI calls this method before starting to destroy the bean.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/cdi-basic015.html b/cdi-basic015.html index 5a157b3..3204160 100644 --- a/cdi-basic015.html +++ b/cdi-basic015.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    23.15 Further Information about CDI

    @@ -82,34 +101,64 @@

    23.15 Further Information about CDI

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/cdi-basicexamples.html b/cdi-basicexamples.html index 8ab5a55..86e5b7e 100644 --- a/cdi-basicexamples.html +++ b/cdi-basicexamples.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    24 Running the Basic Contexts and Dependency Injection Examples

    @@ -71,34 +90,64 @@

    24 Running

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/cdi-basicexamples001.html b/cdi-basicexamples001.html index 5244cbc..2421331 100644 --- a/cdi-basicexamples001.html +++ b/cdi-basicexamples001.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    24.1 Building and Running the CDI Samples

    @@ -88,34 +107,64 @@

    24.1 Building and Running the CDI

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/cdi-basicexamples002.html b/cdi-basicexamples002.html index 201defa..373ce2a 100644 --- a/cdi-basicexamples002.html +++ b/cdi-basicexamples002.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    24.2 The simplegreeting CDI Example

    @@ -383,36 +402,66 @@

    24.2.3.3 To Run the simplegreeting Ex

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/cdi-basicexamples003.html b/cdi-basicexamples003.html index 75205af..4b5af42 100644 --- a/cdi-basicexamples003.html +++ b/cdi-basicexamples003.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    24.3 The guessnumber-cdi CDI Example

    @@ -556,36 +575,66 @@

    24.3.3.3 To Run the guessnumber Example<

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/concurrency-utilities.html b/concurrency-utilities.html index 29fc34b..9d1a575 100644 --- a/concurrency-utilities.html +++ b/concurrency-utilities.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    56 Concurrency Utilities for Java EE

    @@ -87,34 +106,64 @@

    56 Concurrency Utilities for Java EE<

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/concurrency-utilities001.html b/concurrency-utilities001.html index 92eeee8..33909e5 100644 --- a/concurrency-utilities001.html +++ b/concurrency-utilities001.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    56.1 Concurrency Basics

    @@ -123,35 +142,65 @@

    56.1.1 Threads and Processes

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/concurrency-utilities002.html b/concurrency-utilities002.html index 7cb2626..5900986 100644 --- a/concurrency-utilities002.html +++ b/concurrency-utilities002.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    56.2 Main Components of the Concurrency Utilities

    @@ -100,34 +119,64 @@

    56.2 Main Components of th

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/concurrency-utilities003.html b/concurrency-utilities003.html index dfaac54..cc40944 100644 --- a/concurrency-utilities003.html +++ b/concurrency-utilities003.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    56.3 Concurrency and Transactions

    @@ -100,34 +119,64 @@

    56.3 Concurrency and Transactions

    }
    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/concurrency-utilities004.html b/concurrency-utilities004.html index 7435045..69f54cc 100644 --- a/concurrency-utilities004.html +++ b/concurrency-utilities004.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    56.4 Concurrency and Security

    @@ -58,34 +77,64 @@

    56.4 Concurrency and Security

    and the security attribute, if enabled, will propagate the container security principal.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/concurrency-utilities005.html b/concurrency-utilities005.html index 168f0d1..a806516 100644 --- a/concurrency-utilities005.html +++ b/concurrency-utilities005.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    56.5 The jobs Concurrency Example

    @@ -421,36 +440,66 @@

    56.5.1.5 To

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/concurrency-utilities006.html b/concurrency-utilities006.html index d4c9507..be2589b 100644 --- a/concurrency-utilities006.html +++ b/concurrency-utilities006.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    56.6 The taskcreator Concurrency Example

    @@ -300,36 +319,66 @@

    56.6.1.3 To Run the taskcreator Example<

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/concurrency-utilities007.html b/concurrency-utilities007.html index 799404a..128dfc2 100644 --- a/concurrency-utilities007.html +++ b/concurrency-utilities007.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    56.7 Further Information about the Concurrency Utilities

    @@ -75,34 +94,64 @@

    56.7 Further Inform

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/connectorexample.html b/connectorexample.html index d2a1e80..b44b87f 100644 --- a/connectorexample.html +++ b/connectorexample.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    53 The Resource Adapter Examples

    @@ -72,34 +91,64 @@

    53 The Resource Adapter Examples

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/connectorexample001.html b/connectorexample001.html index 3f86063..a6a5c47 100644 --- a/connectorexample001.html +++ b/connectorexample001.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    53.1 Overview of the Resource Adapter Examples

    @@ -59,34 +78,64 @@

    53.1 Overview of the Resource adapter in this example implements the inbound and work management contracts.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/connectorexample002.html b/connectorexample002.html index 5a0892a..2cecb0f 100644 --- a/connectorexample002.html +++ b/connectorexample002.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    53.2 The trading Example

    @@ -192,11 +211,6 @@

    53.2.1 Using the Outbound Resource -
    -
    -
    +
    -
    -

    The ResourceAccessBean managed bean in the trading-war module configures a connection factory for the trading-rar resource adapter @@ -237,11 +251,6 @@

    53.2.1 Using the Outbound Resource resource adapter that is bundled in the same EAR as this web application.

    -
    -
    -
    +
    -
    -
    @@ -259,11 +268,6 @@

    53.2.1 Using the Outbound Resource

    -
    -
    -
    +
    -
    -

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/connectorexample003.html b/connectorexample003.html index 6e84836..41c646e 100644 --- a/connectorexample003.html +++ b/connectorexample003.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    53.3 The traffic Example

    @@ -268,11 +287,6 @@

    53.3.2 Implementing the Inbou -
    -
    -
    +
    -
    -

    When an MDB activates the inbound resource adapter, the container invokes the endpointActivation method in the TrafficResourceAdapter @@ -536,36 +550,66 @@

    53.3.3.2 To Run the traffic Exam

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/cpyr.html b/cpyr.html new file mode 100644 index 0000000..688cf45 --- /dev/null +++ b/cpyr.html @@ -0,0 +1,269 @@ + + + + + + Oracle Legal Notices + + + + + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + +
    + +
    +
    + +
    +

    Copyright © 1994-2017, Oracle and/or its affiliates. All rights +reserved.

    +
    +
    +
    +

    License Restrictions Warranty/Consequential Damages Disclaimer

    +
    +

    This software and related documentation are provided under a license +agreement containing restrictions on use and disclosure and are +protected by intellectual property laws. Except as expressly permitted +in your license agreement or allowed by law, you may not use, copy, +reproduce, translate, broadcast, modify, license, transmit, distribute, +exhibit, perform, publish, or display any part, in any form, or by any +means. Reverse engineering, disassembly, or decompilation of this +software, unless required by law for interoperability, is prohibited.

    +
    +
    +
    +

    Warranty Disclaimer

    +
    +

    The information contained herein is subject to change without notice and +is not warranted to be error-free. If you find any errors, please report +them to us in writing.

    +
    +
    +
    +

    Restricted Rights Notice

    +
    +

    If this is software or related documentation that is delivered to the +U.S. Government or anyone licensing it on behalf of the U.S. Government, +then the following notice is applicable:

    +
    +
    +

    U.S. GOVERNMENT END USERS: Oracle programs, including any operating +system, integrated software, any programs installed on the hardware, +and/or documentation, delivered to U.S. Government end users are +"commercial computer software" pursuant to the applicable Federal +Acquisition Regulation and agency-specific supplemental regulations. As +such, use, duplication, disclosure, modification, and adaptation of the +programs, including any operating system, integrated software, any +programs installed on the hardware, and/or documentation, shall be +subject to license terms and license restrictions applicable to the +programs. No other rights are granted to the U.S. Government.

    +
    +
    +
    +

    Hazardous Applications Notice

    +
    +

    This software or hardware is developed for general use in a variety of +information management applications. It is not developed or intended for +use in any inherently dangerous applications, including applications +that may create a risk of personal injury. If you use this software or +hardware in dangerous applications, then you shall be responsible to +take all appropriate fail-safe, backup, redundancy, and other measures +to ensure its safe use. Oracle Corporation and its affiliates disclaim +any liability for any damages caused by use of this software or hardware +in dangerous applications.

    +
    +
    +
    +

    Trademark Notice

    +
    +

    Oracle and Java are registered trademarks of Oracle and/or its +affiliates. Other names may be trademarks of their respective owners.

    +
    +
    +

    Intel and Intel Xeon are trademarks or registered trademarks of Intel +Corporation. All SPARC trademarks are used under license and are +trademarks or registered trademarks of SPARC International, Inc. AMD, +Opteron, the AMD logo, and the AMD Opteron logo are trademarks or +registered trademarks of Advanced Micro Devices. UNIX is a registered +trademark of The Open Group.

    +
    +
    +
    +

    Third-Party Content, Products, and Services Disclaimer

    +
    +

    This software or hardware and documentation may provide access to or +information about content, products, and services from third parties. +Oracle Corporation and its affiliates are not responsible for and +expressly disclaim all warranties of any kind with respect to +third-party content, products, and services unless otherwise set forth +in an applicable agreement between you and Oracle. Oracle Corporation +and its affiliates will not be responsible for any loss, costs, or +damages incurred due to your access to or use of third-party content, +products, or services, except as set forth in an applicable agreement +between you and Oracle.

    +
    +
    +
    +

    Alpha and Beta Draft Documentation Notice

    +
    +

    If this document is in preproduction status:

    +
    +
    +

    This documentation is in preproduction status and is intended for +demonstration and preliminary use only. It may not be specific to the +hardware on which you are using the software. Oracle Corporation and its +affiliates are not responsible for and expressly disclaim all warranties +of any kind with respect to this documentation and will not be +responsible for any loss, costs, or damages incurred due to the use of +this documentation.

    +
    +
    +
    +

    Private Alpha and Beta Draft Documentation Notice

    +
    +

    If this document is in private preproduction status:

    +
    +
    +

    The information contained in this document is for informational sharing +purposes only and should be considered in your capacity as a customer +advisory board member or pursuant to your beta trial agreement only. It +is not a commitment to deliver any material, code, or functionality, and +should not be relied upon in making purchasing decisions. The +development, release, and timing of any features or functionality +described in this document remains at the sole discretion of Oracle.

    +
    +
    +

    This document in any form, software or printed matter, contains +proprietary information that is the exclusive property of Oracle. Your +access to and use of this confidential material is subject to the terms +and conditions of your Oracle Master Agreement, Oracle License and +Services Agreement, Oracle PartnerNetwork Agreement, Oracle distribution +agreement, or other license agreement which has been executed by you and +Oracle and with which you agree to comply. This document and information +contained herein may not be disclosed, copied, reproduced, or +distributed to anyone outside Oracle without prior written consent of +Oracle. This document is not part of your license agreement nor can it +be incorporated into any contractual agreement with Oracle or its +subsidiaries or affiliates.

    +
    +
    +
    +

    Documentation Accessibility

    +
    +

    For information about Oracle’s commitment to accessibility, visit the +Oracle Accessibility Program website at +http://www.oracle.com/pls/topic/lookup?ctx=acc&id=docacc.

    +
    +
    +

    Access to Oracle Support

    +
    +
    +

    Oracle customers that have purchased support have access to electronic +support through My Oracle Support. For information, visit +http://www.oracle.com/pls/topic/lookup?ctx=acc&id=info or visit +http://www.oracle.com/pls/topic/lookup?ctx=acc&id=trs if you are +hearing impaired.

    +
    +
    +

    Oracle Logo

    +
    +
    +
    +
    + +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + + + \ No newline at end of file diff --git a/css/style.css b/css/style.css index f07a23c..6b31b2a 100644 --- a/css/style.css +++ b/css/style.css @@ -144,6 +144,84 @@ td.halign-center { text-align: center; } form { padding: 20px; background: #f2f2f2; } +h2 { + font-size: 2em; + line-height: 1.2em; + font-weight: 200; + letter-spacing: 0; +} + +h3 { + font-size: 1.4em; + line-height: 1.2em; + font-weight: normal; + letter-spacing: 0; +} + +.sect1 { + margin-left: 4%; + margin-right: 4%; + font: 13px/20px Arial, Helvetica, sans-serif +} + +a:link { + text-decoration: none; + color: #09569d; +} + +#preamble hr{ + margin-left: 0%; + margin-right: 0%; +} + +#preamble .sectionbody table { + font-weight: 200; + margin-left: 4%; + margin-right: 4%; +} + +hr { + margin-bottom: 12px; +} + +table.tableblock.frame-all.grid-all.spread { + font-size: 12px; +} + +#top { + font-size: 12px; +} + +code { + font-size:.9em; + border: 1px solid #eaeaea; + background-color: #f6f6f6; + border-radius: 3px; + padding: 1px; + padding-left:2px; + padding-right:2px; +} + +pre.prettyprint.highlight { + border: 1px solid #eaeaea; + background-color: #f6f6f6; + border-radius: 4px; + padding: 8px; + padding-top:4px; + padding-bottom:4px; +} + +.language-oac_no_warn { + font-size:.9em; + color:#222; + background-color: transparent; +} + +/* trick to select the title */ +#top td:nth-of-type(1) { + font-size: 18px; +} + /* GENERAL ELEMENT TYPE STYLES */ /* #Media Queries diff --git a/dukes-bookstore.html b/dukes-bookstore.html index fb52aef..f0673e9 100644 --- a/dukes-bookstore.html +++ b/dukes-bookstore.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    57 Duke’s Bookstore Case Study Example

    @@ -76,34 +95,64 @@

    57 Duke’s Bookstore Case Study

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/dukes-bookstore001.html b/dukes-bookstore001.html index 37ff477..dd18b9e 100644 --- a/dukes-bookstore001.html +++ b/dukes-bookstore001.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    57.1 Design and Architecture of Duke’s Bookstore

    @@ -161,34 +180,64 @@

    57.1 Design and Architecture

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/dukes-bookstore002.html b/dukes-bookstore002.html index 996bc2b..d9a10a7 100644 --- a/dukes-bookstore002.html +++ b/dukes-bookstore002.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    57.2 The Duke’s Bookstore Interface

    @@ -286,7 +305,7 @@

    57.2.3 Facelet

    -

    57.2.4 Custom Components and Other Custom Objects Used in Duke’sBookstore

    +

    57.2.4 Custom Components and Other Custom Objects Used in Duke’s Bookstore

    The map and area custom components for Duke’s Bookstore, along with associated renderer, listener, and model classes, are defined in the @@ -447,35 +466,65 @@

    57.2.6 Deployment Descri

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/dukes-bookstore003.html b/dukes-bookstore003.html index 94151c8..b24420d 100644 --- a/dukes-bookstore003.html +++ b/dukes-bookstore003.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    57.3 Running the Duke’s Bookstore Case Study Application

    @@ -165,35 +184,65 @@

    57.3.3 To Run Duke’s Bookstore

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/dukes-forest.html b/dukes-forest.html index 058106a..eb32e17 100644 --- a/dukes-forest.html +++ b/dukes-forest.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    59 Duke’s Forest Case Study Example

    @@ -77,34 +96,64 @@

    59 Duke’s Forest Case Study Examp

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/dukes-forest001.html b/dukes-forest001.html index fc86642..90cc07d 100644 --- a/dukes-forest001.html +++ b/dukes-forest001.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    59.1 Overview of the Duke’s Forest Case Study Example

    @@ -116,34 +135,64 @@

    59.1 Overview of the Du

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/dukes-forest002.html b/dukes-forest002.html index 40c9628..5d204d2 100644 --- a/dukes-forest002.html +++ b/dukes-forest002.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    59.2 Design and Architecture of Duke’s Forest

    @@ -997,36 +1016,66 @@

    59.2.6.6 Deployment Descr

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/dukes-forest003.html b/dukes-forest003.html index 47c1e02..8a1a8ab 100644 --- a/dukes-forest003.html +++ b/dukes-forest003.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    59.3 Building and Deploying the Duke’s Forest Case Study Application

    @@ -69,7 +88,7 @@

    59.3 Bui

    -

    59.3.1 To Build and Deploy the Duke’s Forest Application Using NetBeansIDE

    +

    59.3.1 To Build and Deploy the Duke’s Forest Application Using NetBeans IDE

    1. @@ -150,35 +169,65 @@

      59.3.2 To

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/dukes-forest004.html b/dukes-forest004.html index c4502c6..37ecf0f 100644 --- a/dukes-forest004.html +++ b/dukes-forest004.html @@ -8,31 +8,59 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - +
    +
    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    59.4 Running the Duke’s Forest Application

    @@ -232,12 +260,60 @@

    59.4.4 To Create a New Product

    -
    - -
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/dukes-tutoring.html b/dukes-tutoring.html index 4af3c51..34d5786 100644 --- a/dukes-tutoring.html +++ b/dukes-tutoring.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    58 Duke’s Tutoring Case Study Example

    @@ -78,34 +97,64 @@

    58 Duke’s Tutoring Case Study E

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/dukes-tutoring001.html b/dukes-tutoring001.html index 6d36e42..736f1e8 100644 --- a/dukes-tutoring001.html +++ b/dukes-tutoring001.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    58.1 Design and Architecture of Duke’s Tutoring

    @@ -194,34 +213,64 @@

    58.1 Design and Architecture

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/dukes-tutoring002.html b/dukes-tutoring002.html index 4035196..554a04c 100644 --- a/dukes-tutoring002.html +++ b/dukes-tutoring002.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    58.2 Main Interface

    @@ -392,35 +411,65 @@

    58.2.7 Deployment Descrip Annotations in the enterprise bean class files are used for the configuration of enterprise beans in this application.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/dukes-tutoring003.html b/dukes-tutoring003.html index 11dbd6c..2c16dd5 100644 --- a/dukes-tutoring003.html +++ b/dukes-tutoring003.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    58.3 Administration Interface

    @@ -202,35 +221,65 @@

    58.3.4 Helper Class

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/dukes-tutoring004.html b/dukes-tutoring004.html index 5cedc74..646a585 100644 --- a/dukes-tutoring004.html +++ b/dukes-tutoring004.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    58.4 Running the Duke’s Tutoring Case Study Application

    @@ -144,13 +163,10 @@

    58.4.1.1 To Build -
    -
    -
     +
    -7.  In the Projects tab, right-click the `dukes-tutoring` project and
    -select Build.
    -
    -
    + +
  • +

    In the Projects tab, right-click the dukes-tutoring project and +select Build.

    This command creates a JDBC security realm named tutoringRealm, builds and packages the dukes-tutoring-common and dukes-tutoring-war @@ -304,36 +320,66 @@

    58.4.1.3 Using Duke’s Tutoring

    use of the properties in the PersonDetails entity. Feel free to modify the application to add these features.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

  • +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/ejb-async.html b/ejb-async.html index 3d21aa5..2394056 100644 --- a/ejb-async.html +++ b/ejb-async.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    36 Using Asynchronous Method Invocation in Session Beans

    @@ -67,34 +86,64 @@

    36 Using Asynchro

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/ejb-async001.html b/ejb-async001.html index 7616fd9..3dd7695 100644 --- a/ejb-async001.html +++ b/ejb-async001.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    36.1 Asynchronous Method Invocation

    @@ -219,36 +238,66 @@

    36.1.2.3 Check was cancelled, or resulted in an exception. That is, isDone indicates only whether the session bean has completed processing the invocation.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/ejb-async002.html b/ejb-async002.html index 3c0281e..33d0f69 100644 --- a/ejb-async002.html +++ b/ejb-async002.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    36.2 The async Example Application

    @@ -348,36 +367,66 @@

    36.2.2.2 To Run the as

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/ejb-basicexamples.html b/ejb-basicexamples.html index d66e682..4d8688a 100644 --- a/ejb-basicexamples.html +++ b/ejb-basicexamples.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    34 Running the Enterprise Bean Examples

    @@ -83,34 +102,64 @@

    34 Running the Enterprise Bean Exa

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/ejb-basicexamples001.html b/ejb-basicexamples001.html index 97aa74b..5bdf7c4 100644 --- a/ejb-basicexamples001.html +++ b/ejb-basicexamples001.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    34.1 Overview of the EJB Examples

    @@ -74,34 +93,64 @@

    34.1 Overview of the EJB Examples

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/ejb-basicexamples002.html b/ejb-basicexamples002.html index 7444cf1..9eaa82f 100644 --- a/ejb-basicexamples002.html +++ b/ejb-basicexamples002.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    34.2 The cart Example

    @@ -554,36 +573,66 @@

    34.2.5.2 To Run the cart Example Us

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/ejb-basicexamples003.html b/ejb-basicexamples003.html index 49d8d26..9503940 100644 --- a/ejb-basicexamples003.html +++ b/ejb-basicexamples003.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    34.3 A Singleton Session Bean Example: counter

    @@ -630,36 +649,66 @@

    34.3.3.2 To Run the counter Exam

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/ejb-basicexamples004.html b/ejb-basicexamples004.html index e2c397c..c0ca4a9 100644 --- a/ejb-basicexamples004.html +++ b/ejb-basicexamples004.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    34.4 A Web Service Example: helloservice

    @@ -325,36 +344,66 @@

    34.4.3.3 To Test the Service witho

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/ejb-basicexamples005.html b/ejb-basicexamples005.html index 364ec3f..06cc8be 100644 --- a/ejb-basicexamples005.html +++ b/ejb-basicexamples005.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    34.5 Using the Timer Service

    @@ -124,11 +143,6 @@

    34.5.1 Creating Calendar-Base

    One or more days within a week

    *

    -
    -
    -
    -
    +
    -

    0 to 7 (both 0 and 7 refer to Sunday). For example: dayOfWeek="3".

    @@ -143,11 +157,6 @@

    34.5.1 Creating Calendar-Base

    One or more days within a month

    *

    -
    -
    -
    -
    +
    -

    1 to 31. For example: dayOfMonth="15".

    @@ -169,11 +178,6 @@

    34.5.1 Creating Calendar-Base

    One or more months within a year

    *

    -
    -
    -
    -
    +
    -

    1 to 12. For example: month="7".

    @@ -188,21 +192,11 @@

    34.5.1 Creating Calendar-Base

    A particular calendar year

    *

    -
    -
    -
    -
    +
    -

    A four-digit calendar year. For example: year="2011".

    -
    -
    -
    +
    -
    -

    34.5.1.1 Specifying Multiple Values in Calendar Expressions

    @@ -758,11 +752,6 @@

    34.5.7 The timersession Example

    }
    -
    -
    -
    +
    -
    -
    @@ -787,11 +776,6 @@

    34.5.7 The timersession Example

    -
    -
    -
    +
    -
    -

    34.5.8 Running the timersession Example

    @@ -918,36 +902,66 @@

    34.5.8.3 To Run the Web Client

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/ejb-basicexamples006.html b/ejb-basicexamples006.html index 8e1e4b1..3a62683 100644 --- a/ejb-basicexamples006.html +++ b/ejb-basicexamples006.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    34.6 Handling Exceptions

    @@ -81,34 +100,64 @@

    34.6 Handling Exceptions

    thrown within a transaction, the container does not roll back the transaction.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/ejb-embedded.html b/ejb-embedded.html index 35011e7..bdf720e 100644 --- a/ejb-embedded.html +++ b/ejb-embedded.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    35 Using the Embedded Enterprise Bean Container

    @@ -73,34 +92,64 @@

    35 Using the Embedded Ente

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/ejb-embedded001.html b/ejb-embedded001.html index 1ad883c..1864e5d 100644 --- a/ejb-embedded001.html +++ b/ejb-embedded001.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    35.1 Overview of the Embedded Enterprise Bean Container

    @@ -65,34 +84,64 @@

    35.1 Overview of the EE environments, and therefore the same enterprise bean can be easily reused in both standalone and networked applications.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/ejb-embedded002.html b/ejb-embedded002.html index 84bca78..ef85c18 100644 --- a/ejb-embedded002.html +++ b/ejb-embedded002.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    35.2 Developing Embeddable Enterprise Bean Applications

    @@ -99,11 +118,6 @@

    35.2 Developing Embe -
    -
    -
    +
    -
    -

    Container providers are allowed to support the full set of features in enterprise beans, but applications that use the embedded container will @@ -289,35 +303,65 @@

    35.2.4 Shutting Down the En

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/ejb-embedded003.html b/ejb-embedded003.html index 4a78618..089519c 100644 --- a/ejb-embedded003.html +++ b/ejb-embedded003.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    35.3 The standalone Example Application

    @@ -224,35 +243,65 @@

    35.3.3 To Run the

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/ejb-gettingstarted.html b/ejb-gettingstarted.html index 1e6d801..e7029c7 100644 --- a/ejb-gettingstarted.html +++ b/ejb-gettingstarted.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    33 Getting Started with Enterprise Beans

    @@ -76,34 +95,64 @@

    33 Getting Started with Enterpris

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/ejb-gettingstarted001.html b/ejb-gettingstarted001.html index 2b98d51..a9d2139 100644 --- a/ejb-gettingstarted001.html +++ b/ejb-gettingstarted001.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    33.1 Starting With Enterprise Beans

    @@ -101,34 +120,64 @@

    33.1 Starting With Enterprise Beans

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/ejb-gettingstarted002.html b/ejb-gettingstarted002.html index 96a3711..34dd20f 100644 --- a/ejb-gettingstarted002.html +++ b/ejb-gettingstarted002.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    33.2 Creating the Enterprise Bean

    @@ -291,36 +310,66 @@

    33.2.3.2 To Run the converter

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/ejb-gettingstarted003.html b/ejb-gettingstarted003.html index a4954e3..888dc58 100644 --- a/ejb-gettingstarted003.html +++ b/ejb-gettingstarted003.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    33.3 Modifying the Java EE Application

    @@ -106,35 +125,65 @@

    33.3.1 To Modify a Class File

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/ejb-intro.html b/ejb-intro.html index fe965c5..677b7c4 100644 --- a/ejb-intro.html +++ b/ejb-intro.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    32 Enterprise Beans

    @@ -92,34 +111,64 @@

    32 Enterprise Beans

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/ejb-intro001.html b/ejb-intro001.html index fc7f0bd..3018030 100644 --- a/ejb-intro001.html +++ b/ejb-intro001.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    32.1 What Is an Enterprise Bean?

    @@ -164,40 +183,65 @@

    32.1.3 Types of Enterprise Beans

    -
    -
    -
    +
    -
    -
    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/ejb-intro002.html b/ejb-intro002.html index 30398dc..af76b28 100644 --- a/ejb-intro002.html +++ b/ejb-intro002.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    32.2 What Is a Session Bean?

    @@ -245,35 +264,65 @@

    32.2.2 When to Use Session Beans

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/ejb-intro003.html b/ejb-intro003.html index aa408aa..5e14ebd 100644 --- a/ejb-intro003.html +++ b/ejb-intro003.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    32.3 What Is a Message-Driven Bean?

    @@ -173,35 +192,65 @@

    32.3.2 When to Use Message-Driven Bean synchronously. To receive messages asynchronously, use a message-driven bean.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/ejb-intro004.html b/ejb-intro004.html index 3798abf..b4d2adc 100644 --- a/ejb-intro004.html +++ b/ejb-intro004.html @@ -8,53 +8,67 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    32.4 Accessing Enterprise Beans

    -
    -
    -
    +
    -
    -
    @@ -73,11 +87,6 @@

    32.4 Accessing Enterprise Beans

    -
    -
    -
    +
    -
    -

    Clients access enterprise beans either through a no-interface view or through a business interface. A no-interface view of an enterprise bean @@ -584,36 +593,66 @@

    32.4.6.2 Granularity of Accessed Data

    fewer access calls are required. For the same reason, the parameters of the methods called by web service clients should also be coarse-grained.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/ejb-intro005.html b/ejb-intro005.html index b9d28c2..11a43f8 100644 --- a/ejb-intro005.html +++ b/ejb-intro005.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/ejb-intro006.html b/ejb-intro006.html index a70343d..f889f90 100644 --- a/ejb-intro006.html +++ b/ejb-intro006.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    32.6 Naming Conventions for Enterprise Beans

    @@ -92,39 +111,64 @@

    32.6 Naming Conventions for Ent -
    -
    -
    +
    -
    - -------- - - - - - - - - - - + +
    +

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -

    -
    \ No newline at end of file diff --git a/ejb-intro007.html b/ejb-intro007.html index f9e0f28..e50f42b 100644 --- a/ejb-intro007.html +++ b/ejb-intro007.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    32.7 The Lifecycles of Enterprise Beans

    @@ -217,35 +236,65 @@

    32.7.4 The Lifecycle of a Messag @PreDestroy, if any. The bean’s instance is then ready for garbage collection.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/ejb-intro008.html b/ejb-intro008.html index a667255..82decdb 100644 --- a/ejb-intro008.html +++ b/ejb-intro008.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    32.8 Further Information about Enterprise Beans

    @@ -69,34 +88,64 @@

    32.8 Further Information abo

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/img_text/javaeett_dt_001.html b/img_text/javaeett_dt_001.html index 3b682bf..15d63f0 100644 --- a/img_text/javaeett_dt_001.html +++ b/img_text/javaeett_dt_001.html @@ -8,6 +8,53 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +

    Diagram of multitiered application structure, including client tier, web @@ -19,5 +66,51 @@ 2017, Oracle and/or its affiliates. All rights reserved.

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/img_text/javaeett_dt_002.html b/img_text/javaeett_dt_002.html index f2669e6..51d75c4 100644 --- a/img_text/javaeett_dt_002.html +++ b/img_text/javaeett_dt_002.html @@ -8,6 +8,53 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +

    Diagram of client-server communication. Application clients access the @@ -20,5 +67,51 @@ 2017, Oracle and/or its affiliates. All rights reserved.

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/img_text/javaeett_dt_003.html b/img_text/javaeett_dt_003.html index 0f00f1b..48ccd27 100644 --- a/img_text/javaeett_dt_003.html +++ b/img_text/javaeett_dt_003.html @@ -8,6 +8,53 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +

    Diagram of client-server communication showing detail of JavaBeans @@ -19,5 +66,51 @@ 2017, Oracle and/or its affiliates. All rights reserved.

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/img_text/javaeett_dt_004.html b/img_text/javaeett_dt_004.html index fe8e19d..bc04b49 100644 --- a/img_text/javaeett_dt_004.html +++ b/img_text/javaeett_dt_004.html @@ -8,6 +8,53 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +

    Diagram of client-server communication showing detail of entities, @@ -19,5 +66,51 @@ 2017, Oracle and/or its affiliates. All rights reserved.

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/img_text/javaeett_dt_005.html b/img_text/javaeett_dt_005.html index 1ccd052..6b28059 100644 --- a/img_text/javaeett_dt_005.html +++ b/img_text/javaeett_dt_005.html @@ -8,6 +8,53 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +

    Diagram of client-server communication showing servlets and web pages in @@ -19,5 +66,51 @@ 2017, Oracle and/or its affiliates. All rights reserved.

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/img_text/javaeett_dt_006.html b/img_text/javaeett_dt_006.html index 0c25bf0..f8a751a 100644 --- a/img_text/javaeett_dt_006.html +++ b/img_text/javaeett_dt_006.html @@ -8,6 +8,53 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +

    Diagram of Java EE containers and their relationships

    @@ -18,5 +65,51 @@ 2017, Oracle and/or its affiliates. All rights reserved.

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/img_text/javaeett_dt_007.html b/img_text/javaeett_dt_007.html index 4e6bc16..b070e57 100644 --- a/img_text/javaeett_dt_007.html +++ b/img_text/javaeett_dt_007.html @@ -8,6 +8,53 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +

    Diagram of Java EE APIs in the web container

    @@ -18,5 +65,51 @@ 2017, Oracle and/or its affiliates. All rights reserved.

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/img_text/javaeett_dt_008.html b/img_text/javaeett_dt_008.html index 8634c2c..a76453f 100644 --- a/img_text/javaeett_dt_008.html +++ b/img_text/javaeett_dt_008.html @@ -8,6 +8,53 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +

    Diagram of Java EE APIs in the EJB container

    @@ -18,5 +65,51 @@ 2017, Oracle and/or its affiliates. All rights reserved.

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/img_text/javaeett_dt_009.html b/img_text/javaeett_dt_009.html index 292ae44..c98ebad 100644 --- a/img_text/javaeett_dt_009.html +++ b/img_text/javaeett_dt_009.html @@ -8,6 +8,53 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +

    Diagram of Java EE APIs in the application client container

    @@ -18,5 +65,51 @@ 2017, Oracle and/or its affiliates. All rights reserved.

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/img_text/javaeett_dt_010.html b/img_text/javaeett_dt_010.html index e0f80de..45915b9 100644 --- a/img_text/javaeett_dt_010.html +++ b/img_text/javaeett_dt_010.html @@ -8,6 +8,53 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +

    Diagram of EAR file structure. META-INF and web, application client, @@ -19,5 +66,51 @@ 2017, Oracle and/or its affiliates. All rights reserved.

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/img_text/javaeett_dt_011.html b/img_text/javaeett_dt_011.html index 9190c98..3a51c4f 100644 --- a/img_text/javaeett_dt_011.html +++ b/img_text/javaeett_dt_011.html @@ -8,6 +8,53 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +

    Diagram showing the structure and contents of an enterprise bean JAR @@ -19,5 +66,51 @@ 2017, Oracle and/or its affiliates. All rights reserved.

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/img_text/javaeett_dt_012.html b/img_text/javaeett_dt_012.html index 72eb414..63cf0e6 100644 --- a/img_text/javaeett_dt_012.html +++ b/img_text/javaeett_dt_012.html @@ -8,6 +8,53 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +

    Diagram of web module structure. WEB-INF and web pages are under the @@ -19,5 +66,51 @@ 2017, Oracle and/or its affiliates. All rights reserved.

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/img_text/javaeett_dt_013.html b/img_text/javaeett_dt_013.html index 9771bfc..b0eb75b 100644 --- a/img_text/javaeett_dt_013.html +++ b/img_text/javaeett_dt_013.html @@ -8,6 +8,53 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +

    Diagram of web application request handling. Clients and servlets @@ -19,5 +66,51 @@ 2017, Oracle and/or its affiliates. All rights reserved.

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/img_text/javaeett_dt_014.html b/img_text/javaeett_dt_014.html index 9cc0814..fdb7f0b 100644 --- a/img_text/javaeett_dt_014.html +++ b/img_text/javaeett_dt_014.html @@ -8,6 +8,53 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +

    Diagram that shows a browser accessing the myfacelet.xhtml page using an @@ -20,5 +67,51 @@ 2017, Oracle and/or its affiliates. All rights reserved.

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/img_text/javaeett_dt_015.html b/img_text/javaeett_dt_015.html index cafc170..689ac1b 100644 --- a/img_text/javaeett_dt_015.html +++ b/img_text/javaeett_dt_015.html @@ -8,6 +8,53 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +

    Diagram of web application technologies. JavaServer Pages, the JSP @@ -20,5 +67,51 @@ 2017, Oracle and/or its affiliates. All rights reserved.

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/img_text/javaeett_dt_016.html b/img_text/javaeett_dt_016.html index 13477b7..1bd8b3b 100644 --- a/img_text/javaeett_dt_016.html +++ b/img_text/javaeett_dt_016.html @@ -8,6 +8,53 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +

    Flow diagram of Faces request and Faces response, including event and @@ -20,5 +67,51 @@ 2017, Oracle and/or its affiliates. All rights reserved.

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/img_text/javaeett_dt_017.html b/img_text/javaeett_dt_017.html index 4104f8b..315314e 100644 --- a/img_text/javaeett_dt_017.html +++ b/img_text/javaeett_dt_017.html @@ -8,6 +8,53 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +

    This figure shows two Faces flows, Flow A and Flow B. Each has a start @@ -21,5 +68,51 @@ 2017, Oracle and/or its affiliates. All rights reserved.

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/img_text/javaeett_dt_018.html b/img_text/javaeett_dt_018.html index 615c89f..7d050af 100644 --- a/img_text/javaeett_dt_018.html +++ b/img_text/javaeett_dt_018.html @@ -8,6 +8,53 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +

    Diagram of filter-to-servlet mapping with filters F1-F3 and servlets @@ -19,5 +66,51 @@ 2017, Oracle and/or its affiliates. All rights reserved.

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/img_text/javaeett_dt_019.html b/img_text/javaeett_dt_019.html index a328813..cac70f5 100644 --- a/img_text/javaeett_dt_019.html +++ b/img_text/javaeett_dt_019.html @@ -8,6 +8,53 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +

    Diagram showing a client and web service communicating through a SOAP @@ -19,5 +66,51 @@ 2017, Oracle and/or its affiliates. All rights reserved.

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/img_text/javaeett_dt_020.html b/img_text/javaeett_dt_020.html index dbed160..feba22c 100644 --- a/img_text/javaeett_dt_020.html +++ b/img_text/javaeett_dt_020.html @@ -8,6 +8,53 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +

    Diagram showing a remote client accessing an enterprise bean’s methods @@ -19,5 +66,51 @@ 2017, Oracle and/or its affiliates. All rights reserved.

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/img_text/javaeett_dt_021.html b/img_text/javaeett_dt_021.html index fae1a1f..6b691b1 100644 --- a/img_text/javaeett_dt_021.html +++ b/img_text/javaeett_dt_021.html @@ -8,6 +8,53 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +

    Diagram showing the lifecycle of a stateful session bean.

    @@ -18,5 +65,51 @@ 2017, Oracle and/or its affiliates. All rights reserved.

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/img_text/javaeett_dt_022.html b/img_text/javaeett_dt_022.html index 255627b..8d6d577 100644 --- a/img_text/javaeett_dt_022.html +++ b/img_text/javaeett_dt_022.html @@ -8,6 +8,53 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +

    Diagram showing the lifecycle of a stateless or singleton session bean.

    @@ -18,5 +65,51 @@ 2017, Oracle and/or its affiliates. All rights reserved.

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/img_text/javaeett_dt_023.html b/img_text/javaeett_dt_023.html index 30c79b0..5ab6457 100644 --- a/img_text/javaeett_dt_023.html +++ b/img_text/javaeett_dt_023.html @@ -8,6 +8,53 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +

    Diagram showing the lifecycle of a message-driven bean.

    @@ -18,5 +65,51 @@ 2017, Oracle and/or its affiliates. All rights reserved.

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/img_text/javaeett_dt_024.html b/img_text/javaeett_dt_024.html index 9190aef..32fe165 100644 --- a/img_text/javaeett_dt_024.html +++ b/img_text/javaeett_dt_024.html @@ -8,6 +8,53 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +

    Diagram showing the database schema for the order application

    @@ -18,5 +65,51 @@ 2017, Oracle and/or its affiliates. All rights reserved.

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/img_text/javaeett_dt_025.html b/img_text/javaeett_dt_025.html index 03ecae6..2868bd1 100644 --- a/img_text/javaeett_dt_025.html +++ b/img_text/javaeett_dt_025.html @@ -8,6 +8,53 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +

    Diagram showing the database schema for the roster application

    @@ -18,5 +65,51 @@ 2017, Oracle and/or its affiliates. All rights reserved.

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/img_text/javaeett_dt_026.html b/img_text/javaeett_dt_026.html index 5546ae2..cda8d19 100644 --- a/img_text/javaeett_dt_026.html +++ b/img_text/javaeett_dt_026.html @@ -8,6 +8,53 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +

    Diagram showing messaging between various departments in an enterprise

    @@ -18,5 +65,51 @@ 2017, Oracle and/or its affiliates. All rights reserved.

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/img_text/javaeett_dt_027.html b/img_text/javaeett_dt_027.html index 20cc066..a40b706 100644 --- a/img_text/javaeett_dt_027.html +++ b/img_text/javaeett_dt_027.html @@ -8,6 +8,53 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +

    Diagram of JMS API architecture, showing administrative tool, JMS @@ -19,5 +66,51 @@ 2017, Oracle and/or its affiliates. All rights reserved.

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/img_text/javaeett_dt_028.html b/img_text/javaeett_dt_028.html index 7e56e8c..3609061 100644 --- a/img_text/javaeett_dt_028.html +++ b/img_text/javaeett_dt_028.html @@ -8,6 +8,53 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +

    Diagram of point-to-point messaging, showing Client 1 sending a message @@ -19,5 +66,51 @@ 2017, Oracle and/or its affiliates. All rights reserved.

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/img_text/javaeett_dt_029.html b/img_text/javaeett_dt_029.html index 7398089..3fe4337 100644 --- a/img_text/javaeett_dt_029.html +++ b/img_text/javaeett_dt_029.html @@ -8,6 +8,53 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +

    Diagram of pub/sub messaging, showing Client 1 sending a message to a @@ -19,5 +66,51 @@ 2017, Oracle and/or its affiliates. All rights reserved.

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/img_text/javaeett_dt_030.html b/img_text/javaeett_dt_030.html index 845f5e4..ee7cd0b 100644 --- a/img_text/javaeett_dt_030.html +++ b/img_text/javaeett_dt_030.html @@ -8,6 +8,53 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +

    Diagram of the JMS API programming model: connection factory, @@ -20,5 +67,51 @@ 2017, Oracle and/or its affiliates. All rights reserved.

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/img_text/javaeett_dt_031.html b/img_text/javaeett_dt_031.html index 0ad7a0b..dcf09d1 100644 --- a/img_text/javaeett_dt_031.html +++ b/img_text/javaeett_dt_031.html @@ -8,6 +8,53 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +

    Diagram showing messages being lost when nondurable subscriptions are @@ -19,5 +66,51 @@ 2017, Oracle and/or its affiliates. All rights reserved.

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/img_text/javaeett_dt_032.html b/img_text/javaeett_dt_032.html index ddc8889..4e5531e 100644 --- a/img_text/javaeett_dt_032.html +++ b/img_text/javaeett_dt_032.html @@ -8,6 +8,53 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +

    Diagram showing messages being preserved when durable subscriptions are @@ -19,5 +66,51 @@ 2017, Oracle and/or its affiliates. All rights reserved.

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/img_text/javaeett_dt_033.html b/img_text/javaeett_dt_033.html index b8e7ec5..d084502 100644 --- a/img_text/javaeett_dt_033.html +++ b/img_text/javaeett_dt_033.html @@ -8,6 +8,53 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +

    Diagram of local transactions, showing separate transactions for sending @@ -19,5 +66,51 @@ 2017, Oracle and/or its affiliates. All rights reserved.

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/img_text/javaeett_dt_034.html b/img_text/javaeett_dt_034.html index 55b49fe..76e1f43 100644 --- a/img_text/javaeett_dt_034.html +++ b/img_text/javaeett_dt_034.html @@ -8,6 +8,53 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +

    Diagram of steps in transaction example

    @@ -18,5 +65,51 @@ 2017, Oracle and/or its affiliates. All rights reserved.

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/img_text/javaeett_dt_035.html b/img_text/javaeett_dt_035.html index 641df88..d5b6708 100644 --- a/img_text/javaeett_dt_035.html +++ b/img_text/javaeett_dt_035.html @@ -8,6 +8,53 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +

    Diagram showing a web application in which a managed bean sends a @@ -20,5 +67,51 @@ 2017, Oracle and/or its affiliates. All rights reserved.

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/img_text/javaeett_dt_036.html b/img_text/javaeett_dt_036.html index 7d8f983..4122fec 100644 --- a/img_text/javaeett_dt_036.html +++ b/img_text/javaeett_dt_036.html @@ -8,6 +8,53 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +

    Diagram of application showing an application client sending a message @@ -19,5 +66,51 @@ 2017, Oracle and/or its affiliates. All rights reserved.

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/img_text/javaeett_dt_037.html b/img_text/javaeett_dt_037.html index e2e0d4a..0958088 100644 --- a/img_text/javaeett_dt_037.html +++ b/img_text/javaeett_dt_037.html @@ -8,6 +8,53 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +

    Diagram of application showing an application client calling a session @@ -19,5 +66,51 @@ 2017, Oracle and/or its affiliates. All rights reserved.

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/img_text/javaeett_dt_038.html b/img_text/javaeett_dt_038.html index 95a3587..3ace58e 100644 --- a/img_text/javaeett_dt_038.html +++ b/img_text/javaeett_dt_038.html @@ -8,6 +8,53 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +

    Diagram of application showing an application client, two message-driven @@ -19,5 +66,51 @@ 2017, Oracle and/or its affiliates. All rights reserved.

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/img_text/javaeett_dt_039.html b/img_text/javaeett_dt_039.html index 03adf65..4598f99 100644 --- a/img_text/javaeett_dt_039.html +++ b/img_text/javaeett_dt_039.html @@ -8,6 +8,53 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +

    Diagram of initial request from web client to web server for access to a @@ -19,5 +66,51 @@ 2017, Oracle and/or its affiliates. All rights reserved.

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/img_text/javaeett_dt_040.html b/img_text/javaeett_dt_040.html index 2ffe351..7ce97f8 100644 --- a/img_text/javaeett_dt_040.html +++ b/img_text/javaeett_dt_040.html @@ -8,6 +8,53 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +

    Diagram of initial authentication: server sends form to client, which @@ -19,5 +66,51 @@ 2017, Oracle and/or its affiliates. All rights reserved.

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/img_text/javaeett_dt_041.html b/img_text/javaeett_dt_041.html index ddc7e43..cca6bd8 100644 --- a/img_text/javaeett_dt_041.html +++ b/img_text/javaeett_dt_041.html @@ -8,6 +8,53 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +

    Diagram of URL authorization

    @@ -18,5 +65,51 @@ 2017, Oracle and/or its affiliates. All rights reserved.

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/img_text/javaeett_dt_042.html b/img_text/javaeett_dt_042.html index dbad70c..12a5e83 100644 --- a/img_text/javaeett_dt_042.html +++ b/img_text/javaeett_dt_042.html @@ -8,6 +8,53 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +

    Diagram of request fulfillment, showing server returning result to @@ -19,5 +66,51 @@ 2017, Oracle and/or its affiliates. All rights reserved.

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/img_text/javaeett_dt_043.html b/img_text/javaeett_dt_043.html index 7781a1c..4aff2ff 100644 --- a/img_text/javaeett_dt_043.html +++ b/img_text/javaeett_dt_043.html @@ -8,6 +8,53 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +

    Diagram of authorization process between web component and enterprise @@ -19,5 +66,51 @@ 2017, Oracle and/or its affiliates. All rights reserved.

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/img_text/javaeett_dt_044.html b/img_text/javaeett_dt_044.html index 2a1ddb6..881f31c 100644 --- a/img_text/javaeett_dt_044.html +++ b/img_text/javaeett_dt_044.html @@ -8,6 +8,53 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +

    Diagram of role mapping, showing creation of users and groups, @@ -19,5 +66,51 @@ 2017, Oracle and/or its affiliates. All rights reserved.

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/img_text/javaeett_dt_045.html b/img_text/javaeett_dt_045.html index 97ebd0e..7edef1e 100644 --- a/img_text/javaeett_dt_045.html +++ b/img_text/javaeett_dt_045.html @@ -8,6 +8,53 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +

    Diagram of four steps in HTTP basic authentication between client and @@ -19,5 +66,51 @@ 2017, Oracle and/or its affiliates. All rights reserved.

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/img_text/javaeett_dt_046.html b/img_text/javaeett_dt_046.html index 51ba192..cf9ff62 100644 --- a/img_text/javaeett_dt_046.html +++ b/img_text/javaeett_dt_046.html @@ -8,6 +8,53 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +

    Diagram of four steps in form-based authentication between client and @@ -19,5 +66,51 @@ 2017, Oracle and/or its affiliates. All rights reserved.

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/img_text/javaeett_dt_047.html b/img_text/javaeett_dt_047.html index b8c5ded..013e667 100644 --- a/img_text/javaeett_dt_047.html +++ b/img_text/javaeett_dt_047.html @@ -8,6 +8,53 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +

    Diagram of security identity propagation from client to intermediate @@ -19,5 +66,51 @@ 2017, Oracle and/or its affiliates. All rights reserved.

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/img_text/javaeett_dt_048.html b/img_text/javaeett_dt_048.html index 087053b..d79f722 100644 --- a/img_text/javaeett_dt_048.html +++ b/img_text/javaeett_dt_048.html @@ -8,6 +8,53 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +

    Diagram of six steps in mutual authentication with certificates

    @@ -18,5 +65,51 @@ 2017, Oracle and/or its affiliates. All rights reserved.

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/img_text/javaeett_dt_049.html b/img_text/javaeett_dt_049.html index 82852c7..5bc5743 100644 --- a/img_text/javaeett_dt_049.html +++ b/img_text/javaeett_dt_049.html @@ -8,6 +8,53 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +

    Diagram of five steps in mutual authentication with user name and @@ -19,5 +66,51 @@ 2017, Oracle and/or its affiliates. All rights reserved.

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/img_text/javaeett_dt_050.html b/img_text/javaeett_dt_050.html index 5f461e5..b8b7a20 100644 --- a/img_text/javaeett_dt_050.html +++ b/img_text/javaeett_dt_050.html @@ -8,6 +8,53 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +

    A diagram showing a transaction between two beans.

    @@ -18,5 +65,51 @@ 2017, Oracle and/or its affiliates. All rights reserved.

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/img_text/javaeett_dt_051.html b/img_text/javaeett_dt_051.html index c53d2fd..5c5e9ef 100644 --- a/img_text/javaeett_dt_051.html +++ b/img_text/javaeett_dt_051.html @@ -8,6 +8,53 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +

    A diagram showing Bean-A updating databases X and Y, and Bean-B updating @@ -19,5 +66,51 @@ 2017, Oracle and/or its affiliates. All rights reserved.

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/img_text/javaeett_dt_052.html b/img_text/javaeett_dt_052.html index a26e4a5..26701c7 100644 --- a/img_text/javaeett_dt_052.html +++ b/img_text/javaeett_dt_052.html @@ -8,6 +8,53 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +

    A diagram showing Bean-A on one Java EE server updating database X, and @@ -19,5 +66,51 @@ 2017, Oracle and/or its affiliates. All rights reserved.

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/img_text/javaeett_dt_053.html b/img_text/javaeett_dt_053.html index 76ef432..41f4cb8 100644 --- a/img_text/javaeett_dt_053.html +++ b/img_text/javaeett_dt_053.html @@ -8,6 +8,53 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +

    Resource Adapter Contracts

    @@ -18,5 +65,51 @@ 2017, Oracle and/or its affiliates. All rights reserved.

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/img_text/javaeett_dt_054.html b/img_text/javaeett_dt_054.html index 9f615d3..70569eb 100644 --- a/img_text/javaeett_dt_054.html +++ b/img_text/javaeett_dt_054.html @@ -8,6 +8,53 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +

    This figure shows the trading example components: a deployed WAR and RAR @@ -19,5 +66,51 @@ 2017, Oracle and/or its affiliates. All rights reserved.

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/img_text/javaeett_dt_055.html b/img_text/javaeett_dt_055.html index ffeb1b3..07d3f79 100644 --- a/img_text/javaeett_dt_055.html +++ b/img_text/javaeett_dt_055.html @@ -8,6 +8,53 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +

    This figure shows the classes in each of the modules of the trading @@ -19,5 +66,51 @@ 2017, Oracle and/or its affiliates. All rights reserved.

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/img_text/javaeett_dt_056.html b/img_text/javaeett_dt_056.html index 6a618c1..dddfbbe 100644 --- a/img_text/javaeett_dt_056.html +++ b/img_text/javaeett_dt_056.html @@ -8,6 +8,53 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +

    This figure shows the components of the traffic example: a WAR @@ -20,5 +67,51 @@ 2017, Oracle and/or its affiliates. All rights reserved.

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/img_text/javaeett_dt_057.html b/img_text/javaeett_dt_057.html index 6652e58..acff391 100644 --- a/img_text/javaeett_dt_057.html +++ b/img_text/javaeett_dt_057.html @@ -8,6 +8,53 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +

    This figure shows the classes in each of the components of the traffic @@ -19,5 +66,51 @@ 2017, Oracle and/or its affiliates. All rights reserved.

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/img_text/javaeett_dt_058.html b/img_text/javaeett_dt_058.html index ed1a192..a8a6bc2 100644 --- a/img_text/javaeett_dt_058.html +++ b/img_text/javaeett_dt_058.html @@ -8,6 +8,53 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +

    This figure shows a batch job that contains two chunk steps: step A and @@ -22,5 +69,51 @@ 2017, Oracle and/or its affiliates. All rights reserved.

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/img_text/javaeett_dt_059.html b/img_text/javaeett_dt_059.html index a0ab720..be5af93 100644 --- a/img_text/javaeett_dt_059.html +++ b/img_text/javaeett_dt_059.html @@ -8,6 +8,53 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +

    This figure shows a batch job that contains two chunk steps, a task step @@ -23,5 +70,51 @@ 2017, Oracle and/or its affiliates. All rights reserved.

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/img_text/javaeett_dt_060.html b/img_text/javaeett_dt_060.html index 22917d1..759262b 100644 --- a/img_text/javaeett_dt_060.html +++ b/img_text/javaeett_dt_060.html @@ -8,6 +8,53 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +

    The figure shows the architecture of the taskcreator example. The @@ -22,5 +69,51 @@ 2017, Oracle and/or its affiliates. All rights reserved.

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/img_text/javaeett_dt_061.html b/img_text/javaeett_dt_061.html index c1e824c..391fd95 100644 --- a/img_text/javaeett_dt_061.html +++ b/img_text/javaeett_dt_061.html @@ -8,6 +8,53 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +

    Architecture diagram of the Duke’s Tutoring example application. Two @@ -22,5 +69,51 @@ 2017, Oracle and/or its affiliates. All rights reserved.

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/img_text/javaeett_dt_062.html b/img_text/javaeett_dt_062.html index b66f75d..3e25335 100644 --- a/img_text/javaeett_dt_062.html +++ b/img_text/javaeett_dt_062.html @@ -8,6 +8,53 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +

    This figure shows the architecture of the main Duke’s Forest projects @@ -19,5 +66,51 @@ 2017, Oracle and/or its affiliates. All rights reserved.

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/img_text/javaeett_dt_063.html b/img_text/javaeett_dt_063.html index 64e24c7..9b38cc3 100644 --- a/img_text/javaeett_dt_063.html +++ b/img_text/javaeett_dt_063.html @@ -8,6 +8,53 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +

    This figure shows the interactions between the Duke’s Store and Duke’s @@ -20,5 +67,51 @@ 2017, Oracle and/or its affiliates. All rights reserved.

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/img_text/javaeett_dt_064.html b/img_text/javaeett_dt_064.html index 8b74471..d796c79 100644 --- a/img_text/javaeett_dt_064.html +++ b/img_text/javaeett_dt_064.html @@ -8,6 +8,53 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +

    This figure shows the database tables in Duke’s Forest and their @@ -19,5 +66,51 @@ 2017, Oracle and/or its affiliates. All rights reserved.

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/img_text/javaeett_dt_065_frmcmpnt.html b/img_text/javaeett_dt_065_frmcmpnt.html index a795c74..fc755d1 100644 --- a/img_text/javaeett_dt_065_frmcmpnt.html +++ b/img_text/javaeett_dt_065_frmcmpnt.html @@ -8,6 +8,53 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +

    Form with User Name and Password text fields and a Login button.

    @@ -18,5 +65,51 @@ 2017, Oracle and/or its affiliates. All rights reserved.

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/img_text/javaeett_dt_066_slctmny.html b/img_text/javaeett_dt_066_slctmny.html index 1d7a432..12e6945 100644 --- a/img_text/javaeett_dt_066_slctmny.html +++ b/img_text/javaeett_dt_066_slctmny.html @@ -8,6 +8,53 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +

    Check box group, scrollable box, and unscrollable box.

    @@ -18,5 +65,51 @@ 2017, Oracle and/or its affiliates. All rights reserved.

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/img_text/javaeett_dt_067_slctn.html b/img_text/javaeett_dt_067_slctn.html index 877ff1a..1074d06 100644 --- a/img_text/javaeett_dt_067_slctn.html +++ b/img_text/javaeett_dt_067_slctn.html @@ -8,6 +8,53 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +

    Options, check box, and lists.

    @@ -18,5 +65,51 @@ 2017, Oracle and/or its affiliates. All rights reserved.

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/img_text/javaeett_dt_068_txtcmpnts.html b/img_text/javaeett_dt_068_txtcmpnts.html index 1603931..b56b558 100644 --- a/img_text/javaeett_dt_068_txtcmpnts.html +++ b/img_text/javaeett_dt_068_txtcmpnts.html @@ -8,6 +8,53 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +

    A form. "User Name" labels a field. "Password" labels a password field. @@ -19,5 +66,51 @@ 2017, Oracle and/or its affiliates. All rights reserved.

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/injection.html b/injection.html index a118df8..ba68397 100644 --- a/injection.html +++ b/injection.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    4 Injection

    @@ -81,34 +100,64 @@

    4 Injection

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/injection001.html b/injection001.html index eba40be..7b7d43a 100644 --- a/injection001.html +++ b/injection001.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    4.1 Resource Injection

    @@ -104,34 +123,64 @@

    4.1 Resource Injection

    resource object is not known at compile time, so you can get runtime errors if the types of the object and its reference do not match.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/injection002.html b/injection002.html index f4ef10b..36795d4 100644 --- a/injection002.html +++ b/injection002.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    4.2 Dependency Injection

    @@ -101,34 +120,64 @@

    4.2 Dependency Injection

    Dependency Injection for Java EE" and JSR 299 (Contexts and Dependency Injection for the Java EE Platform).

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/injection003.html b/injection003.html index ce79929..92e24a8 100644 --- a/injection003.html +++ b/injection003.html @@ -8,47 +8,66 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +
    -

    4.3 The Main Differences between Resource Injection and DependencyInjection

    +

    4.3 The Main Differences between Resource Injection and Dependency Injection

    Table 4-1 lists the main differences between resource @@ -96,39 +115,64 @@

    -
    -
    +

    -
    - -------- - - - - - - - - - - + +
    +

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    \ No newline at end of file diff --git a/interceptors.html b/interceptors.html index d8455fe..571ba86 100644 --- a/interceptors.html +++ b/interceptors.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    54 Using Java EE Interceptors

    @@ -71,34 +90,64 @@

    54 Using Java EE Interceptors

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/interceptors001.html b/interceptors001.html index 50109fb..ec7a79f 100644 --- a/interceptors001.html +++ b/interceptors001.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    54.1 Overview of Interceptors

    @@ -76,11 +95,6 @@

    54.1 Overview of Interceptors

    or in the deployment descriptor of the application that contains the interceptors and target classes.

    -
    -
    -
    +
    -
    -
    @@ -97,11 +111,6 @@

    54.1 Overview of Interceptors

    -
    -
    -
    +
    -
    -

    Interceptor methods within the target class or in an interceptor class are annotated with one of the metadata annotations defined in @@ -154,11 +163,6 @@

    54.1 Overview of Interceptors

    -
    -
    -
    +
    -
    -

    54.1.1 Interceptor Classes

    @@ -203,35 +207,65 @@

    54.1.3 Interceptors and CDI

    interceptors, including a discussion of interceptor binding types, see Using Interceptors in CDI Applications.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/interceptors002.html b/interceptors002.html index b0de8c9..ec9d70e 100644 --- a/interceptors002.html +++ b/interceptors002.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    54.2 Using Interceptors

    @@ -309,11 +328,6 @@

    54.2.2.1 Using AroundConstruc after calling Invocation.proceed by calling the InvocationContext.getTarget method.

    -
    -
    -
    +
    -
    -
    @@ -331,11 +345,6 @@

    54.2.2.1 Using AroundConstruc

    -
    -
    -
    +
    -
    -

    @AroundConstruct methods must call Invocation.proceed in order to create the target instance. If an @AroundConstruct method does not @@ -571,11 +580,6 @@

    54.2.5 Ordering Interceptors

    The @Priority annotation requires an int value as an element. The lower the number, the higher the priority of the associated interceptor.

    -
    -
    -
    +
    -
    -
    @@ -592,11 +596,6 @@

    54.2.5 Ordering Interceptors

    -
    -
    -
    +
    -
    -

    The javax.interceptor.Interceptor.Priority class defines the priority constants listed in Table 54-2.

    @@ -657,16 +656,6 @@

    54.2.5 Ordering Interceptors

    -
    -
    -
    +
    -
    -
    -
    -
    -
    +
    -
    -
    @@ -683,11 +672,6 @@

    54.2.5 Ordering Interceptors

    -
    -
    -
    +
    -
    -

    The following code snippet shows how to use the priority constants in an application-defined interceptor:

    @@ -699,35 +683,65 @@

    54.2.5 Ordering Interceptors

    public class MyInterceptor { ... }
    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/interceptors003.html b/interceptors003.html index 45509b8..8331750 100644 --- a/interceptors003.html +++ b/interceptors003.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    54.3 The interceptor Example Application

    @@ -223,36 +242,66 @@

    54.3.1.2 To Run the intercep

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jaxrs-advanced.html b/jaxrs-advanced.html index ac57353..8499dc3 100644 --- a/jaxrs-advanced.html +++ b/jaxrs-advanced.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    31 JAX-RS: Advanced Topics and an Example

    @@ -97,34 +116,64 @@

    31 JAX-RS: Advanced Topics and an

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jaxrs-advanced001.html b/jaxrs-advanced001.html index b269c14..a79b97f 100644 --- a/jaxrs-advanced001.html +++ b/jaxrs-advanced001.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    31.1 Annotations for Field and Bean Properties of Resource Classes

    @@ -108,11 +127,6 @@

    31.1 Anno -
    -
    -
    +
    -
    -

    31.1.1 Extracting Path Parameters

    @@ -285,35 +299,65 @@

    31.1.4 Extracting the }

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jaxrs-advanced002.html b/jaxrs-advanced002.html index a432178..6e66231 100644 --- a/jaxrs-advanced002.html +++ b/jaxrs-advanced002.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    31.2 Validating Resource Data with Bean Validation

    @@ -301,35 +320,65 @@

    31.2.3 Validation Exce

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jaxrs-advanced003.html b/jaxrs-advanced003.html index e8e7d20..0abb0b0 100644 --- a/jaxrs-advanced003.html +++ b/jaxrs-advanced003.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    31.3 Subresources and Runtime Resource Resolution

    @@ -179,35 +198,65 @@

    31.3.2 Subresource Locators

    method retrieves and returns the last name of the employee whose id is as209.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jaxrs-advanced004.html b/jaxrs-advanced004.html index 3a86ca9..98a2289 100644 --- a/jaxrs-advanced004.html +++ b/jaxrs-advanced004.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    31.4 Integrating JAX-RS with EJB Technology and CDI

    @@ -121,34 +140,64 @@

    31.4 Integrating JAX-RS public class EmpDetails {...}

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jaxrs-advanced005.html b/jaxrs-advanced005.html index b374b2d..357d78a 100644 --- a/jaxrs-advanced005.html +++ b/jaxrs-advanced005.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    31.5 Conditional HTTP Requests

    @@ -106,34 +125,64 @@

    31.5 Conditional HTTP Requests

    pre-filled-out response with a 304 status code and an entity tag set that may be built and returned.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jaxrs-advanced006.html b/jaxrs-advanced006.html index e630913..09d97c0 100644 --- a/jaxrs-advanced006.html +++ b/jaxrs-advanced006.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    31.6 Runtime Content Negotiation

    @@ -199,34 +218,64 @@

    31.6 Runtime Content Negotiation

    representation in the form of an Object entity and a Variant is returned.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jaxrs-advanced007.html b/jaxrs-advanced007.html index 647e46a..95a3993 100644 --- a/jaxrs-advanced007.html +++ b/jaxrs-advanced007.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    31.7 Using JAX-RS with JAXB

    @@ -465,35 +484,65 @@

    31.7.3 Using JSON with JAX-RS and JAXB<
    Content-Type: application/json

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jaxrs-advanced008.html b/jaxrs-advanced008.html index b5beaeb..8835fb3 100644 --- a/jaxrs-advanced008.html +++ b/jaxrs-advanced008.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    31.8 The customer Example Application

    @@ -567,36 +586,66 @@

    31.8.5.2 T

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jaxrs-client.html b/jaxrs-client.html index 614e3b7..63e24f8 100644 --- a/jaxrs-client.html +++ b/jaxrs-client.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    30 Accessing REST Resources with the JAX-RS Client API

    @@ -75,34 +94,64 @@

    30 Accessing REST R

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jaxrs-client001.html b/jaxrs-client001.html index 4c94f04..c07ff2f 100644 --- a/jaxrs-client001.html +++ b/jaxrs-client001.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    30.1 Overview of the Client API

    @@ -313,35 +332,65 @@

    30.1.5 Invoking the Request

    This preceding example shows how methods are chained together in the Client API to simplify how requests are configured and invoked.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jaxrs-client002.html b/jaxrs-client002.html index fb2b4aa..e44e439 100644 --- a/jaxrs-client002.html +++ b/jaxrs-client002.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    30.2 Using the Client API in the JAX-RS Example Applications

    @@ -253,35 +272,65 @@

    30.2.2 The Client AP method is called by passing in a new instance of GenericType<List<Customer>>.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jaxrs-client003.html b/jaxrs-client003.html index 44e6627..27ea669 100644 --- a/jaxrs-client003.html +++ b/jaxrs-client003.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    30.3 Advanced Features of the Client API

    @@ -489,35 +508,65 @@

    30.3.6 Listening and Receiving Events

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jaxrs.html b/jaxrs.html index cc169ba..347a374 100644 --- a/jaxrs.html +++ b/jaxrs.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    29 Building RESTful Web Services with JAX-RS

    @@ -77,34 +96,64 @@

    29 Building RESTful Web Servi

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jaxrs001.html b/jaxrs001.html index 5ed0799..d2af379 100644 --- a/jaxrs001.html +++ b/jaxrs001.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    29.1 What Are RESTful Web Services?

    @@ -121,34 +140,64 @@

    29.1 What Are RESTful Web Services?

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jaxrs002.html b/jaxrs002.html index 2462e0c..0ef5336 100644 --- a/jaxrs002.html +++ b/jaxrs002.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    29.2 Creating a RESTful Root Resource Class

    @@ -228,11 +247,6 @@

    29.2.1 Developing RESTful W -
    -
    -
    +
    -
    -

    29.2.2 Overview of a JAX-RS Application

    @@ -466,11 +480,6 @@

    29.2.3 The @Path Annotation
  • question: why

    -
    -
    -
    +
    -
    -
  • @@ -489,11 +498,6 @@

    29.2.3 The @Path Annotation -
    -
    -
    +
    -
    -

    @@ -530,11 +534,6 @@

    29.2.3 The @Path Annotation -
    -
    -
    +
    -
    -

    29.2.4 Responding to HTTP Methods and Requests

    @@ -720,11 +719,6 @@

    29.2.4.1 The Request Method D -
    -
    -
    +
    -
    -

    The following example shows how to use MessageBodyReader with the @Consumes and @Provider annotations:

    @@ -1342,36 +1336,66 @@

    29.2.7.2 Configuring the Base URI i </servlet-mapping>

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jaxrs003.html b/jaxrs003.html index 3f3116e..5b34034 100644 --- a/jaxrs003.html +++ b/jaxrs003.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    29.3 Example Applications for JAX-RS

    @@ -156,13 +175,10 @@

    29.3.1.1 To Create a -
    -
    -
     +
    -4.  Right-click the `HelloWorldApplication` project in the Projects pane
    -and select Run.
    -
    -
    + +
  • +

    Right-click the HelloWorldApplication project in the Projects pane +and select Run.

    This will build and deploy the application to GlassFish Server.

    @@ -479,35 +495,65 @@

    29.3.3 Real-World Examples

    or a SOAP interface. The examples that ship with Jersey include a storage service example with a RESTful interface.

  • -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jaxrs004.html b/jaxrs004.html index 9ff3010..cc33351 100644 --- a/jaxrs004.html +++ b/jaxrs004.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    29.4 Further Information about JAX-RS

    @@ -81,34 +100,64 @@

    29.4 Further Information about JAX-RS<

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jaxws.html b/jaxws.html index c98e74b..a0641e3 100644 --- a/jaxws.html +++ b/jaxws.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    28 Building Web Services with JAX-WS

    @@ -79,34 +98,64 @@

    28 Building Web Services with JAX-WS<

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jaxws001.html b/jaxws001.html index bac7b57..6525076 100644 --- a/jaxws001.html +++ b/jaxws001.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    28.1 Overview of Java API for XML Web Services

    @@ -78,11 +97,6 @@

    28.1 Overview of Java API for SOAP, and WSDL. WSDL specifies an XML format for describing a service as a set of endpoints operating on messages.

    -
    -
    -
    +
    -
    -
    @@ -101,39 +115,64 @@

    28.1 Overview of Java API for

    -
    -
    -
    +
    -
    - -------- - - - - - - - - - - + +
    +

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    - \ No newline at end of file diff --git a/jaxws002.html b/jaxws002.html index 14f92b9..1401ba1 100644 --- a/jaxws002.html +++ b/jaxws002.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    28.2 Creating a Simple Web Service and Clients with JAX-WS

    @@ -825,37 +844,67 @@
    28.2.7.2.2 To Run the Web Client Usin
    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jaxws003.html b/jaxws003.html index 97b0610..7d40321 100644 --- a/jaxws003.html +++ b/jaxws003.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    28.3 Types Supported by JAX-WS

    @@ -194,11 +213,6 @@

    28.3.1 Schema-to-Java Mapping

    -
    -
    -
    +
    -
    -

    28.3.2 Java-to-Schema Mapping

    @@ -282,40 +296,65 @@

    28.3.2 Java-to-Schema Mapping

    -
    -
    -
    +
    -
    -
    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jaxws004.html b/jaxws004.html index 1a19b1e..2288add 100644 --- a/jaxws004.html +++ b/jaxws004.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    28.4 Web Services Interoperability and JAX-WS

    @@ -62,34 +81,64 @@

    28.4 Web Services Interoperabi doc/literal and rpc/literal encodings for services, static ports, dynamic proxies, and the Dynamic Invocation Interface (DII).

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jaxws005.html b/jaxws005.html index 59d6b98..319731c 100644 --- a/jaxws005.html +++ b/jaxws005.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    28.5 Further Information about JAX-WS

    @@ -87,34 +106,64 @@

    28.5 Further Information about JAX-WS<

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jms-concepts.html b/jms-concepts.html index 0aaa81c..185fc32 100644 --- a/jms-concepts.html +++ b/jms-concepts.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    45 Java Message Service Concepts

    @@ -82,34 +101,64 @@

    45 Java Message Service Concepts

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jms-concepts001.html b/jms-concepts001.html index 0a4268d..eeec9db 100644 --- a/jms-concepts001.html +++ b/jms-concepts001.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    45.1 Overview of the JMS API

    @@ -277,35 +296,65 @@

    45.1.4 How Does the application servers to support multiple JMS providers. For more information, see the Java EE Connector architecture specification, v1.7.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jms-concepts002.html b/jms-concepts002.html index 75df203..32f4438 100644 --- a/jms-concepts002.html +++ b/jms-concepts002.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    45.2 Basic JMS API Concepts

    @@ -280,35 +299,65 @@

    45.2.3 Message Consumption

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jms-concepts003.html b/jms-concepts003.html index 2bd2ca6..e9abae0 100644 --- a/jms-concepts003.html +++ b/jms-concepts003.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    45.3 The JMS API Programming Model

    @@ -241,11 +260,6 @@

    45.3.2 Connections

    client and a provider service daemon. You use a connection to create one or more sessions.

    -
    -
    -
    +
    -
    -
    @@ -264,11 +278,6 @@

    45.3.2 Connections

    -
    -
    -
    +
    -
    -

    You normally create a connection by creating a JMSContext object. See JMSContext Objects for details.

    @@ -1003,11 +1012,6 @@

    45.3.7.1 Message Headers

    -
    -
    -
    +
    -
    -

    45.3.7.2 Message Properties

    @@ -1088,11 +1092,6 @@

    45.3.7.3 Message Bodies

    -
    -
    -
    +
    -
    -

    The JMS API provides methods for creating messages of each type and for filling in their contents. For example, to create and send a @@ -1273,35 +1272,65 @@

    45.3.9 JMS Exception Handling

    All the examples in the tutorial catch and handle JMSException or JMSRuntimeException when it is appropriate to do so.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jms-concepts004.html b/jms-concepts004.html index 37f265f..23674f4 100644 --- a/jms-concepts004.html +++ b/jms-concepts004.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    45.4 Using Advanced JMS Features

    @@ -186,19 +205,16 @@

    45.4.1 Controlling Message Acknowled -
    -
    -
     +
    -* `JMSContext.DUPS_OK_ACKNOWLEDGE`: This option instructs the
    -`JMSContext` to lazily acknowledge the delivery of messages. This is
    +
    +
  • +

    JMSContext.DUPS_OK_ACKNOWLEDGE: This option instructs the +JMSContext to lazily acknowledge the delivery of messages. This is likely to result in the delivery of some duplicate messages if the JMS provider fails, so it should be used only by consumers that can tolerate duplicate messages. (If the JMS provider redelivers a message, it must -set the value of the `JMSRedelivered` message header to `true`.) This +set the value of the JMSRedelivered message header to true.) This option can reduce session overhead by minimizing the work the session -does to prevent duplicates.

  • -
    -
    +does to prevent duplicates.

    @@ -650,35 +666,65 @@

    45.4.5 Sending Messages Asynchronously< }

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jms-concepts005.html b/jms-concepts005.html index 1c75659..e3c7c04 100644 --- a/jms-concepts005.html +++ b/jms-concepts005.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    45.5 Using the JMS API in Java EE Applications

    @@ -160,11 +179,6 @@

    45.5.2 Creating Resources f

    You need to specify the annotation only once for a given application, in any of the components.

    -
    -
    -
    +
    -
    -
    @@ -185,11 +199,6 @@

    45.5.2 Creating Resources f

    -
    -
    -
    +
    -
    -

    When you inject the resource into a component, use the value of the name element in the definition annotation as the value of the lookup @@ -327,7 +336,7 @@

    45.5.3.2 Injecting a JMSContext Object

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jms-concepts006.html b/jms-concepts006.html index 5b34fee..cbf5dab 100644 --- a/jms-concepts006.html +++ b/jms-concepts006.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    45.6 Further Information about JMS

    @@ -69,34 +88,64 @@

    45.6 Further Information about JMS

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jms-examples.html b/jms-examples.html index fda4a6f..3ff6275 100644 --- a/jms-examples.html +++ b/jms-examples.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    46 Java Message Service Examples

    @@ -98,34 +117,64 @@

    46 Java Message Service Examples

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jms-examples001.html b/jms-examples001.html index 26a8221..03e1a46 100644 --- a/jms-examples001.html +++ b/jms-examples001.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jms-examples002.html b/jms-examples002.html index d58828c..9f1f4b9 100644 --- a/jms-examples002.html +++ b/jms-examples002.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    46.2 Overview of the JMS Examples

    @@ -129,11 +148,6 @@

    46.2 Overview of the JMS Examples

    -
    -
    -
    +
    -
    -

    @@ -182,39 +196,64 @@

    46.2 Overview of the JMS Examples

    -
    -
    -
    +
    -
    - -------- - - - - - - - - - - + +
    +

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    \ No newline at end of file diff --git a/jms-examples003.html b/jms-examples003.html index 40db0ca..04d7647 100644 --- a/jms-examples003.html +++ b/jms-examples003.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    46.3 Writing Simple JMS Applications

    @@ -129,15 +148,12 @@

    46.3.1 Overview of Writing S tut-install`/examples/jms/simple/` directory, under the following subdirectories:

    -
    -
    -
     +
    -`producer/` +
    -`synchconsumer/` +
    -`asynchconsumer/` +
    -`messagebrowser/` +
    -`clientackconsumer/` +
    -
    +
    +

    producer/
    +synchconsumer/
    +asynchconsumer/
    +messagebrowser/
    +clientackconsumer/

    Before running the examples, you need to start GlassFish Server and @@ -570,11 +586,6 @@

    46.3.5.3 To Run the Producer Client

    -
    -
    -
    +
    -
    -
    @@ -810,11 +821,6 @@

    46.3.7 Using message listener for asynchronous message delivery. This section then explains how to compile and run the clients using GlassFish Server.

    -
    -
    -
    +
    -
    -
    @@ -833,11 +839,6 @@

    46.3.7 Using

    -
    -
    -
    +
    -
    -

    The following topics are addressed here:

    @@ -1412,11 +1413,6 @@

    46.3.10 Acknowledging Messages

    Using a message listener for asynchronous message delivery in a JMSContext that has been configured to use the default AUTO_ACKNOWLEDGE setting

    -
    -
    -
    +
    -
    -
    @@ -1436,11 +1432,6 @@

    46.3.10 Acknowledging Messages

    -
    -
    -
    +
    -
    -

    The clientackconsumer example demonstrates the first alternative, in which a synchronous consumer uses client acknowledgment. The @@ -1504,11 +1495,6 @@

    46.3.10 Acknowledging Messages

    -
    -
    -
    +
    -
    -

    The example is under the tut-install`/examples/jms/simple/clientackconsumer/` directory.

    @@ -1608,36 +1594,66 @@

    46.3.10.1 To Run the ClientAckConsu

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jms-examples004.html b/jms-examples004.html index 87e36e4..75b70bf 100644 --- a/jms-examples004.html +++ b/jms-examples004.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    46.4 Writing More Advanced JMS Applications

    @@ -750,36 +769,66 @@

    46.4.2.2 To Run the transactedexam

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jms-examples005.html b/jms-examples005.html index 120ee2b..afe1f97 100644 --- a/jms-examples005.html +++ b/jms-examples005.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    46.5 Writing High Performance and Scalable JMS Applications

    @@ -347,36 +366,66 @@

    46.5.2.1 To Run t

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jms-examples006.html b/jms-examples006.html index 9b61c9e..1b81f9f 100644 --- a/jms-examples006.html +++ b/jms-examples006.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    46.6 Sending and Receiving Messages Using a Simple Web Application

    @@ -347,36 +366,66 @@

    46.6.3.4 To Run the websimplemessag

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jms-examples007.html b/jms-examples007.html index ef78815..a2d8acc 100644 --- a/jms-examples007.html +++ b/jms-examples007.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    46.7 Receiving Messages Asynchronously Using a Message-Driven Bean

    @@ -406,36 +425,66 @@

    46.7.4.3 To Run the simple

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jms-examples008.html b/jms-examples008.html index 2292b0c..fd7e9a3 100644 --- a/jms-examples008.html +++ b/jms-examples008.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    46.8 Sending Messages from a Session Bean to an MDB

    @@ -89,7 +108,7 @@

    46.8 Sending Messages fr

    -

    46.8.1 Writing the Application Components for the clientsessionmdbExample

    +

    46.8.1 Writing the Application Components for the clientsessionmdb Example

    This application demonstrates how to send messages from an enterprise bean (in this case, a session bean) rather than from an application @@ -427,36 +446,66 @@

    46.8.2.2 To Run clientsessionmdb Us

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jms-examples009.html b/jms-examples009.html index d921dc4..53a6e14 100644 --- a/jms-examples009.html +++ b/jms-examples009.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    46.9 Using an Entity to Join Messages from Two MDBs

    @@ -181,7 +200,7 @@

    46.9.1 Overview of

    -

    46.9.2 Writing the Application Components for the clientmdbentityExample

    +

    46.9.2 Writing the Application Components for the clientmdbentity Example

    Writing the components of the application involves coding the application client, the message-driven beans, and the entity class.

    @@ -563,36 +582,66 @@

    46.9.3.3 Viewing the Application Output<

    To undeploy the application after you have finished running it, use the Services tab or issue the mvn cargo:undeploy command.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jms-examples010.html b/jms-examples010.html index 0e85aa0..26db2a6 100644 --- a/jms-examples010.html +++ b/jms-examples010.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    46.10 Using NetBeans IDE to Create JMS Resources

    @@ -169,35 +188,65 @@

    46.10.2 To Delete JMS Resour

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-advanced-cc.html b/jsf-advanced-cc.html index 2fa7a61..3f29166 100644 --- a/jsf-advanced-cc.html +++ b/jsf-advanced-cc.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    14 Composite Components: Advanced Topics and an Example

    @@ -75,34 +94,64 @@

    14 Composite Compon

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-advanced-cc001.html b/jsf-advanced-cc001.html index 5a8d5a0..8eb76af 100644 --- a/jsf-advanced-cc001.html +++ b/jsf-advanced-cc001.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    14.1 Attributes of a Composite Component

    @@ -123,11 +142,6 @@

    14.1 Attributes of a Composite Comp -
    -
    -
    +
    -
    -

    The following code snippet defines a composite component attribute and assigns it a default value:

    @@ -154,34 +168,64 @@

    14.1 Attributes of a Composite Comp
    <composite:attribute name="dateofjoining" type="java.util.Date"/>

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-advanced-cc002.html b/jsf-advanced-cc002.html index 6cf2e8a..e9742ed 100644 --- a/jsf-advanced-cc002.html +++ b/jsf-advanced-cc002.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    14.2 Invoking a Managed Bean

    @@ -76,34 +95,64 @@

    14.2 Invoking a Managed Bean

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-advanced-cc003.html b/jsf-advanced-cc003.html index 8cf0b37..2a14714 100644 --- a/jsf-advanced-cc003.html +++ b/jsf-advanced-cc003.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    14.3 Validating Composite Component Values

    @@ -97,39 +116,64 @@

    14.3 Validating Composite Compone -
    -
    -
    +
    -
    - -------- - - - - - - - - - - + +
    +

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -

    -
    \ No newline at end of file diff --git a/jsf-advanced-cc004.html b/jsf-advanced-cc004.html index 50efcb4..2018fad 100644 --- a/jsf-advanced-cc004.html +++ b/jsf-advanced-cc004.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    14.4 The compositecomponentexample Example Application

    @@ -331,36 +350,66 @@

    14.4.4.3 To Run the compos

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-ajax.html b/jsf-ajax.html index 386d940..a2c0b5d 100644 --- a/jsf-ajax.html +++ b/jsf-ajax.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    13 Using Ajax with JavaServer Faces Technology

    @@ -104,34 +123,64 @@

    13 Using Ajax with JavaServ

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-ajax001.html b/jsf-ajax001.html index 1570ffb..2d0cdb1 100644 --- a/jsf-ajax001.html +++ b/jsf-ajax001.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    13.1 Overview of Ajax

    @@ -112,34 +131,64 @@

    13.1 Overview of Ajax

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-ajax002.html b/jsf-ajax002.html index 042219f..cd20031 100644 --- a/jsf-ajax002.html +++ b/jsf-ajax002.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    13.2 Using Ajax Functionality with JavaServer Faces Technology

    @@ -91,34 +110,64 @@

    13.2 Using Aj

    The Ajax specific f:ajax tag and its attributes are explained in the next sections.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-ajax003.html b/jsf-ajax003.html index 7bc54e9..590bdf6 100644 --- a/jsf-ajax003.html +++ b/jsf-ajax003.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    13.3 Using Ajax with Facelets

    @@ -186,11 +205,6 @@

    13.3.1 Using the f:ajax Tag

    -
    -
    -
    +
    -
    -

    The keywords listed in Table 13-2 can be used with the execute and render attributes of the f:ajax tag.

    @@ -231,46 +245,71 @@

    13.3.1 Using the f:ajax Tag

    -
    -
    -
    +
    -
    -

    Note that when you use the f:ajax tag in a Facelets page, the JavaScript resource library is loaded implicitly. This resource library can also be loaded explicitly as described in Loading JavaScript as a Resource.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-ajax004.html b/jsf-ajax004.html index e848a96..fee558c 100644 --- a/jsf-ajax004.html +++ b/jsf-ajax004.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    13.4 Sending an Ajax Request

    @@ -61,11 +80,6 @@

    13.4 Sending an Ajax Request

    following sections explain the process of creating and sending an Ajax request using some of these attributes.

    -
    -
    -
    +
    -
    -
    @@ -83,11 +97,6 @@

    13.4 Sending an Ajax Request

    -
    -
    -
    +
    -
    -

    The following topics are addressed here:

    @@ -132,11 +141,6 @@

    13.4.1 Using the event Attribute

    <h:outputText id="result" value="#{userNumberBean.response}" />
    -
    -
    -
    +
    -
    -
    @@ -154,11 +158,6 @@

    13.4.1 Using the event Attribute

    -
    -
    -
    +
    -
    -

    For a command button, the default event is click, so you do not actually need to specify event="click" to obtain the desired behavior.

    @@ -235,35 +234,65 @@

    13.4.4 Using the listener Attribute

    calculateTotal method of ReservationBean recalculates the total cost of the tickets and displays it in the output component named total.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-ajax005.html b/jsf-ajax005.html index c620762..8d61208 100644 --- a/jsf-ajax005.html +++ b/jsf-ajax005.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    13.5 Monitoring Events on the Client

    @@ -106,11 +125,6 @@

    13.5 Monitoring Events on the Client -
    -
    -
    +
    -
    -

    By using the status property of the data object, you can identify the current status of the Ajax request and monitor its progress. In the @@ -122,34 +136,64 @@

    13.5 Monitoring Events on the Client<f:ajax event="click" render="statusmessage" onevent="monitormyajaxevent"/>

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-ajax006.html b/jsf-ajax006.html index d93c59d..0241974 100644 --- a/jsf-ajax006.html +++ b/jsf-ajax006.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    13.6 Handling Errors

    @@ -116,11 +135,6 @@

    13.6 Handling Errors

    -
    -
    -
    +
    -
    -

    In the following example, any errors that occurred in processing the Ajax request are handled by the handlemyajaxerror JavaScript function:

    @@ -130,34 +144,64 @@

    13.6 Handling Errors

    <f:ajax event="click" render="errormessage" onerror="handlemyajaxerror"/>
    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-ajax007.html b/jsf-ajax007.html index 4a92b60..4722749 100644 --- a/jsf-ajax007.html +++ b/jsf-ajax007.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    13.7 Receiving an Ajax Response

    @@ -75,11 +94,6 @@

    13.7 Receiving an Ajax Response

    <h:outputText id="result" value="#{userNumberBean.response}" />
    -
    -
    -
    +
    -
    -
    @@ -99,39 +113,64 @@

    13.7 Receiving an Ajax Response

    -
    -
    -
    +
    -
    - -------- - - - - - - - - - - + +
    +

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    - - \ No newline at end of file diff --git a/jsf-ajax008.html b/jsf-ajax008.html index 989ef32..e4d44e2 100644 --- a/jsf-ajax008.html +++ b/jsf-ajax008.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    13.8 Ajax Request Lifecycle

    @@ -85,34 +104,64 @@

    13.8 Ajax Request Lifecycle

    their children. The components are then packaged up and sent back to the client as a response.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-ajax009.html b/jsf-ajax009.html index 98f9fe6..610dc7d 100644 --- a/jsf-ajax009.html +++ b/jsf-ajax009.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    13.9 Grouping of Components

    @@ -105,34 +124,64 @@

    13.9 Grouping of Components

    Now the button component will fire an Ajax action in case of a mouseover event as well as a mouse-click event.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-ajax010.html b/jsf-ajax010.html index 384df40..0cec169 100644 --- a/jsf-ajax010.html +++ b/jsf-ajax010.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    13.10 Loading JavaScript as a Resource

    @@ -188,11 +207,6 @@

    13.10.1 Using JavaScript -
    -
    -
    +
    -
    -

    + If no identifier is specified, the default assumed keyword for the @@ -234,11 +248,6 @@

    13.10.2 Using t -
    -
    -
    +
    -
    -

    The following example shows how the resource is loaded in a bean class:

    @@ -250,35 +259,65 @@

    13.10.2 Using t

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-ajax011.html b/jsf-ajax011.html index eb39400..61e24f1 100644 --- a/jsf-ajax011.html +++ b/jsf-ajax011.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    13.11 The ajaxguessnumber Example Application

    @@ -326,36 +345,66 @@

    13.11.2.3 To Run the ajaxguessnumber

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-ajax012.html b/jsf-ajax012.html index ef8e632..f730a0d 100644 --- a/jsf-ajax012.html +++ b/jsf-ajax012.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    13.12 Further Information about Ajax in JavaServer Faces Technology

    @@ -67,34 +86,64 @@

    13.12 Fur

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-configure.html b/jsf-configure.html index 317b372..0d059d2 100644 --- a/jsf-configure.html +++ b/jsf-configure.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    16 Configuring JavaServer Faces Applications

    @@ -105,34 +124,64 @@

    16 Configuring JavaServer Fac

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-configure001.html b/jsf-configure001.html index 3d0dfef..80faf13 100644 --- a/jsf-configure001.html +++ b/jsf-configure001.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    16.1 Introduction to Configuring JavaServer Faces Applications

    @@ -84,34 +103,64 @@

    16.1 Introduc

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-configure002.html b/jsf-configure002.html index fde5cdf..8ede0b5 100644 --- a/jsf-configure002.html +++ b/jsf-configure002.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    16.2 Using Annotations to Configure Managed Beans

    @@ -146,35 +165,65 @@

    16.2.1 Using Managed Bean Scopes

    with the view, you can use the view scope. The attributes persist until the user has navigated to the next view.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-configure003.html b/jsf-configure003.html index ad8f715..6675c2b 100644 --- a/jsf-configure003.html +++ b/jsf-configure003.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    16.3 Application Configuration Resource File

    @@ -288,35 +307,65 @@

    16.3.2 Ordering of file, then that file will be loaded after all the files that contain ordering elements.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-configure004.html b/jsf-configure004.html index 4af88c5..b38f1aa 100644 --- a/jsf-configure004.html +++ b/jsf-configure004.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    16.4 Using Faces Flows

    @@ -847,36 +866,66 @@

    16.4.3.7 To Run the checkout-module

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-configure005.html b/jsf-configure005.html index 94dda43..2afdac3 100644 --- a/jsf-configure005.html +++ b/jsf-configure005.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    16.5 Configuring Managed Beans

    @@ -270,11 +289,6 @@

    16.5.2 Initi -
    -
    -
    +
    -
    -

    Using the managed-bean Element includes an example of initializing an int property (a primitive type) using the value @@ -604,11 +618,6 @@

    16.5.2.5 Initializing Managed Bean -
    -
    -
    +
    -
    -

    Be sure not to allow cyclical references between objects. For example, neither of the AddressBean objects in the preceding example should @@ -625,35 +634,65 @@

    16.5.3 Initializing Maps and Lists

    from a tag rather than referencing a property that wraps a Map or a List.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-configure006.html b/jsf-configure006.html index 2fd328e..ccd824d 100644 --- a/jsf-configure006.html +++ b/jsf-configure006.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    16.6 Registering Application Messages

    @@ -274,35 +293,65 @@

    16.6.2 Referencing Error Messages

    and will display wherever the message or messages tag is placed on the page.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-configure007.html b/jsf-configure007.html index ec876bf..5fa5020 100644 --- a/jsf-configure007.html +++ b/jsf-configure007.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    16.7 Using Default Validators

    @@ -70,34 +89,64 @@

    16.7 Using Default Validators

    </faces-config>
    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-configure008.html b/jsf-configure008.html index 369198d..7f55204 100644 --- a/jsf-configure008.html +++ b/jsf-configure008.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    16.8 Registering a Custom Validator

    @@ -105,34 +124,64 @@

    16.8 Registering a Custom Validator

    Using a Custom Validator explains how to reference the validator from the page.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-configure009.html b/jsf-configure009.html index 936de81..8998adb 100644 --- a/jsf-configure009.html +++ b/jsf-configure009.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    16.9 Registering a Custom Converter

    @@ -96,34 +115,64 @@

    16.9 Registering a Custom Converter

    Creating and Using a Custom Converter explains how to create a custom converter.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-configure010.html b/jsf-configure010.html index 35f4870..511d963 100644 --- a/jsf-configure010.html +++ b/jsf-configure010.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    16.10 Configuring Navigation Rules

    @@ -119,11 +138,6 @@

    16.10 Configuring Navigation Rules

    -
    -
    -
    +
    -
    -

    Usually, the action method performs some processing on the form data of the current page. For example, the method might check whether the user @@ -227,34 +241,64 @@

    16.10 Configuring Navigation Rules

    When any of these cases is matched, the component tree defined by the to-view-id element will be selected for rendering.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-configure011.html b/jsf-configure011.html index d4e6f4e..d2edf50 100644 --- a/jsf-configure011.html +++ b/jsf-configure011.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    16.11 Registering a Custom Renderer with a Render Kit

    @@ -185,34 +204,64 @@

    16.11 Registering a Cus resource file, you need to put them in the component’s configuration rather than the renderer’s configuration.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-configure012.html b/jsf-configure012.html index 0258f35..b80b8e5 100644 --- a/jsf-configure012.html +++ b/jsf-configure012.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    16.12 Registering a Custom Component

    @@ -108,34 +127,64 @@

    16.12 Registering a Custom Component

    Registering a Custom Renderer with a Render Kit for further details on configuring facets.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-configure013.html b/jsf-configure013.html index 7c02a94..6df801e 100644 --- a/jsf-configure013.html +++ b/jsf-configure013.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    16.13 Basic Requirements of a JavaServer Faces Application

    @@ -458,35 +477,65 @@

    16.13.3 Including the C section, because this technique complies with the commonly accepted practice for packaging web applications.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-custom.html b/jsf-custom.html index 3a72a0f..ff3f5cd 100644 --- a/jsf-custom.html +++ b/jsf-custom.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    15 Creating Custom UI Components and Other Custom Objects

    @@ -109,34 +128,64 @@

    15 Creating Cust

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-custom001.html b/jsf-custom001.html index 7a94108..42edc62 100644 --- a/jsf-custom001.html +++ b/jsf-custom001.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    15.1 Introduction to Creating Custom Components

    @@ -133,34 +152,64 @@

    15.1 Introduction to Creatin how to bind component values and instances to data objects and how to bind custom objects to managed bean properties.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-custom002.html b/jsf-custom002.html index febfb20..7d0e9d2 100644 --- a/jsf-custom002.html +++ b/jsf-custom002.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    15.2 Determining Whether You Need a Custom Component or Renderer

    @@ -313,40 +332,65 @@

    15.2.3 Component, Renderer, and -
    -
    -
    +
    -
    -
    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-custom003.html b/jsf-custom003.html index a2a650d..14bd6f3 100644 --- a/jsf-custom003.html +++ b/jsf-custom003.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    15.3 Understanding the Image Map Example

    @@ -396,11 +415,6 @@

    15.3.5 Summary of the Imag -
    -
    -
    +
    -
    -

    The Duke’s Bookstore source directory, called bookstore-dir, is tut-install`/examples/case-studies/dukes-bookstore/src/java/dukesbookstore/. @@ -410,35 +424,65 @@

    15.3.5 Summary of the Imag bookstore-dir/renderers/. `ImageArea is located in bookstore-dir`/model/`.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-custom004.html b/jsf-custom004.html index 219b8ab..aa41a66 100644 --- a/jsf-custom004.html +++ b/jsf-custom004.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    15.4 Steps for Creating a Custom Component

    @@ -109,34 +128,64 @@

    15.4 Steps for Creating a Custom Component discusses how to use the custom component in a JavaServer Faces page.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-custom005.html b/jsf-custom005.html index 96235e0..555f3bb 100644 --- a/jsf-custom005.html +++ b/jsf-custom005.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    15.5 Creating Custom Component Classes

    @@ -642,35 +661,65 @@

    15.5.5 Saving and Restoring State

    You may also want to save state on the client if you expect your users to disable cookies.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-custom006.html b/jsf-custom006.html index 2815281..c918c8d 100644 --- a/jsf-custom006.html +++ b/jsf-custom006.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    15.6 Delegating Rendering to a Renderer

    @@ -211,35 +230,65 @@

    15.6.2 Identifying the Renderer Type

    element of the @FacesRenderer annotation for AreaRenderer as well as in the renderer-type element of the tag library descriptor.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-custom007.html b/jsf-custom007.html index 80c4d92..fbb6d30 100644 --- a/jsf-custom007.html +++ b/jsf-custom007.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    15.7 Implementing an Event Listener

    @@ -82,11 +101,6 @@

    15.7 Implementing an Event Listener

    component. See Handling Events for Custom Components for more information.

    -
    -
    -
    +
    -
    -
    @@ -106,11 +120,6 @@

    15.7 Implementing an Event Listener

    -
    -
    -
    +
    -
    -

    15.7.1 Implementing Value-Change Listeners

    @@ -199,35 +208,65 @@

    15.7.2 Implementing Action Listeners

    Registering an Action Listener on a Component explains how to register this listener onto a component.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-custom008.html b/jsf-custom008.html index 57c9661..4bfd714 100644 --- a/jsf-custom008.html +++ b/jsf-custom008.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    15.8 Handling Events for Custom Components

    @@ -123,34 +142,64 @@

    15.8 Handling Events for Custom C first place, it must implement ActionSource. Because MapComponent extends UICommand, it also implements ActionSource.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-custom009.html b/jsf-custom009.html index b98268a..738967e 100644 --- a/jsf-custom009.html +++ b/jsf-custom009.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    15.9 Defining the Custom Component Tag in a Tag Library Descriptor

    @@ -114,34 +133,64 @@

    15.9 Defi </context-param>

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-custom010.html b/jsf-custom010.html index 07ccc58..9537cd5 100644 --- a/jsf-custom010.html +++ b/jsf-custom010.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    15.10 Using a Custom Component

    @@ -152,34 +171,64 @@

    15.10 Using a Custom Component

    locale in the FacesContext instance according to which region was selected.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-custom011.html b/jsf-custom011.html index a115090..75f2aa1 100644 --- a/jsf-custom011.html +++ b/jsf-custom011.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    15.11 Creating and Using a Custom Converter

    @@ -367,35 +386,65 @@

    15.11.2 Using a Custom Converter

    </h:selectManyListbox>
    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-custom012.html b/jsf-custom012.html index 3c35ff1..1d290b3 100644 --- a/jsf-custom012.html +++ b/jsf-custom012.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    15.12 Creating and Using a Custom Validator

    @@ -401,35 +420,65 @@

    15.12.3 Using a Custom Validator

    </h:inputText>
    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-custom013.html b/jsf-custom013.html index d40a19d..c940981 100644 --- a/jsf-custom013.html +++ b/jsf-custom013.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    15.13 Binding Component Values and Instances to Managed Bean Properties

    @@ -195,11 +214,6 @@

    15.13 -
    -
    -
    +
    -
    -

    The next two sections explain how to use the value attribute to bind a component’s value to a bean property or other data objects and how to @@ -407,11 +421,6 @@

    15.13.2 Binding a Compo -
    -
    -
    +
    -
    -

    15.13.3 Binding a Component Instance to a Bean Property

    @@ -474,35 +483,65 @@

    15.13.3 Binding a Compo Instances explains how to write the bean properties bound to the example components.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-custom014.html b/jsf-custom014.html index 3dd6fa2..618b202 100644 --- a/jsf-custom014.html +++ b/jsf-custom014.html @@ -8,47 +8,66 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    + +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-develop.html b/jsf-develop.html index 38f608b..6bff20e 100644 --- a/jsf-develop.html +++ b/jsf-develop.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    12 Developing with JavaServer Faces Technology

    @@ -73,34 +92,64 @@

    12 Developing with JavaServ

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-develop001.html b/jsf-develop001.html index cef26b9..dec556c 100644 --- a/jsf-develop001.html +++ b/jsf-develop001.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +
    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-develop002.html b/jsf-develop002.html index 5ded780..a473f66 100644 --- a/jsf-develop002.html +++ b/jsf-develop002.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    12.2 Writing Bean Properties

    @@ -175,11 +194,6 @@

    12.2.1 Writing Properties -
    -
    -
    +
    -
    -

    When they bind components to properties by using the value attributes of the component tags, page authors need to ensure that the @@ -687,35 +701,65 @@

    12.2.3 W implementations are written in the same way and have the same general purpose.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-develop003.html b/jsf-develop003.html index 066bbf2..c320c90 100644 --- a/jsf-develop003.html +++ b/jsf-develop003.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    12.3 Writing Managed Bean Methods

    @@ -346,35 +365,65 @@

    12.3.5 Writing a Method Referencing a Method That Handles a Value-Change Event for more information.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-el.html b/jsf-el.html index c93f2f8..dff8524 100644 --- a/jsf-el.html +++ b/jsf-el.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    9 Expression Language

    @@ -92,34 +111,64 @@

    9 Expression Language

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-el001.html b/jsf-el001.html index 8967846..009cbfd 100644 --- a/jsf-el001.html +++ b/jsf-el001.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    9.1 Overview of the EL

    @@ -104,34 +123,64 @@

    9.1 Overview of the EL

    that custom resolvers that can handle expressions not already supported by the EL can be implemented.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-el002.html b/jsf-el002.html index c6f7f03..f981dc6 100644 --- a/jsf-el002.html +++ b/jsf-el002.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    9.2 Immediate and Deferred Evaluation Syntax

    @@ -148,35 +167,65 @@

    9.2.2 Deferred Evaluation

    Value expressions (both immediate and deferred) and method expressions are explained in the next section.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-el003.html b/jsf-el003.html index 66c4124..32c324d 100644 --- a/jsf-el003.html +++ b/jsf-el003.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    9.3 Value and Method Expressions

    @@ -544,11 +563,6 @@

    9.3.3 Lambda Expressions

    For basic information on lambda expressions, see http://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html.

    -
    -
    -
    +
    -
    -
    @@ -566,11 +580,6 @@

    9.3.3 Lambda Expressions

    -
    -
    -
    +
    -
    -

    A lambda expression uses the arrow token (->) operator. The identifiers to the left of the operator are called lambda parameters. @@ -610,35 +619,65 @@

    9.3.3 Lambda Expressions

    invoked in the method. It can also be nested in another lambda expression.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-el004.html b/jsf-el004.html index 7e7e283..32e544b 100644 --- a/jsf-el004.html +++ b/jsf-el004.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    9.4 Operations on Collection Objects

    @@ -55,11 +74,6 @@

    9.4 Operations on Collection Objects

    -
    -
    -
    +
    -
    -
    @@ -77,11 +91,6 @@

    9.4 Operations on Collection Objects

    -
    -
    -
    +
    -
    -

    For example, you can construct a set as follows:

    @@ -163,65 +172,92 @@

    9.4 Operations on Collection Objectshttp://docs.oracle.com/javase/8/docs/api/. The following subset of operations is supported by the EL:

    -
    -
    -
     +
    -`allMatch` +
    -`anyMatch` +
    -`average` +
    -`count` +
    -`distinct` +
    -`filter` +
    -`findFirst` +
    -`flatMap` +
    -`forEach` +
    -`iterator` +
    -`limit` +
    -`map` +
    -`max` +
    -`min` +
    -`noneMatch` +
    -`peek` +
    -`reduce` +
    -`sorted` +
    -`substream` +
    -`sum` +
    -`toArray` +
    -`toList` +
    -
    +
    +

    allMatch
    +anyMatch
    +average
    +count
    +distinct
    +filter
    +findFirst
    +flatMap
    +forEach
    +iterator
    +limit
    +map
    +max
    +min
    +noneMatch
    +peek
    +reduce
    +sorted
    +substream
    +sum
    +toArray
    +toList

    See the EL specification at http://www.jcp.org/en/jsr/detail?id=341 for details on these operations.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-el005.html b/jsf-el005.html index 208f734..9eaa7ba 100644 --- a/jsf-el005.html +++ b/jsf-el005.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    9.5 Operators

    @@ -141,34 +160,64 @@

    9.5 Operators

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-el006.html b/jsf-el006.html index 509bada..b08410d 100644 --- a/jsf-el006.html +++ b/jsf-el006.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    9.6 Reserved Words

    @@ -54,55 +73,82 @@

    9.6 Reserved Words

    The following words are reserved for the EL and should not be used as identifiers:

    -
    -
    -
     +
    -`and` +
    -`or` +
    -`not` +
    -`eq` +
    -`ne` +
    -`lt` +
    -`gt` +
    -`le` +
    -`ge` +
    -`true` +
    -`false` +
    -`null` +
    -`instanceof` +
    -`empty` +
    -`div` +
    -`mod`
    -
    +
    +

    and
    +or
    +not
    +eq
    +ne
    +lt
    +gt
    +le
    +ge
    +true
    +false
    +null
    +instanceof
    +empty
    +div
    +mod

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-el007.html b/jsf-el007.html index c127c1c..29631d7 100644 --- a/jsf-el007.html +++ b/jsf-el007.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    9.7 Examples of EL Expressions

    @@ -174,39 +193,64 @@

    9.7 Examples of EL Expressions

    -
    -
    -
    +
    -
    - -------- - - - - - - - - - - + +
    +

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    \ No newline at end of file diff --git a/jsf-el008.html b/jsf-el008.html index ff56dd0..ad2ee14 100644 --- a/jsf-el008.html +++ b/jsf-el008.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    9.8 Further Information about the Expression Language

    @@ -69,34 +88,64 @@

    9.8 Further Informati

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-facelets.html b/jsf-facelets.html index 194cebd..aca07d4 100644 --- a/jsf-facelets.html +++ b/jsf-facelets.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    8 Introduction to Facelets

    @@ -96,34 +115,64 @@

    8 Introduction to Facelets

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-facelets001.html b/jsf-facelets001.html index a82b082..a5b2fa8 100644 --- a/jsf-facelets001.html +++ b/jsf-facelets001.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    8.1 What Is Facelets?

    @@ -228,11 +247,6 @@

    8.1 What Is Facelets?

    -
    -
    -
    +
    -
    -

    Facelets provides two namespaces to support HTML5-friendly markup. For details, see HTML5-Friendly Markup.

    @@ -269,34 +283,64 @@

    8.1 What Is Facelets?

    backing beans. For more information on using EL expressions, see Using the EL to Reference Managed Beans.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-facelets002.html b/jsf-facelets002.html index a61c40b..c71af1d 100644 --- a/jsf-facelets002.html +++ b/jsf-facelets002.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    8.2 The Lifecycle of a Facelets Application

    @@ -103,34 +122,64 @@

    8.2 The Lifecycle of a Facelets

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-facelets003.html b/jsf-facelets003.html index 084590d..efca3cb 100644 --- a/jsf-facelets003.html +++ b/jsf-facelets003.html @@ -8,47 +8,66 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +
    -

    8.3 Developing a Simple Facelets Application: The guessnumber-jsfExample Application

    +

    8.3 Developing a Simple Facelets Application: The guessnumber-jsf Example Application

    This section describes the general steps involved in developing a @@ -515,36 +534,66 @@

    8.3.3.3 To Run the guessnumber-jsf E

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-facelets004.html b/jsf-facelets004.html index 596a3cb..e52be18 100644 --- a/jsf-facelets004.html +++ b/jsf-facelets004.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    8.4 Using Facelets Templates

    @@ -134,11 +153,6 @@

    8.4 Using Facelets Templates

    -
    -
    -
    +
    -
    -

    For more information on Facelets templating tags, see the oJavaServer Faces Facelets Tag Library documentation.

    @@ -229,34 +243,64 @@

    8.4 Using Facelets Templates

    For more information on creating these pages, see https://netbeans.org/kb/docs/web/jsf20-intro.html.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-facelets005.html b/jsf-facelets005.html index 9f65124..9aed7f3 100644 --- a/jsf-facelets005.html +++ b/jsf-facelets005.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    8.5 Composite Components

    @@ -144,11 +163,6 @@

    8.5 Composite Components

    -
    -
    -
    +
    -
    -

    For more information and a complete list of Facelets composite tags, see the oJavaServer Faces Facelets Tag Library documentation.

    @@ -239,34 +253,64 @@

    8.5 Composite Components

    See Chapter 14, "Composite Components: Advanced Topics and an Example," for more information and an example.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-facelets006.html b/jsf-facelets006.html index 1adcfe6..a3b90f9 100644 --- a/jsf-facelets006.html +++ b/jsf-facelets006.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    8.6 Web Resources

    @@ -120,34 +139,64 @@

    8.6 Web Resources

    directory, becomes accessible to the other application components, which can use it to create a resource instance.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-facelets007.html b/jsf-facelets007.html index 1fccf03..8ba97a4 100644 --- a/jsf-facelets007.html +++ b/jsf-facelets007.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    8.7 Relocatable Resources

    @@ -90,34 +109,64 @@

    8.7 Relocatable Resources

    JavaScript. See The compositecomponentexample Example Application for an example.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-facelets008.html b/jsf-facelets008.html index 3ed7463..6167c96 100644 --- a/jsf-facelets008.html +++ b/jsf-facelets008.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    8.8 Resource Library Contracts

    @@ -350,36 +369,66 @@

    8.8.1.5 To Run the hello1-rlc Example

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-facelets009.html b/jsf-facelets009.html index d8640c8..3476cfd 100644 --- a/jsf-facelets009.html +++ b/jsf-facelets009.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    8.9 HTML5-Friendly Markup

    @@ -320,11 +339,6 @@

    8.9.1 Using Pass-Through Elements

    -
    -
    -
    +
    -
    -

    8.9.2 Using Pass-Through Attributes

    @@ -692,36 +706,66 @@

    8.9.3.5 To Run the reservation Example

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-intro.html b/jsf-intro.html index 6f0088c..d10df1c 100644 --- a/jsf-intro.html +++ b/jsf-intro.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    7 JavaServer Faces Technology

    @@ -91,34 +110,64 @@

    7 JavaServer Faces Technology

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-intro001.html b/jsf-intro001.html index d1a3ca5..261efe9 100644 --- a/jsf-intro001.html +++ b/jsf-intro001.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    7.1 Introduction to JavaServer Faces Technology

    @@ -106,34 +125,64 @@

    7.1 Introduction to JavaSer describing the example JavaServer Faces application and its progression through the lifecycle stages.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-intro002.html b/jsf-intro002.html index 27d20c2..3fb5b76 100644 --- a/jsf-intro002.html +++ b/jsf-intro002.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    7.2 What Is a JavaServer Faces Application?

    @@ -129,34 +148,64 @@

    7.2 What Is a JavaServer Faces A container generates output, such as HTML or XHTML, that can be read by the client, such as a browser.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-intro003.html b/jsf-intro003.html index 96ea98c..f584e02 100644 --- a/jsf-intro003.html +++ b/jsf-intro003.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    7.3 JavaServer Faces Technology Benefits

    @@ -121,34 +140,64 @@

    7.3 JavaServer Faces Technology Be

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-intro004.html b/jsf-intro004.html index 93f694a..1f3e59e 100644 --- a/jsf-intro004.html +++ b/jsf-intro004.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    7.4 A Simple JavaServer Faces Application

    @@ -183,34 +202,64 @@

    7.4 A Simple JavaServer Faces App

    For full details on the lifecycle, see The Lifecycle of a JavaServer Faces Application.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-intro005.html b/jsf-intro005.html index 51f8276..dbc6d20 100644 --- a/jsf-intro005.html +++ b/jsf-intro005.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    7.5 User Interface Component Model

    @@ -554,35 +573,65 @@

    7.5.5 Validation Model

    "Bean Validation: Advanced Topics" for more information on Bean Validation.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-intro006.html b/jsf-intro006.html index 954dfe3..9a7e46a 100644 --- a/jsf-intro006.html +++ b/jsf-intro006.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +
    @@ -273,34 +292,64 @@ component tags, see Referencing a Method That Performs Navigation.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-intro007.html b/jsf-intro007.html index 1e3615a..a214aba 100644 --- a/jsf-intro007.html +++ b/jsf-intro007.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    7.7 The Lifecycle of a JavaServer Faces Application

    @@ -403,35 +422,65 @@

    7.7.7 Render Response Phase

    saved so that subsequent requests can access it. The saved state is available to the Restore View phase.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-intro008.html b/jsf-intro008.html index 4029491..d6a14ca 100644 --- a/jsf-intro008.html +++ b/jsf-intro008.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    7.8 Partial Processing and Partial Rendering

    @@ -71,34 +90,64 @@

    7.8 Partial Processing and Par information on these attributes, see Chapter 13, "Using Ajax with JavaServer Faces Technology".

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-intro009.html b/jsf-intro009.html index f28da87..32882b5 100644 --- a/jsf-intro009.html +++ b/jsf-intro009.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    7.9 Further Information about JavaServer Faces Technology

    @@ -69,34 +88,64 @@

    7.9 Further Infor

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-page-core.html b/jsf-page-core.html index c3ab3bc..885b282 100644 --- a/jsf-page-core.html +++ b/jsf-page-core.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    11 Using Converters, Listeners, and Validators

    @@ -95,34 +114,64 @@

    11 Using Converters, Listener

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-page-core001.html b/jsf-page-core001.html index c974096..b72f95f 100644 --- a/jsf-page-core001.html +++ b/jsf-page-core001.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    11.1 Using the Standard Converters

    @@ -138,11 +157,6 @@

    11.1 Using the Standard Converters

    -
    -
    -
    +
    -
    -

    A standard error message is associated with each of these converters. If you have registered one of these converters onto a component on your @@ -398,11 +412,6 @@

    11.1.2 Using DateTimeConverter

    -
    -
    -
    +
    -
    -

    11.1.3 Using NumberConverter

    @@ -555,40 +564,65 @@

    11.1.3 Using NumberConverter

    -
    -
    -
    +
    -
    -
    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-page-core002.html b/jsf-page-core002.html index 5f6ff1b..2c97593 100644 --- a/jsf-page-core002.html +++ b/jsf-page-core002.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    11.2 Registering Listeners on Components

    @@ -115,11 +134,6 @@

    11.2.1 Registering a -
    -
    -
    +
    -
    -

    The following example shows a value-change listener registered on a component:

    @@ -260,35 +274,65 @@

    11.2.2 Registering an Act referenced by the value attribute is stored when the commandLink or the commandButton component is activated.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-page-core003.html b/jsf-page-core003.html index 3a87bbd..7834747 100644 --- a/jsf-page-core003.html +++ b/jsf-page-core003.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    11.3 Using the Standard Validators

    @@ -119,11 +138,6 @@

    11.3 Using the Standard Validators

    -
    -
    -
    +
    -
    -

    All of these validator classes implement the Validator interface. Component writers and application developers can also implement this @@ -260,35 +274,65 @@

    11.3.2 Using Validator Tags

    for="passwordVal"/>
    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-page-core004.html b/jsf-page-core004.html index dfee8b5..f6404db 100644 --- a/jsf-page-core004.html +++ b/jsf-page-core004.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    11.4 Referencing a Managed Bean Method

    @@ -96,11 +115,6 @@

    11.4 Referencing a Managed Bean Metho -
    -
    -
    +
    -
    -

    Only components that implement ActionSource can use the action and actionListener attributes. Only components that implement @@ -242,35 +256,65 @@

    11.4.4 Referenci Event describes how to implement a method that handles a ValueChangeEvent.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-page.html b/jsf-page.html index 93fa26c..803e5fb 100644 --- a/jsf-page.html +++ b/jsf-page.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    10 Using JavaServer Faces Technology in Web Pages

    @@ -86,34 +105,64 @@

    10 Using JavaServer Face

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-page001.html b/jsf-page001.html index f664344..9d7edae 100644 --- a/jsf-page001.html +++ b/jsf-page001.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    10.1 Setting Up a Page

    @@ -122,34 +141,64 @@

    10.1 Setting Up a Page

    standard HTML tag library and the core tags from the JavaServer Faces core tag library.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-page002.html b/jsf-page002.html index 4878ffb..a5e8069 100644 --- a/jsf-page002.html +++ b/jsf-page002.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    10.2 Adding Components to a Page Using HTML Tag Library Tags

    @@ -264,11 +283,6 @@

    10.2 Adding Com -
    -
    -
    +
    -
    -

    The tags correspond to components in the javax.faces.component package. The components are discussed in more detail in @@ -347,11 +361,6 @@

    10.2.1 Common Component Tag Attributes< -
    -
    -
    +
    -
    -

    All the tag attributes except id can accept expressions, as defined by the EL, described in Expression Language.

    @@ -478,11 +487,6 @@

    10.2.1.3 The rendered Attribute

    use but lvalue expressions cannot use. For example, the expression in the preceding example uses the > operator.

    -
    -
    -
    +
    -
    -
    @@ -502,11 +506,6 @@

    10.2.1.3 The rendered Attribute

    -
    -
    -
    +
    -
    -

    10.2.1.4 The style and styleClass Attributes

    @@ -743,11 +742,6 @@

    10.2.4 Using Text Components

    -
    -
    -
    +
    -
    -

    The input tags support the tag attributes shown in Table 10-4 in addition to those described in Common Component Tag @@ -834,11 +828,6 @@

    10.2.4 Using Text Components

    -
    -
    -
    +
    -
    -

    Table 10-5 lists the tags that represent the output components.

    @@ -881,11 +870,6 @@

    10.2.4 Using Text Components

    -
    -
    -
    +
    -
    -

    The output tags support the converter tag attribute in addition to those listed in Common Component Tag Attributes.

    @@ -1101,7 +1085,7 @@

    10.2.4.5 Disp

    -

    10.2.5 Using Command Component Tags for Performing Actions andNavigation

    +

    10.2.5 Using Command Component Tags for Performing Actions and Navigation

    In JavaServer Faces applications, the button and link component tags are used to perform actions, such as submitting a form, and for navigating @@ -1195,11 +1179,6 @@

    -
    -
    -
    +
    -
    -
    @@ -1217,11 +1196,6 @@
    -
    -
    -
    +
    -
    -
    @@ -1312,11 +1286,6 @@

    10.2.7 L -
    -
    -
    +
    -
    -

    The h:panelGrid tag is used to represent an entire table. The h:panelGroup tag is used to represent rows in a table. Other tags are @@ -2004,11 +1973,6 @@

    10.2.12 Using Data-Bound Table Compon -
    -
    -
    +
    -
    -

    Each of the attributes in Table 10-7 can specify more than one style. If columnClasses or rowClasses specifies more than one @@ -2375,7 +2339,7 @@

    10.2.16.3 To Run the bookmarks Example

    -

    10.2.17 Resource Relocation Using h:outputScript and h:outputStylesheetTags

    +

    10.2.17 Resource Relocation Using h:outputScript and h:outputStylesheet Tags

    Resource relocation refers to the ability of a JavaServer Faces application to specify the location where a resource can be rendered. @@ -2510,35 +2474,65 @@

    10.2 style sheet and script. This allows the page authors freedom from defining resource locations.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsf-page003.html b/jsf-page003.html index 10e076e..0bd580c 100644 --- a/jsf-page003.html +++ b/jsf-page003.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    10.3 Using Core Tags

    @@ -96,11 +115,6 @@

    10.3 Using Core Tags

    -
    -
    -
    +
    -
    -

    Table 10-9 lists the data-conversion core tags.

    @@ -138,11 +152,6 @@

    10.3 Using Core Tags

    -
    -
    -
    +
    -
    -

    Table 10-10 lists the facet core tags.

    @@ -175,11 +184,6 @@

    10.3 Using Core Tags

    -
    -
    -
    +
    -
    -

    Table 10-11 lists the core tags that represent items in a list.

    @@ -212,11 +216,6 @@

    10.3 Using Core Tags

    -
    -
    -
    +
    -
    -

    Table 10-12 lists the validator core tags.

    @@ -269,11 +268,6 @@

    10.3 Using Core Tags

    -
    -
    -
    +
    -
    -

    Table 10-13 lists the core tags that fall into other categories.

    @@ -330,11 +324,6 @@

    10.3 Using Core Tags

    -
    -
    -
    +
    -
    -

    These tags, which are used in conjunction with component tags, are explained in other sections of this tutorial.

    @@ -365,22 +354,12 @@

    10.3 Using Core Tags

    Event-handling tags

    Data-conversion tags

    @@ -393,11 +372,6 @@

    10.3 Using Core Tags

    f:loadBundle

    @@ -405,11 +379,6 @@

    10.3 Using Core Tags

    @@ -417,11 +386,6 @@

    10.3 Using Core Tags

    @@ -429,11 +393,6 @@

    10.3 Using Core Tags

    @@ -446,48 +405,68 @@

    10.3 Using Core Tags

    -
    -
    -
    +
    -
    - -------- - - - - - - - - - - + +
    +

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    \ No newline at end of file diff --git a/jsonp.html b/jsonp.html index a723086..3524e39 100644 --- a/jsonp.html +++ b/jsonp.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    19 JSON Processing

    @@ -88,34 +107,64 @@

    19 JSON Processing

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsonp001.html b/jsonp001.html index 76a3517..96dce13 100644 --- a/jsonp001.html +++ b/jsonp001.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    19.1 Introduction to JSON

    @@ -189,35 +208,65 @@

    19.1.3 Generating and Parsing JSON Dat Processing in the Java EE Platform describes the functionality provided by the Java API for JSON Processing (JSR 353).

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsonp002.html b/jsonp002.html index 63571bc..4e39a3c 100644 --- a/jsonp002.html +++ b/jsonp002.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    19.2 JSON Processing in the Java EE Platform

    @@ -153,11 +172,6 @@

    19.2 JSON Processing in the Jav -
    -
    -
    +
    -
    -

    @@ -187,39 +201,64 @@

    19.2 JSON Processing in the Jav -
    -
    -
    +
    -
    - -------- - - - - - - - - - - + +
    +

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -

    -
    \ No newline at end of file diff --git a/jsonp003.html b/jsonp003.html index 75404a4..c7dae17 100644 --- a/jsonp003.html +++ b/jsonp003.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    19.3 Using the Object Model API

    @@ -305,35 +324,65 @@

    19.3.4 Writing an Object Model to a System.out.println(jsonData);

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsonp004.html b/jsonp004.html index 599693d..3d4603d 100644 --- a/jsonp004.html +++ b/jsonp004.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    19.4 Using the Streaming API

    @@ -216,35 +235,65 @@

    19.4.2 Writing JSON Data Using a Ge writeStartObject, and writeEnd methods. The JsonGenerator.close method closes the underlying writer or output stream.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsonp005.html b/jsonp005.html index 2f948ed..547d65f 100644 --- a/jsonp005.html +++ b/jsonp005.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    19.5 JSON in Java EE RESTful Web Services

    @@ -76,34 +95,64 @@

    19.5 JSON in Java EE RESTful Web S methods. For more information, see the sample code for JSON Processing included with the Java EE 7 SDK.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsonp006.html b/jsonp006.html index 5c47add..126c4cb 100644 --- a/jsonp006.html +++ b/jsonp006.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    19.6 The jsonpmodel Example Application

    @@ -235,36 +254,66 @@

    19.6.2.2 To Run t

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsonp007.html b/jsonp007.html index 03708dd..2fdbc39 100644 --- a/jsonp007.html +++ b/jsonp007.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    19.7 The jsonpstreaming Example Application

    @@ -235,36 +254,66 @@

    19.7.2.2 To R

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/jsonp008.html b/jsonp008.html index 8a693ae..df2dff6 100644 --- a/jsonp008.html +++ b/jsonp008.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    19.8 Further Information about the Java API for JSON Processing

    @@ -57,34 +76,64 @@

    19.8 Further

    http://www.jcp.org/en/jsr/detail?id=353

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/overview.html b/overview.html index f817c58..0ad8794 100644 --- a/overview.html +++ b/overview.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    1 Overview

    @@ -96,34 +115,64 @@

    1 Overview

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/overview001.html b/overview001.html index f9c8d1b..0d54e89 100644 --- a/overview001.html +++ b/overview001.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    1.1 Introduction to Java EE

    @@ -101,34 +120,64 @@

    1.1 Introduction to Java EE

    and accompanying text a valuable and accessible knowledge base for creating your own solutions.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/overview002.html b/overview002.html index 5e3ea15..c12e3b1 100644 --- a/overview002.html +++ b/overview002.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    1.2 Java EE 7 Platform Highlights

    @@ -98,34 +117,64 @@

    1.2 Java EE 7 Platform Highlights

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/overview003.html b/overview003.html index fd2c02f..78c9976 100644 --- a/overview003.html +++ b/overview003.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    1.3 Java EE Application Model

    @@ -90,34 +109,64 @@

    1.3 Java EE Application Model

    The developer can rely on the platform to provide solutions for the hard systems-level problems of developing a multitier service.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/overview004.html b/overview004.html index cebd7b2..d150344 100644 --- a/overview004.html +++ b/overview004.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    1.4 Distributed Multitiered Applications

    @@ -343,35 +362,65 @@

    1.4.6 Enterprise Information System might need access to enterprise information systems for database connectivity.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/overview005.html b/overview005.html index 629b8bd..7a41d9f 100644 --- a/overview005.html +++ b/overview005.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    1.5 Java EE Containers

    @@ -163,35 +182,65 @@

    1.5.2 Container Types

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/overview006.html b/overview006.html index 0cb8f36..aff8439 100644 --- a/overview006.html +++ b/overview006.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    1.6 Web Services Support

    @@ -154,35 +173,65 @@

    1.6.3 WSDL Standard Format

    specification of a web service that uses remote procedure calls to communicate with clients.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/overview007.html b/overview007.html index 3bf6030..7887c6b 100644 --- a/overview007.html +++ b/overview007.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    1.7 Java EE Application Assembly and Deployment

    @@ -72,34 +91,64 @@

    1.7 Java EE Application Ass can access it and the name of the local database. Once deployed on a local platform, the application is ready to run.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/overview008.html b/overview008.html index 955d6fe..52eb6c8 100644 --- a/overview008.html +++ b/overview008.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    1.8 Java EE 7 APIs

    @@ -600,35 +619,65 @@

    1.8.21 Batch Applications for platform. The Java EE 7 platform requires Batch Applications for the Java Platform 1.0.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/overview009.html b/overview009.html index 1a52f68..2c9eca9 100644 --- a/overview009.html +++ b/overview009.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    1.9 Java EE 7 APIs in the Java Platform, Standard Edition 7

    @@ -227,35 +246,65 @@

    1.9.9 Common Annotations for t

    The Java EE 7 platform requires Common Annotations for the Java Platform 1.2.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/overview010.html b/overview010.html index bcb30f1..e2d4f6c 100644 --- a/overview010.html +++ b/overview010.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    1.10 GlassFish Server Tools

    @@ -91,11 +110,6 @@

    1.10 GlassFish Server Tools

    Administration Console

    -
    -
    -
    -
    +
    -

    A web-based GUI GlassFish Server administration utility. Used to stop GlassFish Server and to manage users, resources, and applications.

    @@ -152,39 +166,64 @@

    1.10 GlassFish Server Tools

    -
    -
    -
    +
    -
    - -------- - - - - - - - - - - + +
    +

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    \ No newline at end of file diff --git a/packaging.html b/packaging.html index 270eafc..15c221c 100644 --- a/packaging.html +++ b/packaging.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    5 Packaging

    @@ -76,34 +95,64 @@

    5 Packaging

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/packaging001.html b/packaging001.html index da27f76..61f9539 100644 --- a/packaging001.html +++ b/packaging001.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    5.1 Packaging Applications

    @@ -136,34 +155,64 @@

    5.1 Packaging Applications

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/packaging002.html b/packaging002.html index 47f0290..4547aee 100644 --- a/packaging002.html +++ b/packaging002.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    5.2 Packaging Enterprise Beans

    @@ -162,35 +181,65 @@

    5.2.2 Packaging Enterprise Be WEB-INF/web.xml

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/packaging003.html b/packaging003.html index ff81ac0..1ea4ee1 100644 --- a/packaging003.html +++ b/packaging003.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    5.3 Packaging Web Archives

    @@ -138,34 +157,64 @@

    5.3 Packaging Web Archives

    Structure"

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/packaging004.html b/packaging004.html index 7f1186a..ff08a7e 100644 --- a/packaging004.html +++ b/packaging004.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    5.4 Packaging Resource Adapter Archives

    @@ -77,34 +96,64 @@

    5.4 Packaging Resource Adapter Arch component or as part of a larger application. In both cases, the adapter is available to all applications using a lookup procedure.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/partbeanvalidation.html b/partbeanvalidation.html index 05d2f45..c72ca63 100644 --- a/partbeanvalidation.html +++ b/partbeanvalidation.html @@ -8,43 +8,66 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    - ----- - - - - - - - -

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    -
    - ----- - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

     

    @@ -75,34 +98,64 @@

    Bean Validation

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/partcasestudies.html b/partcasestudies.html index f2f8241..b6d02ae 100644 --- a/partcasestudies.html +++ b/partcasestudies.html @@ -8,43 +8,66 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    - ----- - - - - - - - -

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    -
    - ----- - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

     

    @@ -79,34 +102,64 @@

    Case Studies

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/partcdi.html b/partcdi.html index a8dfc0f..a8d4f8a 100644 --- a/partcdi.html +++ b/partcdi.html @@ -8,43 +8,66 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    - ----- - - - - - - - -

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    -
    - ----- - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

     

    @@ -83,34 +106,64 @@

    Contexts and Dependency I

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/partentbeans.html b/partentbeans.html index 7a6f8bd..4f53b4a 100644 --- a/partentbeans.html +++ b/partentbeans.html @@ -8,43 +8,66 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    - ----- - - - - - - - -

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    -
    - ----- - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

     

    @@ -86,34 +109,64 @@

    Enterprise Beans

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/partintro.html b/partintro.html index a55da94..7d56b93 100644 --- a/partintro.html +++ b/partintro.html @@ -8,43 +8,66 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    - ----- - - - - - - - -

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    -
    - ----- - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

     

    @@ -73,34 +96,64 @@

    Introduction

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/partmessaging.html b/partmessaging.html index 8dc1b62..3d77b74 100644 --- a/partmessaging.html +++ b/partmessaging.html @@ -8,43 +8,66 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    - ----- - - - - - - - -

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    -
    - ----- - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

     

    @@ -74,34 +97,64 @@

    Messaging

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/partpersist.html b/partpersist.html index 2b71be2..1c5f59e 100644 --- a/partpersist.html +++ b/partpersist.html @@ -8,43 +8,66 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    - ----- - - - - - - - -

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    -
    - ----- - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

     

    @@ -99,34 +122,64 @@

    Persistence

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/partplatform.html b/partplatform.html index 0d96e88..a11aee2 100644 --- a/partplatform.html +++ b/partplatform.html @@ -8,43 +8,66 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    - ----- - - - - - - - -

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    -
    - ----- - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

     

    @@ -76,34 +99,64 @@

    Platform Basics

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/partsecurity.html b/partsecurity.html index fc92e87..09d97a5 100644 --- a/partsecurity.html +++ b/partsecurity.html @@ -8,43 +8,66 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    - ----- - - - - - - - -

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    -
    - ----- - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

     

    @@ -83,34 +106,64 @@

    Security

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/partsupporttechs.html b/partsupporttechs.html index b7666dd..163df5f 100644 --- a/partsupporttechs.html +++ b/partsupporttechs.html @@ -8,43 +8,66 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    - ----- - - - - - - - -

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    -
    - ----- - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

     

    @@ -88,34 +111,64 @@

    Java EE Supporting Technologies

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/partwebsvcs.html b/partwebsvcs.html index 5fc9683..117dccc 100644 --- a/partwebsvcs.html +++ b/partwebsvcs.html @@ -8,43 +8,66 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    - ----- - - - - - - - -

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    -
    - ----- - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

     

    @@ -86,34 +109,64 @@

    Web Services

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/partwebtier.html b/partwebtier.html index 9e96dec..9329355 100644 --- a/partwebtier.html +++ b/partwebtier.html @@ -8,43 +8,66 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    - ----- - - - - - - - -

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    -
    - ----- - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

     

    @@ -121,34 +144,64 @@

    The Web Tier

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/persistence-basicexamples.html b/persistence-basicexamples.html index ded1b5e..89ea2d8 100644 --- a/persistence-basicexamples.html +++ b/persistence-basicexamples.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    38 Running the Persistence Examples

    @@ -75,34 +94,64 @@

    38 Running the Persistence Examples

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/persistence-basicexamples001.html b/persistence-basicexamples001.html index 08563bf..750de6c 100644 --- a/persistence-basicexamples001.html +++ b/persistence-basicexamples001.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    38.1 Overview of the Persistence Examples

    @@ -59,34 +78,64 @@

    38.1 Overview of the Persistence E with the concepts detailed in Chapter 37, "Introduction to the Java Persistence API."

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/persistence-basicexamples002.html b/persistence-basicexamples002.html index 5d28b60..69e2100 100644 --- a/persistence-basicexamples002.html +++ b/persistence-basicexamples002.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    38.2 The order Application

    @@ -86,11 +105,6 @@

    38.2 The order Application

    Schema for the order Application"

    -
    -
    -
    +
    -
    -
    @@ -107,11 +121,6 @@

    38.2 The order Application

    -
    -
    -
    +
    -
    -

    38.2.1 Entity Relationships in the order Application

    @@ -980,36 +989,66 @@

    38.2.8.2 To Run the order Example

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/persistence-basicexamples003.html b/persistence-basicexamples003.html index 4f3f57e..fae06d2 100644 --- a/persistence-basicexamples003.html +++ b/persistence-basicexamples003.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    38.3 The roster Application

    @@ -76,11 +95,6 @@

    38.3 The roster Application

    Schema for the roster Application"

    -
    -
    -
    +
    -
    -
    @@ -97,11 +111,6 @@

    38.3 The roster Application

    -
    -
    -
    +
    -
    -

    38.3.1 Relationships in the roster Application

    @@ -610,36 +619,66 @@

    38.3.5.2 To Run the roster Exampl

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/persistence-basicexamples004.html b/persistence-basicexamples004.html index 2ca15ac..69bdc77 100644 --- a/persistence-basicexamples004.html +++ b/persistence-basicexamples004.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    38.4 The address-book Application

    @@ -371,36 +390,66 @@

    38.4.4.2 To Run the address

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/persistence-cache.html b/persistence-cache.html index 497ae37..2bffbd7 100644 --- a/persistence-cache.html +++ b/persistence-cache.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    44 Using a Second-Level Cache with Java Persistence API Applications

    @@ -70,34 +89,64 @@

    44 Us

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/persistence-cache001.html b/persistence-cache001.html index b77fa3c..3ac529e 100644 --- a/persistence-cache001.html +++ b/persistence-cache001.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    44.1 Overview of the Second-Level Cache

    @@ -60,11 +79,6 @@

    44.1 Overview of the Second-Level Ca application. That is, the application reads and commits data through the normal entity manager operations without knowing about the cache.

    -
    -
    -
    +
    -
    -
    @@ -82,11 +96,6 @@

    44.1 Overview of the Second-Level Ca

    -
    -
    -
    +
    -
    -

    The second-level cache for a persistence unit may be configured to one of several second-level cache modes. The following cache mode settings @@ -138,11 +147,6 @@

    44.1 Overview of the Second-Level Ca -
    -
    -
    +
    -
    -

    One consequence of using a second-level cache in an application is that the underlying data may have changed in the database tables, while the @@ -234,35 +238,65 @@

    44.1.1 Controlling whether E is set to ALL or NONE, the value of the @Cacheable annotation is ignored by the persistence provider.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/persistence-cache002.html b/persistence-cache002.html index 6139278..c795c0b 100644 --- a/persistence-cache002.html +++ b/persistence-cache002.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    44.2 Specifying the Cache Mode Settings to Improve Performance

    @@ -64,11 +83,6 @@

    44.2 Specifyi </persistence-unit>

    -
    -
    -
    +
    -
    -
    @@ -87,11 +101,6 @@

    44.2 Specifyi

    -
    -
    -
    +
    -
    -

    Alternatively, you can specify the shared cache mode by setting the javax.persistence.sharedCache.mode property to one of the shared cache @@ -195,11 +204,6 @@

    44.2.1.3 Setting the Cache Re Person person = em.find(Person.class, personPK, props);

    -
    -
    -
    +
    -
    -
    @@ -217,11 +221,6 @@

    44.2.1.3 Setting the Cache Re

    -
    -
    -
    +
    -
    -

    To set the retrieval or store mode when using queries, call the Query.setHint or TypedQuery.setHint methods, depending on the type @@ -289,11 +288,6 @@

    44.2.2.1 Overview of
  • Clear the cache of all entity data

    -
    -
    -
    +
    -
    -
  • @@ -314,11 +308,6 @@

    44.2.2.1 Overview of -
    -
    -
    +
    -
    -

    44.2.2.2 Checking whether an Entity’s Data Is Cached

    @@ -410,36 +399,66 @@

    44.2.2.4 Removing All Data from the Ca

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/persistence-criteria.html b/persistence-criteria.html index 0b097bb..9c60d3c 100644 --- a/persistence-criteria.html +++ b/persistence-criteria.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    40 Using the Criteria API to Create Queries

    @@ -75,34 +94,64 @@

    40 Using the Criteria API to C

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/persistence-criteria001.html b/persistence-criteria001.html index 3c118db..7e9a92b 100644 --- a/persistence-criteria001.html +++ b/persistence-criteria001.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    40.1 Overview of the Criteria and Metamodel APIs

    @@ -185,34 +204,64 @@

    40.1 Overview of the Criter
    List<Pet> allPets = q.getResultList();

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/persistence-criteria002.html b/persistence-criteria002.html index 74de366..a2428c5 100644 --- a/persistence-criteria002.html +++ b/persistence-criteria002.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    40.2 Using the Metamodel API to Model Entity Classes

    @@ -162,11 +181,6 @@

    40.2.1 Using Metamodel Classes

    EntityType<Pet> Pet_ = m.entity(Pet.class);
    -
    -
    -
    +
    -
    -
    @@ -187,40 +201,65 @@

    40.2.1 Using Metamodel Classes

    -
    -
    -
    +
    -
    -
    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/persistence-criteria003.html b/persistence-criteria003.html index 56f3eb1..041b147 100644 --- a/persistence-criteria003.html +++ b/persistence-criteria003.html @@ -8,47 +8,66 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +
    -

    40.3 Using the Criteria API and Metamodel API to Create Basic TypesafeQueries

    +

    40.3 Using the Criteria API and Metamodel API to Create Basic Typesafe Queries

    The basic semantics of a Criteria query consists of a SELECT clause, a @@ -332,11 +351,6 @@

    40.3.5.1 The Expression Interface Meth -
    -
    -
    +
    -
    -

    The following query uses the Expression.isNull method to find all pets where the color attribute is null:

    @@ -429,11 +443,6 @@

    40.3.5.2 Expression -
    -
    -
    +
    -
    -

    The following code uses the CriteriaBuilder.equal method:

    @@ -514,11 +523,6 @@

    40.3.5.2 Expression -
    -
    -
    +
    -
    -

    The following code shows the use of compound predicates in queries:

    @@ -708,36 +712,66 @@

    40.3.7.2 Collection-Valued Query Result List<Pet> results = q.getResultList();

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/persistence-entitygraphs.html b/persistence-entitygraphs.html index 213bc91..b0969b1 100644 --- a/persistence-entitygraphs.html +++ b/persistence-entitygraphs.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    43 Creating Fetch Plans with Entity Graphs

    @@ -76,34 +95,64 @@

    43 Creating Fetch Plans with En

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/persistence-entitygraphs001.html b/persistence-entitygraphs001.html index 2087405..f22d3be 100644 --- a/persistence-entitygraphs001.html +++ b/persistence-entitygraphs001.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    43.1 Overview of Using Fetch Plans and Entity Graphs

    @@ -74,34 +93,64 @@

    43.1 Overview of Using important fields from EmailMessage and EmailAttachment while fetching the lower priority data lazily.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/persistence-entitygraphs002.html b/persistence-entitygraphs002.html index 7c90b23..be0ae33 100644 --- a/persistence-entitygraphs002.html +++ b/persistence-entitygraphs002.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    43.2 Entity Graph Basics

    @@ -178,36 +197,66 @@

    43.2.2.2 Load Graphs

    EmailMessage message = em.find(EmailMessage.class, id, props);
    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/persistence-entitygraphs003.html b/persistence-entitygraphs003.html index 8790615..084ebfa 100644 --- a/persistence-entitygraphs003.html +++ b/persistence-entitygraphs003.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    43.3 Using Named Entity Graphs

    @@ -159,35 +178,65 @@

    43.3.2 Obtaini
    EntityGraph<EmailMessage> eg = em.getEntityGraph("emailEntityGraph");

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/persistence-entitygraphs004.html b/persistence-entitygraphs004.html index dfca1e2..62bcf7a 100644 --- a/persistence-entitygraphs004.html +++ b/persistence-entitygraphs004.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    43.4 Using Entity Graphs in Query Operations

    @@ -83,34 +102,64 @@

    43.4 Using Entity Graphs in Que List<EmailMessage> messages = q.getResultList();

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/persistence-intro.html b/persistence-intro.html index de2ef2e..195c537 100644 --- a/persistence-intro.html +++ b/persistence-intro.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    37 Introduction to the Java Persistence API

    @@ -83,34 +102,64 @@

    37 Introduction to the Java Pe

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/persistence-intro001.html b/persistence-intro001.html index faaee1b..3e25050 100644 --- a/persistence-intro001.html +++ b/persistence-intro001.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    37.1 Overview of the Java Persistence API

    @@ -71,34 +90,64 @@

    37.1 Overview of the Java Persiste

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/persistence-intro002.html b/persistence-intro002.html index 39b20d5..cf0684a 100644 --- a/persistence-intro002.html +++ b/persistence-intro002.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    37.2 Entities

    @@ -799,11 +818,6 @@

    37.2.5.4 Cascade Operations and Re -
    -
    -
    +
    -
    -

    Cascade delete relationships are specified using the cascade=REMOVE element specification for @OneToOne and @OneToMany relationships. @@ -908,35 +922,65 @@

    37.2.6 Embeddable Classes in Entities

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/persistence-intro003.html b/persistence-intro003.html index 321926a..544c7ed 100644 --- a/persistence-intro003.html +++ b/persistence-intro003.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    37.3 Entity Inheritance

    @@ -279,11 +298,6 @@

    37.3.4.1 The Single Table -
    -
    -
    +
    -
    -

    The javax.persistence.DiscriminatorType enumerated type is used to set the type of the discriminator column in the database by setting the @@ -374,36 +388,66 @@

    37.3.4.3 The Joined Subclass Strategy

    database schema. For information on discriminator columns, see The Single Table per Class Hierarchy Strategy.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/persistence-intro004.html b/persistence-intro004.html index a6a58a6..845f746 100644 --- a/persistence-intro004.html +++ b/persistence-intro004.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    37.4 Managing Entities

    @@ -473,46 +492,71 @@

    37.4.2 Persistence Units

    -
    -
    -
    +
    -
    -
    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/persistence-intro005.html b/persistence-intro005.html index 0c5d929..31b1fe1 100644 --- a/persistence-intro005.html +++ b/persistence-intro005.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    37.5 Querying Entities

    @@ -96,34 +115,64 @@

    37.5 Querying Entities

    operations on those objects before submitting the query to the entity manager.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/persistence-intro006.html b/persistence-intro006.html index c3daea3..4e040e2 100644 --- a/persistence-intro006.html +++ b/persistence-intro006.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    37.6 Database Schema Creation

    @@ -138,11 +157,6 @@

    37.6.1 Con -
    -
    -
    +
    -
    -

    In this example, the persistence provider will delete any remaining database artifacts and then create the artifacts when the application is @@ -204,11 +218,6 @@

    37.6.1 Con -
    -
    -
    +
    -
    -

    In this example, the persistence provider will use a script packaged within the application to create the database artifacts:

    @@ -257,35 +266,65 @@

    37.6.2 Loading Data Using SQL Scripts

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/persistence-intro007.html b/persistence-intro007.html index 30fa6ff..f1d2258 100644 --- a/persistence-intro007.html +++ b/persistence-intro007.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    37.7 Further Information about Persistence

    @@ -82,34 +101,64 @@

    37.7 Further Information about Pe

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/persistence-locking.html b/persistence-locking.html index 5cfc3d5..5218a81 100644 --- a/persistence-locking.html +++ b/persistence-locking.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    42 Controlling Concurrent Access to Entity Data with Locking

    @@ -69,34 +88,64 @@

    42 Controllin

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/persistence-locking001.html b/persistence-locking001.html index ab76de6..3ea98fb 100644 --- a/persistence-locking001.html +++ b/persistence-locking001.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    42.1 Overview of Entity Locking and Concurrency

    @@ -88,11 +107,6 @@

    42.1 Overview of Entity Lock optimistic locking when the underlying data is frequently accessed and modified by many transactions.

    -
    -
    -
    +
    -
    -
    @@ -109,11 +123,6 @@

    42.1 Overview of Entity Lock

    -
    -
    -
    +
    -
    -

    42.1.1 Using Optimistic Locking

    @@ -124,11 +133,6 @@

    42.1.1 Using Optimistic Locking

    entity instance is modified during a transaction. The application may read the version attribute, but must not modify the value.

    -
    -
    -
    +
    -
    -
    @@ -150,11 +154,6 @@

    42.1.1 Using Optimistic Locking

    -
    -
    -
    +
    -
    -

    The @Version annotation has the following requirements.

    @@ -194,35 +193,65 @@

    42.1.1 Using Optimistic Locking

    protected Short getVersion() { ... }
    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/persistence-locking002.html b/persistence-locking002.html index 2263ac0..2ba571e 100644 --- a/persistence-locking002.html +++ b/persistence-locking002.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    42.2 Lock Modes

    @@ -141,11 +160,6 @@

    42.2 Lock Modes

    -
    -
    -
    +
    -
    -

    42.2.1 Setting the Lock Mode

    @@ -255,11 +269,6 @@

    42.2.2.1 Pessimistic Locking Timeouts

    you set this property to 0, the persistence provider should throw a LockTimeoutException if it cannot immediately obtain a lock.

    -
    -
    -
    +
    -
    -
    @@ -278,11 +287,6 @@

    42.2.2.1 Pessimistic Locking Timeouts

    -
    -
    -
    +
    -
    -

    This property may be set programmatically by passing it to the EntityManager methods that allow lock modes to be specified, the @@ -311,36 +315,66 @@

    42.2.2.1 Pessimistic Locking Timeouts

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/persistence-querylanguage.html b/persistence-querylanguage.html index b6afc17..478aa79 100644 --- a/persistence-querylanguage.html +++ b/persistence-querylanguage.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    39 The Java Persistence Query Language

    @@ -86,34 +105,64 @@

    39 The Java Persistence Query Langu

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/persistence-querylanguage001.html b/persistence-querylanguage001.html index 34104be..f1b0f32 100644 --- a/persistence-querylanguage001.html +++ b/persistence-querylanguage001.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    39.1 Overview of the Java Persistence Query Language

    @@ -66,34 +85,64 @@

    39.1 Overview of the Ja Chapter 38, "Running the Persistence Examples."

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/persistence-querylanguage002.html b/persistence-querylanguage002.html index 9b883b5..b530be6 100644 --- a/persistence-querylanguage002.html +++ b/persistence-querylanguage002.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    39.2 Query Language Terminology

    @@ -93,34 +112,64 @@

    39.2 Query Language Terminology

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/persistence-querylanguage003.html b/persistence-querylanguage003.html index 0322614..c857ed8 100644 --- a/persistence-querylanguage003.html +++ b/persistence-querylanguage003.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    39.3 Creating Queries Using the Java Persistence Query Language

    @@ -158,35 +177,65 @@

    39.3.2 Positional Parameters in Querie

    Input parameters are numbered starting from 1. Input parameters are case-sensitive, and may be used by both dynamic and static queries.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/persistence-querylanguage004.html b/persistence-querylanguage004.html index 3fca3c4..143999a 100644 --- a/persistence-querylanguage004.html +++ b/persistence-querylanguage004.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    39.4 Simplified Query Language Syntax

    @@ -154,35 +173,65 @@

    39.4.2 Update and Delete Statements

    updated or deleted. The WHERE clause may be used to restrict the scope of the update or delete operation.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/persistence-querylanguage005.html b/persistence-querylanguage005.html index 72a3685..99d6975 100644 --- a/persistence-querylanguage005.html +++ b/persistence-querylanguage005.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    39.5 Example Queries

    @@ -610,36 +629,66 @@

    39.5.4.2 Delete Queries

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/persistence-querylanguage006.html b/persistence-querylanguage006.html index 8ce8289..8e0caed 100644 --- a/persistence-querylanguage006.html +++ b/persistence-querylanguage006.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    39.6 Full Query Language Syntax

    @@ -119,11 +138,6 @@

    39.6.1 BNF Symbols

    *

    -
    -
    -
    -
    +
    -

    The preceding construct may occur zero or more times.

    @@ -139,8 +153,7 @@

    39.6.1 BNF Symbols

    `

    -

    ` -


    +

    `

    An exclusive OR.

    @@ -153,11 +166,6 @@

    39.6.1 BNF Symbols

    -
    -
    -
    +
    -
    -

    39.6.2 BNF Grammar of the Java Persistence Query Language

    @@ -444,88 +452,85 @@

    39.6.3.1 Identifiers

    An identifier cannot be the same as a query language keyword. Here is a list of query language keywords:

    -
    -
    -
     +
    -`ABS` +
    -`ALL` +
    -`AND` +
    -`ANY` +
    -`AS` +
    -`ASC` +
    -`AVG` +
    -`BETWEEN` +
    -`BIT_LENGTH` +
    -`BOTH` +
    -`BY` +
    -`CASE` +
    -`CHAR_LENGTH` +
    -`CHARACTER_LENGTH` +
    -`CLASS` +
    -`COALESCE` +
    -`CONCAT` +
    -`COUNT` +
    -`CURRENT_DATE` +
    -`CURRENT_TIMESTAMP` +
    -`DELETE` +
    -`DESC` +
    -`DISTINCT` +
    -`ELSE` +
    -`EMPTY` +
    -`END` +
    -`ENTRY` +
    -`ESCAPE` +
    -`EXISTS` +
    -`FALSE` +
    -`FETCH` +
    -`FROM` +
    -`GROUP` +
    -`HAVING` +
    -`IN` +
    -`INDEX` +
    -`INNER` +
    -`IS` +
    -`JOIN` +
    -`KEY` +
    -`LEADING` +
    -`LEFT` +
    -`LENGTH` +
    -`LIKE` +
    -`LOCATE` +
    -`LOWER` +
    -`MAX` +
    -`MEMBER` +
    -`MIN` +
    -`MOD` +
    -`NEW` +
    -`NOT` +
    -`NULL` +
    -`NULLIF` +
    -`OBJECT` +
    -`OF` +
    -`OR` +
    -`ORDER` +
    -`OUTER` +
    -`POSITION` +
    -`SELECT` +
    -`SET` +
    -`SIZE` +
    -`SOME` +
    -`SQRT` +
    -`SUBSTRING` +
    -`SUM` +
    -`THEN` +
    -`TRAILING` +
    -`TRIM` +
    -`TRUE` +
    -`TYPE` +
    -`UNKNOWN` +
    -`UPDATE` +
    -`UPPER` +
    -`VALUE` +
    -`WHEN` +
    -`WHERE` +
    -
    +
    +

    ABS
    +ALL
    +AND
    +ANY
    +AS
    +ASC
    +AVG
    +BETWEEN
    +BIT_LENGTH
    +BOTH
    +BY
    +CASE
    +CHAR_LENGTH
    +CHARACTER_LENGTH
    +CLASS
    +COALESCE
    +CONCAT
    +COUNT
    +CURRENT_DATE
    +CURRENT_TIMESTAMP
    +DELETE
    +DESC
    +DISTINCT
    +ELSE
    +EMPTY
    +END
    +ENTRY
    +ESCAPE
    +EXISTS
    +FALSE
    +FETCH
    +FROM
    +GROUP
    +HAVING
    +IN
    +INDEX
    +INNER
    +IS
    +JOIN
    +KEY
    +LEADING
    +LEFT
    +LENGTH
    +LIKE
    +LOCATE
    +LOWER
    +MAX
    +MEMBER
    +MIN
    +MOD
    +NEW
    +NOT
    +NULL
    +NULLIF
    +OBJECT
    +OF
    +OR
    +ORDER
    +OUTER
    +POSITION
    +SELECT
    +SET
    +SIZE
    +SOME
    +SQRT
    +SUBSTRING
    +SUM
    +THEN
    +TRAILING
    +TRIM
    +TRUE
    +TYPE
    +UNKNOWN
    +UPDATE
    +UPPER
    +VALUE
    +WHEN
    +WHERE

    It is not recommended that you use an SQL keyword as an identifier, @@ -1146,11 +1151,6 @@

    39.6.5.4 Operators and Their Precedence< -
    -
    -
    +
    -
    -

    39.6.5.5 BETWEEN Expressions

    @@ -1278,11 +1278,6 @@

    39.6.5.7 LIKE Expressions

    -
    -
    -
    +
    -
    -

    39.6.5.8 NULL Comparison Expressions

    @@ -1504,11 +1499,6 @@

    39.6.5.12 Functional Expressions

    -
    -
    -
    +
    -
    -

    The CONCAT function concatenates two strings into one string.

    @@ -1584,11 +1574,6 @@

    39.6.5.12 Functional Expressions

    -
    -
    -
    +
    -
    -

    The ABS function takes a numeric expression and returns a number of the same type as the argument.

    @@ -1640,11 +1625,6 @@

    39.6.5.12 Functional Expressions

    -
    -
    -
    +
    -
    -

    39.6.5.13 Case Expressions

    @@ -1766,11 +1746,6 @@

    39.6.5.14 NULL Values

    -
    -
    -
    +
    -
    -

    @@ -1813,11 +1788,6 @@

    39.6.5.14 NULL Values

    -
    -
    -
    +
    -
    -

    39.6.5.15 Equality Semantics

    @@ -1878,11 +1848,6 @@

    39.6.5.15 Equality Semantics

    -
    -
    -
    +
    -
    -

    @@ -1925,11 +1890,6 @@

    39.6.5.15 Equality Semantics

    -
    -
    -
    +
    -
    -
    @@ -2055,11 +2015,6 @@

    39.6.6.1 Return Types

    -
    -
    -
    +
    -
    -

    For select method queries with an aggregate function (AVG, COUNT, MAX, MIN, or SUM) in the SELECT clause, the following rules @@ -2223,35 +2178,65 @@

    39.6.8 GROUP BY and HAVING Clauses

    GROUP BY c.status HAVING c.status IN (1, 2, 3)
    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/persistence-string-queries.html b/persistence-string-queries.html index 2c88bc8..2427ba8 100644 --- a/persistence-string-queries.html +++ b/persistence-string-queries.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    41 Creating and Using String-Based Criteria Queries

    @@ -73,34 +92,64 @@

    41 Creating and Using

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/persistence-string-queries001.html b/persistence-string-queries001.html index 7f0cbc6..2b9dc30 100644 --- a/persistence-string-queries001.html +++ b/persistence-string-queries001.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    41.1 Overview of String-Based Criteria API Queries

    @@ -79,34 +98,64 @@

    41.1 Overview of String-B Chapter 40, "Using the Criteria API to Create Queries".

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/persistence-string-queries002.html b/persistence-string-queries002.html index d1b01cc..cf3af86 100644 --- a/persistence-string-queries002.html +++ b/persistence-string-queries002.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    41.2 Creating String-Based Queries

    @@ -76,11 +95,6 @@

    41.2 Creating String-Based Queries

    cq.where(cb.equal(pet.get(Pet_.name), "Fido"));
    -
    -
    -
    +
    -
    -
    @@ -98,11 +112,6 @@

    41.2 Creating String-Based Queries

    -
    -
    -
    +
    -
    -

    Joins are specified in the same way:

    @@ -139,34 +148,64 @@

    41.2 Creating String-Based Queries

    cq.orderBy(cb.desc(pet.get("birthday"))); -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/persistence-string-queries003.html b/persistence-string-queries003.html index 06eda77..0878510 100644 --- a/persistence-string-queries003.html +++ b/persistence-string-queries003.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    41.3 Executing String-Based Queries

    @@ -66,34 +85,64 @@

    41.3 Executing String-Based Queries

    List<Pet> results = q.getResultList();
    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/preface.html b/preface.html index 079bd52..fedbd2b 100644 --- a/preface.html +++ b/preface.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    Preface

    @@ -226,11 +245,6 @@

    Conventions

    -
    -
    -
    +
    -
    -

    Default Paths and File Names

    @@ -303,40 +317,65 @@

    Default Paths and File Names

    -
    -
    -
    +
    -
    -
    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/resource-creation.html b/resource-creation.html index b8c0204..ed5b94a 100644 --- a/resource-creation.html +++ b/resource-creation.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    3 Resource Creation

    @@ -77,34 +96,64 @@

    3 Resource Creation

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/resource-creation001.html b/resource-creation001.html index b7676fd..ba589f0 100644 --- a/resource-creation001.html +++ b/resource-creation001.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    3.1 Resources and JNDI Naming

    @@ -89,34 +108,64 @@

    3.1 Resources and JNDI Naming

    recompiling the source files and repackaging. However, for most applications a deployment descriptor is not necessary.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/resource-creation002.html b/resource-creation002.html index e0142ea..5a6391b 100644 --- a/resource-creation002.html +++ b/resource-creation002.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    3.2 DataSource Objects and Connection Pools

    @@ -115,34 +134,64 @@

    3.2 DataSource Objects and Conn

    This is typically the only reference to a JDBC object for a persistence unit. The application code does not refer to any JDBC objects.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/resource-creation003.html b/resource-creation003.html index dad83ed..9a434ed 100644 --- a/resource-creation003.html +++ b/resource-creation003.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    3.3 Creating Resources Administratively

    @@ -77,34 +96,64 @@

    3.3 Creating Resources Administrati names, and the asadmin delete-jms-resource command to remove them, regardless of the way you created the resources.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/resources.html b/resources.html index d611080..228332c 100644 --- a/resources.html +++ b/resources.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    52 Resource Adapters and Contracts

    @@ -78,34 +97,64 @@

    52 Resource Adapters and Contracts

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/resources001.html b/resources001.html index 480aad2..ea90fd4 100644 --- a/resources001.html +++ b/resources001.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    52.1 What Is a Resource Adapter?

    @@ -245,35 +264,65 @@

    52.1.3 Outbound and Inbound Contracts

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/resources002.html b/resources002.html index 5b14683..7abe4e5 100644 --- a/resources002.html +++ b/resources002.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    52.2 Metadata Annotations

    @@ -184,34 +203,64 @@

    52.2 Metadata Annotations

    in the Java EE 7 platform, see the Java EE Connector Architecture 1.7 specification.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/resources003.html b/resources003.html index 77e4e15..6f0f2eb 100644 --- a/resources003.html +++ b/resources003.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    52.3 Common Client Interface

    @@ -116,34 +135,64 @@

    52.3 Common Client Interface

    adapter is very much like any other Java EE client that uses enterprise bean methods.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/resources004.html b/resources004.html index 2c98299..d6b92bb 100644 --- a/resources004.html +++ b/resources004.html @@ -8,47 +8,66 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +
    -

    52.4 Using Resource Adapters with Contexts and Dependency Injection forJava EE (CDI)

    +

    52.4 Using Resource Adapters with Contexts and Dependency Injection for Java EE (CDI)

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/resources005.html b/resources005.html index 27cc825..f975b55 100644 --- a/resources005.html +++ b/resources005.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    52.5 Further Information about Resource Adapters

    @@ -81,34 +100,64 @@

    52.5 Further Information ab

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/security-advanced.html b/security-advanced.html index 3bb825e..b7ac662 100644 --- a/security-advanced.html +++ b/security-advanced.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    50 Java EE Security: Advanced Topics

    @@ -89,34 +108,64 @@

    50 Java EE Security: Advanced Topics

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/security-advanced001.html b/security-advanced001.html index a28de98..8596d99 100644 --- a/security-advanced001.html +++ b/security-advanced001.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    50.1 Working with Digital Certificates

    @@ -180,11 +199,6 @@

    50.1.1.1 To Use keytool t password of changeit. For more information and other examples of creating and managing keystore files, read the keytool documentation.

    -
    -
    -
    +
    -
    -
    @@ -201,11 +215,6 @@

    50.1.1.1 To Use keytool t

    -
    -
    -
    +
    -
    -

    From the directory in which you want to create the key pair, run keytool as shown in the following steps.

    @@ -385,36 +394,66 @@

    50.1.3.1 To Specify a Differe

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/security-advanced002.html b/security-advanced002.html index 6cd377e..8f79f4a 100644 --- a/security-advanced002.html +++ b/security-advanced002.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    50.2 Authentication Mechanisms

    @@ -349,36 +368,66 @@

    50.2.2.2 Creati

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/security-advanced003.html b/security-advanced003.html index 7dd132c..c250001 100644 --- a/security-advanced003.html +++ b/security-advanced003.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    50.3 Using the JDBC Realm for User Authentication

    @@ -207,35 +226,65 @@

    50.3.1 To Configure a JDBC Aut

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/security-advanced004.html b/security-advanced004.html index 11516d7..69028ef 100644 --- a/security-advanced004.html +++ b/security-advanced004.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    50.4 Securing HTTP Resources

    @@ -236,34 +255,64 @@

    50.4 Securing HTTP Resources

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/security-advanced005.html b/security-advanced005.html index 3562356..9947891 100644 --- a/security-advanced005.html +++ b/security-advanced005.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    50.5 Securing Application Clients

    @@ -140,35 +159,65 @@

    50.5.2 Using Programmatic Login

    login and logout methods. Programmatic login is specific to a server.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/security-advanced006.html b/security-advanced006.html index ee3f1d9..d2d689f 100644 --- a/security-advanced006.html +++ b/security-advanced006.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    50.6 Securing Enterprise Information Systems Applications

    @@ -318,35 +337,65 @@

    50.6.5 Mapping an Ap

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/security-advanced007.html b/security-advanced007.html index e111c9f..c3d1cdc 100644 --- a/security-advanced007.html +++ b/security-advanced007.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    50.7 Configuring Security Using Deployment Descriptors

    @@ -74,7 +93,7 @@

    50.7 Configuring Secu

    -

    50.7.1 Specifying Security for Basic Authentication in the DeploymentDescriptor

    +

    50.7.1 Specifying Security for Basic Authentication in the Deployment Descriptor

    The elements of the deployment descriptor that add basic authentication to an example tell the server or browser to perform the following tasks.

    @@ -133,7 +152,7 @@

    -

    50.7.2 Specifying Non-Default Principal-to-Role Mapping in theDeployment Descriptor

    +

    50.7.2 Specifying Non-Default Principal-to-Role Mapping in the Deployment Descriptor

    To map a role name permitted by the application or module to principals (users) and groups defined on the server, use the @@ -167,35 +186,65 @@

    - - - - - - - - - - -

    Previous
    -Previous
     

    -

    Next
    -Next

    - -

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    - -

    Go To Table Of Contents
    -Contents

    - - -

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/security-advanced008.html b/security-advanced008.html index 236a1cf..c660c51 100644 --- a/security-advanced008.html +++ b/security-advanced008.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    50.8 Further Information about Advanced Security Topics

    @@ -83,34 +102,64 @@

    50.8 Further Informa

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/security-intro.html b/security-intro.html index abec220..5b4c811 100644 --- a/security-intro.html +++ b/security-intro.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    47 Introduction to Security in the Java EE Platform

    @@ -85,34 +104,64 @@

    47 Introduction to Sec

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/security-intro001.html b/security-intro001.html index 6d2bd21..6e9846a 100644 --- a/security-intro001.html +++ b/security-intro001.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    47.1 Overview of Java EE Security

    @@ -378,35 +397,65 @@

    47.1.3 Characteristics of Appli

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/security-intro002.html b/security-intro002.html index 1b0b15f..5dae88a 100644 --- a/security-intro002.html +++ b/security-intro002.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    47.2 Security Mechanisms

    @@ -331,36 +350,66 @@

    47.2.2.3 Message-Layer Security

    EE platform, this tutorial does not discuss using WSS to secure messages. See the Metro User’s Guide at https://metro.java.net/guide/.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/security-intro003.html b/security-intro003.html index 4a9199e..1259ffa 100644 --- a/security-intro003.html +++ b/security-intro003.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    47.3 Securing Containers

    @@ -172,35 +191,65 @@

    47.3.3 Using Programmatic Security

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/security-intro004.html b/security-intro004.html index aaf2af7..1c4df0b 100644 --- a/security-intro004.html +++ b/security-intro004.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    47.4 Securing GlassFish Server

    @@ -96,34 +115,64 @@

    47.4 Securing GlassFish Server

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/security-intro005.html b/security-intro005.html index 4e35315..bb54b98 100644 --- a/security-intro005.html +++ b/security-intro005.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    47.5 Working with Realms, Users, Groups, and Roles

    @@ -514,35 +533,65 @@

    47.5.4 Mapping Roles to Users and Gro element of the corresponding deployment descriptor or the role name defined in a @DeclareRoles annotation.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/security-intro006.html b/security-intro006.html index f2c2aca..b699c49 100644 --- a/security-intro006.html +++ b/security-intro006.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    47.6 Establishing a Secure Connection Using SSL

    @@ -171,35 +190,65 @@

    47.6.1 Verifying and Configuring the certificates, subsequent hits to this site assume that you still trust the content.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/security-intro007.html b/security-intro007.html index ad93819..a1b2f22 100644 --- a/security-intro007.html +++ b/security-intro007.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    47.7 Further Information about Security

    @@ -93,34 +112,64 @@

    47.7 Further Information about Secur

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/security-javaee.html b/security-javaee.html index cf0813a..5d0a146 100644 --- a/security-javaee.html +++ b/security-javaee.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    49 Getting Started Securing Enterprise Applications

    @@ -71,34 +90,64 @@

    49 Getting Started Sec

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/security-javaee001.html b/security-javaee001.html index 68da6d1..e810475 100644 --- a/security-javaee001.html +++ b/security-javaee001.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    49.1 Basic Security Tasks for Enterprise Applications

    @@ -77,34 +96,64 @@

    49.1 Basic Security Ta

    The sections on the security examples in this chapter and the previous chapter explain how to perform these tasks.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/security-javaee002.html b/security-javaee002.html index b1f3ba5..81133a9 100644 --- a/security-javaee002.html +++ b/security-javaee002.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    49.2 Securing Enterprise Beans

    @@ -699,35 +718,65 @@

    49.2.4 Deploying Secure Enterprise Be

    Deployment information is specific to a web or application server.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/security-javaee003.html b/security-javaee003.html index f5b51f8..ac7cf5e 100644 --- a/security-javaee003.html +++ b/security-javaee003.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    49.3 Examples: Securing Enterprise Beans

    @@ -70,7 +89,7 @@

    49.3 Examples: Securing Enterprise B

    -

    49.3.1 The cart-secure Example: Securing an Enterprise Bean withDeclarative Security

    +

    49.3.1 The cart-secure Example: Securing an Enterprise Bean with Declarative Security

    This section discusses how to configure an enterprise bean for basic user name/password authentication. When a bean that is constrained in @@ -355,7 +374,7 @@

    49.3.1.3 To Run the cart-sec

    -

    49.3.2 The converter-secure Example: Securing an Enterprise Bean withProgrammatic Security

    +

    49.3.2 The converter-secure Example: Securing an Enterprise Bean with Programmatic Security

    This example demonstrates how to use the getCallerPrincipal and isCallerInRole methods with an enterprise bean. This example starts @@ -582,36 +601,66 @@

    49.3.2.5 To Run the converter-secur

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/security-webtier.html b/security-webtier.html index b150acf..edc26bf 100644 --- a/security-webtier.html +++ b/security-webtier.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    48 Getting Started Securing Web Applications

    @@ -79,34 +98,64 @@

    48 Getting Started Securing W

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/security-webtier001.html b/security-webtier001.html index 02ffac7..003bc56 100644 --- a/security-webtier001.html +++ b/security-webtier001.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    48.1 Overview of Web Application Security

    @@ -153,34 +172,64 @@

    48.1 Overview of Web Application S

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/security-webtier002.html b/security-webtier002.html index 96e0af9..e4d1c6e 100644 --- a/security-webtier002.html +++ b/security-webtier002.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    48.2 Securing Web Applications

    @@ -275,11 +294,6 @@

    48.2.2.3 Specifying a Secure Connection<
  • Specify NONE to indicate that the container must accept the constrained requests on any connection, including an unprotected one.

    -
    -
    -
    +
    -
    -
  • @@ -299,11 +313,6 @@

    48.2.2.3 Specifying a Secure Connection< -
    -
    -
    +
    -
    -

    The user data constraint is handy to use in conjunction with basic and form-based user authentication. When the login authentication method is @@ -320,11 +329,6 @@

    48.2.2.3 Specifying a Secure Connection< that SSL support is configured for your server. SSL support is already configured for GlassFish Server.

    -
    -
    -
    +
    -
    -
    @@ -350,11 +354,6 @@

    48.2.2.3 Specifying a Secure Connection<

    -
    -
    -
    +
    -
    -

    48.2.2.4 Specifying Security Constraints for Resources

    @@ -621,7 +620,7 @@

    48.2.3.3 Digest Authentication

    -

    48.2.4 Specifying an Authentication Mechanism in the DeploymentDescriptor

    +

    48.2.4 Specifying an Authentication Mechanism in the Deployment Descriptor

    To specify an authentication mechanism, use the login-config element. It can contain the following subelements.

    @@ -640,11 +639,6 @@

    48.
  • The form-login-config subelement specifies the login and error pages that should be used when form-based login is specified.

    -
    -
    -
    +
    -
    -
  • @@ -666,11 +660,6 @@

    48. -
    -
    -
    +
    -
    -

    When you try to access a web resource that is constrained by a security-constraint element, the web container activates the @@ -771,35 +760,65 @@

    48.2.5 Declaring Security Roles

    because its constraints apply to all URL patterns specified by the @WebServlet annotation.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/security-webtier003.html b/security-webtier003.html index 9205d54..1939806 100644 --- a/security-webtier003.html +++ b/security-webtier003.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    48.3 Using Programmatic Security with Web Applications

    @@ -389,35 +408,65 @@

    48.3.4 Declaring and Linking Role is scoped to the component whose deployment descriptor contains the security-role-ref deployment descriptor element.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/security-webtier004.html b/security-webtier004.html index 90be4bf..c6d3a4b 100644 --- a/security-webtier004.html +++ b/security-webtier004.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    48.4 Examples: Securing Web Applications

    @@ -435,7 +454,7 @@

    48.4.3.4 To Run the hello2-basicaut

    -

    48.4.4 The hello1-formauth Example: Form-Based Authentication with aJavaServer Faces Application

    +

    48.4.4 The hello1-formauth Example: Form-Based Authentication with a JavaServer Faces Application

    This example explains how to use form-based authentication with a JavaServer Faces application. With form-based authentication, you can @@ -738,36 +757,66 @@

    48.4.4.5 To Run the hello1-formauth and reopen your browser, enter the application URL, and enter a user name and password that are not authorized.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/servlets.html b/servlets.html index 907d56a..12c61ba 100644 --- a/servlets.html +++ b/servlets.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    17 Java Servlet Technology

    @@ -117,34 +136,64 @@

    17 Java Servlet Technology

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/servlets001.html b/servlets001.html index 938b73b..9c90313 100644 --- a/servlets001.html +++ b/servlets001.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    17.1 What Is a Servlet?

    @@ -67,34 +86,64 @@

    17.1 What Is a Servlet?

    methods, such as doGet and doPost, for handling HTTP-specific services.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/servlets002.html b/servlets002.html index fddd2b2..0e99a4e 100644 --- a/servlets002.html +++ b/servlets002.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    17.2 Servlet Lifecycle

    @@ -161,11 +180,6 @@

    17.2.1.1 Defining the Listener Class

    -
    -
    -
    +
    -
    -

    Use the @WebListener annotation to define a listener to get events for various operations on the particular web application context. Classes @@ -216,35 +230,65 @@

    17.2.2 Handling Servlet Errors

    But you can also specify that the container should return a specific error page for a given exception.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/servlets003.html b/servlets003.html index e88befc..50bd315 100644 --- a/servlets003.html +++ b/servlets003.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    17.3 Sharing Information

    @@ -128,11 +147,6 @@

    17.3.1 Using Scope Objects

    -
    -
    -
    +
    -
    -

    17.3.2 Controlling Concurrent Access to Shared Resources

    @@ -175,35 +189,65 @@

    17.3.2 Controlling Co the synchronization techniques described in the Threads lesson at http://docs.oracle.com/javase/tutorial/essential/concurrency/.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/servlets004.html b/servlets004.html index d13b312..b1f170a 100644 --- a/servlets004.html +++ b/servlets004.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    17.4 Creating and Initializing a Servlet

    @@ -92,34 +111,64 @@

    17.4 Creating and Initializing a Se servlet. By contrast, a context parameter provides data that is available to all components of a web application.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/servlets005.html b/servlets005.html index 5c2741c..8bbeb66 100644 --- a/servlets005.html +++ b/servlets005.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    17.5 Writing Service Methods

    @@ -230,35 +249,65 @@

    17.5.2 Constructing Responses

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/servlets006.html b/servlets006.html index 8960654..da3b50a 100644 --- a/servlets006.html +++ b/servlets006.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    17.6 Filtering Requests and Responses

    @@ -342,36 +361,66 @@

    17.6.3.1 To Specify Filte

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/servlets007.html b/servlets007.html index 2f47a88..a6e8360 100644 --- a/servlets007.html +++ b/servlets007.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    17.7 Invoking Other Web Resources

    @@ -135,35 +154,65 @@

    17.7.2 Transferring Contr ServletOutputStream or PrintWriter object within the servlet, you cannot use this method; doing so throws an IllegalStateException.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/servlets008.html b/servlets008.html index 6fec5c7..e205788 100644 --- a/servlets008.html +++ b/servlets008.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    17.8 Accessing the Web Context

    @@ -78,34 +97,64 @@

    17.8 Accessing the Web Context

    the counter object by using the context’s getAttribute method. The incremented value of the counter is recorded in the log.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/servlets009.html b/servlets009.html index ae12e81..e6ec85c 100644 --- a/servlets009.html +++ b/servlets009.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    17.9 Maintaining Client State

    @@ -173,35 +192,65 @@

    17.9.4 Session Tracking

    includes the session ID in the URL only if cookies are disabled; otherwise, the method returns the URL unchanged.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/servlets010.html b/servlets010.html index af3dfcc..cda7cb3 100644 --- a/servlets010.html +++ b/servlets010.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    17.10 Finalizing a Servlet

    @@ -227,35 +246,65 @@

    17.10.3 Creating Polite Long-Runni }

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/servlets011.html b/servlets011.html index 01523ec..7c0487c 100644 --- a/servlets011.html +++ b/servlets011.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    17.11 Uploading Files with Java Servlet Technology

    @@ -182,35 +201,65 @@

    17.11.2 The getParts and getPart Metho of the @MultipartConfig annotation or, in the case of the fileupload example, in the location specified by the Destination field in the form.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/servlets012.html b/servlets012.html index bb8f2e1..bb6601e 100644 --- a/servlets012.html +++ b/servlets012.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    17.12 Asynchronous Processing

    @@ -208,11 +227,6 @@

    17.12.1 Asynchronous Processing in -
    -
    -
    +
    -
    -

    17.12.2 Waiting for a Resource

    @@ -313,35 +327,65 @@

    17.12.2 Waiting for a Resource

    The service method of AsyncServlet returns immediately, and the request is processed in the asynchronous context.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/servlets013.html b/servlets013.html index 040770b..a07d681 100644 --- a/servlets013.html +++ b/servlets013.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    17.13 Nonblocking I/O

    @@ -138,11 +157,6 @@

    17.13 Nonblocking I/O

    -
    -
    -
    +
    -
    -

    @@ -176,11 +190,6 @@

    17.13 Nonblocking I/O

    -
    -
    -
    +
    -
    -

    @@ -230,11 +239,6 @@

    17.13 Nonblocking I/O

    -
    -
    -
    +
    -
    -

    17.13.1 Reading a Large HTTP POST Request Using Nonblocking I/O

    @@ -293,35 +297,65 @@

    17.13.1 Reading become available and then writes some response to the client when it finishes reading the request.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/servlets014.html b/servlets014.html index 3b57ea0..f247e45 100644 --- a/servlets014.html +++ b/servlets014.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    17.14 Protocol Upgrade Processing

    @@ -170,11 +189,6 @@

    17.14 Protocol Upgrade Processing

    -
    -
    -
    +
    -
    -

    The following code demonstrates how to accept an HTTP protocol upgrade request from a client:

    @@ -226,34 +240,64 @@

    17.14 Protocol Upgrade Processing

    http://jcp.org/en/jsr/detail?id=369 for details on HTTP protocol upgrade support.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/servlets015.html b/servlets015.html index 3d2a1ac..2a4bc74 100644 --- a/servlets015.html +++ b/servlets015.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    17.15 The mood Example Application

    @@ -224,36 +243,66 @@

    17.15.2.2 To Run the mood Example U

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/servlets016.html b/servlets016.html index 42c6746..6360dcd 100644 --- a/servlets016.html +++ b/servlets016.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    17.16 The fileupload Example Application

    @@ -59,11 +78,6 @@

    17.16 The fileupload Example Applica

    The Duke’s Forest case study provides a more complex example that uploads an image file and stores its content in a database.

    -
    -
    -
    +
    -
    -
    @@ -97,11 +111,6 @@

    17.16 The fileupload Example Applica

    -
    -
    -
    +
    -
    -

    The following topics are addressed here:

    @@ -198,17 +207,17 @@

    17.16.1 Architecture
    POST /fileupload/upload HTTP/1.1
     Host: localhost:8080
     Content-Type: multipart/form-data;
    -boundary=---------------------------263081694432439Content-Length: 441
    +boundary=---------------------------263081694432439 Content-Length: 441
     -----------------------------263081694432439
     Content-Disposition: form-data; name="file"; filename="sample.txt"
     Content-Type: text/plain
    -Data from sample file
    + Data from sample file
     -----------------------------263081694432439
     Content-Disposition: form-data; name="destination"
    -/tmp
    + /tmp
     -----------------------------263081694432439
     Content-Disposition: form-data; name="upload"
    -Upload
    + Upload
     -----------------------------263081694432439--

    @@ -440,36 +449,66 @@

    17.16.2.3 To Run the fileupload Example -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/servlets017.html b/servlets017.html index d05cb78..801d190 100644 --- a/servlets017.html +++ b/servlets017.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    17.17 The dukeetf Example Application

    @@ -410,36 +429,66 @@

    17.17.2.2 To Run the

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/servlets018.html b/servlets018.html index e5f2f04..07c82f3 100644 --- a/servlets018.html +++ b/servlets018.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    17.18 Further Information about Java Servlet Technology

    @@ -54,34 +73,64 @@

    17.18 Further Informa

    For more information on Java Servlet technology, see the Java Servlet 4.0 specification at http://jcp.org/en/jsr/detail?id=369.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/target.html b/target.html index 79ae68e..4b51738 100644 --- a/target.html +++ b/target.html @@ -8,11 +8,102 @@ + + + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    +
    + + + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +

    Java Platform, Enterprise Edition The Java EE Tutorial Java Platform, Enterprise Edition Java Platform, Enterprise Edition The Java EE Tutorial Java Platform, Enterprise Edition Preface “Preface” Audience “Audience” Documentation Accessibility “Documentation Accessibility” Access to Oracle Support “Access to Oracle Support” Before You Read This Book “Before You Read This Book” Related Documentation “Related Documentation” Conventions “Conventions” Default Paths and File Names “Default Paths and File Names” Overview “Overview” This chapter introduces… the paragraph beginning “This chapter introduces…” Introduction to Java EE “Introduction to Java EE” Java EE 7 Platform Highlights “Java EE 7 Platform Highlights” Java EE Application Model “Java EE Application Model” Distributed Multitiered Applications “Distributed Multitiered Applications” Multitiered Applications “Multitiered Applications” Security “Security” Java EE Components “Java EE Components” Java EE Clients “Java EE Clients” Web Clients “Web Clients” Application Clients “Application Clients” Applets “Applets” The JavaBeans Component Architecture “The JavaBeans Component Architecture” Java EE Server Communications “Java EE Server Communications” Server Communication “Server Communication” Web Components “Web Components” Web Tier and Java EE Applications “Web Tier and Java EE Applications” Business Components “Business Components” Business and EIS Tiers “Business and EIS Tiers” Enterprise Information System Tier “Enterprise Information System Tier” Java EE Containers “Java EE Containers” Container Services “Container Services” Container Types “Container Types” Java EE Server and Containers “Java EE Server and Containers” Web Services Support “Web Services Support” XML “XML” SOAP Transport Protocol “SOAP Transport Protocol” WSDL Standard Format “WSDL Standard Format” Java EE Application Assembly and Deployment “Java EE Application Assembly and Deployment” Java EE 7 APIs “Java EE 7 APIs” Java EE Containers “Java EE Containers” Java EE APIs in the Web Container “Java EE APIs in the Web Container” Java EE APIs in the EJB Container “Java EE APIs in the EJB Container” Java EE APIs in the Application Client Container “Java EE APIs in the Application Client Container” Enterprise JavaBeans Technology “Enterprise JavaBeans Technology” Java Servlet Technology “Java Servlet Technology” JavaServer Faces Technology “JavaServer Faces Technology” JavaServer Pages Technology “JavaServer Pages Technology” JavaServer Pages Standard Tag Library “JavaServer Pages Standard Tag Library” Java Persistence API “Java Persistence API” Java Transaction API “Java Transaction API” Java API for RESTful Web Services “Java API for RESTful Web Services” Managed Beans “Managed Beans” Contexts and Dependency Injection for Java EE “Contexts and Dependency Injection for Java EE” Dependency Injection for Java “Dependency Injection for Java” Bean Validation “Bean Validation” Java Message Service API “Java Message Service API” Java EE Connector Architecture “Java EE Connector Architecture” JavaMail API “JavaMail API” Java Authorization Contract for Containers “Java Authorization Contract for Containers” Java Authentication Service Provider Interface for Containers “Java Authentication Service Provider Interface for Containers” Java API for WebSocket “Java API for WebSocket” Java API for JSON Processing “Java API for JSON Processing” Concurrency Utilities for Java EE “Concurrency Utilities for Java EE” Batch Applications for the Java Platform “Batch Applications for the Java Platform” Java EE 7 APIs in the Java Platform, Standard Edition 7 “Java EE 7 APIs in the Java Platform, Standard Edition 7” Java Database Connectivity API “Java Database Connectivity API” Java Naming and Directory Interface API “Java Naming and Directory Interface API” JavaBeans Activation Framework “JavaBeans Activation Framework” Java API for XML Processing “Java API for XML Processing” Java Architecture for XML Binding “Java Architecture for XML Binding” Java API for XML Web Services “Java API for XML Web Services” SOAP with Attachments API for Java “SOAP with Attachments API for Java” Java Authentication and Authorization Service “Java Authentication and Authorization Service” Common Annotations for the Java Platform “Common Annotations for the Java Platform” GlassFish Server Tools “GlassFish Server Tools” GlassFish Server Tools “GlassFish Server Tools” Using the Tutorial Examples “Using the Tutorial Examples” This chapter tells… the paragraph beginning “This chapter tells…” Required Software “Required Software” Java Platform, Standard Edition “Java Platform, Standard Edition” Java EE 7 Software Development Kit “Java EE 7 Software Development Kit” SDK Installation Tips “SDK Installation Tips” Java EE 7 Tutorial Component “Java EE 7 Tutorial Component” NetBeans IDE “NetBeans IDE” To Install NetBeans IDE without GlassFish Server “To Install NetBeans IDE without GlassFish Server” To Add GlassFish Server as a Server Using NetBeans IDE “To Add GlassFish Server as a Server Using NetBeans IDE” Apache Maven “Apache Maven” Starting and Stopping GlassFish Server “Starting and Stopping GlassFish Server” To Start GlassFish Server Using NetBeans IDE “To Start GlassFish Server Using NetBeans IDE” To Stop GlassFish Server Using NetBeans IDE “To Stop GlassFish Server Using NetBeans IDE” To Start GlassFish Server Using the Command Line “To Start GlassFish Server Using the Command Line” To Stop GlassFish Server Using the Command Line “To Stop GlassFish Server Using the Command Line” Starting the Administration Console “Starting the Administration Console” To Start the Administration Console Using NetBeans IDE “To Start the Administration Console Using NetBeans IDE” Starting and Stopping the Java DB Server “Starting and Stopping the Java DB Server” To Start the Database Server Using NetBeans IDE “To Start the Database Server Using NetBeans IDE” Next Steps “Next Steps” Building the Examples “Building the Examples” Tutorial Example Directory Structure “Tutorial Example Directory Structure” Java EE 7 Maven Archetypes in the Tutorial “Java EE 7 Maven Archetypes in the Tutorial” Installing the Tutorial Archetypes “Installing the Tutorial Archetypes” Installing the Tutorial Archetypes Using NetBeans IDE “Installing the Tutorial Archetypes Using NetBeans IDE” Installing the Tutorial Archetypes Using Maven “Installing the Tutorial Archetypes Using Maven” Getting the Latest Updates to the Tutorial “Getting the Latest Updates to the Tutorial” To Update the Tutorial Using NetBeans IDE “To Update the Tutorial Using NetBeans IDE” To Update the Tutorial Using the Command Line “To Update the Tutorial Using the Command Line” Debugging Java EE Applications “Debugging Java EE Applications” Using the Server Log “Using the Server Log” To Use the Administration Console Log Viewer “To Use the Administration Console Log Viewer” Using a Debugger “Using a Debugger” To Debug an Application Using a Debugger “To Debug an Application Using a Debugger” Resource Creation “Resource Creation” A resource is… the paragraph beginning “A resource is…” Resources and JNDI Naming “Resources and JNDI Naming” DataSource Objects and Connection Pools “DataSource Objects and Connection Pools” Creating Resources Administratively “Creating Resources Administratively” Injection “Injection” This chapter provides… the paragraph beginning “This chapter provides…” Resource Injection “Resource Injection” Dependency Injection “Dependency Injection” The Main Differences between Resource Injection and Dependency Injection “The Main Differences between Resource Injection and Dependency Injection” Differences between Resource Injection and Dependency Injection “Differences between Resource Injection and Dependency Injection” Packaging “Packaging” This chapter describes… the paragraph beginning “This chapter describes…” Packaging Applications “Packaging Applications” EAR File Structure “EAR File Structure” Packaging Enterprise Beans “Packaging Enterprise Beans” Packaging Enterprise Beans in EJB JAR Modules “Packaging Enterprise Beans in EJB JAR Modules” Structure of an Enterprise Bean JAR “Structure of an Enterprise Bean JAR” Packaging Enterprise Beans in WAR Modules “Packaging Enterprise Beans in WAR Modules” Packaging Web Archives “Packaging Web Archives” Web Module Structure “Web Module Structure” Packaging Resource Adapter Archives “Packaging Resource Adapter Archives” Getting Started with Web Applications “Getting Started with Web Applications” This chapter introduces… the paragraph beginning “This chapter introduces…” Web Applications “Web Applications” Java Web Application Request Handling “Java Web Application Request Handling” Web Application Lifecycle “Web Application Lifecycle” A Web Module That Uses JavaServer Faces Technology: The hello1 Example “A Web Module That Uses JavaServer Faces Technology: The hello1 Example” To View the hello1 Web Module Using NetBeans IDE “To View the hello1 Web Module Using NetBeans IDE” Introduction to Scopes “Introduction to Scopes” Packaging and Deploying the hello1 Web Module “Packaging and Deploying the hello1 Web Module” To Build and Package the hello1 Web Module Using NetBeans IDE “To Build and Package the hello1 Web Module Using NetBeans IDE” To Build and Package the hello1 Web Module Using Maven “To Build and Package the hello1 Web Module Using Maven” Viewing Deployed Web Modules “Viewing Deployed Web Modules” To View Deployed Web Modules Using the Administration Console “To View Deployed Web Modules Using the Administration Console” To View Deployed Web Modules Using the asadmin Command “To View Deployed Web Modules Using the asadmin Command” To View Deployed Web Modules Using NetBeans IDE “To View Deployed Web Modules Using NetBeans IDE” Running the Deployed hello1 Web Module “Running the Deployed hello1 Web Module” Dynamic Reloading of Deployed Modules “Dynamic Reloading of Deployed Modules” Undeploying the hello1 Web Module “Undeploying the hello1 Web Module” To Undeploy the hello1 Web Module Using NetBeans IDE “To Undeploy the hello1 Web Module Using NetBeans IDE” To Undeploy the hello1 Web Module Using Maven “To Undeploy the hello1 Web Module Using Maven” A Web Module That Uses Java Servlet Technology: The hello2 Example “A Web Module That Uses Java Servlet Technology: The hello2 Example” Mapping URLs to Web Components “Mapping URLs to Web Components” Examining the hello2 Web Module “Examining the hello2 Web Module” To View the hello2 Web Module Using NetBeans IDE “To View the hello2 Web Module Using NetBeans IDE” Running the hello2 Example “Running the hello2 Example” To Run the hello2 Example Using NetBeans IDE “To Run the hello2 Example Using NetBeans IDE” To Run the hello2 Example Using Maven “To Run the hello2 Example Using Maven” Configuring Web Applications “Configuring Web Applications” Setting Context Parameters “Setting Context Parameters” To Add a Context Parameter Using NetBeans IDE “To Add a Context Parameter Using NetBeans IDE” To Create a web.xml File Using NetBeans IDE “To Create a web.xml File Using NetBeans IDE” Declaring Welcome Files “Declaring Welcome Files” Mapping Errors to Error Screens “Mapping Errors to Error Screens” To Set Up Error Mapping Using NetBeans IDE “To Set Up Error Mapping Using NetBeans IDE” Declaring Resource References “Declaring Resource References” Web Components That Accept Resource Injections “Web Components That Accept Resource Injections” Declaring a Reference to a Resource “Declaring a Reference to a Resource” Declaring a Reference to a Web Service “Declaring a Reference to a Web Service” Further Information about Web Applications “Further Information about Web Applications” JavaServer Faces Technology “JavaServer Faces Technology” JavaServer Faces technology… the paragraph beginning “JavaServer Faces technology…” Introduction to JavaServer Faces Technology “Introduction to JavaServer Faces Technology” What Is a JavaServer Faces Application? “What Is a JavaServer Faces Application?” Responding to a Client Request for a JavaServer Faces Page “Responding to a Client Request for a JavaServer Faces Page” JavaServer Faces Technology Benefits “JavaServer Faces Technology Benefits” Java Web Application Technologies “Java Web Application Technologies” A Simple JavaServer Faces Application “A Simple JavaServer Faces Application” User Interface Component Model “User Interface Component Model” User Interface Component Classes “User Interface Component Classes” Component Rendering Model “Component Rendering Model” Conversion Model “Conversion Model” Event and Listener Model “Event and Listener Model” Validation Model “Validation Model” Navigation Model “Navigation Model” The Lifecycle of a JavaServer Faces Application “The Lifecycle of a JavaServer Faces Application” Overview of the JavaServer Faces Lifecycle “Overview of the JavaServer Faces Lifecycle” JavaServer Faces Standard Request-Response Lifecycle “JavaServer Faces Standard Request-Response Lifecycle” Restore View Phase “Restore View Phase” Apply Request Values Phase “Apply Request Values Phase” Process Validations Phase “Process Validations Phase” Update Model Values Phase “Update Model Values Phase” Invoke Application Phase “Invoke Application Phase” Render Response Phase “Render Response Phase” Partial Processing and Partial Rendering “Partial Processing and Partial Rendering” Further Information about JavaServer Faces Technology “Further Information about JavaServer Faces Technology” Introduction to Facelets “Introduction to Facelets” The term Facelets… the paragraph beginning “The term Facelets…” What Is Facelets? “What Is Facelets?” Tag Libraries Supported by Facelets “Tag Libraries Supported by Facelets” The Lifecycle of a Facelets Application “The Lifecycle of a Facelets Application” Developing a Simple Facelets Application: The guessnumber-jsf Example Application “Developing a Simple Facelets Application: The guessnumber-jsf Example Application” Creating a Facelets Application “Creating a Facelets Application” Developing a Managed Bean “Developing a Managed Bean” Creating Facelets Views “Creating Facelets Views” Configuring the Application “Configuring the Application” Running the guessnumber-jsf Facelets Example “Running the guessnumber-jsf Facelets Example” To Build, Package, and Deploy the guessnumber-jsf Example Using NetBeans IDE “To Build, Package, and Deploy the guessnumber-jsf Example Using NetBeans IDE” To Build, Package, and Deploy the guessnumber-jsf Example Using Maven “To Build, Package, and Deploy the guessnumber-jsf Example Using Maven” To Run the guessnumber-jsf Example “To Run the guessnumber-jsf Example” Using Facelets Templates “Using Facelets Templates” Facelets Templating Tags “Facelets Templating Tags” Composite Components “Composite Components” Composite Component Tags “Composite Component Tags” Web Resources “Web Resources” Relocatable Resources “Relocatable Resources” Resource Library Contracts “Resource Library Contracts” The hello1-rlc Example Application “The hello1-rlc Example Application” Configuring the hello1-rlc Example “Configuring the hello1-rlc Example” The Facelets Pages for the hello1-rlc Example “The Facelets Pages for the hello1-rlc Example” To Build, Package, and Deploy the hello1-rlc Example Using NetBeans IDE “To Build, Package, and Deploy the hello1-rlc Example Using NetBeans IDE” To Build, Package, and Deploy the hello1-rlc Example Using Maven “To Build, Package, and Deploy the hello1-rlc Example Using Maven” To Run the hello1-rlc Example “To Run the hello1-rlc Example” HTML5-Friendly Markup “HTML5-Friendly Markup” Using Pass-Through Elements “Using Pass-Through Elements” How Facelets Renders HTML5 Elements “How Facelets Renders HTML5 Elements” Using Pass-Through Attributes “Using Pass-Through Attributes” The reservation Example Application “The reservation Example Application” The Facelets Pages for the reservation Application “The Facelets Pages for the reservation Application” The Managed Bean for the reservation Application “The Managed Bean for the reservation Application” To Build, Package, and Deploy the reservation Example Using NetBeans IDE “To Build, Package, and Deploy the reservation Example Using NetBeans IDE” To Build, Package, and Deploy the reservation Example Using Maven “To Build, Package, and Deploy the reservation Example Using Maven” To Run the reservation Example “To Run the reservation Example” Expression Language “Expression Language” This chapter introduces… the paragraph beginning “This chapter introduces…” Overview of the EL “Overview of the EL” Immediate and Deferred Evaluation Syntax “Immediate and Deferred Evaluation Syntax” Immediate Evaluation “Immediate Evaluation” Deferred Evaluation “Deferred Evaluation” Value and Method Expressions “Value and Method Expressions” Value Expressions “Value Expressions” Referencing Objects “Referencing Objects” Referencing Object Properties or Collection Elements “Referencing Object Properties or Collection Elements” Referencing Literals “Referencing Literals” Parameterized Method Calls “Parameterized Method Calls” Where Value Expressions Can Be Used “Where Value Expressions Can Be Used” Method Expressions “Method Expressions” Lambda Expressions “Lambda Expressions” Operations on Collection Objects “Operations on Collection Objects” Operators “Operators” Reserved Words “Reserved Words” Examples of EL Expressions “Examples of EL Expressions” Example Expressions “Example Expressions” Further Information about the Expression Language “Further Information about the Expression Language” Using JavaServer Faces Technology in Web Pages “Using JavaServer Faces Technology in Web Pages” Web pages (Facelets… the paragraph beginning “Web pages (Facelets…” Setting Up a Page “Setting Up a Page” Adding Components to a Page Using HTML Tag Library Tags “Adding Components to a Page Using HTML Tag Library Tags” The Component Tags “The Component Tags” Common Component Tag Attributes “Common Component Tag Attributes” Common Component Tag Attributes “Common Component Tag Attributes” The id Attribute “The id Attribute” The immediate Attribute “The immediate Attribute” The rendered Attribute “The rendered Attribute” The style and styleClass Attributes “The style and styleClass Attributes” The value and binding Attributes “The value and binding Attributes” Adding HTML Head and Body Tags “Adding HTML Head and Body Tags” Adding a Form Component “Adding a Form Component” A Typical Form “A Typical Form” Using Text Components “Using Text Components” Example Text Components “Example Text Components” Input Tags “Input Tags” Input Tag Attributes “Input Tag Attributes” Output Tags “Output Tags” Rendering a Field with the h:inputText Tag “Rendering a Field with the h:inputText Tag” Rendering a Password Field with the h:inputSecret Tag “Rendering a Password Field with the h:inputSecret Tag” Rendering a Label with the h:outputLabel Tag “Rendering a Label with the h:outputLabel Tag” Rendering a Link with the h:outputLink Tag “Rendering a Link with the h:outputLink Tag” Displaying a Formatted Message with the h:outputFormat Tag “Displaying a Formatted Message with the h:outputFormat Tag” Using Command Component Tags for Performing Actions and Navigation “Using Command Component Tags for Performing Actions and Navigation” Rendering a Button with the h:commandButton Tag “Rendering a Button with the h:commandButton Tag” Rendering a Link with the h:commandLink Tag “Rendering a Link with the h:commandLink Tag” Adding Graphics and Images with the h:graphicImage Tag “Adding Graphics and Images with the h:graphicImage Tag” Laying Out Components with the h:panelGrid and h:panelGroup Tags “Laying Out Components with the h:panelGrid and h:panelGroup Tags” Panel Component Tags “Panel Component Tags” Displaying Components for Selecting One Value “Displaying Components for Selecting One Value” Example Components for Selecting One Item “Example Components for Selecting One Item” Displaying a Check Box Using the h:selectBooleanCheckbox Tag “Displaying a Check Box Using the h:selectBooleanCheckbox Tag” Displaying a Menu Using the h:selectOneMenu Tag “Displaying a Menu Using the h:selectOneMenu Tag” Displaying Components for Selecting Multiple Values “Displaying Components for Selecting Multiple Values” Example Components for Selecting Multiple Values “Example Components for Selecting Multiple Values” Using the f:selectItem and f:selectItems Tags “Using the f:selectItem and f:selectItems Tags” Using the f:selectItems Tag “Using the f:selectItems Tag” Using the f:selectItem Tag “Using the f:selectItem Tag” Displaying the Results from Selection Components “Displaying the Results from Selection Components” Using Data-Bound Table Components “Using Data-Bound Table Components” Optional Attributes for the h:dataTable Tag “Optional Attributes for the h:dataTable Tag” Displaying Error Messages with the h:message and h:messages Tags “Displaying Error Messages with the h:message and h:messages Tags” Creating Bookmarkable URLs with the h:button and h:link Tags “Creating Bookmarkable URLs with the h:button and h:link Tags” Using View Parameters to Configure Bookmarkable URLs “Using View Parameters to Configure Bookmarkable URLs” The bookmarks Example Application “The bookmarks Example Application” To Build, Package, and Deploy the bookmarks Example Using NetBeans IDE “To Build, Package, and Deploy the bookmarks Example Using NetBeans IDE” To Build, Package, and Deploy the bookmarks Example Using Maven “To Build, Package, and Deploy the bookmarks Example Using Maven” To Run the bookmarks Example “To Run the bookmarks Example” Resource Relocation Using h:outputScript and h:outputStylesheet Tags “Resource Relocation Using h:outputScript and h:outputStylesheet Tags” Using Core Tags “Using Core Tags” Event-Handling Core Tags “Event-Handling Core Tags” Data-Conversion Core Tags “Data-Conversion Core Tags” Facet Core Tags “Facet Core Tags” Core Tags That Represent Items in a List “Core Tags That Represent Items in a List” Validator Core Tags “Validator Core Tags” Miscellaneous Core Tags “Miscellaneous Core Tags” Where the Core Tags Are Explained “Where the Core Tags Are Explained” Using Converters, Listeners, and Validators “Using Converters, Listeners, and Validators” The previous chapter… the paragraph beginning “The previous chapter…” Using the Standard Converters “Using the Standard Converters” Converter Classes and Converter IDs “Converter Classes and Converter IDs” Converting a Component’s Value “Converting a Component’s Value” Using DateTimeConverter “Using DateTimeConverter” Attributes for the f:convertDateTime Tag “Attributes for the f:convertDateTime Tag” Using NumberConverter “Using NumberConverter” Attributes for the f:convertNumber Tag “Attributes for the f:convertNumber Tag” Registering Listeners on Components “Registering Listeners on Components” Registering a Value-Change Listener on a Component “Registering a Value-Change Listener on a Component” Attributes for the f:valueChangeListener Tag “Attributes for the f:valueChangeListener Tag” Registering an Action Listener on a Component “Registering an Action Listener on a Component” Using the Standard Validators “Using the Standard Validators” The Validator Classes “The Validator Classes” Validating a Component’s Value “Validating a Component’s Value” Using Validator Tags “Using Validator Tags” Referencing a Managed Bean Method “Referencing a Managed Bean Method” Component Tag Attributes That Reference Managed Bean Methods “Component Tag Attributes That Reference Managed Bean Methods” Referencing a Method That Performs Navigation “Referencing a Method That Performs Navigation” Referencing a Method That Handles an Action Event “Referencing a Method That Handles an Action Event” Referencing a Method That Performs Validation “Referencing a Method That Performs Validation” Referencing a Method That Handles a Value-Change Event “Referencing a Method That Handles a Value-Change Event” Developing with JavaServer Faces Technology “Developing with JavaServer Faces Technology” This chapter provides… the paragraph beginning “This chapter provides…” Managed Beans in JavaServer Faces Technology “Managed Beans in JavaServer Faces Technology” Creating a Managed Bean “Creating a Managed Bean” Using the EL to Reference Managed Beans “Using the EL to Reference Managed Beans” Writing Bean Properties “Writing Bean Properties” Writing Properties Bound to Component Values “Writing Properties Bound to Component Values” Acceptable Types of Component Values “Acceptable Types of Component Values” UIInput and UIOutput Properties “UIInput and UIOutput Properties” UIData Properties “UIData Properties” UISelectBoolean Properties “UISelectBoolean Properties” UISelectMany Properties “UISelectMany Properties” UISelectOne Properties “UISelectOne Properties” UISelectItem Properties “UISelectItem Properties” UISelectItems Properties “UISelectItems Properties” Writing Properties Bound to Component Instances “Writing Properties Bound to Component Instances” Writing Properties Bound to Converters, Listeners, or Validators “Writing Properties Bound to Converters, Listeners, or Validators” Writing Managed Bean Methods “Writing Managed Bean Methods” Why Use Managed Beans “Why Use Managed Beans” Writing a Method to Handle Navigation “Writing a Method to Handle Navigation” Writing a Method to Handle an Action Event “Writing a Method to Handle an Action Event” Writing a Method to Perform Validation “Writing a Method to Perform Validation” Writing a Method to Handle a Value-Change Event “Writing a Method to Handle a Value-Change Event” Using Ajax with JavaServer Faces Technology “Using Ajax with JavaServer Faces Technology” This chapter describes… the paragraph beginning “This chapter describes…” Overview of Ajax “Overview of Ajax” Using Ajax Functionality with JavaServer Faces Technology “Using Ajax Functionality with JavaServer Faces Technology” Using Ajax with Facelets “Using Ajax with Facelets” Using the f:ajax Tag “Using the f:ajax Tag” Attributes of the f:ajax Tag “Attributes of the f:ajax Tag” Execute and Render Keywords “Execute and Render Keywords” Sending an Ajax Request “Sending an Ajax Request” Using the event Attribute “Using the event Attribute” Using the execute Attribute “Using the execute Attribute” Using the immediate Attribute “Using the immediate Attribute” Using the listener Attribute “Using the listener Attribute” Monitoring Events on the Client “Monitoring Events on the Client” Properties of the onevent Data Object “Properties of the onevent Data Object” Handling Errors “Handling Errors” Valid Error Values for the Data Object status Property “Valid Error Values for the Data Object status Property” Receiving an Ajax Response “Receiving an Ajax Response” Ajax Request Lifecycle “Ajax Request Lifecycle” Grouping of Components “Grouping of Components” Loading JavaScript as a Resource “Loading JavaScript as a Resource” Using JavaScript API in a Facelets Application “Using JavaScript API in a Facelets Application” Possible Values for the Options Parameter “Possible Values for the Options Parameter” Using the @ResourceDependency Annotation in a Bean Class “Using the @ResourceDependency Annotation in a Bean Class” The ajaxguessnumber Example Application “The ajaxguessnumber Example Application” The ajaxguessnumber Source Files “The ajaxguessnumber Source Files” The ajaxgreeting.xhtml Facelets Page “The ajaxgreeting.xhtml Facelets Page” The UserNumberBean Backing Bean “The UserNumberBean Backing Bean” The DukesNumberBean CDI Managed Bean “The DukesNumberBean CDI Managed Bean” Running the ajaxguessnumber Example “Running the ajaxguessnumber Example” To Build, Package, and Deploy the ajaxguessnumber Example Using NetBeans IDE “To Build, Package, and Deploy the ajaxguessnumber Example Using NetBeans IDE” To Build, Package, and Deploy the ajaxguessnumber Example Using Maven “To Build, Package, and Deploy the ajaxguessnumber Example Using Maven” To Run the ajaxguessnumber Example “To Run the ajaxguessnumber Example” Further Information about Ajax in JavaServer Faces Technology “Further Information about Ajax in JavaServer Faces Technology” Composite Components: Advanced Topics and an Example “Composite Components: Advanced Topics and an Example” This chapter describes… the paragraph beginning “This chapter describes…” Attributes of a Composite Component “Attributes of a Composite Component” Commonly Used Attributes of the composite:attribute Tag “Commonly Used Attributes of the composite:attribute Tag” Invoking a Managed Bean “Invoking a Managed Bean” Validating Composite Component Values “Validating Composite Component Values” Validator Tags “Validator Tags” The compositecomponentexample Example Application “The compositecomponentexample Example Application” The Composite Component File “The Composite Component File” The Using Page “The Using Page” The Managed Bean “The Managed Bean” Running the compositecomponentexample Example “Running the compositecomponentexample Example” To Build, Package, and Deploy the compositecomponentexample Example Using NetBeans IDE “To Build, Package, and Deploy the compositecomponentexample Example Using NetBeans IDE” To Build, Package, and Deploy the compositecomponentexample Example Using Maven “To Build, Package, and Deploy the compositecomponentexample Example Using Maven” To Run the compositecomponentexample Example “To Run the compositecomponentexample Example” Creating Custom UI Components and Other Custom Objects “Creating Custom UI Components and Other Custom Objects” This chapter describes… the paragraph beginning “This chapter describes…” Introduction to Creating Custom Components “Introduction to Creating Custom Components” Determining Whether You Need a Custom Component or Renderer “Determining Whether You Need a Custom Component or Renderer” When to Use a Custom Component “When to Use a Custom Component” When to Use a Custom Renderer “When to Use a Custom Renderer” Component, Renderer, and Tag Combinations “Component, Renderer, and Tag Combinations” Requirements for Custom Components, Custom Renderers, and Custom Tags “Requirements for Custom Components, Custom Renderers, and Custom Tags” Understanding the Image Map Example “Understanding the Image Map Example” Why Use JavaServer Faces Technology to Implement an Image Map? “Why Use JavaServer Faces Technology to Implement an Image Map?” Understanding the Rendered HTML “Understanding the Rendered HTML” Understanding the Facelets Page “Understanding the Facelets Page” Configuring Model Data “Configuring Model Data” Summary of the Image Map Application Classes “Summary of the Image Map Application Classes” Image Map Classes “Image Map Classes” Steps for Creating a Custom Component “Steps for Creating a Custom Component” Creating Custom Component Classes “Creating Custom Component Classes” Specifying the Component Family “Specifying the Component Family” Performing Encoding “Performing Encoding” Performing Decoding “Performing Decoding” Enabling Component Properties to Accept Expressions “Enabling Component Properties to Accept Expressions” Saving and Restoring State “Saving and Restoring State” Delegating Rendering to a Renderer “Delegating Rendering to a Renderer” Creating the Renderer Class “Creating the Renderer Class” Identifying the Renderer Type “Identifying the Renderer Type” Implementing an Event Listener “Implementing an Event Listener” Implementing Value-Change Listeners “Implementing Value-Change Listeners” Implementing Action Listeners “Implementing Action Listeners” Handling Events for Custom Components “Handling Events for Custom Components” Defining the Custom Component Tag in a Tag Library Descriptor “Defining the Custom Component Tag in a Tag Library Descriptor” Using a Custom Component “Using a Custom Component” Creating and Using a Custom Converter “Creating and Using a Custom Converter” Creating a Custom Converter “Creating a Custom Converter” Using a Custom Converter “Using a Custom Converter” Creating and Using a Custom Validator “Creating and Using a Custom Validator” Implementing the Validator Interface “Implementing the Validator Interface” Specifying a Custom Tag “Specifying a Custom Tag” Using a Custom Validator “Using a Custom Validator” Binding Component Values and Instances to Managed Bean Properties “Binding Component Values and Instances to Managed Bean Properties” Examples of Value-Binding Expressions “Examples of Value-Binding Expressions” Binding a Component Value to a Property “Binding a Component Value to a Property” Binding a Component Value to an Implicit Object “Binding a Component Value to an Implicit Object” Implicit Objects “Implicit Objects” Binding a Component Instance to a Bean Property “Binding a Component Instance to a Bean Property” Binding Converters, Listeners, and Validators to Managed Bean Properties “Binding Converters, Listeners, and Validators to Managed Bean Properties” Configuring JavaServer Faces Applications “Configuring JavaServer Faces Applications” This chapter describes… the paragraph beginning “This chapter describes…” Introduction to Configuring JavaServer Faces Applications “Introduction to Configuring JavaServer Faces Applications” Using Annotations to Configure Managed Beans “Using Annotations to Configure Managed Beans” Using Managed Bean Scopes “Using Managed Bean Scopes” Application Configuration Resource File “Application Configuration Resource File” Configuring Eager Application-Scoped Managed Beans “Configuring Eager Application-Scoped Managed Beans” Ordering of Application Configuration Resource Files “Ordering of Application Configuration Resource Files” Using Faces Flows “Using Faces Flows” Two Faces Flows and Their Interactions “Two Faces Flows and Their Interactions” Packaging Flows in an Application “Packaging Flows in an Application” The Simplest Possible Flow: The simple-flow Example Application “The Simplest Possible Flow: The simple-flow Example Application” To Build, Package, and Deploy the simple-flow Example Using NetBeans IDE “To Build, Package, and Deploy the simple-flow Example Using NetBeans IDE” To Build, Package, and Deploy the simple-flow Example Using Maven “To Build, Package, and Deploy the simple-flow Example Using Maven” To Run the simple-flow Example “To Run the simple-flow Example” The checkout-module Example Application “The checkout-module Example Application” The Facelets Pages for the checkout-module Example “The Facelets Pages for the checkout-module Example” Using a Configuration File to Configure a Flow “Using a Configuration File to Configure a Flow” Using a Java Class to Configure a Flow “Using a Java Class to Configure a Flow” The Flow-Scoped Managed Beans “The Flow-Scoped Managed Beans” To Build, Package, and Deploy the checkout-module Example Using NetBeans IDE “To Build, Package, and Deploy the checkout-module Example Using NetBeans IDE” To Build, Package, and Deploy the checkout-module Example Using Maven “To Build, Package, and Deploy the checkout-module Example Using Maven” To Run the checkout-module Example “To Run the checkout-module Example” Configuring Managed Beans “Configuring Managed Beans” Using the managed-bean Element “Using the managed-bean Element” Initializing Properties Using the managed-property Element “Initializing Properties Using the managed-property Element” Subelements of managed-property Elements That Define Property Values “Subelements of managed-property Elements That Define Property Values” Referencing a Java Enum Type “Referencing a Java Enum Type” Referencing a Context Initialization Parameter “Referencing a Context Initialization Parameter” Initializing Map Properties “Initializing Map Properties” Initializing Array and List Properties “Initializing Array and List Properties” Initializing Managed Bean Properties “Initializing Managed Bean Properties” Allowable Connections between Scoped Objects “Allowable Connections between Scoped Objects” Initializing Maps and Lists “Initializing Maps and Lists” Registering Application Messages “Registering Application Messages” Using FacesMessage to Create a Message “Using FacesMessage to Create a Message” Referencing Error Messages “Referencing Error Messages” Using Default Validators “Using Default Validators” Registering a Custom Validator “Registering a Custom Validator” Registering a Custom Converter “Registering a Custom Converter” Configuring Navigation Rules “Configuring Navigation Rules” Common Outcome Strings “Common Outcome Strings” Registering a Custom Renderer with a Render Kit “Registering a Custom Renderer with a Render Kit” Registering a Custom Component “Registering a Custom Component” Basic Requirements of a JavaServer Faces Application “Basic Requirements of a JavaServer Faces Application” Configuring an Application with a Web Deployment Descriptor “Configuring an Application with a Web Deployment Descriptor” Identifying the Servlet for Lifecycle Processing “Identifying the Servlet for Lifecycle Processing” To Specify a Path to an Application Configuration Resource File “To Specify a Path to an Application Configuration Resource File” To Specify Where State Is Saved “To Specify Where State Is Saved” Configuring Project Stage “Configuring Project Stage” Including the Classes, Pages, and Other Resources “Including the Classes, Pages, and Other Resources” Java Servlet Technology “Java Servlet Technology” Java Servlet technology… the paragraph beginning “Java Servlet technology…” What Is a Servlet? “What Is a Servlet?” Servlet Lifecycle “Servlet Lifecycle” Handling Servlet Lifecycle Events “Handling Servlet Lifecycle Events” Defining the Listener Class “Defining the Listener Class” Servlet Lifecycle Events “Servlet Lifecycle Events” Handling Servlet Errors “Handling Servlet Errors” Sharing Information “Sharing Information” Using Scope Objects “Using Scope Objects” Scope Objects “Scope Objects” Controlling Concurrent Access to Shared Resources “Controlling Concurrent Access to Shared Resources” Creating and Initializing a Servlet “Creating and Initializing a Servlet” Writing Service Methods “Writing Service Methods” Getting Information from Requests “Getting Information from Requests” Constructing Responses “Constructing Responses” Filtering Requests and Responses “Filtering Requests and Responses” Programming Filters “Programming Filters” Programming Customized Requests and Responses “Programming Customized Requests and Responses” Specifying Filter Mappings “Specifying Filter Mappings” Filter-to-Servlet Mapping “Filter-to-Servlet Mapping” To Specify Filter Mappings Using NetBeans IDE “To Specify Filter Mappings Using NetBeans IDE” Invoking Other Web Resources “Invoking Other Web Resources” Including Other Resources in the Response “Including Other Resources in the Response” Transferring Control to Another Web Component “Transferring Control to Another Web Component” Accessing the Web Context “Accessing the Web Context” Maintaining Client State “Maintaining Client State” Accessing a Session “Accessing a Session” Associating Objects with a Session “Associating Objects with a Session” Session Management “Session Management” To Set the Timeout Period Using NetBeans IDE “To Set the Timeout Period Using NetBeans IDE” Session Tracking “Session Tracking” Finalizing a Servlet “Finalizing a Servlet” Tracking Service Requests “Tracking Service Requests” Notifying Methods to Shut Down “Notifying Methods to Shut Down” Creating Polite Long-Running Methods “Creating Polite Long-Running Methods” Uploading Files with Java Servlet Technology “Uploading Files with Java Servlet Technology” The @MultipartConfig Annotation “The @MultipartConfig Annotation” The getParts and getPart Methods “The getParts and getPart Methods” Asynchronous Processing “Asynchronous Processing” Asynchronous Processing in Servlets “Asynchronous Processing in Servlets” Functionality Provided by the AsyncContext Class “Functionality Provided by the AsyncContext Class” Waiting for a Resource “Waiting for a Resource” Nonblocking I/O “Nonblocking I/O” Nonblocking I/O Support in javax.servlet.ServletInputStream “Nonblocking I/O Support in javax.servlet.ServletInputStream” Nonblocking I/O Support in javax.servlet.ServletOutputStream “Nonblocking I/O Support in javax.servlet.ServletOutputStream” Listener Interfaces for Nonblocking I/O Support “Listener Interfaces for Nonblocking I/O Support” Reading a Large HTTP POST Request Using Nonblocking I/O “Reading a Large HTTP POST Request Using Nonblocking I/O” Protocol Upgrade Processing “Protocol Upgrade Processing” Protocol Upgrade Support “Protocol Upgrade Support” The mood Example Application “The mood Example Application” Components of the mood Example Application “Components of the mood Example Application” Running the mood Example “Running the mood Example” To Run the mood Example Using NetBeans IDE “To Run the mood Example Using NetBeans IDE” To Run the mood Example Using Maven “To Run the mood Example Using Maven” The fileupload Example Application “The fileupload Example Application” Architecture of the fileupload Example Application “Architecture of the fileupload Example Application” Running the fileupload Example “Running the fileupload Example” To Build, Package, and Deploy the fileupload Example Using NetBeans IDE “To Build, Package, and Deploy the fileupload Example Using NetBeans IDE” To Build, Package, and Deploy the fileupload Example Using Maven “To Build, Package, and Deploy the fileupload Example Using Maven” To Run the fileupload Example “To Run the fileupload Example” The dukeetf Example Application “The dukeetf Example Application” Architecture of the dukeetf Example Application “Architecture of the dukeetf Example Application” The Servlet “The Servlet” The Enterprise Bean “The Enterprise Bean” The HTML Page “The HTML Page” Running the dukeetf Example Application “Running the dukeetf Example Application” To Run the dukeetf Example Application Using NetBeans IDE “To Run the dukeetf Example Application Using NetBeans IDE” To Run the dukeetf Example Application Using Maven “To Run the dukeetf Example Application Using Maven” Further Information about Java Servlet Technology “Further Information about Java Servlet Technology” Java API for WebSocket “Java API for WebSocket” This chapter describes… the paragraph beginning “This chapter describes…” Introduction to WebSocket “Introduction to WebSocket” Creating WebSocket Applications in the Java EE Platform “Creating WebSocket Applications in the Java EE Platform” Creating and Deploying a WebSocket Endpoint “Creating and Deploying a WebSocket Endpoint” Programmatic Endpoints “Programmatic Endpoints” Annotated Endpoints “Annotated Endpoints” WebSocket Endpoint Lifecycle Annotations “WebSocket Endpoint Lifecycle Annotations” Sending and Receiving Messages “Sending and Receiving Messages” Sending Messages “Sending Messages” Sending Messages to All Peers Connected to an Endpoint “Sending Messages to All Peers Connected to an Endpoint” Receiving Messages “Receiving Messages” Maintaining Client State “Maintaining Client State” Using Encoders and Decoders “Using Encoders and Decoders” Implementing Encoders to Convert Java Objects into WebSocket Messages “Implementing Encoders to Convert Java Objects into WebSocket Messages” Implementing Decoders to Convert WebSocket Messages into Java Objects “Implementing Decoders to Convert WebSocket Messages into Java Objects” Path Parameters “Path Parameters” Handling Errors “Handling Errors” Specifying an Endpoint Configurator Class “Specifying an Endpoint Configurator Class” The dukeetf2 Example Application “The dukeetf2 Example Application” Architecture of the dukeetf2 Sample Application “Architecture of the dukeetf2 Sample Application” The Endpoint “The Endpoint” The Enterprise Bean “The Enterprise Bean” The HTML Page “The HTML Page” Running the dukeetf2 Example Application “Running the dukeetf2 Example Application” To Run the dukeetf2 Example Application Using NetBeans IDE “To Run the dukeetf2 Example Application Using NetBeans IDE” To Run the dukeetf2 Example Application Using Maven “To Run the dukeetf2 Example Application Using Maven” The websocketbot Example Application “The websocketbot Example Application” Architecture of the websocketbot Example Application “Architecture of the websocketbot Example Application” The CDI Bean “The CDI Bean” The WebSocket Endpoint “The WebSocket Endpoint” The Application Messages “The Application Messages” The Encoder Classes “The Encoder Classes” The Message Decoder “The Message Decoder” The HTML Page “The HTML Page” Running the websocketbot Example Application “Running the websocketbot Example Application” To Run the websocketbot Example Application Using NetBeans IDE “To Run the websocketbot Example Application Using NetBeans IDE” To Run the websocketbot Example Application Using Maven “To Run the websocketbot Example Application Using Maven” To Test the websocketbot Example Application “To Test the websocketbot Example Application” Further Information about WebSocket “Further Information about WebSocket” JSON Processing “JSON Processing” This chapter describes… the paragraph beginning “This chapter describes…” Introduction to JSON “Introduction to JSON” JSON Syntax “JSON Syntax” Uses of JSON “Uses of JSON” Generating and Parsing JSON Data “Generating and Parsing JSON Data” JSON Processing in the Java EE Platform “JSON Processing in the Java EE Platform” Main Classes and Interfaces in javax.json “Main Classes and Interfaces in javax.json” Main Classes and Interfaces in javax.json.stream “Main Classes and Interfaces in javax.json.stream” Using the Object Model API “Using the Object Model API” Creating an Object Model from JSON Data “Creating an Object Model from JSON Data” Creating an Object Model from Application Code “Creating an Object Model from Application Code” Navigating an Object Model “Navigating an Object Model” Writing an Object Model to a Stream “Writing an Object Model to a Stream” Using the Streaming API “Using the Streaming API” Reading JSON Data Using a Parser “Reading JSON Data Using a Parser” Writing JSON Data Using a Generator “Writing JSON Data Using a Generator” JSON in Java EE RESTful Web Services “JSON in Java EE RESTful Web Services” The jsonpmodel Example Application “The jsonpmodel Example Application” Components of the jsonpmodel Example Application “Components of the jsonpmodel Example Application” Running the jsonpmodel Example Application “Running the jsonpmodel Example Application” To Run the jsonpmodel Example Application Using NetBeans IDE “To Run the jsonpmodel Example Application Using NetBeans IDE” To Run the jsonpmodel Example Application Using Maven “To Run the jsonpmodel Example Application Using Maven” The jsonpstreaming Example Application “The jsonpstreaming Example Application” Components of the jsonpstreaming Example Application “Components of the jsonpstreaming Example Application” Running the jsonpstreaming Example Application “Running the jsonpstreaming Example Application” To Run the jsonpstreaming Example Application Using NetBeans IDE “To Run the jsonpstreaming Example Application Using NetBeans IDE” To Run the jsonpstreaming Example Application Using Maven “To Run the jsonpstreaming Example Application Using Maven” Further Information about the Java API for JSON Processing “Further Information about the Java API for JSON Processing” Internationalizing and Localizing Web Applications “Internationalizing and Localizing Web Applications” The process of… the paragraph beginning “The process of…” Java Platform Localization Classes “Java Platform Localization Classes” Providing Localized Messages and Labels “Providing Localized Messages and Labels” Establishing the Locale “Establishing the Locale” Setting the Resource Bundle “Setting the Resource Bundle” Retrieving Localized Messages “Retrieving Localized Messages” Date and Number Formatting “Date and Number Formatting” Character Sets and Encodings “Character Sets and Encodings” Character Sets “Character Sets” Character Encoding “Character Encoding” Introduction to Bean Validation “Introduction to Bean Validation” This chapter describes… the paragraph beginning “This chapter describes…” Overview of Bean Validation “Overview of Bean Validation” Using Bean Validation Constraints “Using Bean Validation Constraints” Built-In Bean Validation Constraints “Built-In Bean Validation Constraints” Validating Null and Empty Strings “Validating Null and Empty Strings” Validating Constructors and Methods “Validating Constructors and Methods” Cross-Parameter Constraints “Cross-Parameter Constraints” Identifying Parameter Constraint Violations “Identifying Parameter Constraint Violations” Adding Constraints to Method Return Values “Adding Constraints to Method Return Values” Further Information about Bean Validation “Further Information about Bean Validation” Bean Validation: Advanced Topics “Bean Validation: Advanced Topics” This chapter describes… the paragraph beginning “This chapter describes…” Creating Custom Constraints “Creating Custom Constraints” Using the Built-In Constraints to Make a New Constraint “Using the Built-In Constraints to Make a New Constraint” Removing Ambiguity in Constraint Targets “Removing Ambiguity in Constraint Targets” Customizing Validator Messages “Customizing Validator Messages” The ValidationMessages Resource Bundle “The ValidationMessages Resource Bundle” Localizing Validation Messages “Localizing Validation Messages” Grouping Constraints “Grouping Constraints” Customizing Group Validation Order “Customizing Group Validation Order” Using Method Constraints in Type Hierarchies “Using Method Constraints in Type Hierarchies” Rules for Using Method Constraints in Type Hierarchies “Rules for Using Method Constraints in Type Hierarchies” Introduction to Contexts and Dependency Injection for Java EE “Introduction to Contexts and Dependency Injection for Java EE” This chapter describes… the paragraph beginning “This chapter describes…” Getting Started “Getting Started” Overview of CDI “Overview of CDI” About Beans “About Beans” About CDI Managed Beans “About CDI Managed Beans” Beans as Injectable Objects “Beans as Injectable Objects” Using Qualifiers “Using Qualifiers” Injecting Beans “Injecting Beans” Using Scopes “Using Scopes” Scopes “Scopes” Giving Beans EL Names “Giving Beans EL Names” Adding Setter and Getter Methods “Adding Setter and Getter Methods” Using a Managed Bean in a Facelets Page “Using a Managed Bean in a Facelets Page” Injecting Objects by Using Producer Methods “Injecting Objects by Using Producer Methods” Configuring a CDI Application “Configuring a CDI Application” Using the @PostConstruct and @PreDestroy Annotations with CDI Managed Bean Classes “Using the @PostConstruct and @PreDestroy Annotations with CDI Managed Bean Classes” To Initialize a Managed Bean Using the @PostConstruct Annotation “To Initialize a Managed Bean Using the @PostConstruct Annotation” To Prepare for the Destruction of a Managed Bean Using the @PreDestroy Annotation “To Prepare for the Destruction of a Managed Bean Using the @PreDestroy Annotation” Further Information about CDI “Further Information about CDI” Running the Basic Contexts and Dependency Injection Examples “Running the Basic Contexts and Dependency Injection Examples” This chapter describes… the paragraph beginning “This chapter describes…” Building and Running the CDI Samples “Building and Running the CDI Samples” The simplegreeting CDI Example “The simplegreeting CDI Example” The simplegreeting Source Files “The simplegreeting Source Files” The Facelets Template and Page “The Facelets Template and Page” Running the simplegreeting Example “Running the simplegreeting Example” To Build, Package, and Run the simplegreeting Example Using NetBeans IDE “To Build, Package, and Run the simplegreeting Example Using NetBeans IDE” To Build, Package, and Deploy the simplegreeting Example Using Maven “To Build, Package, and Deploy the simplegreeting Example Using Maven” To Run the simplegreeting Example “To Run the simplegreeting Example” The guessnumber-cdi CDI Example “The guessnumber-cdi CDI Example” The guessnumber-cdi Source Files “The guessnumber-cdi Source Files” The @MaxNumber and @Random Qualifier Interfaces “The @MaxNumber and @Random Qualifier Interfaces” The Generator Managed Bean “The Generator Managed Bean” The UserNumberBean Managed Bean “The UserNumberBean Managed Bean” The Facelets Page “The Facelets Page” Running the guessnumber-cdi Example “Running the guessnumber-cdi Example” To Build, Package, and Deploy the guessnumber-cdi Example Using NetBeans IDE “To Build, Package, and Deploy the guessnumber-cdi Example Using NetBeans IDE” To Build, Package, and Deploy the guessnumber-cdi Example Using Maven “To Build, Package, and Deploy the guessnumber-cdi Example Using Maven” To Run the guessnumber Example “To Run the guessnumber Example” Contexts and Dependency Injection for Java EE: Advanced Topics “Contexts and Dependency Injection for Java EE: Advanced Topics” This chapter describes… the paragraph beginning “This chapter describes…” Packaging CDI Applications “Packaging CDI Applications” Using Alternatives in CDI Applications “Using Alternatives in CDI Applications” Using Specialization “Using Specialization” Using Producer Methods, Producer Fields, and Disposer Methods in CDI Applications “Using Producer Methods, Producer Fields, and Disposer Methods in CDI Applications” Using Producer Methods “Using Producer Methods” Using Producer Fields to Generate Resources “Using Producer Fields to Generate Resources” Using a Disposer Method “Using a Disposer Method” Using Predefined Beans in CDI Applications “Using Predefined Beans in CDI Applications” Injection of Predefined Beans “Injection of Predefined Beans” Using Events in CDI Applications “Using Events in CDI Applications” Defining Events “Defining Events” Using Observer Methods to Handle Events “Using Observer Methods to Handle Events” Firing Events “Firing Events” Using Interceptors in CDI Applications “Using Interceptors in CDI Applications” Using Decorators in CDI Applications “Using Decorators in CDI Applications” Using Stereotypes in CDI Applications “Using Stereotypes in CDI Applications” Running the Advanced Contexts and Dependency Injection Examples “Running the Advanced Contexts and Dependency Injection Examples” This chapter describes… the paragraph beginning “This chapter describes…” Building and Running the CDI Advanced Examples “Building and Running the CDI Advanced Examples” The encoder Example: Using Alternatives “The encoder Example: Using Alternatives” The Coder Interface and Implementations “The Coder Interface and Implementations” The encoder Facelets Page and Managed Bean “The encoder Facelets Page and Managed Bean” Running the encoder Example “Running the encoder Example” To Build, Package, and Deploy the encoder Example Using NetBeans IDE “To Build, Package, and Deploy the encoder Example Using NetBeans IDE” To Run the encoder Example Using NetBeans IDE “To Run the encoder Example Using NetBeans IDE” To Build, Package, and Deploy the encoder Example Using Maven “To Build, Package, and Deploy the encoder Example Using Maven” To Run the encoder Example Using Maven “To Run the encoder Example Using Maven” The producermethods Example: Using a Producer Method to Choose a Bean Implementation “The producermethods Example: Using a Producer Method to Choose a Bean Implementation” Components of the producermethods Example “Components of the producermethods Example” Running the producermethods Example “Running the producermethods Example” To Build, Package, and Deploy the producermethods Example Using NetBeans IDE “To Build, Package, and Deploy the producermethods Example Using NetBeans IDE” To Build, Package, and Deploy the producermethods Example Using Maven “To Build, Package, and Deploy the producermethods Example Using Maven” To Run the producermethods Example “To Run the producermethods Example” The producerfields Example: Using Producer Fields to Generate Resources “The producerfields Example: Using Producer Fields to Generate Resources” The Producer Field for the producerfields Example “The Producer Field for the producerfields Example” The producerfields Entity and Session Bean “The producerfields Entity and Session Bean” The producerfields Facelets Pages and Managed Bean “The producerfields Facelets Pages and Managed Bean” Running the producerfields Example “Running the producerfields Example” To Build, Package, and Deploy the producerfields Example Using NetBeans IDE “To Build, Package, and Deploy the producerfields Example Using NetBeans IDE” To Build, Package, and Deploy the producerfields Example Using Maven “To Build, Package, and Deploy the producerfields Example Using Maven” To Run the producerfields Example “To Run the producerfields Example” The billpayment Example: Using Events and Interceptors “The billpayment Example: Using Events and Interceptors” Overview of the billpayment Example “Overview of the billpayment Example” The PaymentEvent Event Class “The PaymentEvent Event Class” The PaymentHandler Event Listener “The PaymentHandler Event Listener” The billpayment Facelets Pages and Managed Bean “The billpayment Facelets Pages and Managed Bean” The LoggedInterceptor Interceptor Class “The LoggedInterceptor Interceptor Class” Running the billpayment Example “Running the billpayment Example” To Build, Package, and Deploy the billpayment Example Using NetBeans IDE “To Build, Package, and Deploy the billpayment Example Using NetBeans IDE” To Build, Package, and Deploy the billpayment Example Using Maven “To Build, Package, and Deploy the billpayment Example Using Maven” To Run the billpayment Example “To Run the billpayment Example” The decorators Example: Decorating a Bean “The decorators Example: Decorating a Bean” Overview of the decorators Example “Overview of the decorators Example” Components of the decorators Example “Components of the decorators Example” Running the decorators Example “Running the decorators Example” To Build, Package, and Deploy the decorators Example Using NetBeans IDE “To Build, Package, and Deploy the decorators Example Using NetBeans IDE” To Build, Package, and Deploy the decorators Example Using Maven “To Build, Package, and Deploy the decorators Example Using Maven” To Run the decorators Example “To Run the decorators Example” Introduction to Web Services “Introduction to Web Services” This part of… the paragraph beginning “This part of…” What Are Web Services? “What Are Web Services?” Types of Web Services “Types of Web Services” "Big" Web Services “"Big" Web Services” RESTful Web Services “RESTful Web Services” Deciding Which Type of Web Service to Use “Deciding Which Type of Web Service to Use” Building Web Services with JAX-WS “Building Web Services with JAX-WS” This chapter describes… the paragraph beginning “This chapter describes…” Overview of Java API for XML Web Services “Overview of Java API for XML Web Services” Creating a Simple Web Service and Clients with JAX-WS “Creating a Simple Web Service and Clients with JAX-WS” Communication between a JAX-WS Web Service and a Client “Communication between a JAX-WS Web Service and a Client” Basic Steps for Creating a Web Service and Client “Basic Steps for Creating a Web Service and Client” Requirements of a JAX-WS Endpoint “Requirements of a JAX-WS Endpoint” Coding the Service Endpoint Implementation Class “Coding the Service Endpoint Implementation Class” Building, Packaging, and Deploying the Service “Building, Packaging, and Deploying the Service” To Build, Package, and Deploy the Service Using NetBeans IDE “To Build, Package, and Deploy the Service Using NetBeans IDE” Next Steps “Next Steps” To Build, Package, and Deploy the Service Using Maven “To Build, Package, and Deploy the Service Using Maven” Next Steps “Next Steps” Testing the Methods of a Web Service Endpoint “Testing the Methods of a Web Service Endpoint” To Test the Service without a Client “To Test the Service without a Client” A Simple JAX-WS Application Client “A Simple JAX-WS Application Client” Coding the Application Client “Coding the Application Client” Running the Application Client “Running the Application Client” To Run the Application Client Using NetBeans IDE “To Run the Application Client Using NetBeans IDE” To Run the Application Client Using Maven “To Run the Application Client Using Maven” A Simple JAX-WS Web Client “A Simple JAX-WS Web Client” Coding the Servlet “Coding the Servlet” Running the Web Client “Running the Web Client” To Run the Web Client Using NetBeans IDE “To Run the Web Client Using NetBeans IDE” To Run the Web Client Using Maven “To Run the Web Client Using Maven” Types Supported by JAX-WS “Types Supported by JAX-WS” Schema-to-Java Mapping “Schema-to-Java Mapping” Mapping of XML Data Types to Java Data Types in JAXB “Mapping of XML Data Types to Java Data Types in JAXB” Java-to-Schema Mapping “Java-to-Schema Mapping” Mapping of Java Classes to XML Data Types in JAXB “Mapping of Java Classes to XML Data Types in JAXB” Web Services Interoperability and JAX-WS “Web Services Interoperability and JAX-WS” Further Information about JAX-WS “Further Information about JAX-WS” Building RESTful Web Services with JAX-RS “Building RESTful Web Services with JAX-RS” This chapter describes… the paragraph beginning “This chapter describes…” What Are RESTful Web Services? “What Are RESTful Web Services?” Creating a RESTful Root Resource Class “Creating a RESTful Root Resource Class” Developing RESTful Web Services with JAX-RS “Developing RESTful Web Services with JAX-RS” Summary of JAX-RS Annotations “Summary of JAX-RS Annotations” Overview of a JAX-RS Application “Overview of a JAX-RS Application” The @Path Annotation and URI Path Templates “The @Path Annotation and URI Path Templates” Examples of URI Path Templates “Examples of URI Path Templates” Responding to HTTP Methods and Requests “Responding to HTTP Methods and Requests” The Request Method Designator Annotations “The Request Method Designator Annotations” Using Entity Providers to Map HTTP Response and Request Entity Bodies “Using Entity Providers to Map HTTP Response and Request Entity Bodies” Types Supported for HTTP Request and Response Entity Bodies “Types Supported for HTTP Request and Response Entity Bodies” Using @Consumes and @Produces to Customize Requests and Responses “Using @Consumes and @Produces to Customize Requests and Responses” The @Produces Annotation “The @Produces Annotation” The @Consumes Annotation “The @Consumes Annotation” Extracting Request Parameters “Extracting Request Parameters” Configuring JAX-RS Applications “Configuring JAX-RS Applications” Configuring a JAX-RS Application Using a Subclass of Application “Configuring a JAX-RS Application Using a Subclass of Application” Configuring the Base URI in web.xml “Configuring the Base URI in web.xml” Example Applications for JAX-RS “Example Applications for JAX-RS” Creating a Simple RESTful Web Service “Creating a Simple RESTful Web Service” To Create a RESTful Web Service Using NetBeans IDE “To Create a RESTful Web Service Using NetBeans IDE” The rsvp Example Application “The rsvp Example Application” Components of the rsvp Example Application “Components of the rsvp Example Application” Running the rsvp Example Application “Running the rsvp Example Application” To Run the rsvp Example Application Using NetBeans IDE “To Run the rsvp Example Application Using NetBeans IDE” To Run the rsvp Example Application Using Maven “To Run the rsvp Example Application Using Maven” Real-World Examples “Real-World Examples” Further Information about JAX-RS “Further Information about JAX-RS” Accessing REST Resources with the JAX-RS Client API “Accessing REST Resources with the JAX-RS Client API” This chapter describes… the paragraph beginning “This chapter describes…” Overview of the Client API “Overview of the Client API” Creating a Basic Client Request Using the Client API “Creating a Basic Client Request Using the Client API” Obtaining the Client Instance “Obtaining the Client Instance” Setting the Client Target “Setting the Client Target” Setting Path Parameters in Targets “Setting Path Parameters in Targets” Invoking the Request “Invoking the Request” Using the Client API in the JAX-RS Example Applications “Using the Client API in the JAX-RS Example Applications” The Client API in the rsvp Example Application “The Client API in the rsvp Example Application” The Client API in the customer Example Application “The Client API in the customer Example Application” Advanced Features of the Client API “Advanced Features of the Client API” Configuring the Client Request “Configuring the Client Request” Setting Message Headers in the Client Request “Setting Message Headers in the Client Request” Setting Cookies in the Client Request “Setting Cookies in the Client Request” Adding Filters to the Client “Adding Filters to the Client” Asynchronous Invocations in the Client API “Asynchronous Invocations in the Client API” Using Custom Callbacks in Asynchronous Invocations “Using Custom Callbacks in Asynchronous Invocations” Using Reactive Approach in Asynchronous Invocations “Using Reactive Approach in Asynchronous Invocations” Using Server-Sent Events “Using Server-Sent Events” Overview of the SSE API “Overview of the SSE API” Broadcasting Using SSE “Broadcasting Using SSE” Listening and Receiving Events “Listening and Receiving Events” JAX-RS: Advanced Topics and an Example “JAX-RS: Advanced Topics and an Example” The Java API… the paragraph beginning “The Java API…” Annotations for Field and Bean Properties of Resource Classes “Annotations for Field and Bean Properties of Resource Classes” Advanced JAX-RS Annotations “Advanced JAX-RS Annotations” Extracting Path Parameters “Extracting Path Parameters” Extracting Query Parameters “Extracting Query Parameters” Extracting Form Data “Extracting Form Data” Extracting the Java Type of a Request or Response “Extracting the Java Type of a Request or Response” Validating Resource Data with Bean Validation “Validating Resource Data with Bean Validation” Using Constraint Annotations on Resource Methods “Using Constraint Annotations on Resource Methods” Validating Entity Data “Validating Entity Data” Validation Exception Handling and Response Codes “Validation Exception Handling and Response Codes” Subresources and Runtime Resource Resolution “Subresources and Runtime Resource Resolution” Subresource Methods “Subresource Methods” Subresource Locators “Subresource Locators” Integrating JAX-RS with EJB Technology and CDI “Integrating JAX-RS with EJB Technology and CDI” Conditional HTTP Requests “Conditional HTTP Requests” Runtime Content Negotiation “Runtime Content Negotiation” Using JAX-RS with JAXB “Using JAX-RS with JAXB” Using Java Objects to Model Your Data “Using Java Objects to Model Your Data” Starting from an Existing XML Schema Definition “Starting from an Existing XML Schema Definition” Using JSON with JAX-RS and JAXB “Using JSON with JAX-RS and JAXB” The customer Example Application “The customer Example Application” Overview of the customer Example Application “Overview of the customer Example Application” The Customer and Address Entity Classes “The Customer and Address Entity Classes” The CustomerService Class “The CustomerService Class” Using the JAX-RS Client in the CustomerBean Classes “Using the JAX-RS Client in the CustomerBean Classes” Running the customer Example “Running the customer Example” To Build, Package, and Deploy the customer Example Using NetBeans IDE “To Build, Package, and Deploy the customer Example Using NetBeans IDE” To Build, Package, and Deploy the customer Example Using Maven “To Build, Package, and Deploy the customer Example Using Maven” Enterprise Beans “Enterprise Beans” Enterprise beans are… the paragraph beginning “Enterprise beans are…” What Is an Enterprise Bean? “What Is an Enterprise Bean?” Benefits of Enterprise Beans “Benefits of Enterprise Beans” When to Use Enterprise Beans “When to Use Enterprise Beans” Types of Enterprise Beans “Types of Enterprise Beans” Enterprise Bean Types “Enterprise Bean Types” What Is a Session Bean? “What Is a Session Bean?” Types of Session Beans “Types of Session Beans” Stateful Session Beans “Stateful Session Beans” Stateless Session Beans “Stateless Session Beans” Singleton Session Beans “Singleton Session Beans” When to Use Session Beans “When to Use Session Beans” What Is a Message-Driven Bean? “What Is a Message-Driven Bean?” What Makes Message-Driven Beans Different from Session Beans? “What Makes Message-Driven Beans Different from Session Beans?” When to Use Message-Driven Beans “When to Use Message-Driven Beans” Accessing Enterprise Beans “Accessing Enterprise Beans” Using Enterprise Beans in Clients “Using Enterprise Beans in Clients” Portable JNDI Syntax “Portable JNDI Syntax” Deciding on Remote or Local Access “Deciding on Remote or Local Access” Local Clients “Local Clients” Accessing Local Enterprise Beans Using the No-Interface View “Accessing Local Enterprise Beans Using the No-Interface View” Accessing Local Enterprise Beans That Implement Business Interfaces “Accessing Local Enterprise Beans That Implement Business Interfaces” Remote Clients “Remote Clients” Interfaces for an Enterprise Bean with Remote Access “Interfaces for an Enterprise Bean with Remote Access” Web Service Clients “Web Service Clients” Method Parameters and Access “Method Parameters and Access” Isolation “Isolation” Granularity of Accessed Data “Granularity of Accessed Data” The Contents of an Enterprise Bean “The Contents of an Enterprise Bean” Naming Conventions for Enterprise Beans “Naming Conventions for Enterprise Beans” Naming Conventions for Enterprise Beans “Naming Conventions for Enterprise Beans” The Lifecycles of Enterprise Beans “The Lifecycles of Enterprise Beans” The Lifecycle of a Stateful Session Bean “The Lifecycle of a Stateful Session Bean” Lifecycle of a Stateful Session Bean “Lifecycle of a Stateful Session Bean” The Lifecycle of a Stateless Session Bean “The Lifecycle of a Stateless Session Bean” Lifecycle of a Stateless or Singleton Session Bean “Lifecycle of a Stateless or Singleton Session Bean” The Lifecycle of a Singleton Session Bean “The Lifecycle of a Singleton Session Bean” The Lifecycle of a Message-Driven Bean “The Lifecycle of a Message-Driven Bean” Lifecycle of a Message-Driven Bean “Lifecycle of a Message-Driven Bean” Further Information about Enterprise Beans “Further Information about Enterprise Beans” Getting Started with Enterprise Beans “Getting Started with Enterprise Beans” This chapter shows… the paragraph beginning “This chapter shows…” Starting With Enterprise Beans “Starting With Enterprise Beans” Creating the Enterprise Bean “Creating the Enterprise Bean” Coding the Enterprise Bean Class “Coding the Enterprise Bean Class” Creating the converter Web Client “Creating the converter Web Client” Running the converter Example “Running the converter Example” To Run the converter Example Using NetBeans IDE “To Run the converter Example Using NetBeans IDE” To Run the converter Example Using Maven “To Run the converter Example Using Maven” Modifying the Java EE Application “Modifying the Java EE Application” To Modify a Class File “To Modify a Class File” Running the Enterprise Bean Examples “Running the Enterprise Bean Examples” This chapter describes… the paragraph beginning “This chapter describes…” Overview of the EJB Examples “Overview of the EJB Examples” The cart Example “The cart Example” The Business Interface “The Business Interface” Session Bean Class “Session Bean Class” Lifecycle Callback Methods “Lifecycle Callback Methods” Business Methods “Business Methods” The @Remove Method “The @Remove Method” Helper Classes “Helper Classes” Running the cart Example “Running the cart Example” To Run the cart Example Using NetBeans IDE “To Run the cart Example Using NetBeans IDE” To Run the cart Example Using Maven “To Run the cart Example Using Maven” A Singleton Session Bean Example: counter “A Singleton Session Bean Example: counter” Creating a Singleton Session Bean “Creating a Singleton Session Bean” Initializing Singleton Session Beans “Initializing Singleton Session Beans” Managing Concurrent Access in a Singleton Session Bean “Managing Concurrent Access in a Singleton Session Bean” Handling Errors in a Singleton Session Bean “Handling Errors in a Singleton Session Bean” The Architecture of the counter Example “The Architecture of the counter Example” Running the counter Example “Running the counter Example” To Run the counter Example Using NetBeans IDE “To Run the counter Example Using NetBeans IDE” To Run the counter Example Using Maven “To Run the counter Example Using Maven” A Web Service Example: helloservice “A Web Service Example: helloservice” The Web Service Endpoint Implementation Class “The Web Service Endpoint Implementation Class” Stateless Session Bean Implementation Class “Stateless Session Bean Implementation Class” Running the helloservice Example “Running the helloservice Example” To Build, Package, and Deploy the helloservice Example Using NetBeans IDE “To Build, Package, and Deploy the helloservice Example Using NetBeans IDE” To Build, Package, and Deploy the helloservice Example Using Maven “To Build, Package, and Deploy the helloservice Example Using Maven” To Test the Service without a Client “To Test the Service without a Client” Using the Timer Service “Using the Timer Service” Creating Calendar-Based Timer Expressions “Creating Calendar-Based Timer Expressions” Calendar-Based Timer Attributes “Calendar-Based Timer Attributes” Specifying Multiple Values in Calendar Expressions “Specifying Multiple Values in Calendar Expressions” Programmatic Timers “Programmatic Timers” The @Timeout Method “The @Timeout Method” Creating Programmatic Timers “Creating Programmatic Timers” Automatic Timers “Automatic Timers” Canceling and Saving Timers “Canceling and Saving Timers” Getting Timer Information “Getting Timer Information” Transactions and Timers “Transactions and Timers” The timersession Example “The timersession Example” Running the timersession Example “Running the timersession Example” To Run the timersession Example Using NetBeans IDE “To Run the timersession Example Using NetBeans IDE” To Build, Package, and Deploy the timersession Example Using Maven “To Build, Package, and Deploy the timersession Example Using Maven” To Run the Web Client “To Run the Web Client” Handling Exceptions “Handling Exceptions” Using the Embedded Enterprise Bean Container “Using the Embedded Enterprise Bean Container” This chapter demonstrates… the paragraph beginning “This chapter demonstrates…” Overview of the Embedded Enterprise Bean Container “Overview of the Embedded Enterprise Bean Container” Developing Embeddable Enterprise Bean Applications “Developing Embeddable Enterprise Bean Applications” Required Enterprise Bean Features in the Embeddable Container “Required Enterprise Bean Features in the Embeddable Container” Running Embedded Applications “Running Embedded Applications” Creating the Enterprise Bean Container “Creating the Enterprise Bean Container” Explicitly Specifying Enterprise Bean Modules to Be Initialized “Explicitly Specifying Enterprise Bean Modules to Be Initialized” Looking Up Session Bean References “Looking Up Session Bean References” Shutting Down the Enterprise Bean Container “Shutting Down the Enterprise Bean Container” The standalone Example Application “The standalone Example Application” Overview of the standalone Example Application “Overview of the standalone Example Application” To Run the standalone Example Application Using NetBeans IDE “To Run the standalone Example Application Using NetBeans IDE” To Run the standalone Example Application Using Maven “To Run the standalone Example Application Using Maven” Using Asynchronous Method Invocation in Session Beans “Using Asynchronous Method Invocation in Session Beans” This chapter discusses… the paragraph beginning “This chapter discusses…” Asynchronous Method Invocation “Asynchronous Method Invocation” Creating an Asynchronous Business Method “Creating an Asynchronous Business Method” Calling Asynchronous Methods from Enterprise Bean Clients “Calling Asynchronous Methods from Enterprise Bean Clients” Retrieving the Final Result from an Asynchronous Method Invocation “Retrieving the Final Result from an Asynchronous Method Invocation” Cancelling an Asynchronous Method Invocation “Cancelling an Asynchronous Method Invocation” Checking the Status of an Asynchronous Method Invocation “Checking the Status of an Asynchronous Method Invocation” The async Example Application “The async Example Application” Architecture of the async-war Module “Architecture of the async-war Module” Running the async Example “Running the async Example” To Run the async Example Application Using NetBeans IDE “To Run the async Example Application Using NetBeans IDE” To Run the async Example Application Using Maven “To Run the async Example Application Using Maven” Introduction to the Java Persistence API “Introduction to the Java Persistence API” This chapter provides… the paragraph beginning “This chapter provides…” Overview of the Java Persistence API “Overview of the Java Persistence API” Entities “Entities” Requirements for Entity Classes “Requirements for Entity Classes” Persistent Fields and Properties in Entity Classes “Persistent Fields and Properties in Entity Classes” Persistent Fields “Persistent Fields” Persistent Properties “Persistent Properties” Using Collections in Entity Fields and Properties “Using Collections in Entity Fields and Properties” Validating Persistent Fields and Properties “Validating Persistent Fields and Properties” Primary Keys in Entities “Primary Keys in Entities” Multiplicity in Entity Relationships “Multiplicity in Entity Relationships” Direction in Entity Relationships “Direction in Entity Relationships” Bidirectional Relationships “Bidirectional Relationships” Unidirectional Relationships “Unidirectional Relationships” Queries and Relationship Direction “Queries and Relationship Direction” Cascade Operations and Relationships “Cascade Operations and Relationships” Cascade Operations for Entities “Cascade Operations for Entities” Orphan Removal in Relationships “Orphan Removal in Relationships” Embeddable Classes in Entities “Embeddable Classes in Entities” Entity Inheritance “Entity Inheritance” Abstract Entities “Abstract Entities” Mapped Superclasses “Mapped Superclasses” Non-Entity Superclasses “Non-Entity Superclasses” Entity Inheritance Mapping Strategies “Entity Inheritance Mapping Strategies” The Single Table per Class Hierarchy Strategy “The Single Table per Class Hierarchy Strategy” @DiscriminatorColumn Elements “@DiscriminatorColumn Elements” The Table per Concrete Class Strategy “The Table per Concrete Class Strategy” The Joined Subclass Strategy “The Joined Subclass Strategy” Managing Entities “Managing Entities” The EntityManager Interface “The EntityManager Interface” Container-Managed Entity Managers “Container-Managed Entity Managers” Application-Managed Entity Managers “Application-Managed Entity Managers” Finding Entities Using the EntityManager “Finding Entities Using the EntityManager” Managing an Entity Instance’s Lifecycle “Managing an Entity Instance’s Lifecycle” Persisting Entity Instances “Persisting Entity Instances” Removing Entity Instances “Removing Entity Instances” Synchronizing Entity Data to the Database “Synchronizing Entity Data to the Database” Persistence Units “Persistence Units” Querying Entities “Querying Entities” Database Schema Creation “Database Schema Creation” Configuring an Application to Create or Drop Database Tables “Configuring an Application to Create or Drop Database Tables” Schema Creation Actions “Schema Creation Actions” Settings for Create and Delete Source Properties “Settings for Create and Delete Source Properties” Loading Data Using SQL Scripts “Loading Data Using SQL Scripts” Further Information about Persistence “Further Information about Persistence” Running the Persistence Examples “Running the Persistence Examples” This chapter explains… the paragraph beginning “This chapter explains…” Overview of the Persistence Examples “Overview of the Persistence Examples” The order Application “The order Application” Database Schema for the order Application “Database Schema for the order Application” Entity Relationships in the order Application “Entity Relationships in the order Application” Self-Referential Relationships “Self-Referential Relationships” One-to-One Relationships “One-to-One Relationships” One-to-Many Relationship Mapped to Overlapping Primary and Foreign Keys “One-to-Many Relationship Mapped to Overlapping Primary and Foreign Keys” Unidirectional Relationships “Unidirectional Relationships” Primary Keys in the order Application “Primary Keys in the order Application” Generated Primary Keys “Generated Primary Keys” Compound Primary Keys “Compound Primary Keys” Entity Mapped to More Than One Database Table “Entity Mapped to More Than One Database Table” Cascade Operations in the order Application “Cascade Operations in the order Application” BLOB and CLOB Database Types in the order Application “BLOB and CLOB Database Types in the order Application” Temporal Types in the order Application “Temporal Types in the order Application” Managing the order Application’s Entities “Managing the order Application’s Entities” Creating Entities “Creating Entities” Finding Entities “Finding Entities” Setting Entity Relationships “Setting Entity Relationships” Using Queries “Using Queries” Removing Entities “Removing Entities” Running the order Example “Running the order Example” To Run the order Example Using NetBeans IDE “To Run the order Example Using NetBeans IDE” To Run the order Example Using Maven “To Run the order Example Using Maven” The roster Application “The roster Application” Database Schema for the roster Application “Database Schema for the roster Application” Relationships in the roster Application “Relationships in the roster Application” The Many-To-Many Relationship in roster “The Many-To-Many Relationship in roster” Entity Inheritance in the roster Application “Entity Inheritance in the roster Application” Criteria Queries in the roster Application “Criteria Queries in the roster Application” Metamodel Classes in the roster Application “Metamodel Classes in the roster Application” Obtaining a CriteriaBuilder Instance in RequestBean “Obtaining a CriteriaBuilder Instance in RequestBean” Creating Criteria Queries in RequestBean’s Business Methods “Creating Criteria Queries in RequestBean’s Business Methods” Automatic Table Generation in the roster Application “Automatic Table Generation in the roster Application” Running the roster Example “Running the roster Example” To Run the roster Example Using NetBeans IDE “To Run the roster Example Using NetBeans IDE” To Run the roster Example Using Maven “To Run the roster Example Using Maven” The address-book Application “The address-book Application” Bean Validation Constraints in address-book “Bean Validation Constraints in address-book” Specifying Error Messages for Constraints in address-book “Specifying Error Messages for Constraints in address-book” Validating Contact Input from a JavaServer Faces Application “Validating Contact Input from a JavaServer Faces Application” Running the address-book Example “Running the address-book Example” To Run the address-book Example Using NetBeans IDE “To Run the address-book Example Using NetBeans IDE” To Run the address-book Example Using Maven “To Run the address-book Example Using Maven” The Java Persistence Query Language “The Java Persistence Query Language” This chapter describes… the paragraph beginning “This chapter describes…” Overview of the Java Persistence Query Language “Overview of the Java Persistence Query Language” Query Language Terminology “Query Language Terminology” Creating Queries Using the Java Persistence Query Language “Creating Queries Using the Java Persistence Query Language” Named Parameters in Queries “Named Parameters in Queries” Positional Parameters in Queries “Positional Parameters in Queries” Simplified Query Language Syntax “Simplified Query Language Syntax” Select Statements “Select Statements” Update and Delete Statements “Update and Delete Statements” Example Queries “Example Queries” Simple Queries “Simple Queries” A Basic Select Query “A Basic Select Query” Eliminating Duplicate Values “Eliminating Duplicate Values” Using Named Parameters “Using Named Parameters” Queries That Navigate to Related Entities “Queries That Navigate to Related Entities” A Simple Query with Relationships “A Simple Query with Relationships” Navigating to Single-Valued Relationship Fields “Navigating to Single-Valued Relationship Fields” Traversing Relationships with an Input Parameter “Traversing Relationships with an Input Parameter” Traversing Multiple Relationships “Traversing Multiple Relationships” Navigating According to Related Fields “Navigating According to Related Fields” Queries with Other Conditional Expressions “Queries with Other Conditional Expressions” The LIKE Expression “The LIKE Expression” The IS NULL Expression “The IS NULL Expression” The IS EMPTY Expression “The IS EMPTY Expression” The BETWEEN Expression “The BETWEEN Expression” Comparison Operators “Comparison Operators” Bulk Updates and Deletes “Bulk Updates and Deletes” Update Queries “Update Queries” Delete Queries “Delete Queries” Full Query Language Syntax “Full Query Language Syntax” BNF Symbols “BNF Symbols” BNF Symbol Summary “BNF Symbol Summary” BNF Grammar of the Java Persistence Query Language “BNF Grammar of the Java Persistence Query Language” FROM Clause “FROM Clause” Identifiers “Identifiers” Identification Variables “Identification Variables” Range Variable Declarations “Range Variable Declarations” Collection Member Declarations “Collection Member Declarations” Joins “Joins” Path Expressions “Path Expressions” Examples of Path Expressions “Examples of Path Expressions” Expression Types “Expression Types” Navigation “Navigation” WHERE Clause “WHERE Clause” Literals “Literals” Input Parameters “Input Parameters” Conditional Expressions “Conditional Expressions” Operators and Their Precedence “Operators and Their Precedence” Query Language Order Precedence “Query Language Order Precedence” BETWEEN Expressions “BETWEEN Expressions” IN Expressions “IN Expressions” LIKE Expressions “LIKE Expressions” LIKE Expression Examples “LIKE Expression Examples” NULL Comparison Expressions “NULL Comparison Expressions” Empty Collection Comparison Expressions “Empty Collection Comparison Expressions” Collection Member Expressions “Collection Member Expressions” Subqueries “Subqueries” Functional Expressions “Functional Expressions” String Expressions “String Expressions” Arithmetic Expressions “Arithmetic Expressions” Date/Time Expressions “Date/Time Expressions” Case Expressions “Case Expressions” NULL Values “NULL Values” AND Operator Logic “AND Operator Logic” OR Operator Logic “OR Operator Logic” Equality Semantics “Equality Semantics” NOT Operator Logic “NOT Operator Logic” Conditional Test “Conditional Test” SELECT Clause “SELECT Clause” Return Types “Return Types” Aggregate Functions in Select Statements “Aggregate Functions in Select Statements” The DISTINCT Keyword “The DISTINCT Keyword” Constructor Expressions “Constructor Expressions” ORDER BY Clause “ORDER BY Clause” GROUP BY and HAVING Clauses “GROUP BY and HAVING Clauses” Using the Criteria API to Create Queries “Using the Criteria API to Create Queries” The Criteria API… the paragraph beginning “The Criteria API…” Overview of the Criteria and Metamodel APIs “Overview of the Criteria and Metamodel APIs” Using the Metamodel API to Model Entity Classes “Using the Metamodel API to Model Entity Classes” Using Metamodel Classes “Using Metamodel Classes” Using the Criteria API and Metamodel API to Create Basic Typesafe Queries “Using the Criteria API and Metamodel API to Create Basic Typesafe Queries” Creating a Criteria Query “Creating a Criteria Query” Query Roots “Query Roots” Querying Relationships Using Joins “Querying Relationships Using Joins” Path Navigation in Criteria Queries “Path Navigation in Criteria Queries” Restricting Criteria Query Results “Restricting Criteria Query Results” The Expression Interface Methods “The Expression Interface Methods” Conditional Methods in the Expression Interface “Conditional Methods in the Expression Interface” Expression Methods in the CriteriaBuilder Interface “Expression Methods in the CriteriaBuilder Interface” Conditional Methods in the CriteriaBuilder Interface “Conditional Methods in the CriteriaBuilder Interface” Compound Predicate Methods in the CriteriaBuilder Interface “Compound Predicate Methods in the CriteriaBuilder Interface” Managing Criteria Query Results “Managing Criteria Query Results” Ordering Results “Ordering Results” Grouping Results “Grouping Results” Executing Queries “Executing Queries” Single-Valued Query Results “Single-Valued Query Results” Collection-Valued Query Results “Collection-Valued Query Results” Creating and Using String-Based Criteria Queries “Creating and Using String-Based Criteria Queries” This chapter describes… the paragraph beginning “This chapter describes…” Overview of String-Based Criteria API Queries “Overview of String-Based Criteria API Queries” Creating String-Based Queries “Creating String-Based Queries” Executing String-Based Queries “Executing String-Based Queries” Controlling Concurrent Access to Entity Data with Locking “Controlling Concurrent Access to Entity Data with Locking” This chapter details… the paragraph beginning “This chapter details…” Overview of Entity Locking and Concurrency “Overview of Entity Locking and Concurrency” Using Optimistic Locking “Using Optimistic Locking” Lock Modes “Lock Modes” Lock Modes for Concurrent Entity Access “Lock Modes for Concurrent Entity Access” Setting the Lock Mode “Setting the Lock Mode” Using Pessimistic Locking “Using Pessimistic Locking” Pessimistic Locking Timeouts “Pessimistic Locking Timeouts” Creating Fetch Plans with Entity Graphs “Creating Fetch Plans with Entity Graphs” This chapter explains… the paragraph beginning “This chapter explains…” Overview of Using Fetch Plans and Entity Graphs “Overview of Using Fetch Plans and Entity Graphs” Entity Graph Basics “Entity Graph Basics” The Default Entity Graph “The Default Entity Graph” Using Entity Graphs in Persistence Operations “Using Entity Graphs in Persistence Operations” Fetch Graphs “Fetch Graphs” Load Graphs “Load Graphs” Using Named Entity Graphs “Using Named Entity Graphs” Applying Named Entity Graph Annotations to Entity Classes “Applying Named Entity Graph Annotations to Entity Classes” Obtaining EntityGraph Instances from Named Entity Graphs “Obtaining EntityGraph Instances from Named Entity Graphs” Using Entity Graphs in Query Operations “Using Entity Graphs in Query Operations” Using a Second-Level Cache with Java Persistence API Applications “Using a Second-Level Cache with Java Persistence API Applications” This chapter explains… the paragraph beginning “This chapter explains…” Overview of the Second-Level Cache “Overview of the Second-Level Cache” Cache Mode Settings for the Second-Level Cache “Cache Mode Settings for the Second-Level Cache” Controlling whether Entities May Be Cached “Controlling whether Entities May Be Cached” Specifying the Cache Mode Settings to Improve Performance “Specifying the Cache Mode Settings to Improve Performance” Setting the Cache Retrieval and Store Modes “Setting the Cache Retrieval and Store Modes” Cache Retrieval Mode “Cache Retrieval Mode” Cache Store Mode “Cache Store Mode” Setting the Cache Retrieval or Store Mode “Setting the Cache Retrieval or Store Mode” Controlling the Second-Level Cache Programmatically “Controlling the Second-Level Cache Programmatically” Overview of the javax.persistence.Cache Interface “Overview of the javax.persistence.Cache Interface” Checking whether an Entity’s Data Is Cached “Checking whether an Entity’s Data Is Cached” Removing an Entity from the Cache “Removing an Entity from the Cache” Removing All Data from the Cache “Removing All Data from the Cache” Java Message Service Concepts “Java Message Service Concepts” This chapter provides… the paragraph beginning “This chapter provides…” Overview of the JMS API “Overview of the JMS API” What Is Messaging? “What Is Messaging?” What Is the JMS API? “What Is the JMS API?” When Can You Use the JMS API? “When Can You Use the JMS API?” Messaging in an Enterprise Application “Messaging in an Enterprise Application” How Does the JMS API Work with the Java EE Platform? “How Does the JMS API Work with the Java EE Platform?” Basic JMS API Concepts “Basic JMS API Concepts” JMS API Architecture “JMS API Architecture” JMS API Architecture “JMS API Architecture” Messaging Styles “Messaging Styles” Point-to-Point Messaging Style “Point-to-Point Messaging Style” Point-to-Point Messaging “Point-to-Point Messaging” Publish/Subscribe Messaging Style “Publish/Subscribe Messaging Style” Publish/Subscribe Messaging “Publish/Subscribe Messaging” Message Consumption “Message Consumption” The JMS API Programming Model “The JMS API Programming Model” The JMS API Programming Model “The JMS API Programming Model” JMS Administered Objects “JMS Administered Objects” JMS Connection Factories “JMS Connection Factories” JMS Destinations “JMS Destinations” Connections “Connections” Sessions “Sessions” JMSContext Objects “JMSContext Objects” JMS Message Producers “JMS Message Producers” JMS Message Consumers “JMS Message Consumers” JMS Message Listeners “JMS Message Listeners” JMS Message Selectors “JMS Message Selectors” Consuming Messages from Topics “Consuming Messages from Topics” Creating Durable Subscriptions “Creating Durable Subscriptions” Nondurable Subscriptions and Consumers “Nondurable Subscriptions and Consumers” Consumers on a Durable Subscription “Consumers on a Durable Subscription” Creating Shared Subscriptions “Creating Shared Subscriptions” JMS Messages “JMS Messages” Message Headers “Message Headers” How JMS Message Header Field Values Are Set “How JMS Message Header Field Values Are Set” Message Properties “Message Properties” Message Bodies “Message Bodies” JMS Message Types “JMS Message Types” JMS Queue Browsers “JMS Queue Browsers” JMS Exception Handling “JMS Exception Handling” Using Advanced JMS Features “Using Advanced JMS Features” Controlling Message Acknowledgment “Controlling Message Acknowledgment” Specifying Options for Sending Messages “Specifying Options for Sending Messages” Specifying Message Persistence “Specifying Message Persistence” Setting Message Priority Levels “Setting Message Priority Levels” Allowing Messages to Expire “Allowing Messages to Expire” Specifying a Delivery Delay “Specifying a Delivery Delay” Using JMSProducer Method Chaining “Using JMSProducer Method Chaining” Creating Temporary Destinations “Creating Temporary Destinations” Using JMS Local Transactions “Using JMS Local Transactions” Using JMS Local Transactions “Using JMS Local Transactions” Sending Messages Asynchronously “Sending Messages Asynchronously” Using the JMS API in Java EE Applications “Using the JMS API in Java EE Applications” Overview of Using the JMS API “Overview of Using the JMS API” Creating Resources for Java EE Applications “Creating Resources for Java EE Applications” Using Resource Injection in Enterprise Bean or Web Components “Using Resource Injection in Enterprise Bean or Web Components” Injecting a ConnectionFactory, Queue, or Topic “Injecting a ConnectionFactory, Queue, or Topic” Injecting a JMSContext Object “Injecting a JMSContext Object” Using Java EE Components to Produce and to Synchronously Receive Messages “Using Java EE Components to Produce and to Synchronously Receive Messages” Managing JMS Resources in Web and EJB Components “Managing JMS Resources in Web and EJB Components” Managing Transactions in Session Beans “Managing Transactions in Session Beans” Using Message-Driven Beans to Receive Messages Asynchronously “Using Message-Driven Beans to Receive Messages Asynchronously” @ActivationConfigProperty Settings for Message-Driven Beans “@ActivationConfigProperty Settings for Message-Driven Beans” Managing JTA Transactions “Managing JTA Transactions” Further Information about JMS “Further Information about JMS” Java Message Service Examples “Java Message Service Examples” This chapter provides… the paragraph beginning “This chapter provides…” Building and Running Java Message Service Examples “Building and Running Java Message Service Examples” Overview of the JMS Examples “Overview of the JMS Examples” JMS Examples That Show the Use of Java EE Application Clients “JMS Examples That Show the Use of Java EE Application Clients” JMS Examples That Show the Use of Java EE Web and EJB Components “JMS Examples That Show the Use of Java EE Web and EJB Components” Writing Simple JMS Applications “Writing Simple JMS Applications” Overview of Writing Simple JMS Application “Overview of Writing Simple JMS Application” Starting the JMS Provider “Starting the JMS Provider” Creating JMS Administered Objects “Creating JMS Administered Objects” To Create Resources for the Simple Examples “To Create Resources for the Simple Examples” Building All the Simple Examples “Building All the Simple Examples” To Build All the Simple Examples Using NetBeans IDE “To Build All the Simple Examples Using NetBeans IDE” To Build All the Simple Examples Using Maven “To Build All the Simple Examples Using Maven” Sending Messages “Sending Messages” General Steps Performed in the Example “General Steps Performed in the Example” The Producer.java Client “The Producer.java Client” To Run the Producer Client “To Run the Producer Client” Receiving Messages Synchronously “Receiving Messages Synchronously” The SynchConsumer.java Client “The SynchConsumer.java Client” To Run the SynchConsumer and Producer Clients “To Run the SynchConsumer and Producer Clients” Using a Message Listener for Asynchronous Message Delivery “Using a Message Listener for Asynchronous Message Delivery” Writing the AsynchConsumer.java and TextListener.java Clients “Writing the AsynchConsumer.java and TextListener.java Clients” To Run the AsynchConsumer and Producer Clients “To Run the AsynchConsumer and Producer Clients” Browsing Messages on a Queue “Browsing Messages on a Queue” The MessageBrowser.java Client “The MessageBrowser.java Client” To Run the QueueBrowser Client “To Run the QueueBrowser Client” Running Multiple Consumers on the Same Destination “Running Multiple Consumers on the Same Destination” Acknowledging Messages “Acknowledging Messages” Message Acknowledgment with Synchronous and Asynchronous Consumers “Message Acknowledgment with Synchronous and Asynchronous Consumers” To Run the ClientAckConsumer Client “To Run the ClientAckConsumer Client” Writing More Advanced JMS Applications “Writing More Advanced JMS Applications” Using Durable Subscriptions “Using Durable Subscriptions” To Create Resources for the Durable Subscription Example “To Create Resources for the Durable Subscription Example” To Run the Durable Subscription Example “To Run the Durable Subscription Example” To Run the unsubscriber Example “To Run the unsubscriber Example” Using Local Transactions “Using Local Transactions” Transactions: JMS Client Example “Transactions: JMS Client Example” To Create Resources for the transactedexample Example “To Create Resources for the transactedexample Example” To Run the transactedexample Clients “To Run the transactedexample Clients” Writing High Performance and Scalable JMS Applications “Writing High Performance and Scalable JMS Applications” Using Shared Nondurable Subscriptions “Using Shared Nondurable Subscriptions” Writing the Clients for the Shared Consumer Example “Writing the Clients for the Shared Consumer Example” To Run the SharedConsumer and Producer Clients “To Run the SharedConsumer and Producer Clients” Using Shared Durable Subscriptions “Using Shared Durable Subscriptions” To Run the SharedDurableConsumer and Producer Clients “To Run the SharedDurableConsumer and Producer Clients” Sending and Receiving Messages Using a Simple Web Application “Sending and Receiving Messages Using a Simple Web Application” The websimplemessage Application “The websimplemessage Application” The websimplemessage Facelets Pages “The websimplemessage Facelets Pages” The websimplemessage Managed Beans “The websimplemessage Managed Beans” Running the websimplemessage Example “Running the websimplemessage Example” Creating Resources for the websimplemessage Example “Creating Resources for the websimplemessage Example” To Package and Deploy websimplemessage Using NetBeans IDE “To Package and Deploy websimplemessage Using NetBeans IDE” To Package and Deploy websimplemessage Using Maven “To Package and Deploy websimplemessage Using Maven” To Run the websimplemessage Example “To Run the websimplemessage Example” Receiving Messages Asynchronously Using a Message-Driven Bean “Receiving Messages Asynchronously Using a Message-Driven Bean” Overview of the simplemessage Example “Overview of the simplemessage Example” The simplemessage Application “The simplemessage Application” The simplemessage Application Client “The simplemessage Application Client” The simplemessage Message-Driven Bean Class “The simplemessage Message-Driven Bean Class” The onMessage Method “The onMessage Method” Running the simplemessage Example “Running the simplemessage Example” Creating Resources for the simplemessage Example “Creating Resources for the simplemessage Example” To Run the simplemessage Example Using NetBeans IDE “To Run the simplemessage Example Using NetBeans IDE” To Run the simplemessage Example Using Maven “To Run the simplemessage Example Using Maven” Sending Messages from a Session Bean to an MDB “Sending Messages from a Session Bean to an MDB” Writing the Application Components for the clientsessionmdb Example “Writing the Application Components for the clientsessionmdb Example” An Enterprise Bean Application: Client to Session Bean to Message-Driven Bean “An Enterprise Bean Application: Client to Session Bean to Message-Driven Bean” Coding the Application Client: MyAppClient.java “Coding the Application Client: MyAppClient.java” Coding the Publisher Session Bean “Coding the Publisher Session Bean” Coding the Message-Driven Bean: MessageBean.java “Coding the Message-Driven Bean: MessageBean.java” Running the clientsessionmdb Example “Running the clientsessionmdb Example” To Run clientsessionmdb Using NetBeans IDE “To Run clientsessionmdb Using NetBeans IDE” To Run clientsessionmdb Using Maven “To Run clientsessionmdb Using Maven” Using an Entity to Join Messages from Two MDBs “Using an Entity to Join Messages from Two MDBs” Overview of the clientmdbentity Example Application “Overview of the clientmdbentity Example Application” An Enterprise Bean Application: Client to Message-Driven Beans to Entity “An Enterprise Bean Application: Client to Message-Driven Beans to Entity” Writing the Application Components for the clientmdbentity Example “Writing the Application Components for the clientmdbentity Example” Coding the Application Client: HumanResourceClient.java “Coding the Application Client: HumanResourceClient.java” Coding the Message-Driven Beans for the clientmdbentity Example “Coding the Message-Driven Beans for the clientmdbentity Example” Coding the Entity Class for the clientmdbentity Example “Coding the Entity Class for the clientmdbentity Example” Running the clientmdbentity Example “Running the clientmdbentity Example” To Run clientmdbentity Using NetBeans IDE “To Run clientmdbentity Using NetBeans IDE” To Run clientmdbentity Using Maven “To Run clientmdbentity Using Maven” Viewing the Application Output “Viewing the Application Output” Using NetBeans IDE to Create JMS Resources “Using NetBeans IDE to Create JMS Resources” To Create JMS Resources Using NetBeans IDE “To Create JMS Resources Using NetBeans IDE” To Delete JMS Resources Using NetBeans IDE “To Delete JMS Resources Using NetBeans IDE” Introduction to Security in the Java EE Platform “Introduction to Security in the Java EE Platform” This chapter introduces… the paragraph beginning “This chapter introduces…” Overview of Java EE Security “Overview of Java EE Security” A Simple Application Security Walkthrough “A Simple Application Security Walkthrough” Step 1: Initial Request “Step 1: Initial Request” Initial Request “Initial Request” Step 2: Initial Authentication “Step 2: Initial Authentication” Initial Authentication “Initial Authentication” Step 3: URL Authorization “Step 3: URL Authorization” URL Authorization “URL Authorization” Step 4: Fulfilling the Original Request “Step 4: Fulfilling the Original Request” Fulfilling the Original Request “Fulfilling the Original Request” Step 5: Invoking Enterprise Bean Business Methods “Step 5: Invoking Enterprise Bean Business Methods” Invoking an Enterprise Bean Business Method “Invoking an Enterprise Bean Business Method” Features of a Security Mechanism “Features of a Security Mechanism” Characteristics of Application Security “Characteristics of Application Security” Security Mechanisms “Security Mechanisms” Java SE Security Mechanisms “Java SE Security Mechanisms” Java EE Security Mechanisms “Java EE Security Mechanisms” Application-Layer Security “Application-Layer Security” Transport-Layer Security “Transport-Layer Security” Message-Layer Security “Message-Layer Security” Securing Containers “Securing Containers” Using Annotations to Specify Security Information “Using Annotations to Specify Security Information” Using Deployment Descriptors for Declarative Security “Using Deployment Descriptors for Declarative Security” Using Programmatic Security “Using Programmatic Security” Securing GlassFish Server “Securing GlassFish Server” Working with Realms, Users, Groups, and Roles “Working with Realms, Users, Groups, and Roles” What Are Realms, Users, Groups, and Roles? “What Are Realms, Users, Groups, and Roles?” Mapping Roles to Users and Groups “Mapping Roles to Users and Groups” What Is a Realm? “What Is a Realm?” What Is a User? “What Is a User?” What Is a Group? “What Is a Group?” What Is a Role? “What Is a Role?” Some Other Terminology “Some Other Terminology” Managing Users and Groups in GlassFish Server “Managing Users and Groups in GlassFish Server” To Add Users to GlassFish Server “To Add Users to GlassFish Server” Setting Up Security Roles “Setting Up Security Roles” Mapping Roles to Users and Groups “Mapping Roles to Users and Groups” Establishing a Secure Connection Using SSL “Establishing a Secure Connection Using SSL” Verifying and Configuring SSL Support “Verifying and Configuring SSL Support” Further Information about Security “Further Information about Security” Getting Started Securing Web Applications “Getting Started Securing Web Applications” This chapter describes… the paragraph beginning “This chapter describes…” Overview of Web Application Security “Overview of Web Application Security” Securing Web Applications “Securing Web Applications” Overview of Securing Web Applications “Overview of Securing Web Applications” Specifying Security Constraints “Specifying Security Constraints” Specifying a Web Resource Collection “Specifying a Web Resource Collection” Specifying an Authorization Constraint “Specifying an Authorization Constraint” Specifying a Secure Connection “Specifying a Secure Connection” Specifying Security Constraints for Resources “Specifying Security Constraints for Resources” Specifying Authentication Mechanisms “Specifying Authentication Mechanisms” HTTP Basic Authentication “HTTP Basic Authentication” HTTP Basic Authentication “HTTP Basic Authentication” Form-Based Authentication “Form-Based Authentication” Form-Based Authentication “Form-Based Authentication” Digest Authentication “Digest Authentication” Specifying an Authentication Mechanism in the Deployment Descriptor “Specifying an Authentication Mechanism in the Deployment Descriptor” Declaring Security Roles “Declaring Security Roles” Using Programmatic Security with Web Applications “Using Programmatic Security with Web Applications” Authenticating Users Programmatically “Authenticating Users Programmatically” Checking Caller Identity Programmatically “Checking Caller Identity Programmatically” Example Code for Programmatic Security “Example Code for Programmatic Security” Declaring and Linking Role References “Declaring and Linking Role References” Examples: Securing Web Applications “Examples: Securing Web Applications” Overview of Examples of Securing Web Applications “Overview of Examples of Securing Web Applications” To Set Up Your System for Running the Security Examples “To Set Up Your System for Running the Security Examples” The hello2-basicauth Example: Basic Authentication with a Servlet “The hello2-basicauth Example: Basic Authentication with a Servlet” Specifying Security for Basic Authentication Using Annotations “Specifying Security for Basic Authentication Using Annotations” To Build, Package, and Deploy the hello2-basicauth Example Using NetBeans IDE “To Build, Package, and Deploy the hello2-basicauth Example Using NetBeans IDE” To Build, Package, and Deploy the hello2-basicauth Example Using Maven “To Build, Package, and Deploy the hello2-basicauth Example Using Maven” To Run the hello2-basicauth Example “To Run the hello2-basicauth Example” The hello1-formauth Example: Form-Based Authentication with a JavaServer Faces Application “The hello1-formauth Example: Form-Based Authentication with a JavaServer Faces Application” Creating the Login Form and the Error Page “Creating the Login Form and the Error Page” Specifying Security for the Form-Based Authentication Example “Specifying Security for the Form-Based Authentication Example” To Build, Package, and Deploy the hello1-formauth Example Using NetBeans IDE “To Build, Package, and Deploy the hello1-formauth Example Using NetBeans IDE” To Build, Package, and Deploy the hello1-formauth Example Using Maven and the asadmin Command “To Build, Package, and Deploy the hello1-formauth Example Using Maven and the asadmin Command” To Run the hello1-formauth Example “To Run the hello1-formauth Example” Next Steps “Next Steps” Getting Started Securing Enterprise Applications “Getting Started Securing Enterprise Applications” This chapter describes… the paragraph beginning “This chapter describes…” Basic Security Tasks for Enterprise Applications “Basic Security Tasks for Enterprise Applications” Securing Enterprise Beans “Securing Enterprise Beans” Securing an Enterprise Bean Using Declarative Security “Securing an Enterprise Bean Using Declarative Security” Specifying Authorized Users by Declaring Security Roles “Specifying Authorized Users by Declaring Security Roles” Specifying an Authentication Mechanism and Secure Connection “Specifying an Authentication Mechanism and Secure Connection” Securing an Enterprise Bean Programmatically “Securing an Enterprise Bean Programmatically” Accessing an Enterprise Bean Caller’s Security Context “Accessing an Enterprise Bean Caller’s Security Context” Propagating a Security Identity (Run-As) “Propagating a Security Identity (Run-As)” Security Identity Propagation “Security Identity Propagation” Configuring a Component’s Propagated Security Identity “Configuring a Component’s Propagated Security Identity” Trust between Containers “Trust between Containers” Deploying Secure Enterprise Beans “Deploying Secure Enterprise Beans” Examples: Securing Enterprise Beans “Examples: Securing Enterprise Beans” The cart-secure Example: Securing an Enterprise Bean with Declarative Security “The cart-secure Example: Securing an Enterprise Bean with Declarative Security” Annotating the Bean “Annotating the Bean” To Run the cart-secure Example Using NetBeans IDE “To Run the cart-secure Example Using NetBeans IDE” To Run the cart-secure Example Using Maven “To Run the cart-secure Example Using Maven” The converter-secure Example: Securing an Enterprise Bean with Programmatic Security “The converter-secure Example: Securing an Enterprise Bean with Programmatic Security” Modifying ConverterBean “Modifying ConverterBean” Modifying ConverterServlet “Modifying ConverterServlet” To Run the converter-secure Example Using NetBeans IDE “To Run the converter-secure Example Using NetBeans IDE” To Run the converter-secure Example Using Maven “To Run the converter-secure Example Using Maven” To Run the converter-secure Example “To Run the converter-secure Example” Java EE Security: Advanced Topics “Java EE Security: Advanced Topics” This chapter provides… the paragraph beginning “This chapter provides…” Working with Digital Certificates “Working with Digital Certificates” Creating a Server Certificate “Creating a Server Certificate” To Use keytool to Create a Server Certificate “To Use keytool to Create a Server Certificate” Adding Users to the Certificate Realm “Adding Users to the Certificate Realm” Using a Different Server Certificate with GlassFish Server “Using a Different Server Certificate with GlassFish Server” To Specify a Different Server Certificate “To Specify a Different Server Certificate” Authentication Mechanisms “Authentication Mechanisms” Client Authentication “Client Authentication” Mutual Authentication “Mutual Authentication” Certificate-Based Mutual Authentication “Certificate-Based Mutual Authentication” User Name/Password-Based Mutual Authentication “User Name/Password-Based Mutual Authentication” Enabling Mutual Authentication over SSL “Enabling Mutual Authentication over SSL” Creating a Client Certificate for Mutual Authentication “Creating a Client Certificate for Mutual Authentication” Using the JDBC Realm for User Authentication “Using the JDBC Realm for User Authentication” To Configure a JDBC Authentication Realm “To Configure a JDBC Authentication Realm” Securing HTTP Resources “Securing HTTP Resources” Securing Application Clients “Securing Application Clients” Using Login Modules “Using Login Modules” Using Programmatic Login “Using Programmatic Login” Securing Enterprise Information Systems Applications “Securing Enterprise Information Systems Applications” Overview of Securing Enterprise Information Systems Applications “Overview of Securing Enterprise Information Systems Applications” Container-Managed Sign-On “Container-Managed Sign-On” Component-Managed Sign-On “Component-Managed Sign-On” Configuring Resource Adapter Security “Configuring Resource Adapter Security” Mapping an Application Principal to EIS Principals “Mapping an Application Principal to EIS Principals” Configuring Security Using Deployment Descriptors “Configuring Security Using Deployment Descriptors” Specifying Security for Basic Authentication in the Deployment Descriptor “Specifying Security for Basic Authentication in the Deployment Descriptor” Specifying Non-Default Principal-to-Role Mapping in the Deployment Descriptor “Specifying Non-Default Principal-to-Role Mapping in the Deployment Descriptor” Further Information about Advanced Security Topics “Further Information about Advanced Security Topics” Transactions “Transactions” This chapter describes… the paragraph beginning “This chapter describes…” Overview of Transactions “Overview of Transactions” Transactions in Java EE Applications “Transactions in Java EE Applications” What Is a Transaction? “What Is a Transaction?” Container-Managed Transactions “Container-Managed Transactions” Transaction Attributes “Transaction Attributes” Transaction Scope “Transaction Scope” Required Attribute “Required Attribute” RequiresNew Attribute “RequiresNew Attribute” Mandatory Attribute “Mandatory Attribute” NotSupported Attribute “NotSupported Attribute” Supports Attribute “Supports Attribute” Never Attribute “Never Attribute” Summary of Transaction Attributes “Summary of Transaction Attributes” Transaction Attributes and Scope “Transaction Attributes and Scope” Setting Transaction Attributes “Setting Transaction Attributes” TransactionAttributeType Constants “TransactionAttributeType Constants” Rolling Back a Container-Managed Transaction “Rolling Back a Container-Managed Transaction” Synchronizing a Session Bean’s Instance Variables “Synchronizing a Session Bean’s Instance Variables” Methods Not Allowed in Container-Managed Transactions “Methods Not Allowed in Container-Managed Transactions” Bean-Managed Transactions “Bean-Managed Transactions” JTA Transactions “JTA Transactions” Returning without Committing “Returning without Committing” Methods Not Allowed in Bean-Managed Transactions “Methods Not Allowed in Bean-Managed Transactions” Transaction Timeouts “Transaction Timeouts” To Set a Transaction Timeout “To Set a Transaction Timeout” Updating Multiple Databases “Updating Multiple Databases” Updating Multiple Databases “Updating Multiple Databases” Updating Multiple Databases Across Java EE Servers “Updating Multiple Databases Across Java EE Servers” Transactions in Web Components “Transactions in Web Components” Further Information about Transactions “Further Information about Transactions” Resource Adapters and Contracts “Resource Adapters and Contracts” This chapter examines… the paragraph beginning “This chapter examines…” What Is a Resource Adapter? “What Is a Resource Adapter?” Resource Adapters “Resource Adapters” Management Contracts “Management Contracts” Lifecycle Management “Lifecycle Management” Work Management Contract “Work Management Contract” Generic Work Context Contract “Generic Work Context Contract” Outbound and Inbound Contracts “Outbound and Inbound Contracts” Metadata Annotations “Metadata Annotations” Common Client Interface “Common Client Interface” Using Resource Adapters with Contexts and Dependency Injection for Java EE (CDI) “Using Resource Adapters with Contexts and Dependency Injection for Java EE (CDI)” Further Information about Resource Adapters “Further Information about Resource Adapters” The Resource Adapter Examples “The Resource Adapter Examples” This chapter describes… the paragraph beginning “This chapter describes…” Overview of the Resource Adapter Examples “Overview of the Resource Adapter Examples” The trading Example “The trading Example” The trading Example “The trading Example” Using the Outbound Resource Adapter “Using the Outbound Resource Adapter” Classes and Interfaces in the javaeetutorial.trading.rar.api Package “Classes and Interfaces in the javaeetutorial.trading.rar.api Package” Implementing the Outbound Resource Adapter “Implementing the Outbound Resource Adapter” Architecture of the trading Example “Architecture of the trading Example” Interfaces Implemented in the trading-rar Module “Interfaces Implemented in the trading-rar Module” Running the trading Example “Running the trading Example” To Run the trading Example Using NetBeans IDE “To Run the trading Example Using NetBeans IDE” To Run the trading Example Using Maven “To Run the trading Example Using Maven” The traffic Example “The traffic Example” The traffic Example “The traffic Example” Using the Inbound Resource Adapter “Using the Inbound Resource Adapter” Implementing the Inbound Resource Adapter “Implementing the Inbound Resource Adapter” Architecture of the traffic Example “Architecture of the traffic Example” Interfaces Implemented in the traffic-rar Module “Interfaces Implemented in the traffic-rar Module” Running the traffic Example “Running the traffic Example” To Run the traffic Example Using NetBeans IDE “To Run the traffic Example Using NetBeans IDE” To Run the traffic Example Using Maven “To Run the traffic Example Using Maven” Using Java EE Interceptors “Using Java EE Interceptors” This chapter discusses… the paragraph beginning “This chapter discusses…” Overview of Interceptors “Overview of Interceptors” Interceptor Metadata Annotations “Interceptor Metadata Annotations” Interceptor Classes “Interceptor Classes” Interceptor Lifecycle “Interceptor Lifecycle” Interceptors and CDI “Interceptors and CDI” Using Interceptors “Using Interceptors” Intercepting Method Invocations “Intercepting Method Invocations” Using Multiple Method Interceptors “Using Multiple Method Interceptors” Accessing Target Method Parameters from an Interceptor Class “Accessing Target Method Parameters from an Interceptor Class” Intercepting Lifecycle Callback Events “Intercepting Lifecycle Callback Events” Using AroundConstruct Interceptor Methods “Using AroundConstruct Interceptor Methods” Using Multiple Lifecycle Callback Interceptors “Using Multiple Lifecycle Callback Interceptors” Intercepting Timeout Events “Intercepting Timeout Events” Using Multiple Timeout Interceptors “Using Multiple Timeout Interceptors” Binding Interceptors to Components “Binding Interceptors to Components” Declaring the Interceptor Bindings on an Interceptor Class “Declaring the Interceptor Bindings on an Interceptor Class” Binding a Component to an Interceptor “Binding a Component to an Interceptor” Ordering Interceptors “Ordering Interceptors” Interceptor Priority Constants “Interceptor Priority Constants” The interceptor Example Application “The interceptor Example Application” Running the interceptor Example “Running the interceptor Example” To Run the interceptor Example Using NetBeans IDE “To Run the interceptor Example Using NetBeans IDE” To Run the interceptor Example Using Maven “To Run the interceptor Example Using Maven” Batch Processing “Batch Processing” This chapter describes… the paragraph beginning “This chapter describes…” Introduction to Batch Processing “Introduction to Batch Processing” Steps in Batch Jobs “Steps in Batch Jobs” Chunk Steps in a Batch Job “Chunk Steps in a Batch Job” Parallel Processing “Parallel Processing” Status and Decision Elements “Status and Decision Elements” Steps and Decision Elements in a Job “Steps and Decision Elements in a Job” Batch Framework Functionality “Batch Framework Functionality” Batch Processing in Java EE “Batch Processing in Java EE” The Batch Processing Framework “The Batch Processing Framework” Creating Batch Applications “Creating Batch Applications” Elements of a Batch Job “Elements of a Batch Job” Properties and Parameters “Properties and Parameters” Job Instances and Job Executions “Job Instances and Job Executions” Batch and Exit Status “Batch and Exit Status” Batch Status Values “Batch Status Values” Simple Use Case “Simple Use Case” Chunk Step “Chunk Step” Task Step “Task Step” Using the Job Specification Language “Using the Job Specification Language” The job Element “The job Element” The step Element “The step Element” The chunk Element “The chunk Element” Attributes of the chunk Element “Attributes of the chunk Element” The batchlet Element “The batchlet Element” The partition Element “The partition Element” The flow Element “The flow Element” The split Element “The split Element” The decision Element “The decision Element” Creating Batch Artifacts “Creating Batch Artifacts” Batch Artifact Interfaces “Batch Artifact Interfaces” Main Batch Artifact Interfaces “Main Batch Artifact Interfaces” Partition Batch Artifact Interfaces “Partition Batch Artifact Interfaces” Listener Batch Artifact Interfaces “Listener Batch Artifact Interfaces” Dependency Injection in Batch Artifacts “Dependency Injection in Batch Artifacts” Using the Context Objects from the Batch Runtime “Using the Context Objects from the Batch Runtime” Submitting Jobs to the Batch Runtime “Submitting Jobs to the Batch Runtime” Starting a Job “Starting a Job” Checking the Status of a Job “Checking the Status of a Job” Invoking the Batch Runtime in Your Application “Invoking the Batch Runtime in Your Application” Packaging Batch Applications “Packaging Batch Applications” The webserverlog Example Application “The webserverlog Example Application” Architecture of the webserverlog Example Application “Architecture of the webserverlog Example Application” The Job Definition File “The Job Definition File” The LogLine and LogFilteredLine Items “The LogLine and LogFilteredLine Items” The Chunk Step Batch Artifacts “The Chunk Step Batch Artifacts” The Listener Batch Artifacts “The Listener Batch Artifacts” The Task Step Batch Artifact “The Task Step Batch Artifact” The JavaServer Faces Pages “The JavaServer Faces Pages” The Managed Bean “The Managed Bean” Running the webserverlog Example Application “Running the webserverlog Example Application” To Run the webserverlog Example Application Using NetBeans IDE “To Run the webserverlog Example Application Using NetBeans IDE” To Run the webserverlog Example Application Using Maven “To Run the webserverlog Example Application Using Maven” The phonebilling Example Application “The phonebilling Example Application” Architecture of the phonebilling Example Application “Architecture of the phonebilling Example Application” The Job Definition File “The Job Definition File” The CallRecord and PhoneBill Entities “The CallRecord and PhoneBill Entities” The Call Records Chunk Step “The Call Records Chunk Step” The Phone Billing Chunk Step “The Phone Billing Chunk Step” The JavaServer Faces Pages “The JavaServer Faces Pages” The Managed Bean “The Managed Bean” Running the phonebilling Example Application “Running the phonebilling Example Application” To Run the phonebilling Example Application Using NetBeans IDE “To Run the phonebilling Example Application Using NetBeans IDE” To Run the phonebilling Example Application Using Maven “To Run the phonebilling Example Application Using Maven” Further Information about Batch Processing “Further Information about Batch Processing” Concurrency Utilities for Java EE “Concurrency Utilities for Java EE” This chapter describes… the paragraph beginning “This chapter describes…” Concurrency Basics “Concurrency Basics” Threads and Processes “Threads and Processes” Main Components of the Concurrency Utilities “Main Components of the Concurrency Utilities” Concurrency and Transactions “Concurrency and Transactions” Concurrency and Security “Concurrency and Security” The jobs Concurrency Example “The jobs Concurrency Example” Running the jobs Example “Running the jobs Example” To Configure GlassFish Server for the Basic Concurrency Example “To Configure GlassFish Server for the Basic Concurrency Example” To Build, Package, and Deploy the jobs Example Using NetBeans IDE “To Build, Package, and Deploy the jobs Example Using NetBeans IDE” To Build, Package, and Deploy the jobs Example Using Maven “To Build, Package, and Deploy the jobs Example Using Maven” To Run the jobs Example and Submit Jobs with Low Priority “To Run the jobs Example and Submit Jobs with Low Priority” To Run the jobs Example and Submit Jobs with High Priority “To Run the jobs Example and Submit Jobs with High Priority” The taskcreator Concurrency Example “The taskcreator Concurrency Example” Architecture of the taskcreator Example “Architecture of the taskcreator Example” Running the taskcreator Example “Running the taskcreator Example” To Build, Package, and Deploy the taskcreator Example Using NetBeans IDE “To Build, Package, and Deploy the taskcreator Example Using NetBeans IDE” To Build, Package, and Deploy the taskcreator Example Using Maven “To Build, Package, and Deploy the taskcreator Example Using Maven” To Run the taskcreator Example “To Run the taskcreator Example” Further Information about the Concurrency Utilities “Further Information about the Concurrency Utilities” Duke’s Bookstore Case Study Example “Duke’s Bookstore Case Study Example” The Duke’s Bookstore… the paragraph beginning “The Duke’s Bookstore…” Design and Architecture of Duke’s Bookstore “Design and Architecture of Duke’s Bookstore” The Duke’s Bookstore Interface “The Duke’s Bookstore Interface” The Book Java Persistence API Entity “The Book Java Persistence API Entity” Enterprise Beans Used in Duke’s Bookstore “Enterprise Beans Used in Duke’s Bookstore” Facelets Pages and Managed Beans Used in Duke’s Bookstore “Facelets Pages and Managed Beans Used in Duke’s Bookstore” Custom Components and Other Custom Objects Used in Duke’s Bookstore “Custom Components and Other Custom Objects Used in Duke’s Bookstore” Properties Files Used in Duke’s Bookstore “Properties Files Used in Duke’s Bookstore” Deployment Descriptors Used in Duke’s Bookstore “Deployment Descriptors Used in Duke’s Bookstore” Running the Duke’s Bookstore Case Study Application “Running the Duke’s Bookstore Case Study Application” To Build and Deploy Duke’s Bookstore Using NetBeans IDE “To Build and Deploy Duke’s Bookstore Using NetBeans IDE” To Build and Deploy Duke’s Bookstore Using Maven “To Build and Deploy Duke’s Bookstore Using Maven” To Run Duke’s Bookstore “To Run Duke’s Bookstore” Duke’s Tutoring Case Study Example “Duke’s Tutoring Case Study Example” The Duke’s Tutoring… the paragraph beginning “The Duke’s Tutoring…” Design and Architecture of Duke’s Tutoring “Design and Architecture of Duke’s Tutoring” Architecture of the Duke’s Tutoring Example Application “Architecture of the Duke’s Tutoring Example Application” Main Interface “Main Interface” Java Persistence API Entities Used in the Main Interface “Java Persistence API Entities Used in the Main Interface” Enterprise Beans Used in the Main Interface “Enterprise Beans Used in the Main Interface” WebSocket Endpoint Used in the Main Interface “WebSocket Endpoint Used in the Main Interface” Facelets Files Used in the Main Interface “Facelets Files Used in the Main Interface” Helper Classes Used in the Main Interface “Helper Classes Used in the Main Interface” Properties Files “Properties Files” Deployment Descriptors Used in Duke’s Tutoring “Deployment Descriptors Used in Duke’s Tutoring” Administration Interface “Administration Interface” Enterprise Beans Used in the Administration Interface “Enterprise Beans Used in the Administration Interface” Facelets Files Used in the Administration Interface “Facelets Files Used in the Administration Interface” CDI Managed Beans Used in the Administration Interface “CDI Managed Beans Used in the Administration Interface” Helper Classes Used in the Administration Interface “Helper Classes Used in the Administration Interface” Running the Duke’s Tutoring Case Study Application “Running the Duke’s Tutoring Case Study Application” Running Duke’s Tutoring “Running Duke’s Tutoring” To Build and Deploy Duke’s Tutoring Using NetBeans IDE “To Build and Deploy Duke’s Tutoring Using NetBeans IDE” Before You Begin “Before You Begin” To Build and Deploy Duke’s Tutoring Using Maven “To Build and Deploy Duke’s Tutoring Using Maven” Using Duke’s Tutoring “Using Duke’s Tutoring” Duke’s Forest Case Study Example “Duke’s Forest Case Study Example” This chapter describes… the paragraph beginning “This chapter describes…” Overview of the Duke’s Forest Case Study Example “Overview of the Duke’s Forest Case Study Example” Design and Architecture of Duke’s Forest “Design and Architecture of Duke’s Forest” Architecture of the Duke’s Forest Example Application “Architecture of the Duke’s Forest Example Application” Interactions between Duke’s Forest Components “Interactions between Duke’s Forest Components” The events Project “The events Project” The entities Project “The entities Project” Duke’s Forest Database Tables and Their Relationships “Duke’s Forest Database Tables and Their Relationships” The dukes-payment Project “The dukes-payment Project” The dukes-resources Project “The dukes-resources Project” The Duke’s Store Project “The Duke’s Store Project” Enterprise Beans Used in Duke’s Store “Enterprise Beans Used in Duke’s Store” Facelets Files Used in the Main Interface of Duke’s Store “Facelets Files Used in the Main Interface of Duke’s Store” Facelets Files Used in the Administration Interface of Duke’s Store “Facelets Files Used in the Administration Interface of Duke’s Store” Managed Beans Used in Duke’s Store “Managed Beans Used in Duke’s Store” Helper Classes Used in Duke’s Store “Helper Classes Used in Duke’s Store” Qualifiers Used in Duke’s Store “Qualifiers Used in Duke’s Store” Event Handlers Used in Duke’s Store “Event Handlers Used in Duke’s Store” Deployment Descriptors Used in Duke’s Store “Deployment Descriptors Used in Duke’s Store” The Duke’s Shipment Project “The Duke’s Shipment Project” Enterprise Beans Used in Duke’s Shipment “Enterprise Beans Used in Duke’s Shipment” Facelets Files Used in Duke’s Shipment “Facelets Files Used in Duke’s Shipment” Managed Beans Used in Duke’s Shipment “Managed Beans Used in Duke’s Shipment” Helper Class Used in Duke’s Shipment “Helper Class Used in Duke’s Shipment” Qualifier Used in Duke’s Shipment “Qualifier Used in Duke’s Shipment” Deployment Descriptors Used in Duke’s Shipment “Deployment Descriptors Used in Duke’s Shipment” Building and Deploying the Duke’s Forest Case Study Application “Building and Deploying the Duke’s Forest Case Study Application” To Build and Deploy the Duke’s Forest Application Using NetBeans IDE “To Build and Deploy the Duke’s Forest Application Using NetBeans IDE” To Build and Deploy the Duke’s Forest Application Using Maven “To Build and Deploy the Duke’s Forest Application Using Maven” Running the Duke’s Forest Application “Running the Duke’s Forest Application” To Register as a Duke’s Store Customer “To Register as a Duke’s Store Customer” To Purchase Products “To Purchase Products” To Approve Shipment of a Product “To Approve Shipment of a Product” To Create a New Product “To Create a New Product”

    - + +
    +
    + + + + + + + +
    + + + + + + + + + +
      + +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    diff --git a/title.html b/title.html index c839fd0..7274cf9 100644 --- a/title.html +++ b/title.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    Java Platform, Enterprise Edition

    @@ -150,34 +169,64 @@

    Java Platform, Enterprise Edition

    products, or services, except as set forth in an applicable agreement between you and Oracle.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/toc.html b/toc.html index 3bb6a48..7cc5d05 100644 --- a/toc.html +++ b/toc.html @@ -8,43 +8,59 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

     

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    Contents

    @@ -1035,7 +1051,7 @@

    9 Expression Language

    -

    10 Using JavaServer Faces Technology in WebPages

    +

    10 Using JavaServer Faces Technology in Web Pages

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/usingexamples002.html b/usingexamples002.html index a18629c..056fb9e 100644 --- a/usingexamples002.html +++ b/usingexamples002.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    2.2 Starting and Stopping GlassFish Server

    @@ -131,35 +150,65 @@

    2.2.4 To Stop GlassFish
    asadmin stop-domain domain1

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/usingexamples003.html b/usingexamples003.html index 00b327c..7db90d3 100644 --- a/usingexamples003.html +++ b/usingexamples003.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    2.3 Starting the Administration Console

    @@ -85,43 +104,68 @@

    2.3.1 To Start t -
    -
    -
    +
    -
    -

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/usingexamples004.html b/usingexamples004.html index be6c7ea..70b4fde 100644 --- a/usingexamples004.html +++ b/usingexamples004.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    2.4 Starting and Stopping the Java DB Server

    @@ -102,35 +121,65 @@

    2.4.1 To Start the Data

    To stop the database using NetBeans IDE, right-click Java DB and select Stop Server.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/usingexamples005.html b/usingexamples005.html index 09eb2b9..d3254fd 100644 --- a/usingexamples005.html +++ b/usingexamples005.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    2.5 Building the Examples

    @@ -56,34 +75,64 @@

    2.5 Building the Examples

    to build, package, deploy, and run the examples. Directions for building the examples are provided in each chapter.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/usingexamples006.html b/usingexamples006.html index dd5dd57..be07857 100644 --- a/usingexamples006.html +++ b/usingexamples006.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    2.6 Tutorial Example Directory Structure

    @@ -109,34 +128,64 @@

    2.6 Tutorial Example Directory Str goals to compile and assemble the application into the target directory and deploy the archive to GlassFish Server.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/usingexamples007.html b/usingexamples007.html index b9ed98e..1101702 100644 --- a/usingexamples007.html +++ b/usingexamples007.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    2.7 Java EE 7 Maven Archetypes in the Tutorial

    @@ -113,36 +132,66 @@

    2.7.1.2 Installing the T

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/usingexamples008.html b/usingexamples008.html index 7792664..3a84db0 100644 --- a/usingexamples008.html +++ b/usingexamples008.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    2.8 Getting the Latest Updates to the Tutorial

    @@ -107,35 +126,65 @@

    2.8.2 To Update the Tutor

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/usingexamples009.html b/usingexamples009.html index 46b927f..1165193 100644 --- a/usingexamples009.html +++ b/usingexamples009.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    2.9 Debugging Java EE Applications

    @@ -147,36 +166,66 @@

    2.9.2.1 To Debug an Applicatio

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/webapp.html b/webapp.html index 110c5be..e252237 100644 --- a/webapp.html +++ b/webapp.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    6 Getting Started with Web Applications

    @@ -81,34 +100,64 @@

    6 Getting Started with Web Applic

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/webapp001.html b/webapp001.html index 5dcb049..9dd89ee 100644 --- a/webapp001.html +++ b/webapp001.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    6.1 Web Applications

    @@ -138,34 +157,64 @@

    6.1 Web Applications

    configuring web applications and discusses how to specify the most commonly used configuration parameters.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/webapp002.html b/webapp002.html index 78bc610..9af6899 100644 --- a/webapp002.html +++ b/webapp002.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    6.2 Web Application Lifecycle

    @@ -115,34 +134,64 @@

    6.2 Web Application Lifecycle

    deploying, configuring, and running an application that contains web components.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/webapp003.html b/webapp003.html index 482e0bd..1dfa788 100644 --- a/webapp003.html +++ b/webapp003.html @@ -8,47 +8,66 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +
    -

    6.3 A Web Module That Uses JavaServer Faces Technology: The hello1Example

    +

    6.3 A Web Module That Uses JavaServer Faces Technology: The hello1 Example

    The hello1 application is a web module that uses JavaServer Faces @@ -632,36 +651,66 @@

    6.3.5.2 To Undeploy the h

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/webapp004.html b/webapp004.html index 628c5df..b5e8ab3 100644 --- a/webapp004.html +++ b/webapp004.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    6.4 A Web Module That Uses Java Servlet Technology: The hello2 Example

    @@ -360,36 +379,66 @@

    6.4.3.2 To Run the hello2 Example

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/webapp005.html b/webapp005.html index 0dd6793..7c8e5c1 100644 --- a/webapp005.html +++ b/webapp005.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    6.5 Configuring Web Applications

    @@ -374,11 +393,6 @@

    6.5.4 Declaring Resource References

    -
    -
    -
    +
    -
    -

    6.5.4.1 Declaring a Reference to a Resource

    @@ -458,36 +472,66 @@

    6.5.4.2 Declaring a Reference to static HelloService service;

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/webapp006.html b/webapp006.html index 8de57d7..1c145a6 100644 --- a/webapp006.html +++ b/webapp006.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    6.6 Further Information about Web Applications

    @@ -69,34 +88,64 @@

    6.6 Further Information abou

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/webi18n.html b/webi18n.html index 355ac18..9f7ac91 100644 --- a/webi18n.html +++ b/webi18n.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    20 Internationalizing and Localizing Web Applications

    @@ -79,34 +98,64 @@

    20 Internationalizin

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/webi18n001.html b/webi18n001.html index de4ae01..6505597 100644 --- a/webi18n001.html +++ b/webi18n001.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    20.1 Java Platform Localization Classes

    @@ -82,34 +101,64 @@

    20.1 Java Platform Localization Clas

    For more details on internationalization and localization in the Java platform, see http://docs.oracle.com/javase/tutorial/i18n/index.html.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/webi18n002.html b/webi18n002.html index 9da57bd..6c5b34e 100644 --- a/webi18n002.html +++ b/webi18n002.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    20.2 Providing Localized Messages and Labels

    @@ -262,35 +281,65 @@

    20.2.3 Retrieving Localized Messages

    Notice that bundle matches the var element from the configuration file and that Name matches the key in the resource bundle.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/webi18n003.html b/webi18n003.html index edd2e9c..8d2294b 100644 --- a/webi18n003.html +++ b/webi18n003.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    20.3 Date and Number Formatting

    @@ -73,34 +92,64 @@

    20.3 Date and Number Formatting

    For information on JavaServer Faces converters, see Using the Standard Converters.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/webi18n004.html b/webi18n004.html index 841169d..b4f2701 100644 --- a/webi18n004.html +++ b/webi18n004.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    20.4 Character Sets and Encodings

    @@ -132,35 +151,65 @@

    20.4.2 Character Encoding

    encoding. An application that uses a character set that cannot use the default encoding must explicitly set a different encoding.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/webservices-intro.html b/webservices-intro.html index e49e3c9..e8b5327 100644 --- a/webservices-intro.html +++ b/webservices-intro.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    27 Introduction to Web Services

    @@ -72,34 +91,64 @@

    27 Introduction to Web Services

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/webservices-intro001.html b/webservices-intro001.html index 1b90da0..065f537 100644 --- a/webservices-intro001.html +++ b/webservices-intro001.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    27.1 What Are Web Services?

    @@ -62,34 +81,64 @@

    27.1 What Are Web Services?

    Programs providing simple services can interact with each other to deliver sophisticated added-value services.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/webservices-intro002.html b/webservices-intro002.html index b1b0660..1515be3 100644 --- a/webservices-intro002.html +++ b/webservices-intro002.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    27.2 Types of Web Services

    @@ -198,35 +217,65 @@

    27.2.2 RESTful Web Services

    information about generating the skeleton of a RESTful web service using both NetBeans IDE and the Maven project-management tool.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/webservices-intro003.html b/webservices-intro003.html index 80c8200..6eedae9 100644 --- a/webservices-intro003.html +++ b/webservices-intro003.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    27.3 Deciding Which Type of Web Service to Use

    @@ -78,34 +97,64 @@

    27.3 Deciding Which Type of W

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/websocket.html b/websocket.html index 3f4dfd1..09b9842 100644 --- a/websocket.html +++ b/websocket.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    18 Java API for WebSocket

    @@ -104,34 +123,64 @@

    18 Java API for WebSocket

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/websocket001.html b/websocket001.html index e9fd0d8..9925e62 100644 --- a/websocket001.html +++ b/websocket001.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    18.1 Introduction to WebSocket

    @@ -142,34 +161,64 @@

    18.1 Introduction to WebSocket

    callback methods for WebSocket events (such as opened connections, received messages, and closed connections).

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/websocket002.html b/websocket002.html index 3e4eb84..29db6fd 100644 --- a/websocket002.html +++ b/websocket002.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    18.2 Creating WebSocket Applications in the Java EE Platform

    @@ -84,11 +103,6 @@

    18.2 Creating W deploy it to an specific URI in the application so that remote clients can connect to it.

    -
    -
    -
    +
    -
    -
    @@ -106,11 +120,6 @@

    18.2 Creating W

    -
    -
    -
    +
    -
    -

    18.2.1 Creating and Deploying a WebSocket Endpoint

    @@ -137,11 +146,6 @@

    18.2.1 Creating and Deployi annotated endpoints, and it is covered in detail in the following sections.

    -
    -
    -
    +
    -
    -
    @@ -162,40 +166,65 @@

    18.2.1 Creating and Deployi

    -
    -
    -
    +
    -
    -
    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/websocket003.html b/websocket003.html index fea65a7..e40b6cd 100644 --- a/websocket003.html +++ b/websocket003.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    18.3 Programmatic Endpoints

    @@ -103,34 +122,64 @@

    18.3 Programmatic Endpoints

    ws://<host>:<port>/<application>/echo; for example, ws://localhost:8080/echoapp/echo.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/websocket004.html b/websocket004.html index 298a8d1..39dd886 100644 --- a/websocket004.html +++ b/websocket004.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    18.4 Annotated Endpoints

    @@ -149,39 +168,64 @@

    18.4 Annotated Endpoints

    -
    -
    -
    +
    -
    - -------- - - - - - - - - - - + +
    +

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    \ No newline at end of file diff --git a/websocket005.html b/websocket005.html index 5103da0..a111620 100644 --- a/websocket005.html +++ b/websocket005.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    18.5 Sending and Receiving Messages

    @@ -202,35 +221,65 @@

    18.5.2 Receiving Messages

    }
    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/websocket006.html b/websocket006.html index 9d0ad77..7da60fc 100644 --- a/websocket006.html +++ b/websocket006.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    18.6 Maintaining Client State

    @@ -83,34 +102,64 @@

    18.6 Maintaining Client State

    (static) variables; however, you are responsible for ensuring thread-safe access to them.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/websocket007.html b/websocket007.html index 11c5d2b..a40d3a5 100644 --- a/websocket007.html +++ b/websocket007.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    18.7 Using Encoders and Decoders

    @@ -80,7 +99,7 @@

    18.7 Using Encoders and Decoders

    -

    18.7.1 Implementing Encoders to Convert Java Objects into WebSocketMessages

    +

    18.7.1 Implementing Encoders to Convert Java Objects into WebSocket Messages

    The procedure to implement and use encoders in endpoints follows.

    @@ -170,7 +189,7 @@

    1

    -

    18.7.2 Implementing Decoders to Convert WebSocket Messages into JavaObjects

    +

    18.7.2 Implementing Decoders to Convert WebSocket Messages into Java Objects

    The procedure to implement and use decoders in endpoints follows.

    @@ -204,22 +223,21 @@

    1 -
    -
    -
     +
    -2.  Add the names of your decoder implementations to the `decoders`
    -optional parameter of the `ServerEndpoint` annotation.
    -3.  Use the `OnMessage` annotation in the endpoint to designate a method
    -that takes your custom Java type as a parameter. When the endpoint
    -receives a message that can be decoded by one of the decoders you
    -specified, the container calls the method annotated with `@OnMessage`
    -that takes your custom Java type as a parameter if this method exists.
    -
    -

    +
  • +

    Add the names of your decoder implementations to the decoders +optional parameter of the ServerEndpoint annotation.

    +
  • +
  • +

    Use the OnMessage annotation in the endpoint to designate a method +that takes your custom Java type as a parameter. When the endpoint +receives a message that can be decoded by one of the decoders you +specified, the container calls the method annotated with @OnMessage +that takes your custom Java type as a parameter if this method exists.

    +
  • @@ -288,35 +306,65 @@

    1 WebSocket connection and peer, so there is only one thread executing the code of a decoder instance at any given time.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/websocket008.html b/websocket008.html index 40c3694..f031bf4 100644 --- a/websocket008.html +++ b/websocket008.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    18.8 Path Parameters

    @@ -99,34 +118,64 @@

    18.8 Path Parameters

    The path parameters used as arguments in these methods can be strings, primitive types, or the corresponding wrapper types.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/websocket009.html b/websocket009.html index 18b97b6..60145c0 100644 --- a/websocket009.html +++ b/websocket009.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    18.9 Handling Errors

    @@ -79,34 +98,64 @@

    18.9 Handling Errors

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/websocket010.html b/websocket010.html index 4be40c2..f65d0cb 100644 --- a/websocket010.html +++ b/websocket010.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    18.10 Specifying an Endpoint Configurator Class

    @@ -132,34 +151,64 @@

    18.10 Specifying an Endpoint

    For more information on endpoint configuration, see the API reference for the ServerEndpointConfig.Configurator class.

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/websocket011.html b/websocket011.html index cfff642..a13f76f 100644 --- a/websocket011.html +++ b/websocket011.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    18.11 The dukeetf2 Example Application

    @@ -362,36 +381,66 @@

    18.11.2.2 To Run th

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/websocket012.html b/websocket012.html index 2e05abc..0db72e2 100644 --- a/websocket012.html +++ b/websocket012.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous
     

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    18.12 The websocketbot Example Application

    @@ -545,36 +564,66 @@

    18.12.2.3 To Test the webs

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous
     

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file diff --git a/websocket013.html b/websocket013.html index 483588d..e0808ff 100644 --- a/websocket013.html +++ b/websocket013.html @@ -8,45 +8,64 @@ - -
    -
    - ----- - - - - - - - +

    Java Platform, Enterprise Edition The Java EE Tutorial
    -Release 8 Java Platform, Enterprise Edition
    -E63026-01

    Go To Table Of Contents
    -Contents

    + + +
    + Java Platform, Enterprise Edition The Java EE Tutorial
    + Release 8 Java Platform, Enterprise Edition
    + E63026-01 +
    -
    - ----- - - - - - - - +
    +

    Previous
    -Previous

    Next
    -Next

     

    + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    -
    -
    +

    18.13 Further Information about WebSocket

    @@ -57,34 +76,64 @@

    18.13 Further Information about Web

    http://www.jcp.org/en/jsr/detail?id=356

    -
    - -------- - - - - - - - - - - -

    Previous
    -Previous

    Next
    -Next

    Oracle Logo -
    -Copyright © 2014, 2017, Oracle and/or its affiliates. All rights reserved.

    Go To Table Of Contents
    -Contents

    +
    + + + + + + + + + +
    + + + + + + + + + +
      + + Previous +
    + Previous  +
    +
    + + Next +
    + Next +
    +
    +
    + Oracle Logo + +
    + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + +
    +
    +
    + + + + + +
      + + Go To Table Of Contents +
    + Contents +
    +
    +
    + \ No newline at end of file From ec3030171df29c2008893ffadae18bffdbb8ace3 Mon Sep 17 00:00:00 2001 From: "joe.ruzzi" Date: Mon, 24 Jul 2017 15:00:41 -0400 Subject: [PATCH 5/8] Update site --- batch-processing.html | 168 ++++++++----------- batch-processing001.html | 191 ++++++++------------- batch-processing002.html | 168 ++++++++----------- batch-processing003.html | 168 ++++++++----------- batch-processing004.html | 168 ++++++++----------- batch-processing005.html | 168 ++++++++----------- batch-processing006.html | 168 ++++++++----------- batch-processing007.html | 168 ++++++++----------- batch-processing008.html | 168 ++++++++----------- batch-processing009.html | 168 ++++++++----------- batch-processing010.html | 168 ++++++++----------- bean-validation-advanced.html | 168 ++++++++----------- bean-validation-advanced001.html | 168 ++++++++----------- bean-validation-advanced002.html | 168 ++++++++----------- bean-validation-advanced003.html | 168 ++++++++----------- bean-validation-advanced004.html | 168 ++++++++----------- bean-validation.html | 168 ++++++++----------- bean-validation001.html | 168 ++++++++----------- bean-validation002.html | 168 ++++++++----------- bean-validation003.html | 168 ++++++++----------- bean-validation004.html | 168 ++++++++----------- bean-validation005.html | 168 ++++++++----------- cdi-adv-examples.html | 168 ++++++++----------- cdi-adv-examples001.html | 168 ++++++++----------- cdi-adv-examples002.html | 168 ++++++++----------- cdi-adv-examples003.html | 168 ++++++++----------- cdi-adv-examples004.html | 168 ++++++++----------- cdi-adv-examples005.html | 168 ++++++++----------- cdi-adv-examples006.html | 168 ++++++++----------- cdi-adv.html | 168 ++++++++----------- cdi-adv001.html | 168 ++++++++----------- cdi-adv002.html | 168 ++++++++----------- cdi-adv003.html | 168 ++++++++----------- cdi-adv004.html | 168 ++++++++----------- cdi-adv005.html | 168 ++++++++----------- cdi-adv006.html | 168 ++++++++----------- cdi-adv007.html | 168 ++++++++----------- cdi-adv008.html | 168 ++++++++----------- cdi-basic.html | 168 ++++++++----------- cdi-basic001.html | 168 ++++++++----------- cdi-basic002.html | 168 ++++++++----------- cdi-basic003.html | 168 ++++++++----------- cdi-basic004.html | 168 ++++++++----------- cdi-basic005.html | 168 ++++++++----------- cdi-basic006.html | 168 ++++++++----------- cdi-basic007.html | 168 ++++++++----------- cdi-basic008.html | 168 ++++++++----------- cdi-basic009.html | 168 ++++++++----------- cdi-basic010.html | 168 ++++++++----------- cdi-basic011.html | 168 ++++++++----------- cdi-basic012.html | 168 ++++++++----------- cdi-basic013.html | 168 ++++++++----------- cdi-basic014.html | 168 ++++++++----------- cdi-basic015.html | 168 ++++++++----------- cdi-basicexamples.html | 168 ++++++++----------- cdi-basicexamples001.html | 168 ++++++++----------- cdi-basicexamples002.html | 168 ++++++++----------- cdi-basicexamples003.html | 168 ++++++++----------- concurrency-utilities.html | 168 ++++++++----------- concurrency-utilities001.html | 168 ++++++++----------- concurrency-utilities002.html | 168 ++++++++----------- concurrency-utilities003.html | 168 ++++++++----------- concurrency-utilities004.html | 168 ++++++++----------- concurrency-utilities005.html | 168 ++++++++----------- concurrency-utilities006.html | 177 ++++++++------------ concurrency-utilities007.html | 168 ++++++++----------- connectorexample.html | 168 ++++++++----------- connectorexample001.html | 168 ++++++++----------- connectorexample002.html | 186 ++++++++------------- connectorexample003.html | 186 ++++++++------------- cpyr.html | 124 +++++--------- css/style.css | 33 +++- dukes-bookstore.html | 168 ++++++++----------- dukes-bookstore001.html | 168 ++++++++----------- dukes-bookstore002.html | 168 ++++++++----------- dukes-bookstore003.html | 168 ++++++++----------- dukes-forest.html | 168 ++++++++----------- dukes-forest001.html | 168 ++++++++----------- dukes-forest002.html | 195 ++++++++-------------- dukes-forest003.html | 168 ++++++++----------- dukes-forest004.html | 146 +++++++--------- dukes-tutoring.html | 168 ++++++++----------- dukes-tutoring001.html | 177 ++++++++------------ dukes-tutoring002.html | 168 ++++++++----------- dukes-tutoring003.html | 168 ++++++++----------- dukes-tutoring004.html | 168 ++++++++----------- ejb-async.html | 168 ++++++++----------- ejb-async001.html | 168 ++++++++----------- ejb-async002.html | 168 ++++++++----------- ejb-basicexamples.html | 168 ++++++++----------- ejb-basicexamples001.html | 168 ++++++++----------- ejb-basicexamples002.html | 168 ++++++++----------- ejb-basicexamples003.html | 168 ++++++++----------- ejb-basicexamples004.html | 168 ++++++++----------- ejb-basicexamples005.html | 168 ++++++++----------- ejb-basicexamples006.html | 168 ++++++++----------- ejb-embedded.html | 168 ++++++++----------- ejb-embedded001.html | 168 ++++++++----------- ejb-embedded002.html | 168 ++++++++----------- ejb-embedded003.html | 168 ++++++++----------- ejb-gettingstarted.html | 168 ++++++++----------- ejb-gettingstarted001.html | 168 ++++++++----------- ejb-gettingstarted002.html | 168 ++++++++----------- ejb-gettingstarted003.html | 168 ++++++++----------- ejb-intro.html | 168 ++++++++----------- ejb-intro001.html | 168 ++++++++----------- ejb-intro002.html | 168 ++++++++----------- ejb-intro003.html | 168 ++++++++----------- ejb-intro004.html | 177 ++++++++------------ ejb-intro005.html | 168 ++++++++----------- ejb-intro006.html | 168 ++++++++----------- ejb-intro007.html | 195 ++++++++-------------- ejb-intro008.html | 168 ++++++++----------- img_text/javaeett_dt_001.html | 124 +++++--------- img_text/javaeett_dt_002.html | 124 +++++--------- img_text/javaeett_dt_003.html | 124 +++++--------- img_text/javaeett_dt_004.html | 124 +++++--------- img_text/javaeett_dt_005.html | 124 +++++--------- img_text/javaeett_dt_006.html | 124 +++++--------- img_text/javaeett_dt_007.html | 124 +++++--------- img_text/javaeett_dt_008.html | 124 +++++--------- img_text/javaeett_dt_009.html | 124 +++++--------- img_text/javaeett_dt_010.html | 124 +++++--------- img_text/javaeett_dt_011.html | 124 +++++--------- img_text/javaeett_dt_012.html | 124 +++++--------- img_text/javaeett_dt_013.html | 124 +++++--------- img_text/javaeett_dt_014.html | 124 +++++--------- img_text/javaeett_dt_015.html | 124 +++++--------- img_text/javaeett_dt_016.html | 124 +++++--------- img_text/javaeett_dt_017.html | 124 +++++--------- img_text/javaeett_dt_018.html | 124 +++++--------- img_text/javaeett_dt_019.html | 124 +++++--------- img_text/javaeett_dt_020.html | 124 +++++--------- img_text/javaeett_dt_021.html | 124 +++++--------- img_text/javaeett_dt_022.html | 124 +++++--------- img_text/javaeett_dt_023.html | 124 +++++--------- img_text/javaeett_dt_024.html | 124 +++++--------- img_text/javaeett_dt_025.html | 124 +++++--------- img_text/javaeett_dt_026.html | 124 +++++--------- img_text/javaeett_dt_027.html | 124 +++++--------- img_text/javaeett_dt_028.html | 124 +++++--------- img_text/javaeett_dt_029.html | 124 +++++--------- img_text/javaeett_dt_030.html | 124 +++++--------- img_text/javaeett_dt_031.html | 124 +++++--------- img_text/javaeett_dt_032.html | 124 +++++--------- img_text/javaeett_dt_033.html | 124 +++++--------- img_text/javaeett_dt_034.html | 124 +++++--------- img_text/javaeett_dt_035.html | 124 +++++--------- img_text/javaeett_dt_036.html | 124 +++++--------- img_text/javaeett_dt_037.html | 124 +++++--------- img_text/javaeett_dt_038.html | 124 +++++--------- img_text/javaeett_dt_039.html | 124 +++++--------- img_text/javaeett_dt_040.html | 124 +++++--------- img_text/javaeett_dt_041.html | 124 +++++--------- img_text/javaeett_dt_042.html | 124 +++++--------- img_text/javaeett_dt_043.html | 124 +++++--------- img_text/javaeett_dt_044.html | 124 +++++--------- img_text/javaeett_dt_045.html | 124 +++++--------- img_text/javaeett_dt_046.html | 124 +++++--------- img_text/javaeett_dt_047.html | 124 +++++--------- img_text/javaeett_dt_048.html | 124 +++++--------- img_text/javaeett_dt_049.html | 124 +++++--------- img_text/javaeett_dt_050.html | 124 +++++--------- img_text/javaeett_dt_051.html | 124 +++++--------- img_text/javaeett_dt_052.html | 124 +++++--------- img_text/javaeett_dt_053.html | 124 +++++--------- img_text/javaeett_dt_054.html | 124 +++++--------- img_text/javaeett_dt_055.html | 124 +++++--------- img_text/javaeett_dt_056.html | 124 +++++--------- img_text/javaeett_dt_057.html | 124 +++++--------- img_text/javaeett_dt_058.html | 124 +++++--------- img_text/javaeett_dt_059.html | 124 +++++--------- img_text/javaeett_dt_060.html | 124 +++++--------- img_text/javaeett_dt_061.html | 124 +++++--------- img_text/javaeett_dt_062.html | 124 +++++--------- img_text/javaeett_dt_063.html | 124 +++++--------- img_text/javaeett_dt_064.html | 124 +++++--------- img_text/javaeett_dt_065_frmcmpnt.html | 124 +++++--------- img_text/javaeett_dt_066_slctmny.html | 124 +++++--------- img_text/javaeett_dt_067_slctn.html | 124 +++++--------- img_text/javaeett_dt_068_txtcmpnts.html | 124 +++++--------- injection.html | 168 ++++++++----------- injection001.html | 168 ++++++++----------- injection002.html | 168 ++++++++----------- injection003.html | 168 ++++++++----------- interceptors.html | 168 ++++++++----------- interceptors001.html | 168 ++++++++----------- interceptors002.html | 168 ++++++++----------- interceptors003.html | 168 ++++++++----------- jaxrs-advanced.html | 168 ++++++++----------- jaxrs-advanced001.html | 168 ++++++++----------- jaxrs-advanced002.html | 168 ++++++++----------- jaxrs-advanced003.html | 168 ++++++++----------- jaxrs-advanced004.html | 168 ++++++++----------- jaxrs-advanced005.html | 168 ++++++++----------- jaxrs-advanced006.html | 168 ++++++++----------- jaxrs-advanced007.html | 168 ++++++++----------- jaxrs-advanced008.html | 168 ++++++++----------- jaxrs-client.html | 168 ++++++++----------- jaxrs-client001.html | 168 ++++++++----------- jaxrs-client002.html | 168 ++++++++----------- jaxrs-client003.html | 168 ++++++++----------- jaxrs.html | 168 ++++++++----------- jaxrs001.html | 168 ++++++++----------- jaxrs002.html | 168 ++++++++----------- jaxrs003.html | 168 ++++++++----------- jaxrs004.html | 168 ++++++++----------- jaxws.html | 168 ++++++++----------- jaxws001.html | 168 ++++++++----------- jaxws002.html | 177 ++++++++------------ jaxws003.html | 168 ++++++++----------- jaxws004.html | 168 ++++++++----------- jaxws005.html | 168 ++++++++----------- jms-concepts.html | 168 ++++++++----------- jms-concepts001.html | 177 ++++++++------------ jms-concepts002.html | 195 ++++++++-------------- jms-concepts003.html | 195 ++++++++-------------- jms-concepts004.html | 177 ++++++++------------ jms-concepts005.html | 168 ++++++++----------- jms-concepts006.html | 168 ++++++++----------- jms-examples.html | 168 ++++++++----------- jms-examples001.html | 168 ++++++++----------- jms-examples002.html | 168 ++++++++----------- jms-examples003.html | 168 ++++++++----------- jms-examples004.html | 177 ++++++++------------ jms-examples005.html | 168 ++++++++----------- jms-examples006.html | 177 ++++++++------------ jms-examples007.html | 177 ++++++++------------ jms-examples008.html | 178 ++++++++------------ jms-examples009.html | 178 ++++++++------------ jms-examples010.html | 168 ++++++++----------- jsf-advanced-cc.html | 168 ++++++++----------- jsf-advanced-cc001.html | 168 ++++++++----------- jsf-advanced-cc002.html | 168 ++++++++----------- jsf-advanced-cc003.html | 168 ++++++++----------- jsf-advanced-cc004.html | 168 ++++++++----------- jsf-ajax.html | 168 ++++++++----------- jsf-ajax001.html | 168 ++++++++----------- jsf-ajax002.html | 168 ++++++++----------- jsf-ajax003.html | 168 ++++++++----------- jsf-ajax004.html | 168 ++++++++----------- jsf-ajax005.html | 168 ++++++++----------- jsf-ajax006.html | 168 ++++++++----------- jsf-ajax007.html | 168 ++++++++----------- jsf-ajax008.html | 168 ++++++++----------- jsf-ajax009.html | 168 ++++++++----------- jsf-ajax010.html | 168 ++++++++----------- jsf-ajax011.html | 168 ++++++++----------- jsf-ajax012.html | 168 ++++++++----------- jsf-configure.html | 168 ++++++++----------- jsf-configure001.html | 168 ++++++++----------- jsf-configure002.html | 168 ++++++++----------- jsf-configure003.html | 168 ++++++++----------- jsf-configure004.html | 177 ++++++++------------ jsf-configure005.html | 168 ++++++++----------- jsf-configure006.html | 168 ++++++++----------- jsf-configure007.html | 168 ++++++++----------- jsf-configure008.html | 168 ++++++++----------- jsf-configure009.html | 168 ++++++++----------- jsf-configure010.html | 168 ++++++++----------- jsf-configure011.html | 168 ++++++++----------- jsf-configure012.html | 168 ++++++++----------- jsf-configure013.html | 168 ++++++++----------- jsf-custom.html | 168 ++++++++----------- jsf-custom001.html | 168 ++++++++----------- jsf-custom002.html | 168 ++++++++----------- jsf-custom003.html | 168 ++++++++----------- jsf-custom004.html | 168 ++++++++----------- jsf-custom005.html | 168 ++++++++----------- jsf-custom006.html | 168 ++++++++----------- jsf-custom007.html | 168 ++++++++----------- jsf-custom008.html | 168 ++++++++----------- jsf-custom009.html | 168 ++++++++----------- jsf-custom010.html | 168 ++++++++----------- jsf-custom011.html | 168 ++++++++----------- jsf-custom012.html | 168 ++++++++----------- jsf-custom013.html | 168 ++++++++----------- jsf-custom014.html | 168 ++++++++----------- jsf-develop.html | 168 ++++++++----------- jsf-develop001.html | 168 ++++++++----------- jsf-develop002.html | 168 ++++++++----------- jsf-develop003.html | 168 ++++++++----------- jsf-el.html | 168 ++++++++----------- jsf-el001.html | 168 ++++++++----------- jsf-el002.html | 168 ++++++++----------- jsf-el003.html | 168 ++++++++----------- jsf-el004.html | 168 ++++++++----------- jsf-el005.html | 168 ++++++++----------- jsf-el006.html | 168 ++++++++----------- jsf-el007.html | 168 ++++++++----------- jsf-el008.html | 168 ++++++++----------- jsf-facelets.html | 168 ++++++++----------- jsf-facelets001.html | 168 ++++++++----------- jsf-facelets002.html | 168 ++++++++----------- jsf-facelets003.html | 168 ++++++++----------- jsf-facelets004.html | 168 ++++++++----------- jsf-facelets005.html | 168 ++++++++----------- jsf-facelets006.html | 168 ++++++++----------- jsf-facelets007.html | 168 ++++++++----------- jsf-facelets008.html | 168 ++++++++----------- jsf-facelets009.html | 168 ++++++++----------- jsf-intro.html | 168 ++++++++----------- jsf-intro001.html | 168 ++++++++----------- jsf-intro002.html | 177 ++++++++------------ jsf-intro003.html | 177 ++++++++------------ jsf-intro004.html | 168 ++++++++----------- jsf-intro005.html | 168 ++++++++----------- jsf-intro006.html | 168 ++++++++----------- jsf-intro007.html | 177 ++++++++------------ jsf-intro008.html | 168 ++++++++----------- jsf-intro009.html | 168 ++++++++----------- jsf-page-core.html | 168 ++++++++----------- jsf-page-core001.html | 168 ++++++++----------- jsf-page-core002.html | 168 ++++++++----------- jsf-page-core003.html | 168 ++++++++----------- jsf-page-core004.html | 168 ++++++++----------- jsf-page.html | 168 ++++++++----------- jsf-page001.html | 168 ++++++++----------- jsf-page002.html | 204 +++++++++-------------- jsf-page003.html | 168 ++++++++----------- jsonp.html | 168 ++++++++----------- jsonp001.html | 168 ++++++++----------- jsonp002.html | 168 ++++++++----------- jsonp003.html | 168 ++++++++----------- jsonp004.html | 168 ++++++++----------- jsonp005.html | 168 ++++++++----------- jsonp006.html | 168 ++++++++----------- jsonp007.html | 168 ++++++++----------- jsonp008.html | 168 ++++++++----------- overview.html | 168 ++++++++----------- overview001.html | 168 ++++++++----------- overview002.html | 168 ++++++++----------- overview003.html | 168 ++++++++----------- overview004.html | 204 +++++++++-------------- overview005.html | 177 ++++++++------------ overview006.html | 168 ++++++++----------- overview007.html | 168 ++++++++----------- overview008.html | 204 +++++++++-------------- overview009.html | 168 ++++++++----------- overview010.html | 168 ++++++++----------- packaging.html | 168 ++++++++----------- packaging001.html | 177 ++++++++------------ packaging002.html | 177 ++++++++------------ packaging003.html | 177 ++++++++------------ packaging004.html | 168 ++++++++----------- partbeanvalidation.html | 168 ++++++++----------- partcasestudies.html | 168 ++++++++----------- partcdi.html | 168 ++++++++----------- partentbeans.html | 168 ++++++++----------- partintro.html | 168 ++++++++----------- partmessaging.html | 168 ++++++++----------- partpersist.html | 168 ++++++++----------- partplatform.html | 168 ++++++++----------- partsecurity.html | 168 ++++++++----------- partsupporttechs.html | 168 ++++++++----------- partwebsvcs.html | 168 ++++++++----------- partwebtier.html | 168 ++++++++----------- persistence-basicexamples.html | 168 ++++++++----------- persistence-basicexamples001.html | 168 ++++++++----------- persistence-basicexamples002.html | 177 ++++++++------------ persistence-basicexamples003.html | 177 ++++++++------------ persistence-basicexamples004.html | 168 ++++++++----------- persistence-cache.html | 168 ++++++++----------- persistence-cache001.html | 168 ++++++++----------- persistence-cache002.html | 168 ++++++++----------- persistence-criteria.html | 168 ++++++++----------- persistence-criteria001.html | 168 ++++++++----------- persistence-criteria002.html | 168 ++++++++----------- persistence-criteria003.html | 168 ++++++++----------- persistence-entitygraphs.html | 168 ++++++++----------- persistence-entitygraphs001.html | 168 ++++++++----------- persistence-entitygraphs002.html | 168 ++++++++----------- persistence-entitygraphs003.html | 168 ++++++++----------- persistence-entitygraphs004.html | 168 ++++++++----------- persistence-intro.html | 168 ++++++++----------- persistence-intro001.html | 168 ++++++++----------- persistence-intro002.html | 168 ++++++++----------- persistence-intro003.html | 168 ++++++++----------- persistence-intro004.html | 168 ++++++++----------- persistence-intro005.html | 168 ++++++++----------- persistence-intro006.html | 168 ++++++++----------- persistence-intro007.html | 168 ++++++++----------- persistence-locking.html | 168 ++++++++----------- persistence-locking001.html | 168 ++++++++----------- persistence-locking002.html | 168 ++++++++----------- persistence-querylanguage.html | 168 ++++++++----------- persistence-querylanguage001.html | 168 ++++++++----------- persistence-querylanguage002.html | 168 ++++++++----------- persistence-querylanguage003.html | 168 ++++++++----------- persistence-querylanguage004.html | 168 ++++++++----------- persistence-querylanguage005.html | 168 ++++++++----------- persistence-querylanguage006.html | 168 ++++++++----------- persistence-string-queries.html | 168 ++++++++----------- persistence-string-queries001.html | 168 ++++++++----------- persistence-string-queries002.html | 168 ++++++++----------- persistence-string-queries003.html | 168 ++++++++----------- preface.html | 168 ++++++++----------- resource-creation.html | 168 ++++++++----------- resource-creation001.html | 168 ++++++++----------- resource-creation002.html | 168 ++++++++----------- resource-creation003.html | 168 ++++++++----------- resources.html | 168 ++++++++----------- resources001.html | 177 ++++++++------------ resources002.html | 168 ++++++++----------- resources003.html | 168 ++++++++----------- resources004.html | 168 ++++++++----------- resources005.html | 168 ++++++++----------- security-advanced.html | 168 ++++++++----------- security-advanced001.html | 168 ++++++++----------- security-advanced002.html | 186 ++++++++------------- security-advanced003.html | 168 ++++++++----------- security-advanced004.html | 168 ++++++++----------- security-advanced005.html | 168 ++++++++----------- security-advanced006.html | 168 ++++++++----------- security-advanced007.html | 168 ++++++++----------- security-advanced008.html | 168 ++++++++----------- security-intro.html | 168 ++++++++----------- security-intro001.html | 213 +++++++++--------------- security-intro002.html | 168 ++++++++----------- security-intro003.html | 168 ++++++++----------- security-intro004.html | 168 ++++++++----------- security-intro005.html | 177 ++++++++------------ security-intro006.html | 168 ++++++++----------- security-intro007.html | 168 ++++++++----------- security-javaee.html | 168 ++++++++----------- security-javaee001.html | 168 ++++++++----------- security-javaee002.html | 177 ++++++++------------ security-javaee003.html | 168 ++++++++----------- security-webtier.html | 168 ++++++++----------- security-webtier001.html | 168 ++++++++----------- security-webtier002.html | 186 ++++++++------------- security-webtier003.html | 168 ++++++++----------- security-webtier004.html | 168 ++++++++----------- servlets.html | 168 ++++++++----------- servlets001.html | 168 ++++++++----------- servlets002.html | 168 ++++++++----------- servlets003.html | 168 ++++++++----------- servlets004.html | 168 ++++++++----------- servlets005.html | 168 ++++++++----------- servlets006.html | 177 ++++++++------------ servlets007.html | 168 ++++++++----------- servlets008.html | 168 ++++++++----------- servlets009.html | 168 ++++++++----------- servlets010.html | 168 ++++++++----------- servlets011.html | 168 ++++++++----------- servlets012.html | 168 ++++++++----------- servlets013.html | 168 ++++++++----------- servlets014.html | 168 ++++++++----------- servlets015.html | 168 ++++++++----------- servlets016.html | 168 ++++++++----------- servlets017.html | 168 ++++++++----------- servlets018.html | 168 ++++++++----------- target.html | 124 +++++--------- title.html | 168 ++++++++----------- toc.html | 146 +++++++--------- transactions.html | 168 ++++++++----------- transactions001.html | 168 ++++++++----------- transactions002.html | 168 ++++++++----------- transactions003.html | 168 ++++++++----------- transactions004.html | 177 ++++++++------------ transactions005.html | 168 ++++++++----------- transactions006.html | 168 ++++++++----------- transactions007.html | 186 ++++++++------------- transactions008.html | 168 ++++++++----------- transactions009.html | 168 ++++++++----------- usingexamples.html | 168 ++++++++----------- usingexamples001.html | 168 ++++++++----------- usingexamples002.html | 168 ++++++++----------- usingexamples003.html | 168 ++++++++----------- usingexamples004.html | 168 ++++++++----------- usingexamples005.html | 168 ++++++++----------- usingexamples006.html | 168 ++++++++----------- usingexamples007.html | 168 ++++++++----------- usingexamples008.html | 168 ++++++++----------- usingexamples009.html | 168 ++++++++----------- webapp.html | 168 ++++++++----------- webapp001.html | 177 ++++++++------------ webapp002.html | 168 ++++++++----------- webapp003.html | 168 ++++++++----------- webapp004.html | 168 ++++++++----------- webapp005.html | 168 ++++++++----------- webapp006.html | 168 ++++++++----------- webi18n.html | 168 ++++++++----------- webi18n001.html | 168 ++++++++----------- webi18n002.html | 168 ++++++++----------- webi18n003.html | 168 ++++++++----------- webi18n004.html | 168 ++++++++----------- webservices-intro.html | 168 ++++++++----------- webservices-intro001.html | 168 ++++++++----------- webservices-intro002.html | 168 ++++++++----------- webservices-intro003.html | 168 ++++++++----------- websocket.html | 168 ++++++++----------- websocket001.html | 168 ++++++++----------- websocket002.html | 168 ++++++++----------- websocket003.html | 168 ++++++++----------- websocket004.html | 168 ++++++++----------- websocket005.html | 168 ++++++++----------- websocket006.html | 168 ++++++++----------- websocket007.html | 168 ++++++++----------- websocket008.html | 168 ++++++++----------- websocket009.html | 168 ++++++++----------- websocket010.html | 168 ++++++++----------- websocket011.html | 168 ++++++++----------- websocket012.html | 168 ++++++++----------- websocket013.html | 168 ++++++++----------- 505 files changed, 32730 insertions(+), 49470 deletions(-) diff --git a/batch-processing.html b/batch-processing.html index cf1fdd5..90f6cb4 100644 --- a/batch-processing.html +++ b/batch-processing.html @@ -6,66 +6,51 @@ Batch Processing + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    55 Batch Processing

    @@ -123,60 +108,43 @@

    55 Batch Processing


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/batch-processing001.html b/batch-processing001.html index 9c65e72..61ce5cc 100644 --- a/batch-processing001.html +++ b/batch-processing001.html @@ -6,66 +6,51 @@ Introduction to Batch Processing + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    55.1 Introduction to Batch Processing

    @@ -153,7 +138,8 @@

    55.1.1 Steps in Batch Jobs

    batch job.

    -

    Figure 55-1 Chunk Steps in a Batch Job

    +
    *Figure 55-1 Chunk Steps in a Batch Job *
    +

    This figure shows a batch job that contains two chunk steps: step A and step B. Step A has the three parts of a chunk-oriented step: input retrieval A, business processing A, and output writing A. Step B also has the three parts of a chunk-oriented step: input retrieval B, business processing B, and output writing B.

    @@ -162,17 +148,6 @@

    55.1.1 Steps in Batch Jobs

    -

    Description of Figure 55-1 follows
    -Description of "Figure 55-1 Chunk Steps -in a Batch Job"
    -
    -* Task-oriented steps (task steps) execute tasks other than processing -items from a data source. Examples include creating or removing -directories, moving files, creating or dropping database tables, -configuring resources, and so on. Task steps are not usually -long-running compared to chunk steps.

    -
    -

    For example, the phone billing application consists of two chunk steps.

    @@ -253,13 +228,8 @@

    55.1.3 Status and Decision Elements

    chunk steps, task steps and a decision element.

    -

    Figure 55-2 Steps and Decision Elements in a Job

    -
    -
    -

    Description of Figure 55-2 follows
    -Description of "Figure 55-2 Steps and -Decision Elements in a Job"
    -

    +
    *Figure 55-2 Steps and Decision Elements in a Job *
    +

    This figure shows a batch job that contains two chunk steps, a task step and a decision element. The job starts with chunk step A, continues with chunk step B, and then decision element D evaluates condition 1. The condition is based on the status of step B. If condition 1 is true, the job terminates; otherwise the job continues with step C and then the job ends.

    @@ -300,60 +270,43 @@

    55.1.4 Batch Framework Functionality


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/batch-processing002.html b/batch-processing002.html index 79ef87b..3d434f5 100644 --- a/batch-processing002.html +++ b/batch-processing002.html @@ -6,66 +6,51 @@ Batch Processing in Java EE + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    55.2 Batch Processing in Java EE

    @@ -372,60 +357,43 @@

    55.2.6 Batch and Exit Status


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/batch-processing003.html b/batch-processing003.html index f2c4220..15743a7 100644 --- a/batch-processing003.html +++ b/batch-processing003.html @@ -6,66 +6,51 @@ Simple Use Case + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    55.3 Simple Use Case

    @@ -266,60 +251,43 @@

    55.3.2 Task Step


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/batch-processing004.html b/batch-processing004.html index fa4503f..0dd9fe8 100644 --- a/batch-processing004.html +++ b/batch-processing004.html @@ -6,66 +6,51 @@ Using the Job Specification Language + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    55.4 Using the Job Specification Language

    @@ -797,60 +782,43 @@

    55.4.5 The decision Element


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/batch-processing005.html b/batch-processing005.html index ffbe8b2..4f634c6 100644 --- a/batch-processing005.html +++ b/batch-processing005.html @@ -6,66 +6,51 @@ Creating Batch Artifacts + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    55.5 Creating Batch Artifacts

    @@ -547,60 +532,43 @@

    55.5.3 Using the Conte


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/batch-processing006.html b/batch-processing006.html index d5d0152..4028220 100644 --- a/batch-processing006.html +++ b/batch-processing006.html @@ -6,66 +6,51 @@ Submitting Jobs to the Batch Runtime + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    55.6 Submitting Jobs to the Batch Runtime

    @@ -168,60 +153,43 @@

    55.6.3 Invoking the Batc


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/batch-processing007.html b/batch-processing007.html index f0eac52..30cad0d 100644 --- a/batch-processing007.html +++ b/batch-processing007.html @@ -6,66 +6,51 @@ Packaging Batch Applications + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    55.7 Packaging Batch Applications

    @@ -106,60 +91,43 @@

    55.7 Packaging Batch Applications


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/batch-processing008.html b/batch-processing008.html index 6468728..b8e8dfb 100644 --- a/batch-processing008.html +++ b/batch-processing008.html @@ -6,66 +6,51 @@ The webserverlog Example Application + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    55.8 The webserverlog Example Application

    @@ -599,60 +584,43 @@

    55.8.2.2 To Run


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/batch-processing009.html b/batch-processing009.html index 32d540d..e14ed97 100644 --- a/batch-processing009.html +++ b/batch-processing009.html @@ -6,66 +6,51 @@ The phonebilling Example Application + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    55.9 The phonebilling Example Application

    @@ -696,60 +681,43 @@

    55.9.2.2 To Run


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/batch-processing010.html b/batch-processing010.html index 354ce25..c2b43c6 100644 --- a/batch-processing010.html +++ b/batch-processing010.html @@ -6,66 +6,51 @@ Further Information about Batch Processing + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    55.10 Further Information about Batch Processing

    @@ -80,60 +65,43 @@

    55.10 Further Information ab


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/bean-validation-advanced.html b/bean-validation-advanced.html index 0c7aa76..64bdc67 100644 --- a/bean-validation-advanced.html +++ b/bean-validation-advanced.html @@ -6,66 +6,51 @@ Bean Validation: Advanced Topics + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    22 Bean Validation: Advanced Topics

    @@ -100,60 +85,43 @@

    22 Bean Validation: Advanced Topics


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/bean-validation-advanced001.html b/bean-validation-advanced001.html index 56563f1..152d076 100644 --- a/bean-validation-advanced001.html +++ b/bean-validation-advanced001.html @@ -6,66 +6,51 @@ Creating Custom Constraints + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    22.1 Creating Custom Constraints

    @@ -184,60 +169,43 @@

    22.1.2 Removing Ambiguity in C


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/bean-validation-advanced002.html b/bean-validation-advanced002.html index 8777f01..8e1591f 100644 --- a/bean-validation-advanced002.html +++ b/bean-validation-advanced002.html @@ -6,66 +6,51 @@ Customizing Validator Messages + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    22.2 Customizing Validator Messages

    @@ -107,60 +92,43 @@

    22.2.1.1 Localizing Validation Messages<


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/bean-validation-advanced003.html b/bean-validation-advanced003.html index 7f69cf2..01a0cea 100644 --- a/bean-validation-advanced003.html +++ b/bean-validation-advanced003.html @@ -6,66 +6,51 @@ Grouping Constraints + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    22.3 Grouping Constraints

    @@ -152,60 +137,43 @@

    22.3.1 Customizing Group Validation


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/bean-validation-advanced004.html b/bean-validation-advanced004.html index 37e8fd4..e6912aa 100644 --- a/bean-validation-advanced004.html +++ b/bean-validation-advanced004.html @@ -6,66 +6,51 @@ Using Method Constraints in Type Hierarchies + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    22.4 Using Method Constraints in Type Hierarchies

    @@ -204,60 +189,43 @@

    22.4.1 Rules for


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/bean-validation.html b/bean-validation.html index 991b26c..127a427 100644 --- a/bean-validation.html +++ b/bean-validation.html @@ -6,66 +6,51 @@ Introduction to Bean Validation + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    21 Introduction to Bean Validation

    @@ -102,60 +87,43 @@

    21 Introduction to Bean Validation


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/bean-validation001.html b/bean-validation001.html index 0f70272..2eaadfd 100644 --- a/bean-validation001.html +++ b/bean-validation001.html @@ -6,66 +6,51 @@ Overview of Bean Validation + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    21.1 Overview of Bean Validation

    @@ -91,60 +76,43 @@

    21.1 Overview of Bean Validation


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/bean-validation002.html b/bean-validation002.html index b00a47b..35a1bd0 100644 --- a/bean-validation002.html +++ b/bean-validation002.html @@ -6,66 +6,51 @@ Using Bean Validation Constraints + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    21.2 Using Bean Validation Constraints

    @@ -335,60 +320,43 @@

    21.2 Using Bean Validation Constraint


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/bean-validation003.html b/bean-validation003.html index f5f9ee8..78ad503 100644 --- a/bean-validation003.html +++ b/bean-validation003.html @@ -6,66 +6,51 @@ Validating Null and Empty Strings + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    21.3 Validating Null and Empty Strings

    @@ -135,60 +120,43 @@

    21.3 Validating Null and Empty String


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/bean-validation004.html b/bean-validation004.html index f2bd2c4..f7e1ade 100644 --- a/bean-validation004.html +++ b/bean-validation004.html @@ -6,66 +6,51 @@ Validating Constructors and Methods + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    21.4 Validating Constructors and Methods

    @@ -204,60 +189,43 @@

    21.4.3 Adding Constraints to


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/bean-validation005.html b/bean-validation005.html index 7562edc..1844fca 100644 --- a/bean-validation005.html +++ b/bean-validation005.html @@ -6,66 +6,51 @@ Further Information about Bean Validation + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    21.5 Further Information about Bean Validation

    @@ -92,60 +77,43 @@

    21.5 Further Information abou


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/cdi-adv-examples.html b/cdi-adv-examples.html index a6b5e92..8f2ed3c 100644 --- a/cdi-adv-examples.html +++ b/cdi-adv-examples.html @@ -6,66 +6,51 @@ Running the Advanced Contexts and Dependency Injection Examples + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    26 Running the Advanced Contexts and Dependency Injection Examples

    @@ -108,60 +93,43 @@

    26 Runn


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/cdi-adv-examples001.html b/cdi-adv-examples001.html index c5df6d6..9b1557d 100644 --- a/cdi-adv-examples001.html +++ b/cdi-adv-examples001.html @@ -6,66 +6,51 @@ Building and Running the CDI Advanced Examples + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    26.1 Building and Running the CDI Advanced Examples

    @@ -120,60 +105,43 @@

    26.1 Building and Runnin


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/cdi-adv-examples002.html b/cdi-adv-examples002.html index 0eeeea2..7112887 100644 --- a/cdi-adv-examples002.html +++ b/cdi-adv-examples002.html @@ -6,66 +6,51 @@ The encoder Example: Using Alternatives + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    26.2 The encoder Example: Using Alternatives

    @@ -501,60 +486,43 @@

    26.2.3.4 To Run the encoder Exam


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/cdi-adv-examples003.html b/cdi-adv-examples003.html index 406656c..7dd366c 100644 --- a/cdi-adv-examples003.html +++ b/cdi-adv-examples003.html @@ -6,66 +6,51 @@ The producermethods Example: Using a Producer Method to Choose a Bean Implementation + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    26.3 The producermethods Example: Using a Producer Method to Choose a Bean Implementation

    @@ -318,60 +303,43 @@

    26.3.2.3 To Run the producermethods


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/cdi-adv-examples004.html b/cdi-adv-examples004.html index b613282..8917956 100644 --- a/cdi-adv-examples004.html +++ b/cdi-adv-examples004.html @@ -6,66 +6,51 @@ The producerfields Example: Using Producer Fields to Generate Resources + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    26.4 The producerfields Example: Using Producer Fields to Generate Resources

    @@ -572,60 +557,43 @@

    26.4.4.3 To Run the producerfields Ex


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/cdi-adv-examples005.html b/cdi-adv-examples005.html index 6002853..350e909 100644 --- a/cdi-adv-examples005.html +++ b/cdi-adv-examples005.html @@ -6,66 +6,51 @@ The billpayment Example: Using Events and Interceptors + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    26.5 The billpayment Example: Using Events and Interceptors

    @@ -602,60 +587,43 @@

    26.5.6.3 To Run the billpayment Example<


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/cdi-adv-examples006.html b/cdi-adv-examples006.html index 7ea4c3c..dd5e617 100644 --- a/cdi-adv-examples006.html +++ b/cdi-adv-examples006.html @@ -6,66 +6,51 @@ The decorators Example: Decorating a Bean + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    26.6 The decorators Example: Decorating a Bean

    @@ -320,60 +305,43 @@

    26.6.3.3 To Run the decorators Example
    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/cdi-adv.html b/cdi-adv.html index 1b706ae..a368274 100644 --- a/cdi-adv.html +++ b/cdi-adv.html @@ -6,66 +6,51 @@ Contexts and Dependency Injection for Java EE: Advanced Topics + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    25 Contexts and Dependency Injection for Java EE: Advanced Topics

    @@ -113,60 +98,43 @@

    25 Contex


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/cdi-adv001.html b/cdi-adv001.html index ef55d51..3903507 100644 --- a/cdi-adv001.html +++ b/cdi-adv001.html @@ -6,66 +6,51 @@ Packaging CDI Applications + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    25.1 Packaging CDI Applications

    @@ -117,60 +102,43 @@

    25.1 Packaging CDI Applications


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/cdi-adv002.html b/cdi-adv002.html index 6f486e6..32a78fa 100644 --- a/cdi-adv002.html +++ b/cdi-adv002.html @@ -6,66 +6,51 @@ Using Alternatives in CDI Applications + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    25.2 Using Alternatives in CDI Applications

    @@ -257,60 +242,43 @@

    25.2.1 Using Specialization


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/cdi-adv003.html b/cdi-adv003.html index b7ee9a7..5400a50 100644 --- a/cdi-adv003.html +++ b/cdi-adv003.html @@ -6,66 +6,51 @@ Using Producer Methods, Producer Fields, and Disposer Methods in CDI Applications + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    25.3 Using Producer Methods, Producer Fields, and Disposer Methods in CDI Applications

    @@ -221,60 +206,43 @@

    25.3.3 Using a Disposer Method


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/cdi-adv004.html b/cdi-adv004.html index a5f5492..4e15795 100644 --- a/cdi-adv004.html +++ b/cdi-adv004.html @@ -6,66 +6,51 @@ Using Predefined Beans in CDI Applications + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    25.4 Using Predefined Beans in CDI Applications

    @@ -215,60 +200,43 @@

    25.4 Using Predefined Beans


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/cdi-adv005.html b/cdi-adv005.html index 36d0b0d..f7ab21a 100644 --- a/cdi-adv005.html +++ b/cdi-adv005.html @@ -6,66 +6,51 @@ Using Events in CDI Applications + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    25.5 Using Events in CDI Applications

    @@ -260,60 +245,43 @@

    25.5.3 Firing Events


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/cdi-adv006.html b/cdi-adv006.html index d7bbefa..5b59964 100644 --- a/cdi-adv006.html +++ b/cdi-adv006.html @@ -6,66 +6,51 @@ Using Interceptors in CDI Applications + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    25.6 Using Interceptors in CDI Applications

    @@ -205,60 +190,43 @@

    25.6 Using Interceptors in CDI A


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/cdi-adv007.html b/cdi-adv007.html index 21f2aec..e2badfe 100644 --- a/cdi-adv007.html +++ b/cdi-adv007.html @@ -6,66 +6,51 @@ Using Decorators in CDI Applications + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    25.7 Using Decorators in CDI Applications

    @@ -171,60 +156,43 @@

    25.7 Using Decorators in CDI Appli


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/cdi-adv008.html b/cdi-adv008.html index 7916941..0dab191 100644 --- a/cdi-adv008.html +++ b/cdi-adv008.html @@ -6,66 +6,51 @@ Using Stereotypes in CDI Applications + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    25.8 Using Stereotypes in CDI Applications

    @@ -179,60 +164,43 @@

    25.8 Using Stereotypes in CDI App


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/cdi-basic.html b/cdi-basic.html index 32c9fb3..f87706e 100644 --- a/cdi-basic.html +++ b/cdi-basic.html @@ -6,66 +6,51 @@ Introduction to Contexts and Dependency Injection for Java EE + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    23 Introduction to Contexts and Dependency Injection for Java EE

    @@ -133,60 +118,43 @@

    23 Introd


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/cdi-basic001.html b/cdi-basic001.html index ac4d45a..6e7cfa6 100644 --- a/cdi-basic001.html +++ b/cdi-basic001.html @@ -6,66 +6,51 @@ Getting Started + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    23.1 Getting Started

    @@ -188,60 +173,43 @@

    23.1 Getting Started


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/cdi-basic002.html b/cdi-basic002.html index ec4a57a..54b1b72 100644 --- a/cdi-basic002.html +++ b/cdi-basic002.html @@ -6,66 +6,51 @@ Overview of CDI + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    23.2 Overview of CDI

    @@ -193,60 +178,43 @@

    23.2 Overview of CDI


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/cdi-basic003.html b/cdi-basic003.html index d0037ab..08ec1e3 100644 --- a/cdi-basic003.html +++ b/cdi-basic003.html @@ -6,66 +6,51 @@ About Beans + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    23.3 About Beans

    @@ -135,60 +120,43 @@

    23.3 About Beans


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/cdi-basic004.html b/cdi-basic004.html index 3acd147..d4a5019 100644 --- a/cdi-basic004.html +++ b/cdi-basic004.html @@ -6,66 +6,51 @@ About CDI Managed Beans + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    23.4 About CDI Managed Beans

    @@ -112,60 +97,43 @@

    23.4 About CDI Managed Beans


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/cdi-basic005.html b/cdi-basic005.html index 014584b..e06b567 100644 --- a/cdi-basic005.html +++ b/cdi-basic005.html @@ -6,66 +6,51 @@ Beans as Injectable Objects + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    23.5 Beans as Injectable Objects

    @@ -133,60 +118,43 @@

    23.5 Beans as Injectable Objects


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/cdi-basic006.html b/cdi-basic006.html index 332676f..4e9aa40 100644 --- a/cdi-basic006.html +++ b/cdi-basic006.html @@ -6,66 +6,51 @@ Using Qualifiers + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    23.6 Using Qualifiers

    @@ -144,60 +129,43 @@

    23.6 Using Qualifiers


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/cdi-basic007.html b/cdi-basic007.html index 067346e..2dd40dc 100644 --- a/cdi-basic007.html +++ b/cdi-basic007.html @@ -6,66 +6,51 @@ Injecting Beans + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    23.7 Injecting Beans

    @@ -110,60 +95,43 @@

    23.7 Injecting Beans


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/cdi-basic008.html b/cdi-basic008.html index 2ab60c3..db907f1 100644 --- a/cdi-basic008.html +++ b/cdi-basic008.html @@ -6,66 +6,51 @@ Using Scopes + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    23.8 Using Scopes

    @@ -213,60 +198,43 @@

    23.8 Using Scopes


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/cdi-basic009.html b/cdi-basic009.html index 857f7c4..2320d23 100644 --- a/cdi-basic009.html +++ b/cdi-basic009.html @@ -6,66 +6,51 @@ Giving Beans EL Names + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    23.9 Giving Beans EL Names

    @@ -116,60 +101,43 @@

    23.9 Giving Beans EL Names


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/cdi-basic010.html b/cdi-basic010.html index 63f4fed..33fd44b 100644 --- a/cdi-basic010.html +++ b/cdi-basic010.html @@ -6,66 +6,51 @@ Adding Setter and Getter Methods + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    23.10 Adding Setter and Getter Methods

    @@ -126,60 +111,43 @@

    23.10 Adding Setter and Getter Methods


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/cdi-basic011.html b/cdi-basic011.html index 9743834..b350e48 100644 --- a/cdi-basic011.html +++ b/cdi-basic011.html @@ -6,66 +6,51 @@ Using a Managed Bean in a Facelets Page + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    23.11 Using a Managed Bean in a Facelets Page

    @@ -100,60 +85,43 @@

    23.11 Using a Managed Bean in a


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/cdi-basic012.html b/cdi-basic012.html index da9d440..3113028 100644 --- a/cdi-basic012.html +++ b/cdi-basic012.html @@ -6,66 +6,51 @@ Injecting Objects by Using Producer Methods + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    23.12 Injecting Objects by Using Producer Methods

    @@ -136,60 +121,43 @@

    23.12 Injecting Objects by


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/cdi-basic013.html b/cdi-basic013.html index cc57a06..a4b0f7c 100644 --- a/cdi-basic013.html +++ b/cdi-basic013.html @@ -6,66 +6,51 @@ Configuring a CDI Application + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    23.13 Configuring a CDI Application

    @@ -95,60 +80,43 @@

    23.13 Configuring a CDI Application


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/cdi-basic014.html b/cdi-basic014.html index 0d3698e..d42612b 100644 --- a/cdi-basic014.html +++ b/cdi-basic014.html @@ -6,66 +6,51 @@ Using the @PostConstruct and @PreDestroy Annotations with CDI Managed Bean Classes + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    23.14 Using the @PostConstruct and @PreDestroy Annotations with CDI Managed Bean Classes

    @@ -180,60 +165,43 @@

    - - - - - - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    - - - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    - - - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    - - - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/cdi-basic015.html b/cdi-basic015.html index 3204160..84d414a 100644 --- a/cdi-basic015.html +++ b/cdi-basic015.html @@ -6,66 +6,51 @@ Further Information about CDI + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    23.15 Further Information about CDI

    @@ -105,60 +90,43 @@

    23.15 Further Information about CDI


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/cdi-basicexamples.html b/cdi-basicexamples.html index 86e5b7e..5167f1f 100644 --- a/cdi-basicexamples.html +++ b/cdi-basicexamples.html @@ -6,66 +6,51 @@ Running the Basic Contexts and Dependency Injection Examples + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    24 Running the Basic Contexts and Dependency Injection Examples

    @@ -94,60 +79,43 @@

    24 Running


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/cdi-basicexamples001.html b/cdi-basicexamples001.html index 2421331..2229a2b 100644 --- a/cdi-basicexamples001.html +++ b/cdi-basicexamples001.html @@ -6,66 +6,51 @@ Building and Running the CDI Samples + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    24.1 Building and Running the CDI Samples

    @@ -111,60 +96,43 @@

    24.1 Building and Running the CDI


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/cdi-basicexamples002.html b/cdi-basicexamples002.html index 373ce2a..dafb9db 100644 --- a/cdi-basicexamples002.html +++ b/cdi-basicexamples002.html @@ -6,66 +6,51 @@ The simplegreeting CDI Example + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    24.2 The simplegreeting CDI Example

    @@ -408,60 +393,43 @@

    24.2.3.3 To Run the simplegreeting Ex


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/cdi-basicexamples003.html b/cdi-basicexamples003.html index 4b5af42..892a52b 100644 --- a/cdi-basicexamples003.html +++ b/cdi-basicexamples003.html @@ -6,66 +6,51 @@ The guessnumber-cdi CDI Example + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    24.3 The guessnumber-cdi CDI Example

    @@ -581,60 +566,43 @@

    24.3.3.3 To Run the guessnumber Example<


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/concurrency-utilities.html b/concurrency-utilities.html index 9d1a575..46360c6 100644 --- a/concurrency-utilities.html +++ b/concurrency-utilities.html @@ -6,66 +6,51 @@ Concurrency Utilities for Java EE + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    56 Concurrency Utilities for Java EE

    @@ -110,60 +95,43 @@

    56 Concurrency Utilities for Java EE<


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/concurrency-utilities001.html b/concurrency-utilities001.html index 33909e5..4789f82 100644 --- a/concurrency-utilities001.html +++ b/concurrency-utilities001.html @@ -6,66 +6,51 @@ Concurrency Basics + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    56.1 Concurrency Basics

    @@ -147,60 +132,43 @@

    56.1.1 Threads and Processes


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/concurrency-utilities002.html b/concurrency-utilities002.html index 5900986..bb5edc8 100644 --- a/concurrency-utilities002.html +++ b/concurrency-utilities002.html @@ -6,66 +6,51 @@ Main Components of the Concurrency Utilities + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    56.2 Main Components of the Concurrency Utilities

    @@ -123,60 +108,43 @@

    56.2 Main Components of th


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/concurrency-utilities003.html b/concurrency-utilities003.html index cc40944..ed011d5 100644 --- a/concurrency-utilities003.html +++ b/concurrency-utilities003.html @@ -6,66 +6,51 @@ Concurrency and Transactions + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    56.3 Concurrency and Transactions

    @@ -123,60 +108,43 @@

    56.3 Concurrency and Transactions


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/concurrency-utilities004.html b/concurrency-utilities004.html index 69f54cc..36de6b8 100644 --- a/concurrency-utilities004.html +++ b/concurrency-utilities004.html @@ -6,66 +6,51 @@ Concurrency and Security + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    56.4 Concurrency and Security

    @@ -81,60 +66,43 @@

    56.4 Concurrency and Security


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/concurrency-utilities005.html b/concurrency-utilities005.html index a806516..73a0f50 100644 --- a/concurrency-utilities005.html +++ b/concurrency-utilities005.html @@ -6,66 +6,51 @@ The jobs Concurrency Example + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    56.5 The jobs Concurrency Example

    @@ -446,60 +431,43 @@

    56.5.1.5 To


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/concurrency-utilities006.html b/concurrency-utilities006.html index be2589b..ec4e13c 100644 --- a/concurrency-utilities006.html +++ b/concurrency-utilities006.html @@ -6,66 +6,51 @@ The taskcreator Concurrency Example + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    56.6 The taskcreator Concurrency Example

    @@ -119,13 +104,8 @@

    56.6 The taskcreator Concurrency Ex example.

    -

    Figure 56-1 Architecture of the taskcreator Example

    -
    -
    -

    Description of Figure 56-1 follows
    -Description of "Figure 56-1 Architecture -of the taskcreator Example"
    -

    +
    *Figure 56-1 Architecture of the taskcreator Example *
    +

    The figure shows the architecture of the taskcreator example. The JavaServer Faces page invokes methods on a CDI-managed bean, which submits task initiation requests to an enterprise bean. The enterprise bean uses a WebSocket endpoint to indicate to clients that an updated task execution log is available.

    The TaskEJB class obtains the default executor service objects from @@ -325,60 +305,43 @@

    56.6.1.3 To Run the taskcreator Example<


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/concurrency-utilities007.html b/concurrency-utilities007.html index 128dfc2..fa40641 100644 --- a/concurrency-utilities007.html +++ b/concurrency-utilities007.html @@ -6,66 +6,51 @@ Further Information about the Concurrency Utilities + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    56.7 Further Information about the Concurrency Utilities

    @@ -98,60 +83,43 @@

    56.7 Further Inform


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/connectorexample.html b/connectorexample.html index b44b87f..3edcc0b 100644 --- a/connectorexample.html +++ b/connectorexample.html @@ -6,66 +6,51 @@ The Resource Adapter Examples + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    53 The Resource Adapter Examples

    @@ -95,60 +80,43 @@

    53 The Resource Adapter Examples


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/connectorexample001.html b/connectorexample001.html index a6a5c47..ac5274a 100644 --- a/connectorexample001.html +++ b/connectorexample001.html @@ -6,66 +6,51 @@ Overview of the Resource Adapter Examples + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    53.1 Overview of the Resource Adapter Examples

    @@ -82,60 +67,43 @@

    53.1 Overview of the Resource


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/connectorexample002.html b/connectorexample002.html index 2cecb0f..5ad3e12 100644 --- a/connectorexample002.html +++ b/connectorexample002.html @@ -6,66 +6,51 @@ The trading Example + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    53.2 The trading Example

    @@ -93,13 +78,8 @@

    53.2 The trading Example

    -

    Figure 53-1 The trading Example

    -
    -
    -

    Description of Figure 53-1 follows
    -Description of "Figure 53-1 The trading -Example"
    -

    +
    *Figure 53-1 The trading Example *
    +

    This figure shows the trading example components: a deployed WAR and RAR that communicate with the EIS over a TCP socket.

    The trading-eis module is an auxiliary project that resembles a legacy @@ -320,13 +300,8 @@

    53.2.2 Implementing the Outb shown in Figure 53-2.

    -

    Figure 53-2 Architecture of the trading Example

    -
    -
    -

    Description of Figure 53-2 follows
    -Description of "Figure 53-2 Architecture -of the trading Example"
    -

    +
    *Figure 53-2 Architecture of the trading Example *
    +

    This figure shows the classes in each of the modules of the trading example.

    The trading-rar module implements the interfaces listed in @@ -577,60 +552,43 @@

    53.2.3.2 To Run the trading Exam


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/connectorexample003.html b/connectorexample003.html index 41c646e..1b3d193 100644 --- a/connectorexample003.html +++ b/connectorexample003.html @@ -6,66 +6,51 @@ The traffic Example + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    53.3 The traffic Example

    @@ -107,13 +92,8 @@

    53.3 The traffic Example

    -

    Figure 53-3 The traffic Example

    -
    -
    -

    Description of Figure 53-3 follows
    -Description of "Figure 53-3 The traffic -Example"
    -

    +
    *Figure 53-3 The traffic Example *
    +

    This figure shows the components of the traffic example: a WAR communicating with an enterprise bean using a JMS topic, and a RAR communicating with an EIS over a TCP socket.

    The traffic-eis module is an auxiliary project that resembles a legacy @@ -233,13 +213,8 @@

    53.3.2 Implementing the Inbou inbound resource adapter is shown in Figure 53-4.

    -

    Figure 53-4 Architecture of the traffic Example

    -
    -
    -

    Description of Figure 53-4 follows
    -Description of "Figure 53-4 Architecture -of the traffic Example"
    -

    +
    *Figure 53-4 Architecture of the traffic Example *
    +

    This figure shows the classes in each of the components of the traffic example.

    The traffic-rar module implements the interfaces listed in @@ -556,60 +531,43 @@

    53.3.3.2 To Run the traffic Exam


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/cpyr.html b/cpyr.html index 688cf45..af46aa5 100644 --- a/cpyr.html +++ b/cpyr.html @@ -6,56 +6,39 @@ Oracle Legal Notices + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - - + +
    + + + + + - - + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Contents + +
    -
    +
    @@ -220,50 +203,31 @@

    Documentation Accessibility


    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + -
    + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/css/style.css b/css/style.css index 6b31b2a..0cb7229 100644 --- a/css/style.css +++ b/css/style.css @@ -188,10 +188,6 @@ table.tableblock.frame-all.grid-all.spread { font-size: 12px; } -#top { - font-size: 12px; -} - code { font-size:.9em; border: 1px solid #eaeaea; @@ -217,9 +213,32 @@ pre.prettyprint.highlight { background-color: transparent; } -/* trick to select the title */ -#top td:nth-of-type(1) { - font-size: 18px; +#doc-title { + margin-left: 4%; +} + +#top-nav { + margin-left: 4%; + font-size: 12px; +} + +#bottom-nav { + margin-left: 4%; + font-size: 12px; +} + +.vector-font { + color:grey; + font-size: 20px; +} + +#copyright { + padding-top: 10px; + padding-bottom: 4px; + display: table; + margin:0 auto; + color: grey; + font-size: 12px; } /* GENERAL ELEMENT TYPE STYLES */ diff --git a/dukes-bookstore.html b/dukes-bookstore.html index f0673e9..f3c856b 100644 --- a/dukes-bookstore.html +++ b/dukes-bookstore.html @@ -6,66 +6,51 @@ Duke's Bookstore Case Study Example + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    57 Duke’s Bookstore Case Study Example

    @@ -99,60 +84,43 @@

    57 Duke’s Bookstore Case Study


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/dukes-bookstore001.html b/dukes-bookstore001.html index dd18b9e..b331fed 100644 --- a/dukes-bookstore001.html +++ b/dukes-bookstore001.html @@ -6,66 +6,51 @@ Design and Architecture of Duke's Bookstore + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    57.1 Design and Architecture of Duke’s Bookstore

    @@ -184,60 +169,43 @@

    57.1 Design and Architecture


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/dukes-bookstore002.html b/dukes-bookstore002.html index d9a10a7..b0648ec 100644 --- a/dukes-bookstore002.html +++ b/dukes-bookstore002.html @@ -6,66 +6,51 @@ The Duke's Bookstore Interface + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    57.2 The Duke’s Bookstore Interface

    @@ -471,60 +456,43 @@

    57.2.6 Deployment Descri


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/dukes-bookstore003.html b/dukes-bookstore003.html index b24420d..186ee17 100644 --- a/dukes-bookstore003.html +++ b/dukes-bookstore003.html @@ -6,66 +6,51 @@ Running the Duke's Bookstore Case Study Application + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    57.3 Running the Duke’s Bookstore Case Study Application

    @@ -189,60 +174,43 @@

    57.3.3 To Run Duke’s Bookstore


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/dukes-forest.html b/dukes-forest.html index eb32e17..546b36c 100644 --- a/dukes-forest.html +++ b/dukes-forest.html @@ -6,66 +6,51 @@ Duke's Forest Case Study Example + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    59 Duke’s Forest Case Study Example

    @@ -100,60 +85,43 @@

    59 Duke’s Forest Case Study Examp


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/dukes-forest001.html b/dukes-forest001.html index 90cc07d..1984dca 100644 --- a/dukes-forest001.html +++ b/dukes-forest001.html @@ -6,66 +6,51 @@ Overview of the Duke's Forest Case Study Example + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    59.1 Overview of the Duke’s Forest Case Study Example

    @@ -139,60 +124,43 @@

    59.1 Overview of the Du


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/dukes-forest002.html b/dukes-forest002.html index 5d204d2..4740492 100644 --- a/dukes-forest002.html +++ b/dukes-forest002.html @@ -6,66 +6,51 @@ Design and Architecture of Duke's Forest + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    59.2 Design and Architecture of Duke’s Forest

    @@ -77,13 +62,8 @@

    59.2 Design and Architecture of of the Events and Entities projects.

    -

    Figure 59-1 Architecture of the Duke’s Forest Example Application

    -
    -
    -

    Description of Figure 59-1 follows
    -Description of "Figure 59-1 Architecture -of the Duke’s Forest Example Application"
    -

    +
    *Figure 59-1 Architecture of the Duke’s Forest Example Application *
    +

    This figure shows the architecture of the main Duke’s Forest projects and how they use the Events and Entities projects.

    Duke’s Forest uses the following Java EE 7 platform features:

    @@ -223,13 +203,8 @@

    59.2 Design and Architecture of service interact.

    -

    Figure 59-2 Interactions between Duke’s Forest Components

    -
    -
    -

    Description of Figure 59-2 follows
    -Description of "Figure 59-2 Interactions -between Duke’s Forest Components"
    -

    +
    *Figure 59-2 Interactions between Duke’s Forest Components *
    +

    This figure shows the interactions between the Duke’s Store and Duke’s Shipment projects (using REST and HTTP), and between the Duke’s Store and Duke’s Payment projects (using REST and HTTP).

    As illustrated in Figure 59-2, the customer interacts @@ -319,13 +294,8 @@

    59.2.2 The entities Project

    specified using Bean Validation.

    -

    Figure 59-3 Duke’s Forest Database Tables and Their Relationships

    -
    -
    -

    Description of Figure 59-3 follows
    -Description of "Figure 59-3 Duke’s Forest -Database Tables and Their Relationships"
    -

    +
    *Figure 59-3 Duke’s Forest Database Tables and Their Relationships *
    +

    This figure shows the database tables in Duke’s Forest and their relationships.

    The database schema contains eight tables:

    @@ -1022,60 +992,43 @@

    59.2.6.6 Deployment Descr


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/dukes-forest003.html b/dukes-forest003.html index 8a1a8ab..ec11250 100644 --- a/dukes-forest003.html +++ b/dukes-forest003.html @@ -6,66 +6,51 @@ Building and Deploying the Duke's Forest Case Study Application + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    59.3 Building and Deploying the Duke’s Forest Case Study Application

    @@ -174,60 +159,43 @@

    59.3.2 To


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/dukes-forest004.html b/dukes-forest004.html index 37ecf0f..30a170d 100644 --- a/dukes-forest004.html +++ b/dukes-forest004.html @@ -6,61 +6,45 @@ Running the Duke's Forest Application + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    -
    -
    - - + +
    + + + + + - - + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Contents + +
    -
    +

    59.4 Running the Duke’s Forest Application

    @@ -265,55 +249,37 @@

    59.4.4 To Create a New Product


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + -
    + + + Previous + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/dukes-tutoring.html b/dukes-tutoring.html index 34d5786..c1a1e34 100644 --- a/dukes-tutoring.html +++ b/dukes-tutoring.html @@ -6,66 +6,51 @@ Duke's Tutoring Case Study Example + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    58 Duke’s Tutoring Case Study Example

    @@ -101,60 +86,43 @@

    58 Duke’s Tutoring Case Study E


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/dukes-tutoring001.html b/dukes-tutoring001.html index 736f1e8..c936271 100644 --- a/dukes-tutoring001.html +++ b/dukes-tutoring001.html @@ -6,66 +6,51 @@ Design and Architecture of Duke's Tutoring + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    58.1 Design and Architecture of Duke’s Tutoring

    @@ -80,13 +65,8 @@

    58.1 Design and Architecture application.

    -

    Figure 58-1 Architecture of the Duke’s Tutoring Example Application

    -
    -
    -

    Description of Figure 58-1 follows
    -Description of "Figure 58-1 Architecture -of the Duke’s Tutoring Example Application"
    -

    +
    *Figure 58-1 Architecture of the Duke’s Tutoring Example Application *
    +

    Architecture diagram of the Duke’s Tutoring example application. Two clients access the main interface and the admin interface deployed in the web container. These interfaces communicate with enterprise beans deployed in the EJB container. The enterprise beans communicate with the database.

    The Duke’s Tutoring application is organized into two main projects: the @@ -217,60 +197,43 @@

    58.1 Design and Architecture


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/dukes-tutoring002.html b/dukes-tutoring002.html index 554a04c..b57516b 100644 --- a/dukes-tutoring002.html +++ b/dukes-tutoring002.html @@ -6,66 +6,51 @@ Main Interface + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    58.2 Main Interface

    @@ -416,60 +401,43 @@

    58.2.7 Deployment Descrip


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/dukes-tutoring003.html b/dukes-tutoring003.html index 2c16dd5..6c0a696 100644 --- a/dukes-tutoring003.html +++ b/dukes-tutoring003.html @@ -6,66 +6,51 @@ Administration Interface + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    58.3 Administration Interface

    @@ -226,60 +211,43 @@

    58.3.4 Helper Class


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/dukes-tutoring004.html b/dukes-tutoring004.html index 646a585..08be136 100644 --- a/dukes-tutoring004.html +++ b/dukes-tutoring004.html @@ -6,66 +6,51 @@ Running the Duke's Tutoring Case Study Application + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    58.4 Running the Duke’s Tutoring Case Study Application

    @@ -326,60 +311,43 @@

    58.4.1.3 Using Duke’s Tutoring


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/ejb-async.html b/ejb-async.html index 2394056..9a4d25a 100644 --- a/ejb-async.html +++ b/ejb-async.html @@ -6,66 +6,51 @@ Using Asynchronous Method Invocation in Session Beans + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    36 Using Asynchronous Method Invocation in Session Beans

    @@ -90,60 +75,43 @@

    36 Using Asynchro


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/ejb-async001.html b/ejb-async001.html index 3dd7695..5f4d4db 100644 --- a/ejb-async001.html +++ b/ejb-async001.html @@ -6,66 +6,51 @@ Asynchronous Method Invocation + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    36.1 Asynchronous Method Invocation

    @@ -244,60 +229,43 @@

    36.1.2.3 Check


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/ejb-async002.html b/ejb-async002.html index 33d0f69..5ee9236 100644 --- a/ejb-async002.html +++ b/ejb-async002.html @@ -6,66 +6,51 @@ The async Example Application + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    36.2 The async Example Application

    @@ -373,60 +358,43 @@

    36.2.2.2 To Run the as


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/ejb-basicexamples.html b/ejb-basicexamples.html index 4d8688a..5a4d1b4 100644 --- a/ejb-basicexamples.html +++ b/ejb-basicexamples.html @@ -6,66 +6,51 @@ Running the Enterprise Bean Examples + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    34 Running the Enterprise Bean Examples

    @@ -106,60 +91,43 @@

    34 Running the Enterprise Bean Exa


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/ejb-basicexamples001.html b/ejb-basicexamples001.html index 5bdf7c4..1adf3c4 100644 --- a/ejb-basicexamples001.html +++ b/ejb-basicexamples001.html @@ -6,66 +6,51 @@ Overview of the EJB Examples + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    34.1 Overview of the EJB Examples

    @@ -97,60 +82,43 @@

    34.1 Overview of the EJB Examples


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/ejb-basicexamples002.html b/ejb-basicexamples002.html index 9eaa82f..09b85d5 100644 --- a/ejb-basicexamples002.html +++ b/ejb-basicexamples002.html @@ -6,66 +6,51 @@ The cart Example + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    34.2 The cart Example

    @@ -579,60 +564,43 @@

    34.2.5.2 To Run the cart Example Us


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/ejb-basicexamples003.html b/ejb-basicexamples003.html index 9503940..b541860 100644 --- a/ejb-basicexamples003.html +++ b/ejb-basicexamples003.html @@ -6,66 +6,51 @@ A Singleton Session Bean Example: counter + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    34.3 A Singleton Session Bean Example: counter

    @@ -655,60 +640,43 @@

    34.3.3.2 To Run the counter Exam


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/ejb-basicexamples004.html b/ejb-basicexamples004.html index c0ca4a9..86de417 100644 --- a/ejb-basicexamples004.html +++ b/ejb-basicexamples004.html @@ -6,66 +6,51 @@ A Web Service Example: helloservice + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    34.4 A Web Service Example: helloservice

    @@ -350,60 +335,43 @@

    34.4.3.3 To Test the Service witho


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/ejb-basicexamples005.html b/ejb-basicexamples005.html index 06cc8be..95d0939 100644 --- a/ejb-basicexamples005.html +++ b/ejb-basicexamples005.html @@ -6,66 +6,51 @@ Using the Timer Service + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    34.5 Using the Timer Service

    @@ -908,60 +893,43 @@

    34.5.8.3 To Run the Web Client


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/ejb-basicexamples006.html b/ejb-basicexamples006.html index 3a62683..b88b23f 100644 --- a/ejb-basicexamples006.html +++ b/ejb-basicexamples006.html @@ -6,66 +6,51 @@ Handling Exceptions + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    34.6 Handling Exceptions

    @@ -104,60 +89,43 @@

    34.6 Handling Exceptions


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/ejb-embedded.html b/ejb-embedded.html index bdf720e..9902c0e 100644 --- a/ejb-embedded.html +++ b/ejb-embedded.html @@ -6,66 +6,51 @@ Using the Embedded Enterprise Bean Container + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    35 Using the Embedded Enterprise Bean Container

    @@ -96,60 +81,43 @@

    35 Using the Embedded Ente


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/ejb-embedded001.html b/ejb-embedded001.html index 1864e5d..deddc0b 100644 --- a/ejb-embedded001.html +++ b/ejb-embedded001.html @@ -6,66 +6,51 @@ Overview of the Embedded Enterprise Bean Container + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    35.1 Overview of the Embedded Enterprise Bean Container

    @@ -88,60 +73,43 @@

    35.1 Overview of the


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/ejb-embedded002.html b/ejb-embedded002.html index ef85c18..15c1abd 100644 --- a/ejb-embedded002.html +++ b/ejb-embedded002.html @@ -6,66 +6,51 @@ Developing Embeddable Enterprise Bean Applications + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    35.2 Developing Embeddable Enterprise Bean Applications

    @@ -308,60 +293,43 @@

    35.2.4 Shutting Down the En


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/ejb-embedded003.html b/ejb-embedded003.html index 089519c..4b42ece 100644 --- a/ejb-embedded003.html +++ b/ejb-embedded003.html @@ -6,66 +6,51 @@ The standalone Example Application + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    35.3 The standalone Example Application

    @@ -248,60 +233,43 @@

    35.3.3 To Run the


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/ejb-gettingstarted.html b/ejb-gettingstarted.html index e7029c7..b5671d8 100644 --- a/ejb-gettingstarted.html +++ b/ejb-gettingstarted.html @@ -6,66 +6,51 @@ Getting Started with Enterprise Beans + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    33 Getting Started with Enterprise Beans

    @@ -99,60 +84,43 @@

    33 Getting Started with Enterpris


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/ejb-gettingstarted001.html b/ejb-gettingstarted001.html index a9d2139..3032439 100644 --- a/ejb-gettingstarted001.html +++ b/ejb-gettingstarted001.html @@ -6,66 +6,51 @@ Starting With Enterprise Beans + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    33.1 Starting With Enterprise Beans

    @@ -124,60 +109,43 @@

    33.1 Starting With Enterprise Beans


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/ejb-gettingstarted002.html b/ejb-gettingstarted002.html index 34dd20f..f505f2a 100644 --- a/ejb-gettingstarted002.html +++ b/ejb-gettingstarted002.html @@ -6,66 +6,51 @@ Creating the Enterprise Bean + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    33.2 Creating the Enterprise Bean

    @@ -316,60 +301,43 @@

    33.2.3.2 To Run the converter


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/ejb-gettingstarted003.html b/ejb-gettingstarted003.html index 888dc58..a9c5589 100644 --- a/ejb-gettingstarted003.html +++ b/ejb-gettingstarted003.html @@ -6,66 +6,51 @@ Modifying the Java EE Application + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    33.3 Modifying the Java EE Application

    @@ -130,60 +115,43 @@

    33.3.1 To Modify a Class File


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/ejb-intro.html b/ejb-intro.html index 677b7c4..2e51cb3 100644 --- a/ejb-intro.html +++ b/ejb-intro.html @@ -6,66 +6,51 @@ Enterprise Beans + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    32 Enterprise Beans

    @@ -115,60 +100,43 @@

    32 Enterprise Beans


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/ejb-intro001.html b/ejb-intro001.html index 3018030..7d1fdc2 100644 --- a/ejb-intro001.html +++ b/ejb-intro001.html @@ -6,66 +6,51 @@ What Is an Enterprise Bean? + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    32.1 What Is an Enterprise Bean?

    @@ -188,60 +173,43 @@

    32.1.3 Types of Enterprise Beans


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/ejb-intro002.html b/ejb-intro002.html index af76b28..2098d9f 100644 --- a/ejb-intro002.html +++ b/ejb-intro002.html @@ -6,66 +6,51 @@ What Is a Session Bean? + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    32.2 What Is a Session Bean?

    @@ -269,60 +254,43 @@

    32.2.2 When to Use Session Beans


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/ejb-intro003.html b/ejb-intro003.html index 5e14ebd..647bd12 100644 --- a/ejb-intro003.html +++ b/ejb-intro003.html @@ -6,66 +6,51 @@ What Is a Message-Driven Bean? + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    32.3 What Is a Message-Driven Bean?

    @@ -197,60 +182,43 @@

    32.3.2 When to Use Message-Driven Bean


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/ejb-intro004.html b/ejb-intro004.html index b4d2adc..a7f58b8 100644 --- a/ejb-intro004.html +++ b/ejb-intro004.html @@ -6,66 +6,51 @@ Accessing Enterprise Beans + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    32.4 Accessing Enterprise Beans

    @@ -482,13 +467,8 @@

    32.4.4 Remote Clients

    client’s view of an enterprise bean.

    -

    Figure 32-1 Interfaces for an Enterprise Bean with Remote Access

    -
    -
    -

    Description of Figure 32-1 follows
    -Description of "Figure 32-1 Interfaces -for an Enterprise Bean with Remote Access"
    -

    +
    *Figure 32-1 Interfaces for an Enterprise Bean with Remote Access *
    +

    Diagram showing a remote client accessing an enterprise bean’s methods through its remote interface.

    Client access to an enterprise bean that implements a remote business @@ -599,60 +579,43 @@

    32.4.6.2 Granularity of Accessed Data


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/ejb-intro005.html b/ejb-intro005.html index 11a43f8..2bc1a5b 100644 --- a/ejb-intro005.html +++ b/ejb-intro005.html @@ -6,66 +6,51 @@ The Contents of an Enterprise Bean + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    32.5 The Contents of an Enterprise Bean

    @@ -101,60 +86,43 @@

    32.5 The Contents of an Enterprise B


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/ejb-intro006.html b/ejb-intro006.html index f889f90..a669b92 100644 --- a/ejb-intro006.html +++ b/ejb-intro006.html @@ -6,66 +6,51 @@ Naming Conventions for Enterprise Beans + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    32.6 Naming Conventions for Enterprise Beans

    @@ -115,60 +100,43 @@

    32.6 Naming Conventions for Ent


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/ejb-intro007.html b/ejb-intro007.html index e50f42b..773ae0e 100644 --- a/ejb-intro007.html +++ b/ejb-intro007.html @@ -6,66 +6,51 @@ The Lifecycles of Enterprise Beans + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    32.7 The Lifecycles of Enterprise Beans

    @@ -114,13 +99,8 @@

    32.7.1 The Lifecycle of a Stat its business methods invoked by the client.

    -

    Figure 32-2 Lifecycle of a Stateful Session Bean

    -
    -
    -

    Description of Figure 32-2 follows
    -Description of "Figure 32-2 Lifecycle of -a Stateful Session Bean"
    -

    +
    *Figure 32-2 Lifecycle of a Stateful Session Bean *
    +

    Diagram showing the lifecycle of a stateful session bean.

    While in the ready stage, the EJB container may decide to deactivate, or @@ -155,13 +135,8 @@

    32.7.2 The Lifecycle of a Sta session bean.

    -

    Figure 32-3 Lifecycle of a Stateless or Singleton Session Bean

    -
    -
    -

    Description of Figure 32-3 follows
    -Description of "Figure 32-3 Lifecycle of -a Stateless or Singleton Session Bean"
    -

    +
    *Figure 32-3 Lifecycle of a Stateless or Singleton Session Bean *
    +

    Diagram showing the lifecycle of a stateless or singleton session bean.

    The EJB container typically creates and maintains a pool of stateless @@ -204,13 +179,8 @@

    32.7.4 The Lifecycle of a Messag message-driven bean.

    -

    Figure 32-4 Lifecycle of a Message-Driven Bean

    -
    -
    -

    Description of Figure 32-4 follows
    -Description of "Figure 32-4 Lifecycle of -a Message-Driven Bean"
    -

    +
    *Figure 32-4 Lifecycle of a Message-Driven Bean *
    +

    Diagram showing the lifecycle of a message-driven bean.

    The EJB container usually creates a pool of message-driven bean @@ -241,60 +211,43 @@

    32.7.4 The Lifecycle of a Messag


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/ejb-intro008.html b/ejb-intro008.html index 82decdb..2530610 100644 --- a/ejb-intro008.html +++ b/ejb-intro008.html @@ -6,66 +6,51 @@ Further Information about Enterprise Beans + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    32.8 Further Information about Enterprise Beans

    @@ -92,60 +77,43 @@

    32.8 Further Information abo


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_001.html b/img_text/javaeett_dt_001.html index 15d63f0..e365b30 100644 --- a/img_text/javaeett_dt_001.html +++ b/img_text/javaeett_dt_001.html @@ -6,56 +6,39 @@ Description of the illustration javaeett_dt_001 + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - - + +
    + + + + + - - + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Contents + +
    -
    +

    Diagram of multitiered application structure, including client tier, web tier, business tier, and EIS tier.

    @@ -67,50 +50,31 @@

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + -
    + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_002.html b/img_text/javaeett_dt_002.html index 51d75c4..501920b 100644 --- a/img_text/javaeett_dt_002.html +++ b/img_text/javaeett_dt_002.html @@ -6,56 +6,39 @@ Description of the illustration javaeett_dt_002 + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - - + +
    + + + + + - - + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Contents + +
    -
    +

    Diagram of client-server communication. Application clients access the business tier directly. Browsers, web pages, and applets access the web @@ -68,50 +51,31 @@


    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + -
    + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_003.html b/img_text/javaeett_dt_003.html index 48ccd27..7ef5e04 100644 --- a/img_text/javaeett_dt_003.html +++ b/img_text/javaeett_dt_003.html @@ -6,56 +6,39 @@ Description of the illustration javaeett_dt_003 + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - - + +
    + + + + + - - + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Contents + +
    -
    +

    Diagram of client-server communication showing detail of JavaBeans components and web pages in the web tier.

    @@ -67,50 +50,31 @@

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + -
    + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_004.html b/img_text/javaeett_dt_004.html index bc04b49..a6f3819 100644 --- a/img_text/javaeett_dt_004.html +++ b/img_text/javaeett_dt_004.html @@ -6,56 +6,39 @@ Description of the illustration javaeett_dt_004 + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - - + +
    + + + + + - - + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Contents + +
    -
    +

    Diagram of client-server communication showing detail of entities, session beans, and message-driven beans in the business tier.

    @@ -67,50 +50,31 @@

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + -
    + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_005.html b/img_text/javaeett_dt_005.html index 6b28059..40e29a2 100644 --- a/img_text/javaeett_dt_005.html +++ b/img_text/javaeett_dt_005.html @@ -6,56 +6,39 @@ Description of the illustration javaeett_dt_005 + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - - + +
    + + + + + - - + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Contents + +
    -
    +

    Diagram of client-server communication showing servlets and web pages in the web tier and enterprise beans in the business tier.

    @@ -67,50 +50,31 @@

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + -
    + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_006.html b/img_text/javaeett_dt_006.html index f8a751a..cddd4aa 100644 --- a/img_text/javaeett_dt_006.html +++ b/img_text/javaeett_dt_006.html @@ -6,56 +6,39 @@ Description of the illustration javaeett_dt_006 + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - - + +
    + + + + + - - + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Contents + +
    -
    +

    Diagram of Java EE containers and their relationships

    @@ -66,50 +49,31 @@

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + -
    + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_007.html b/img_text/javaeett_dt_007.html index b070e57..1fb4856 100644 --- a/img_text/javaeett_dt_007.html +++ b/img_text/javaeett_dt_007.html @@ -6,56 +6,39 @@ Description of the illustration javaeett_dt_007 + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - - + +
    + + + + + - - + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Contents + +
    -
    +

    Diagram of Java EE APIs in the web container

    @@ -66,50 +49,31 @@

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + -
    + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_008.html b/img_text/javaeett_dt_008.html index a76453f..3e36b55 100644 --- a/img_text/javaeett_dt_008.html +++ b/img_text/javaeett_dt_008.html @@ -6,56 +6,39 @@ Description of the illustration javaeett_dt_008 + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - - + +
    + + + + + - - + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Contents + +
    -
    +

    Diagram of Java EE APIs in the EJB container

    @@ -66,50 +49,31 @@

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + -
    + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_009.html b/img_text/javaeett_dt_009.html index c98ebad..8054e75 100644 --- a/img_text/javaeett_dt_009.html +++ b/img_text/javaeett_dt_009.html @@ -6,56 +6,39 @@ Description of the illustration javaeett_dt_009 + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - - + +
    + + + + + - - + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Contents + +
    -
    +

    Diagram of Java EE APIs in the application client container

    @@ -66,50 +49,31 @@

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + -
    + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_010.html b/img_text/javaeett_dt_010.html index 45915b9..86c06cd 100644 --- a/img_text/javaeett_dt_010.html +++ b/img_text/javaeett_dt_010.html @@ -6,56 +6,39 @@ Description of the illustration javaeett_dt_010 + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - - + +
    + + + + + - - + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Contents + +
    -
    +

    Diagram of EAR file structure. META-INF and web, application client, EJB, and resource adapter modules are under the assembly root.

    @@ -67,50 +50,31 @@

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + -
    + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_011.html b/img_text/javaeett_dt_011.html index 3a51c4f..d313764 100644 --- a/img_text/javaeett_dt_011.html +++ b/img_text/javaeett_dt_011.html @@ -6,56 +6,39 @@ Description of the illustration javaeett_dt_011 + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - - + +
    + + + + + - - + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Contents + +
    -
    +

    Diagram showing the structure and contents of an enterprise bean JAR file.

    @@ -67,50 +50,31 @@

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + -
    + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_012.html b/img_text/javaeett_dt_012.html index 63cf0e6..69d5092 100644 --- a/img_text/javaeett_dt_012.html +++ b/img_text/javaeett_dt_012.html @@ -6,56 +6,39 @@ Description of the illustration javaeett_dt_012 + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - - + +
    + + + + + - - + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Contents + +
    -
    +

    Diagram of web module structure. WEB-INF and web pages are under the root. Under WEB-INF are descriptors and the lib and classes directories.

    @@ -67,50 +50,31 @@

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + -
    + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_013.html b/img_text/javaeett_dt_013.html index b0eb75b..5c46118 100644 --- a/img_text/javaeett_dt_013.html +++ b/img_text/javaeett_dt_013.html @@ -6,56 +6,39 @@ Description of the illustration javaeett_dt_013 + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - - + +
    + + + + + - - + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Contents + +
    -
    +

    Diagram of web application request handling. Clients and servlets communicate using HttpServletRequest and HttpServletResponse.

    @@ -67,50 +50,31 @@

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + -
    + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_014.html b/img_text/javaeett_dt_014.html index fdb7f0b..f028f72 100644 --- a/img_text/javaeett_dt_014.html +++ b/img_text/javaeett_dt_014.html @@ -6,56 +6,39 @@ Description of the illustration javaeett_dt_014 + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - - + +
    + + + + + - - + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Contents + +
    -
    +

    Diagram that shows a browser accessing the myfacelet.xhtml page using an HTTP Request and the server sending the rendered HTML page using an HTTP @@ -68,50 +51,31 @@


    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + -
    + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_015.html b/img_text/javaeett_dt_015.html index 689ac1b..99851e2 100644 --- a/img_text/javaeett_dt_015.html +++ b/img_text/javaeett_dt_015.html @@ -6,56 +6,39 @@ Description of the illustration javaeett_dt_015 + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - - + +
    + + + + + - - + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Contents + +
    -
    +

    Diagram of web application technologies. JavaServer Pages, the JSP Standard Tag Library, and JavaServer Faces rest on Java Servlet @@ -68,50 +51,31 @@


    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + -
    + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_016.html b/img_text/javaeett_dt_016.html index 1bd8b3b..797b079 100644 --- a/img_text/javaeett_dt_016.html +++ b/img_text/javaeett_dt_016.html @@ -6,56 +6,39 @@ Description of the illustration javaeett_dt_016 + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - - + +
    + + + + + - - + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Contents + +
    -
    +

    Flow diagram of Faces request and Faces response, including event and validation processing, error handling, model updating, application @@ -68,50 +51,31 @@


    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + -
    + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_017.html b/img_text/javaeett_dt_017.html index 315314e..bdb5550 100644 --- a/img_text/javaeett_dt_017.html +++ b/img_text/javaeett_dt_017.html @@ -6,56 +6,39 @@ Description of the illustration javaeett_dt_017 + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - - + +
    + + + + + - - + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Contents + +
    -
    +

    This figure shows two Faces flows, Flow A and Flow B. Each has a start node and two additional pages. Each has an associated managed bean. Each @@ -69,50 +52,31 @@


    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + -
    + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_018.html b/img_text/javaeett_dt_018.html index 7d050af..dbce6b2 100644 --- a/img_text/javaeett_dt_018.html +++ b/img_text/javaeett_dt_018.html @@ -6,56 +6,39 @@ Description of the illustration javaeett_dt_018 + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - - + +
    + + + + + - - + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Contents + +
    -
    +

    Diagram of filter-to-servlet mapping with filters F1-F3 and servlets S1-S3. F1 filters S1-S3, then F2 filters S2, then F3 filters S1 and S2.

    @@ -67,50 +50,31 @@

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + -
    + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_019.html b/img_text/javaeett_dt_019.html index cac70f5..a7e1ac4 100644 --- a/img_text/javaeett_dt_019.html +++ b/img_text/javaeett_dt_019.html @@ -6,56 +6,39 @@ Description of the illustration javaeett_dt_019 + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - - + +
    + + + + + - - + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Contents + +
    -
    +

    Diagram showing a client and web service communicating through a SOAP message.

    @@ -67,50 +50,31 @@

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + -
    + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_020.html b/img_text/javaeett_dt_020.html index feba22c..301552e 100644 --- a/img_text/javaeett_dt_020.html +++ b/img_text/javaeett_dt_020.html @@ -6,56 +6,39 @@ Description of the illustration javaeett_dt_020 + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - - + +
    + + + + + - - + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Contents + +
    -
    +

    Diagram showing a remote client accessing an enterprise bean’s methods through its remote interface.

    @@ -67,50 +50,31 @@

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + -
    + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_021.html b/img_text/javaeett_dt_021.html index 6b691b1..35cc741 100644 --- a/img_text/javaeett_dt_021.html +++ b/img_text/javaeett_dt_021.html @@ -6,56 +6,39 @@ Description of the illustration javaeett_dt_021 + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - - + +
    + + + + + - - + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Contents + +
    -
    +

    Diagram showing the lifecycle of a stateful session bean.

    @@ -66,50 +49,31 @@

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + -
    + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_022.html b/img_text/javaeett_dt_022.html index 8d6d577..2ee2add 100644 --- a/img_text/javaeett_dt_022.html +++ b/img_text/javaeett_dt_022.html @@ -6,56 +6,39 @@ Description of the illustration javaeett_dt_022 + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - - + +
    + + + + + - - + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Contents + +
    -
    +

    Diagram showing the lifecycle of a stateless or singleton session bean.

    @@ -66,50 +49,31 @@

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + -
    + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_023.html b/img_text/javaeett_dt_023.html index 5ab6457..fcec6b1 100644 --- a/img_text/javaeett_dt_023.html +++ b/img_text/javaeett_dt_023.html @@ -6,56 +6,39 @@ Description of the illustration javaeett_dt_023 + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - - + +
    + + + + + - - + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Contents + +
    -
    +

    Diagram showing the lifecycle of a message-driven bean.

    @@ -66,50 +49,31 @@

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + -
    + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_024.html b/img_text/javaeett_dt_024.html index 32fe165..e2d37d8 100644 --- a/img_text/javaeett_dt_024.html +++ b/img_text/javaeett_dt_024.html @@ -6,56 +6,39 @@ Description of the illustration javaeett_dt_024 + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - - + +
    + + + + + - - + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Contents + +
    -
    +

    Diagram showing the database schema for the order application

    @@ -66,50 +49,31 @@

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + -
    + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_025.html b/img_text/javaeett_dt_025.html index 2868bd1..01e89db 100644 --- a/img_text/javaeett_dt_025.html +++ b/img_text/javaeett_dt_025.html @@ -6,56 +6,39 @@ Description of the illustration javaeett_dt_025 + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - - + +
    + + + + + - - + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Contents + +
    -
    +

    Diagram showing the database schema for the roster application

    @@ -66,50 +49,31 @@

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + -
    + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_026.html b/img_text/javaeett_dt_026.html index cda8d19..4973142 100644 --- a/img_text/javaeett_dt_026.html +++ b/img_text/javaeett_dt_026.html @@ -6,56 +6,39 @@ Description of the illustration javaeett_dt_026 + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - - + +
    + + + + + - - + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Contents + +
    -
    +

    Diagram showing messaging between various departments in an enterprise

    @@ -66,50 +49,31 @@

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + -
    + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_027.html b/img_text/javaeett_dt_027.html index a40b706..8aa7226 100644 --- a/img_text/javaeett_dt_027.html +++ b/img_text/javaeett_dt_027.html @@ -6,56 +6,39 @@ Description of the illustration javaeett_dt_027 + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - - + +
    + + + + + - - + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Contents + +
    -
    +

    Diagram of JMS API architecture, showing administrative tool, JMS client, JNDI namespace, and JMS provider

    @@ -67,50 +50,31 @@

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + -
    + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_028.html b/img_text/javaeett_dt_028.html index 3609061..4657c94 100644 --- a/img_text/javaeett_dt_028.html +++ b/img_text/javaeett_dt_028.html @@ -6,56 +6,39 @@ Description of the illustration javaeett_dt_028 + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - - + +
    + + + + + - - + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Contents + +
    -
    +

    Diagram of point-to-point messaging, showing Client 1 sending a message to a queue, and Client 2 consuming and acknowledging the message

    @@ -67,50 +50,31 @@

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + -
    + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_029.html b/img_text/javaeett_dt_029.html index 3fe4337..69b0d2d 100644 --- a/img_text/javaeett_dt_029.html +++ b/img_text/javaeett_dt_029.html @@ -6,56 +6,39 @@ Description of the illustration javaeett_dt_029 + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - - + +
    + + + + + - - + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Contents + +
    -
    +

    Diagram of pub/sub messaging, showing Client 1 sending a message to a topic, and the message being delivered to two consumers to the topic

    @@ -67,50 +50,31 @@

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + -
    + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_030.html b/img_text/javaeett_dt_030.html index ee7cd0b..103f30f 100644 --- a/img_text/javaeett_dt_030.html +++ b/img_text/javaeett_dt_030.html @@ -6,56 +6,39 @@ Description of the illustration javaeett_dt_030 + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - - + +
    + + + + + - - + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Contents + +
    -
    +

    Diagram of the JMS API programming model: connection factory, JMSContext, connection, session, message producer, message consumer, @@ -68,50 +51,31 @@


    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + -
    + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_031.html b/img_text/javaeett_dt_031.html index dcf09d1..e66cd62 100644 --- a/img_text/javaeett_dt_031.html +++ b/img_text/javaeett_dt_031.html @@ -6,56 +6,39 @@ Description of the illustration javaeett_dt_031 + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - - + +
    + + + + + - - + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Contents + +
    -
    +

    Diagram showing messages being lost when nondurable subscriptions are used

    @@ -67,50 +50,31 @@

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + -
    + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_032.html b/img_text/javaeett_dt_032.html index 4e5531e..5b19e13 100644 --- a/img_text/javaeett_dt_032.html +++ b/img_text/javaeett_dt_032.html @@ -6,56 +6,39 @@ Description of the illustration javaeett_dt_032 + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - - + +
    + + + + + - - + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Contents + +
    -
    +

    Diagram showing messages being preserved when durable subscriptions are used

    @@ -67,50 +50,31 @@

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + -
    + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_033.html b/img_text/javaeett_dt_033.html index d084502..e8d4390 100644 --- a/img_text/javaeett_dt_033.html +++ b/img_text/javaeett_dt_033.html @@ -6,56 +6,39 @@ Description of the illustration javaeett_dt_033 + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - - + +
    + + + + + - - + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Contents + +
    -
    +

    Diagram of local transactions, showing separate transactions for sending and consuming a message

    @@ -67,50 +50,31 @@

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + -
    + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_034.html b/img_text/javaeett_dt_034.html index 76e1f43..7844263 100644 --- a/img_text/javaeett_dt_034.html +++ b/img_text/javaeett_dt_034.html @@ -6,56 +6,39 @@ Description of the illustration javaeett_dt_034 + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - - + +
    + + + + + - - + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Contents + +
    -
    +

    Diagram of steps in transaction example

    @@ -66,50 +49,31 @@

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + -
    + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_035.html b/img_text/javaeett_dt_035.html index d5b6708..d482c5c 100644 --- a/img_text/javaeett_dt_035.html +++ b/img_text/javaeett_dt_035.html @@ -6,56 +6,39 @@ Description of the illustration javaeett_dt_035 + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - - + +
    + + + + + - - + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Contents + +
    -
    +

    Diagram showing a web application in which a managed bean sends a message to a queue, and another managed bean receives the message from @@ -68,50 +51,31 @@


    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + -
    + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_036.html b/img_text/javaeett_dt_036.html index 4122fec..38f3ddb 100644 --- a/img_text/javaeett_dt_036.html +++ b/img_text/javaeett_dt_036.html @@ -6,56 +6,39 @@ Description of the illustration javaeett_dt_036 + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - - + +
    + + + + + - - + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Contents + +
    -
    +

    Diagram of application showing an application client sending a message to a queue, and the message being delivered to a message-driven bean

    @@ -67,50 +50,31 @@

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + -
    + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_037.html b/img_text/javaeett_dt_037.html index 0958088..a1f7e64 100644 --- a/img_text/javaeett_dt_037.html +++ b/img_text/javaeett_dt_037.html @@ -6,56 +6,39 @@ Description of the illustration javaeett_dt_037 + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - - + +
    + + + + + - - + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Contents + +
    -
    +

    Diagram of application showing an application client calling a session bean, which sends messages that are processed by a message-driven bean

    @@ -67,50 +50,31 @@

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + -
    + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_038.html b/img_text/javaeett_dt_038.html index 3ace58e..5fc70e5 100644 --- a/img_text/javaeett_dt_038.html +++ b/img_text/javaeett_dt_038.html @@ -6,56 +6,39 @@ Description of the illustration javaeett_dt_038 + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - - + +
    + + + + + - - + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Contents + +
    -
    +

    Diagram of application showing an application client, two message-driven beans, and an entity, as well as the associated topic and queue

    @@ -67,50 +50,31 @@

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + -
    + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_039.html b/img_text/javaeett_dt_039.html index 4598f99..0e375cf 100644 --- a/img_text/javaeett_dt_039.html +++ b/img_text/javaeett_dt_039.html @@ -6,56 +6,39 @@ Description of the illustration javaeett_dt_039 + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - - + +
    + + + + + - - + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Contents + +
    -
    +

    Diagram of initial request from web client to web server for access to a protected resource

    @@ -67,50 +50,31 @@

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + -
    + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_040.html b/img_text/javaeett_dt_040.html index 7ce97f8..9b47489 100644 --- a/img_text/javaeett_dt_040.html +++ b/img_text/javaeett_dt_040.html @@ -6,56 +6,39 @@ Description of the illustration javaeett_dt_040 + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - - + +
    + + + + + - - + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Contents + +
    -
    +

    Diagram of initial authentication: server sends form to client, which sends authentication data to server for validation

    @@ -67,50 +50,31 @@

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + -
    + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_041.html b/img_text/javaeett_dt_041.html index cca6bd8..7c3c5e3 100644 --- a/img_text/javaeett_dt_041.html +++ b/img_text/javaeett_dt_041.html @@ -6,56 +6,39 @@ Description of the illustration javaeett_dt_041 + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - - + +
    + + + + + - - + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Contents + +
    -
    +

    Diagram of URL authorization

    @@ -66,50 +49,31 @@

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + -
    + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_042.html b/img_text/javaeett_dt_042.html index 12a5e83..78470b1 100644 --- a/img_text/javaeett_dt_042.html +++ b/img_text/javaeett_dt_042.html @@ -6,56 +6,39 @@ Description of the illustration javaeett_dt_042 + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - - + +
    + + + + + - - + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Contents + +
    -
    +

    Diagram of request fulfillment, showing server returning result to client

    @@ -67,50 +50,31 @@

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + -
    + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_043.html b/img_text/javaeett_dt_043.html index 4aff2ff..847046d 100644 --- a/img_text/javaeett_dt_043.html +++ b/img_text/javaeett_dt_043.html @@ -6,56 +6,39 @@ Description of the illustration javaeett_dt_043 + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - - + +
    + + + + + - - + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Contents + +
    -
    +

    Diagram of authorization process between web component and enterprise bean

    @@ -67,50 +50,31 @@

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + -
    + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_044.html b/img_text/javaeett_dt_044.html index 881f31c..411a767 100644 --- a/img_text/javaeett_dt_044.html +++ b/img_text/javaeett_dt_044.html @@ -6,56 +6,39 @@ Description of the illustration javaeett_dt_044 + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - - + +
    + + + + + - - + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Contents + +
    -
    +

    Diagram of role mapping, showing creation of users and groups, definition of roles, and mapping of roles to users and groups

    @@ -67,50 +50,31 @@

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + -
    + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_045.html b/img_text/javaeett_dt_045.html index 7edef1e..81f1ea6 100644 --- a/img_text/javaeett_dt_045.html +++ b/img_text/javaeett_dt_045.html @@ -6,56 +6,39 @@ Description of the illustration javaeett_dt_045 + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - - + +
    + + + + + - - + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Contents + +
    -
    +

    Diagram of four steps in HTTP basic authentication between client and server

    @@ -67,50 +50,31 @@

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + -
    + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_046.html b/img_text/javaeett_dt_046.html index cf9ff62..dda2f55 100644 --- a/img_text/javaeett_dt_046.html +++ b/img_text/javaeett_dt_046.html @@ -6,56 +6,39 @@ Description of the illustration javaeett_dt_046 + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - - + +
    + + + + + - - + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Contents + +
    -
    +

    Diagram of four steps in form-based authentication between client and server

    @@ -67,50 +50,31 @@

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + -
    + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_047.html b/img_text/javaeett_dt_047.html index 013e667..d3d75d0 100644 --- a/img_text/javaeett_dt_047.html +++ b/img_text/javaeett_dt_047.html @@ -6,56 +6,39 @@ Description of the illustration javaeett_dt_047 + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - - + +
    + + + + + - - + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Contents + +
    -
    +

    Diagram of security identity propagation from client to intermediate container to target container

    @@ -67,50 +50,31 @@

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + -
    + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_048.html b/img_text/javaeett_dt_048.html index d79f722..edc8912 100644 --- a/img_text/javaeett_dt_048.html +++ b/img_text/javaeett_dt_048.html @@ -6,56 +6,39 @@ Description of the illustration javaeett_dt_048 + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - - + +
    + + + + + - - + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Contents + +
    -
    +

    Diagram of six steps in mutual authentication with certificates

    @@ -66,50 +49,31 @@

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + -
    + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_049.html b/img_text/javaeett_dt_049.html index 5bc5743..e2d885a 100644 --- a/img_text/javaeett_dt_049.html +++ b/img_text/javaeett_dt_049.html @@ -6,56 +6,39 @@ Description of the illustration javaeett_dt_049 + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - - + +
    + + + + + - - + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Contents + +
    -
    +

    Diagram of five steps in mutual authentication with user name and password

    @@ -67,50 +50,31 @@

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + -
    + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_050.html b/img_text/javaeett_dt_050.html index b8b7a20..0f26de5 100644 --- a/img_text/javaeett_dt_050.html +++ b/img_text/javaeett_dt_050.html @@ -6,56 +6,39 @@ Description of the illustration javaeett_dt_050 + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - - + +
    + + + + + - - + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Contents + +
    -
    +

    A diagram showing a transaction between two beans.

    @@ -66,50 +49,31 @@

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + -
    + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_051.html b/img_text/javaeett_dt_051.html index 5c5e9ef..2082a63 100644 --- a/img_text/javaeett_dt_051.html +++ b/img_text/javaeett_dt_051.html @@ -6,56 +6,39 @@ Description of the illustration javaeett_dt_051 + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - - + +
    + + + + + - - + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Contents + +
    -
    +

    A diagram showing Bean-A updating databases X and Y, and Bean-B updating database Z.

    @@ -67,50 +50,31 @@

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + -
    + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_052.html b/img_text/javaeett_dt_052.html index 26701c7..1108dff 100644 --- a/img_text/javaeett_dt_052.html +++ b/img_text/javaeett_dt_052.html @@ -6,56 +6,39 @@ Description of the illustration javaeett_dt_052 + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - - + +
    + + + + + - - + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Contents + +
    -
    +

    A diagram showing Bean-A on one Java EE server updating database X, and Bean-B on another Java EE server updating database Y.

    @@ -67,50 +50,31 @@

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + -
    + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_053.html b/img_text/javaeett_dt_053.html index 41f4cb8..1e0474a 100644 --- a/img_text/javaeett_dt_053.html +++ b/img_text/javaeett_dt_053.html @@ -6,56 +6,39 @@ Description of the illustration javaeett_dt_053 + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - - + +
    + + + + + - - + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Contents + +
    -
    +

    Resource Adapter Contracts

    @@ -66,50 +49,31 @@

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + -
    + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_054.html b/img_text/javaeett_dt_054.html index 70569eb..47f9030 100644 --- a/img_text/javaeett_dt_054.html +++ b/img_text/javaeett_dt_054.html @@ -6,56 +6,39 @@ Description of the illustration javaeett_dt_054 + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - - + +
    + + + + + - - + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Contents + +
    -
    +

    This figure shows the trading example components: a deployed WAR and RAR that communicate with the EIS over a TCP socket.

    @@ -67,50 +50,31 @@

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + -
    + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_055.html b/img_text/javaeett_dt_055.html index 07d3f79..ef269d4 100644 --- a/img_text/javaeett_dt_055.html +++ b/img_text/javaeett_dt_055.html @@ -6,56 +6,39 @@ Description of the illustration javaeett_dt_055 + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - - + +
    + + + + + - - + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Contents + +
    -
    +

    This figure shows the classes in each of the modules of the trading example.

    @@ -67,50 +50,31 @@

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + -
    + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_056.html b/img_text/javaeett_dt_056.html index dddfbbe..ee32b24 100644 --- a/img_text/javaeett_dt_056.html +++ b/img_text/javaeett_dt_056.html @@ -6,56 +6,39 @@ Description of the illustration javaeett_dt_056 + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - - + +
    + + + + + - - + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Contents + +
    -
    +

    This figure shows the components of the traffic example: a WAR communicating with an enterprise bean using a JMS topic, and a RAR @@ -68,50 +51,31 @@


    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + -
    + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_057.html b/img_text/javaeett_dt_057.html index acff391..d5cc2b1 100644 --- a/img_text/javaeett_dt_057.html +++ b/img_text/javaeett_dt_057.html @@ -6,56 +6,39 @@ Description of the illustration javaeett_dt_057 + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - - + +
    + + + + + - - + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Contents + +
    -
    +

    This figure shows the classes in each of the components of the traffic example.

    @@ -67,50 +50,31 @@

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + -
    + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_058.html b/img_text/javaeett_dt_058.html index a8a6bc2..e39de71 100644 --- a/img_text/javaeett_dt_058.html +++ b/img_text/javaeett_dt_058.html @@ -6,56 +6,39 @@ Description of the illustration javaeett_dt_058 + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - - + +
    + + + + + - - + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Contents + +
    -
    +

    This figure shows a batch job that contains two chunk steps: step A and step B. Step A has the three parts of a chunk-oriented step: input @@ -70,50 +53,31 @@


    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + -
    + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_059.html b/img_text/javaeett_dt_059.html index be5af93..7318fdd 100644 --- a/img_text/javaeett_dt_059.html +++ b/img_text/javaeett_dt_059.html @@ -6,56 +6,39 @@ Description of the illustration javaeett_dt_059 + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - - + +
    + + + + + - - + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Contents + +
    -
    +

    This figure shows a batch job that contains two chunk steps, a task step and a decision element. The job starts with chunk step A, continues with @@ -71,50 +54,31 @@


    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + -
    + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_060.html b/img_text/javaeett_dt_060.html index 759262b..36e6894 100644 --- a/img_text/javaeett_dt_060.html +++ b/img_text/javaeett_dt_060.html @@ -6,56 +6,39 @@ Description of the illustration javaeett_dt_060 + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - - + +
    + + + + + - - + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Contents + +
    -
    +

    The figure shows the architecture of the taskcreator example. The JavaServer Faces page invokes methods on a CDI-managed bean, which @@ -70,50 +53,31 @@


    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + -
    + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_061.html b/img_text/javaeett_dt_061.html index 391fd95..6d579a1 100644 --- a/img_text/javaeett_dt_061.html +++ b/img_text/javaeett_dt_061.html @@ -6,56 +6,39 @@ Description of the illustration javaeett_dt_061 + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - - + +
    + + + + + - - + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Contents + +
    -
    +

    Architecture diagram of the Duke’s Tutoring example application. Two clients access the main interface and the admin interface deployed in @@ -70,50 +53,31 @@


    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + -
    + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_062.html b/img_text/javaeett_dt_062.html index 3e25335..65dece3 100644 --- a/img_text/javaeett_dt_062.html +++ b/img_text/javaeett_dt_062.html @@ -6,56 +6,39 @@ Description of the illustration javaeett_dt_062 + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - - + +
    + + + + + - - + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Contents + +
    -
    +

    This figure shows the architecture of the main Duke’s Forest projects and how they use the Events and Entities projects.

    @@ -67,50 +50,31 @@

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + -
    + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_063.html b/img_text/javaeett_dt_063.html index 9b38cc3..d6c002e 100644 --- a/img_text/javaeett_dt_063.html +++ b/img_text/javaeett_dt_063.html @@ -6,56 +6,39 @@ Description of the illustration javaeett_dt_063 + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - - + +
    + + + + + - - + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Contents + +
    -
    +

    This figure shows the interactions between the Duke’s Store and Duke’s Shipment projects (using REST and HTTP), and between the Duke’s Store @@ -68,50 +51,31 @@


    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + -
    + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_064.html b/img_text/javaeett_dt_064.html index d796c79..beeeb58 100644 --- a/img_text/javaeett_dt_064.html +++ b/img_text/javaeett_dt_064.html @@ -6,56 +6,39 @@ Description of the illustration javaeett_dt_064 + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - - + +
    + + + + + - - + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Contents + +
    -
    +

    This figure shows the database tables in Duke’s Forest and their relationships.

    @@ -67,50 +50,31 @@

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + -
    + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_065_frmcmpnt.html b/img_text/javaeett_dt_065_frmcmpnt.html index fc755d1..f1a1086 100644 --- a/img_text/javaeett_dt_065_frmcmpnt.html +++ b/img_text/javaeett_dt_065_frmcmpnt.html @@ -6,56 +6,39 @@ Description of the illustration javaeett_dt_065_frmcmpnt + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - - + +
    + + + + + - - + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Contents + +
    -
    +

    Form with User Name and Password text fields and a Login button.

    @@ -66,50 +49,31 @@

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + -
    + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_066_slctmny.html b/img_text/javaeett_dt_066_slctmny.html index 12e6945..be6da0f 100644 --- a/img_text/javaeett_dt_066_slctmny.html +++ b/img_text/javaeett_dt_066_slctmny.html @@ -6,56 +6,39 @@ Description of the illustration javaeett_dt_066_slctmny + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - - + +
    + + + + + - - + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Contents + +
    -
    +

    Check box group, scrollable box, and unscrollable box.

    @@ -66,50 +49,31 @@

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + -
    + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_067_slctn.html b/img_text/javaeett_dt_067_slctn.html index 1074d06..827c49b 100644 --- a/img_text/javaeett_dt_067_slctn.html +++ b/img_text/javaeett_dt_067_slctn.html @@ -6,56 +6,39 @@ Description of the illustration javaeett_dt_067_slctn + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - - + +
    + + + + + - - + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Contents + +
    -
    +

    Options, check box, and lists.

    @@ -66,50 +49,31 @@

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + -
    + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/img_text/javaeett_dt_068_txtcmpnts.html b/img_text/javaeett_dt_068_txtcmpnts.html index b56b558..c13287e 100644 --- a/img_text/javaeett_dt_068_txtcmpnts.html +++ b/img_text/javaeett_dt_068_txtcmpnts.html @@ -6,56 +6,39 @@ Description of the illustration javaeett_dt_068_txtcmpnts + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - - + +
    + + + + + - - + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Contents + +
    -
    +

    A form. "User Name" labels a field. "Password" labels a password field. "Comments" labels a multi-line field.

    @@ -67,50 +50,31 @@

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + -
    + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/injection.html b/injection.html index ba68397..d127020 100644 --- a/injection.html +++ b/injection.html @@ -6,66 +6,51 @@ Injection + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    4 Injection

    @@ -104,60 +89,43 @@

    4 Injection


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/injection001.html b/injection001.html index 7b7d43a..a72d8a4 100644 --- a/injection001.html +++ b/injection001.html @@ -6,66 +6,51 @@ Resource Injection + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    4.1 Resource Injection

    @@ -127,60 +112,43 @@

    4.1 Resource Injection


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/injection002.html b/injection002.html index 36795d4..df71654 100644 --- a/injection002.html +++ b/injection002.html @@ -6,66 +6,51 @@ Dependency Injection + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    4.2 Dependency Injection

    @@ -124,60 +109,43 @@

    4.2 Dependency Injection


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/injection003.html b/injection003.html index 92e24a8..d92885a 100644 --- a/injection003.html +++ b/injection003.html @@ -6,66 +6,51 @@ The Main Differences between Resource Injection and Dependency Injection + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    4.3 The Main Differences between Resource Injection and Dependency Injection

    @@ -119,60 +104,43 @@

    - - - - - - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    - - - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    - - - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    - - - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/interceptors.html b/interceptors.html index 571ba86..67ed39f 100644 --- a/interceptors.html +++ b/interceptors.html @@ -6,66 +6,51 @@ Using Java EE Interceptors + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    54 Using Java EE Interceptors

    @@ -94,60 +79,43 @@

    54 Using Java EE Interceptors


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/interceptors001.html b/interceptors001.html index ec7a79f..5b63915 100644 --- a/interceptors001.html +++ b/interceptors001.html @@ -6,66 +6,51 @@ Overview of Interceptors + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    54.1 Overview of Interceptors

    @@ -212,60 +197,43 @@

    54.1.3 Interceptors and CDI


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/interceptors002.html b/interceptors002.html index ec9d70e..da00dfc 100644 --- a/interceptors002.html +++ b/interceptors002.html @@ -6,66 +6,51 @@ Using Interceptors + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    54.2 Using Interceptors

    @@ -688,60 +673,43 @@

    54.2.5 Ordering Interceptors


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/interceptors003.html b/interceptors003.html index 8331750..ee3c980 100644 --- a/interceptors003.html +++ b/interceptors003.html @@ -6,66 +6,51 @@ The interceptor Example Application + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    54.3 The interceptor Example Application

    @@ -248,60 +233,43 @@

    54.3.1.2 To Run the intercep


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jaxrs-advanced.html b/jaxrs-advanced.html index 8499dc3..0cd690b 100644 --- a/jaxrs-advanced.html +++ b/jaxrs-advanced.html @@ -6,66 +6,51 @@ JAX-RS: Advanced Topics and an Example + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    31 JAX-RS: Advanced Topics and an Example

    @@ -120,60 +105,43 @@

    31 JAX-RS: Advanced Topics and an


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jaxrs-advanced001.html b/jaxrs-advanced001.html index a79b97f..e7aaac6 100644 --- a/jaxrs-advanced001.html +++ b/jaxrs-advanced001.html @@ -6,66 +6,51 @@ Annotations for Field and Bean Properties of Resource Classes + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    31.1 Annotations for Field and Bean Properties of Resource Classes

    @@ -304,60 +289,43 @@

    31.1.4 Extracting the


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jaxrs-advanced002.html b/jaxrs-advanced002.html index 6e66231..7e62d70 100644 --- a/jaxrs-advanced002.html +++ b/jaxrs-advanced002.html @@ -6,66 +6,51 @@ Validating Resource Data with Bean Validation + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    31.2 Validating Resource Data with Bean Validation

    @@ -325,60 +310,43 @@

    31.2.3 Validation Exce


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jaxrs-advanced003.html b/jaxrs-advanced003.html index 0abb0b0..7a81a10 100644 --- a/jaxrs-advanced003.html +++ b/jaxrs-advanced003.html @@ -6,66 +6,51 @@ Subresources and Runtime Resource Resolution + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    31.3 Subresources and Runtime Resource Resolution

    @@ -203,60 +188,43 @@

    31.3.2 Subresource Locators


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jaxrs-advanced004.html b/jaxrs-advanced004.html index 98a2289..a6478d3 100644 --- a/jaxrs-advanced004.html +++ b/jaxrs-advanced004.html @@ -6,66 +6,51 @@ Integrating JAX-RS with EJB Technology and CDI + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    31.4 Integrating JAX-RS with EJB Technology and CDI

    @@ -144,60 +129,43 @@

    31.4 Integrating JAX-RS


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jaxrs-advanced005.html b/jaxrs-advanced005.html index 357d78a..7383853 100644 --- a/jaxrs-advanced005.html +++ b/jaxrs-advanced005.html @@ -6,66 +6,51 @@ Conditional HTTP Requests + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    31.5 Conditional HTTP Requests

    @@ -129,60 +114,43 @@

    31.5 Conditional HTTP Requests


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jaxrs-advanced006.html b/jaxrs-advanced006.html index 09d97c0..ac4224e 100644 --- a/jaxrs-advanced006.html +++ b/jaxrs-advanced006.html @@ -6,66 +6,51 @@ Runtime Content Negotiation + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    31.6 Runtime Content Negotiation

    @@ -222,60 +207,43 @@

    31.6 Runtime Content Negotiation


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jaxrs-advanced007.html b/jaxrs-advanced007.html index 95a3993..ba3a1a9 100644 --- a/jaxrs-advanced007.html +++ b/jaxrs-advanced007.html @@ -6,66 +6,51 @@ Using JAX-RS with JAXB + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    31.7 Using JAX-RS with JAXB

    @@ -489,60 +474,43 @@

    31.7.3 Using JSON with JAX-RS and JAXB<


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jaxrs-advanced008.html b/jaxrs-advanced008.html index 8835fb3..71b7eb0 100644 --- a/jaxrs-advanced008.html +++ b/jaxrs-advanced008.html @@ -6,66 +6,51 @@ The customer Example Application + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    31.8 The customer Example Application

    @@ -592,60 +577,43 @@

    31.8.5.2 T


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jaxrs-client.html b/jaxrs-client.html index 63e24f8..c6489a4 100644 --- a/jaxrs-client.html +++ b/jaxrs-client.html @@ -6,66 +6,51 @@ Accessing REST Resources with the JAX-RS Client API + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    30 Accessing REST Resources with the JAX-RS Client API

    @@ -98,60 +83,43 @@

    30 Accessing REST R


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jaxrs-client001.html b/jaxrs-client001.html index c07ff2f..1e455f4 100644 --- a/jaxrs-client001.html +++ b/jaxrs-client001.html @@ -6,66 +6,51 @@ Overview of the Client API + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    30.1 Overview of the Client API

    @@ -337,60 +322,43 @@

    30.1.5 Invoking the Request


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jaxrs-client002.html b/jaxrs-client002.html index e44e439..6c7a391 100644 --- a/jaxrs-client002.html +++ b/jaxrs-client002.html @@ -6,66 +6,51 @@ Using the Client API in the JAX-RS Example Applications + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    30.2 Using the Client API in the JAX-RS Example Applications

    @@ -277,60 +262,43 @@

    30.2.2 The Client AP


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jaxrs-client003.html b/jaxrs-client003.html index 27ea669..714bf9e 100644 --- a/jaxrs-client003.html +++ b/jaxrs-client003.html @@ -6,66 +6,51 @@ Advanced Features of the Client API + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    30.3 Advanced Features of the Client API

    @@ -513,60 +498,43 @@

    30.3.6 Listening and Receiving Events
    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jaxrs.html b/jaxrs.html index 347a374..41d8fec 100644 --- a/jaxrs.html +++ b/jaxrs.html @@ -6,66 +6,51 @@ Building RESTful Web Services with JAX-RS + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    29 Building RESTful Web Services with JAX-RS

    @@ -100,60 +85,43 @@

    29 Building RESTful Web Servi


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jaxrs001.html b/jaxrs001.html index d2af379..7741f87 100644 --- a/jaxrs001.html +++ b/jaxrs001.html @@ -6,66 +6,51 @@ What Are RESTful Web Services? + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    29.1 What Are RESTful Web Services?

    @@ -144,60 +129,43 @@

    29.1 What Are RESTful Web Services?


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jaxrs002.html b/jaxrs002.html index 0ef5336..8e31b6c 100644 --- a/jaxrs002.html +++ b/jaxrs002.html @@ -6,66 +6,51 @@ Creating a RESTful Root Resource Class + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    29.2 Creating a RESTful Root Resource Class

    @@ -1342,60 +1327,43 @@

    29.2.7.2 Configuring the Base URI i


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jaxrs003.html b/jaxrs003.html index 5b34034..f71dec1 100644 --- a/jaxrs003.html +++ b/jaxrs003.html @@ -6,66 +6,51 @@ Example Applications for JAX-RS + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    29.3 Example Applications for JAX-RS

    @@ -500,60 +485,43 @@

    29.3.3 Real-World Examples


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jaxrs004.html b/jaxrs004.html index cc33351..d912a8c 100644 --- a/jaxrs004.html +++ b/jaxrs004.html @@ -6,66 +6,51 @@ Further Information about JAX-RS + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    29.4 Further Information about JAX-RS

    @@ -104,60 +89,43 @@

    29.4 Further Information about JAX-RS<


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jaxws.html b/jaxws.html index a0641e3..07c55f9 100644 --- a/jaxws.html +++ b/jaxws.html @@ -6,66 +6,51 @@ Building Web Services with JAX-WS + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    28 Building Web Services with JAX-WS

    @@ -102,60 +87,43 @@

    28 Building Web Services with JAX-WS<


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jaxws001.html b/jaxws001.html index 6525076..7a55229 100644 --- a/jaxws001.html +++ b/jaxws001.html @@ -6,66 +6,51 @@ Overview of Java API for XML Web Services + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    28.1 Overview of Java API for XML Web Services

    @@ -119,60 +104,43 @@

    28.1 Overview of Java API for


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jaxws002.html b/jaxws002.html index 1401ba1..fa0305e 100644 --- a/jaxws002.html +++ b/jaxws002.html @@ -6,66 +6,51 @@ Creating a Simple Web Service and Clients with JAX-WS + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    28.2 Creating a Simple Web Service and Clients with JAX-WS

    @@ -82,13 +67,8 @@

    28.2 Creating a S communication between a web service and a client.

    -

    Figure 28-1 Communication between a JAX-WS Web Service and a Client

    -
    -
    -

    Description of Figure 28-1 follows
    -Description of "Figure 28-1 Communication -between a JAX-WS Web Service and a Client"
    -

    +
    *Figure 28-1 Communication between a JAX-WS Web Service and a Client *
    +

    Diagram showing a client and web service communicating through a SOAP message.

    The starting point for developing a JAX-WS web service is a Java class @@ -851,60 +831,43 @@

    28.2.7.2.2 To Run the Web Client Usin

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jaxws003.html b/jaxws003.html index 7d40321..373b86b 100644 --- a/jaxws003.html +++ b/jaxws003.html @@ -6,66 +6,51 @@ Types Supported by JAX-WS + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    28.3 Types Supported by JAX-WS

    @@ -301,60 +286,43 @@

    28.3.2 Java-to-Schema Mapping


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jaxws004.html b/jaxws004.html index 2288add..1c96f07 100644 --- a/jaxws004.html +++ b/jaxws004.html @@ -6,66 +6,51 @@ Web Services Interoperability and JAX-WS + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    28.4 Web Services Interoperability and JAX-WS

    @@ -85,60 +70,43 @@

    28.4 Web Services Interoperabi


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jaxws005.html b/jaxws005.html index 319731c..15a3048 100644 --- a/jaxws005.html +++ b/jaxws005.html @@ -6,66 +6,51 @@ Further Information about JAX-WS + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    28.5 Further Information about JAX-WS

    @@ -110,60 +95,43 @@

    28.5 Further Information about JAX-WS<


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jms-concepts.html b/jms-concepts.html index 185fc32..136ffa6 100644 --- a/jms-concepts.html +++ b/jms-concepts.html @@ -6,66 +6,51 @@ Java Message Service Concepts + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    45 Java Message Service Concepts

    @@ -105,60 +90,43 @@

    45 Java Message Service Concepts


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jms-concepts001.html b/jms-concepts001.html index eeec9db..70b7300 100644 --- a/jms-concepts001.html +++ b/jms-concepts001.html @@ -6,66 +6,51 @@ Overview of the JMS API + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    45.1 Overview of the JMS API

    @@ -224,13 +209,8 @@

    45.1.3 When Can You Use the JMS API?

    might work.

    -

    Figure 45-1 Messaging in an Enterprise Application

    -
    -
    -

    Description of Figure 45-1 follows
    -Description of "Figure 45-1 Messaging in -an Enterprise Application"
    -

    +
    *Figure 45-1 Messaging in an Enterprise Application *
    +

    Diagram showing messaging between various departments in an enterprise

    Manufacturing is only one example of how an enterprise can use the JMS @@ -301,60 +281,43 @@

    45.1.4 How Does the


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jms-concepts002.html b/jms-concepts002.html index 32f4438..86aabbe 100644 --- a/jms-concepts002.html +++ b/jms-concepts002.html @@ -6,66 +6,51 @@ Basic JMS API Concepts + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    45.2 Basic JMS API Concepts

    @@ -142,13 +127,8 @@

    45.2.1 JMS API Architecture

    JMS provider.

    -

    Figure 45-2 JMS API Architecture

    -
    -
    -

    Description of Figure 45-2 follows
    -Description of "Figure 45-2 JMS API -Architecture"
    -

    +
    *Figure 45-2 JMS API Architecture *
    +

    Diagram of JMS API architecture, showing administrative tool, JMS client, JNDI namespace, and JMS provider

    @@ -196,13 +176,8 @@

    45.2.2.1 Point-to-Point Messaging Style<

    -

    Figure 45-3 Point-to-Point Messaging

    -
    -
    -

    Description of Figure 45-3 follows
    -Description of "Figure 45-3 -Point-to-Point Messaging"
    -

    +
    *Figure 45-3 Point-to-Point Messaging *
    +

    Diagram of point-to-point messaging, showing Client 1 sending a message to a queue, and Client 2 consuming and acknowledging the message

    Use PTP messaging when every message you send must be processed @@ -261,13 +236,8 @@

    45.2.2.2 Publish/Subscribe Messaging S messaging.

    -

    Figure 45-4 Publish/Subscribe Messaging

    -
    -
    -

    Description of Figure 45-4 follows
    -Description of "Figure 45-4 -Publish/Subscribe Messaging"
    -

    +
    *Figure 45-4 Publish/Subscribe Messaging *
    +

    Diagram of pub/sub messaging, showing Client 1 sending a message to a topic, and the message being delivered to two consumers to the topic

    @@ -304,60 +274,43 @@

    45.2.3 Message Consumption


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jms-concepts003.html b/jms-concepts003.html index e9abae0..7f00c5a 100644 --- a/jms-concepts003.html +++ b/jms-concepts003.html @@ -6,66 +6,51 @@ The JMS API Programming Model + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    45.3 The JMS API Programming Model

    @@ -103,13 +88,8 @@

    45.3 The JMS API Programming Model

    JMS client application.

    -

    Figure 45-5 The JMS API Programming Model

    -
    -
    -

    Description of Figure 45-5 follows
    -Description of "Figure 45-5 The JMS API -Programming Model"
    -

    +
    *Figure 45-5 The JMS API Programming Model *
    +

    Diagram of the JMS API programming model: connection factory, JMSContext, connection, session, message producer, message consumer, messages, and destinations

    JMS also provides queue browsers, objects that allow an application to @@ -769,13 +749,8 @@

    45.3.6.4 Creating Durable Subscriptions< M6, but they do not receive messages M3 and M4.

    -

    Figure 45-6 Nondurable Subscriptions and Consumers

    -
    -
    -

    Description of Figure 45-6 follows
    -Description of "Figure 45-6 Nondurable -Subscriptions and Consumers"
    -

    +
    *Figure 45-6 Nondurable Subscriptions and Consumers *
    +

    Diagram showing messages being lost when nondurable subscriptions are used

    With a durable subscription, the consumer can be closed and re-created, @@ -789,13 +764,8 @@

    45.3.6.4 Creating Durable Subscriptions< M4, and M5 arrive while there is no consumer, they are not lost.

    -

    Figure 45-7 Consumers on a Durable Subscription

    -
    -
    -

    Description of Figure 45-7 follows
    -Description of "Figure 45-7 Consumers on -a Durable Subscription"
    -

    +
    *Figure 45-7 Consumers on a Durable Subscription *
    +

    Diagram showing messages being preserved when durable subscriptions are used

    A shared durable subscription allows you to use multiple consumers to @@ -1277,60 +1247,43 @@

    45.3.9 JMS Exception Handling


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jms-concepts004.html b/jms-concepts004.html index 23674f4..aea3c9c 100644 --- a/jms-concepts004.html +++ b/jms-concepts004.html @@ -6,66 +6,51 @@ Using Advanced JMS Features + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    45.4 Using Advanced JMS Features

    @@ -561,13 +546,8 @@

    45.4.4 Using JMS Local Transactions

    illustrates this interaction.

    -

    Figure 45-8 Using JMS Local Transactions

    -
    -
    -

    Description of Figure 45-8 follows
    -Description of "Figure 45-8 Using JMS -Local Transactions"
    -

    +
    *Figure 45-8 Using JMS Local Transactions *
    +

    Diagram of local transactions, showing separate transactions for sending and consuming a message

    The sending of one or more messages to one or more destinations by @@ -671,60 +651,43 @@

    45.4.5 Sending Messages Asynchronously<


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jms-concepts005.html b/jms-concepts005.html index e3c7c04..761783a 100644 --- a/jms-concepts005.html +++ b/jms-concepts005.html @@ -6,66 +6,51 @@ Using the JMS API in Java EE Applications + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    45.5 Using the JMS API in Java EE Applications

    @@ -807,60 +792,43 @@

    45.5.6 Managing JTA Transactions


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jms-concepts006.html b/jms-concepts006.html index cbf5dab..726c4b9 100644 --- a/jms-concepts006.html +++ b/jms-concepts006.html @@ -6,66 +6,51 @@ Further Information about JMS + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    45.6 Further Information about JMS

    @@ -92,60 +77,43 @@

    45.6 Further Information about JMS


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jms-examples.html b/jms-examples.html index 3ff6275..9dbe834 100644 --- a/jms-examples.html +++ b/jms-examples.html @@ -6,66 +6,51 @@ Java Message Service Examples + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    46 Java Message Service Examples

    @@ -121,60 +106,43 @@

    46 Java Message Service Examples


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jms-examples001.html b/jms-examples001.html index 03e1a46..76de0d8 100644 --- a/jms-examples001.html +++ b/jms-examples001.html @@ -6,66 +6,51 @@ Building and Running Java Message Service Examples + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    46.1 Building and Running Java Message Service Examples

    @@ -103,60 +88,43 @@

    46.1 Building and Ru


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jms-examples002.html b/jms-examples002.html index 9f1f4b9..735d591 100644 --- a/jms-examples002.html +++ b/jms-examples002.html @@ -6,66 +6,51 @@ Overview of the JMS Examples + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    46.2 Overview of the JMS Examples

    @@ -200,60 +185,43 @@

    46.2 Overview of the JMS Examples


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jms-examples003.html b/jms-examples003.html index 04d7647..7e71db7 100644 --- a/jms-examples003.html +++ b/jms-examples003.html @@ -6,66 +6,51 @@ Writing Simple JMS Applications + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    46.3 Writing Simple JMS Applications

    @@ -1600,60 +1585,43 @@

    46.3.10.1 To Run the ClientAckConsu


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jms-examples004.html b/jms-examples004.html index 75b70bf..bc38e43 100644 --- a/jms-examples004.html +++ b/jms-examples004.html @@ -6,66 +6,51 @@ Writing More Advanced JMS Applications + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    46.4 Writing More Advanced JMS Applications

    @@ -481,13 +466,8 @@

    46.4.2 Using Local Transactions

    Figure 46-1 illustrates these steps.

    -

    Figure 46-1 Transactions: JMS Client Example

    -
    -
    -

    Description of Figure 46-1 follows
    -Description of "Figure 46-1 Transactions: -JMS Client Example"
    -

    +
    *Figure 46-1 Transactions: JMS Client Example *
    +

    Diagram of steps in transaction example

    All the messages use the MapMessage message type. Synchronous receives @@ -775,60 +755,43 @@

    46.4.2.2 To Run the transactedexam


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jms-examples005.html b/jms-examples005.html index afe1f97..4119ace 100644 --- a/jms-examples005.html +++ b/jms-examples005.html @@ -6,66 +6,51 @@ Writing High Performance and Scalable JMS Applications + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    46.5 Writing High Performance and Scalable JMS Applications

    @@ -372,60 +357,43 @@

    46.5.2.1 To Run t


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jms-examples006.html b/jms-examples006.html index 1b81f9f..2de84f3 100644 --- a/jms-examples006.html +++ b/jms-examples006.html @@ -6,66 +6,51 @@ Sending and Receiving Messages Using a Simple Web Application + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    46.6 Sending and Receiving Messages Using a Simple Web Application

    @@ -91,13 +76,8 @@

    46.6 Send message synchronously and displays it.

    -

    Figure 46-2 The websimplemessage Application

    -
    -
    -

    Description of Figure 46-2 follows
    -Description of "Figure 46-2 The -websimplemessage Application"
    -

    +
    *Figure 46-2 The websimplemessage Application *
    +

    Diagram showing a web application in which a managed bean sends a message to a queue, and another managed bean receives the message from the queue.

    46.6.1 The websimplemessage Facelets Pages

    @@ -372,60 +352,43 @@

    46.6.3.4 To Run the websimplemessag


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jms-examples007.html b/jms-examples007.html index a2d8acc..63b12d6 100644 --- a/jms-examples007.html +++ b/jms-examples007.html @@ -6,66 +6,51 @@ Receiving Messages Asynchronously Using a Message-Driven Bean + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    46.7 Receiving Messages Asynchronously Using a Message-Driven Bean

    @@ -121,13 +106,8 @@

    46.7.1 Overview of the simplemess the message-driven bean, which then processes the messages.

    -

    Figure 46-3 The simplemessage Application

    -
    -
    -

    Description of Figure 46-3 follows
    -Description of "Figure 46-3 The -simplemessage Application"
    -

    +
    *Figure 46-3 The simplemessage Application *
    +

    Diagram of application showing an application client sending a message to a queue, and the message being delivered to a message-driven bean

    The source code for this application is in the @@ -431,60 +411,43 @@

    46.7.4.3 To Run the simple


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jms-examples008.html b/jms-examples008.html index fd7e9a3..21bf000 100644 --- a/jms-examples008.html +++ b/jms-examples008.html @@ -6,66 +6,51 @@ Sending Messages from a Session Bean to an MDB + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    46.8 Sending Messages from a Session Bean to an MDB

    @@ -121,14 +106,8 @@

    46. Simple Web Application.

    -

    Figure 46-4 An Enterprise Bean Application: Client to Session Bean to -Message-Driven Bean

    -
    -
    -

    Description of Figure 46-4 follows
    -Description of "Figure 46-4 An Enterprise -Bean Application: Client to Session Bean to Message-Driven Bean"
    -

    +
    *Figure 46-4 An Enterprise Bean Application: Client to Session Bean to Message-Driven Bean *
    +

    Diagram of application showing an application client calling a session bean, which sends messages that are processed by a message-driven bean

    The Publisher enterprise bean in this example is the @@ -452,60 +431,43 @@

    46.8.2.2 To Run clientsessionmdb Us


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jms-examples009.html b/jms-examples009.html index 53a6e14..606262f 100644 --- a/jms-examples009.html +++ b/jms-examples009.html @@ -6,66 +6,51 @@ Using an Entity to Join Messages from Two MDBs + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    46.9 Using an Entity to Join Messages from Two MDBs

    @@ -189,14 +174,8 @@

    46.9.1 Overview of entity.

    -

    Figure 46-5 An Enterprise Bean Application: Client to Message-Driven -Beans to Entity

    -
    -
    -

    Description of Figure 46-5 follows
    -Description of "Figure 46-5 An Enterprise -Bean Application: Client to Message-Driven Beans to Entity"
    -

    +
    *Figure 46-5 An Enterprise Bean Application: Client to Message-Driven Beans to Entity *
    +

    Diagram of application showing an application client, two message-driven beans, and an entity, as well as the associated topic and queue

    @@ -588,60 +567,43 @@

    46.9.3.3 Viewing the Application Output<


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jms-examples010.html b/jms-examples010.html index 26db2a6..c57849d 100644 --- a/jms-examples010.html +++ b/jms-examples010.html @@ -6,66 +6,51 @@ Using NetBeans IDE to Create JMS Resources + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    46.10 Using NetBeans IDE to Create JMS Resources

    @@ -193,60 +178,43 @@

    46.10.2 To Delete JMS Resour


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-advanced-cc.html b/jsf-advanced-cc.html index 3f29166..d0f5883 100644 --- a/jsf-advanced-cc.html +++ b/jsf-advanced-cc.html @@ -6,66 +6,51 @@ Composite Components: Advanced Topics and an Example + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    14 Composite Components: Advanced Topics and an Example

    @@ -98,60 +83,43 @@

    14 Composite Compon


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-advanced-cc001.html b/jsf-advanced-cc001.html index 8eb76af..4d65927 100644 --- a/jsf-advanced-cc001.html +++ b/jsf-advanced-cc001.html @@ -6,66 +6,51 @@ Attributes of a Composite Component + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    14.1 Attributes of a Composite Component

    @@ -172,60 +157,43 @@

    14.1 Attributes of a Composite Comp


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-advanced-cc002.html b/jsf-advanced-cc002.html index e9742ed..a1eeeaf 100644 --- a/jsf-advanced-cc002.html +++ b/jsf-advanced-cc002.html @@ -6,66 +6,51 @@ Invoking a Managed Bean + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    14.2 Invoking a Managed Bean

    @@ -99,60 +84,43 @@

    14.2 Invoking a Managed Bean


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-advanced-cc003.html b/jsf-advanced-cc003.html index 2a14714..5f04962 100644 --- a/jsf-advanced-cc003.html +++ b/jsf-advanced-cc003.html @@ -6,66 +6,51 @@ Validating Composite Component Values + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    14.3 Validating Composite Component Values

    @@ -120,60 +105,43 @@

    14.3 Validating Composite Compone


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-advanced-cc004.html b/jsf-advanced-cc004.html index 2018fad..4116849 100644 --- a/jsf-advanced-cc004.html +++ b/jsf-advanced-cc004.html @@ -6,66 +6,51 @@ The compositecomponentexample Example Application + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    14.4 The compositecomponentexample Example Application

    @@ -356,60 +341,43 @@

    14.4.4.3 To Run the compos


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-ajax.html b/jsf-ajax.html index a2c0b5d..c58793e 100644 --- a/jsf-ajax.html +++ b/jsf-ajax.html @@ -6,66 +6,51 @@ Using Ajax with JavaServer Faces Technology + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    13 Using Ajax with JavaServer Faces Technology

    @@ -127,60 +112,43 @@

    13 Using Ajax with JavaServ


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-ajax001.html b/jsf-ajax001.html index 2d0cdb1..d8300cc 100644 --- a/jsf-ajax001.html +++ b/jsf-ajax001.html @@ -6,66 +6,51 @@ Overview of Ajax + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    13.1 Overview of Ajax

    @@ -135,60 +120,43 @@

    13.1 Overview of Ajax


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-ajax002.html b/jsf-ajax002.html index cd20031..1910aad 100644 --- a/jsf-ajax002.html +++ b/jsf-ajax002.html @@ -6,66 +6,51 @@ Using Ajax Functionality with JavaServer Faces Technology + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    13.2 Using Ajax Functionality with JavaServer Faces Technology

    @@ -114,60 +99,43 @@

    13.2 Using Aj


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-ajax003.html b/jsf-ajax003.html index 590bdf6..93bcfe3 100644 --- a/jsf-ajax003.html +++ b/jsf-ajax003.html @@ -6,66 +6,51 @@ Using Ajax with Facelets + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    13.3 Using Ajax with Facelets

    @@ -256,60 +241,43 @@

    13.3.1 Using the f:ajax Tag


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-ajax004.html b/jsf-ajax004.html index fee558c..aacd051 100644 --- a/jsf-ajax004.html +++ b/jsf-ajax004.html @@ -6,66 +6,51 @@ Sending an Ajax Request + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    13.4 Sending an Ajax Request

    @@ -239,60 +224,43 @@

    13.4.4 Using the listener Attribute


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-ajax005.html b/jsf-ajax005.html index 8d61208..6c885ae 100644 --- a/jsf-ajax005.html +++ b/jsf-ajax005.html @@ -6,66 +6,51 @@ Monitoring Events on the Client + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    13.5 Monitoring Events on the Client

    @@ -140,60 +125,43 @@

    13.5 Monitoring Events on the Client
    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-ajax006.html b/jsf-ajax006.html index 0241974..345deaa 100644 --- a/jsf-ajax006.html +++ b/jsf-ajax006.html @@ -6,66 +6,51 @@ Handling Errors + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    13.6 Handling Errors

    @@ -148,60 +133,43 @@

    13.6 Handling Errors


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-ajax007.html b/jsf-ajax007.html index 4722749..7133a56 100644 --- a/jsf-ajax007.html +++ b/jsf-ajax007.html @@ -6,66 +6,51 @@ Receiving an Ajax Response + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    13.7 Receiving an Ajax Response

    @@ -117,60 +102,43 @@

    13.7 Receiving an Ajax Response


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-ajax008.html b/jsf-ajax008.html index e4d44e2..e7c6d95 100644 --- a/jsf-ajax008.html +++ b/jsf-ajax008.html @@ -6,66 +6,51 @@ Ajax Request Lifecycle + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    13.8 Ajax Request Lifecycle

    @@ -108,60 +93,43 @@

    13.8 Ajax Request Lifecycle


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-ajax009.html b/jsf-ajax009.html index 610dc7d..3aeda5e 100644 --- a/jsf-ajax009.html +++ b/jsf-ajax009.html @@ -6,66 +6,51 @@ Grouping of Components + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    13.9 Grouping of Components

    @@ -128,60 +113,43 @@

    13.9 Grouping of Components


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-ajax010.html b/jsf-ajax010.html index 0cec169..5147b12 100644 --- a/jsf-ajax010.html +++ b/jsf-ajax010.html @@ -6,66 +6,51 @@ Loading JavaScript as a Resource + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    13.10 Loading JavaScript as a Resource

    @@ -264,60 +249,43 @@

    13.10.2 Using t


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-ajax011.html b/jsf-ajax011.html index 61e24f1..d41d190 100644 --- a/jsf-ajax011.html +++ b/jsf-ajax011.html @@ -6,66 +6,51 @@ The ajaxguessnumber Example Application + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    13.11 The ajaxguessnumber Example Application

    @@ -351,60 +336,43 @@

    13.11.2.3 To Run the ajaxguessnumber


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-ajax012.html b/jsf-ajax012.html index f730a0d..34208eb 100644 --- a/jsf-ajax012.html +++ b/jsf-ajax012.html @@ -6,66 +6,51 @@ Further Information about Ajax in JavaServer Faces Technology + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    13.12 Further Information about Ajax in JavaServer Faces Technology

    @@ -90,60 +75,43 @@

    13.12 Fur


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-configure.html b/jsf-configure.html index 0d059d2..bb7be06 100644 --- a/jsf-configure.html +++ b/jsf-configure.html @@ -6,66 +6,51 @@ Configuring JavaServer Faces Applications + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    16 Configuring JavaServer Faces Applications

    @@ -128,60 +113,43 @@

    16 Configuring JavaServer Fac


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-configure001.html b/jsf-configure001.html index 80faf13..b33202c 100644 --- a/jsf-configure001.html +++ b/jsf-configure001.html @@ -6,66 +6,51 @@ Introduction to Configuring JavaServer Faces Applications + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    16.1 Introduction to Configuring JavaServer Faces Applications

    @@ -107,60 +92,43 @@

    16.1 Introduc


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-configure002.html b/jsf-configure002.html index 8ede0b5..323f2a3 100644 --- a/jsf-configure002.html +++ b/jsf-configure002.html @@ -6,66 +6,51 @@ Using Annotations to Configure Managed Beans + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    16.2 Using Annotations to Configure Managed Beans

    @@ -170,60 +155,43 @@

    16.2.1 Using Managed Bean Scopes


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-configure003.html b/jsf-configure003.html index 6675c2b..b73e959 100644 --- a/jsf-configure003.html +++ b/jsf-configure003.html @@ -6,66 +6,51 @@ Application Configuration Resource File + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    16.3 Application Configuration Resource File

    @@ -312,60 +297,43 @@

    16.3.2 Ordering of


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-configure004.html b/jsf-configure004.html index b38f1aa..855ce2b 100644 --- a/jsf-configure004.html +++ b/jsf-configure004.html @@ -6,66 +6,51 @@ Using Faces Flows + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    16.4 Using Faces Flows

    @@ -131,13 +116,8 @@

    16.4 Using Faces Flows

    interact.

    -

    Figure 16-1 Two Faces Flows and Their Interactions

    -
    -
    -

    Description of Figure 16-1 follows
    -Description of "Figure 16-1 Two Faces -Flows and Their Interactions"
    -

    +
    *Figure 16-1 Two Faces Flows and Their Interactions *
    +

    This figure shows two Faces flows, Flow A and Flow B. Each has a start node and two additional pages. Each has an associated managed bean. Each defines a return node, and each defines two parameters to be passed to the other flow.

    In this figure, Flow A has a start node named flow-a and two @@ -872,60 +852,43 @@

    16.4.3.7 To Run the checkout-module


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-configure005.html b/jsf-configure005.html index 2afdac3..78edee9 100644 --- a/jsf-configure005.html +++ b/jsf-configure005.html @@ -6,66 +6,51 @@ Configuring Managed Beans + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    16.5 Configuring Managed Beans

    @@ -639,60 +624,43 @@

    16.5.3 Initializing Maps and Lists


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-configure006.html b/jsf-configure006.html index ccd824d..34fd193 100644 --- a/jsf-configure006.html +++ b/jsf-configure006.html @@ -6,66 +6,51 @@ Registering Application Messages + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    16.6 Registering Application Messages

    @@ -298,60 +283,43 @@

    16.6.2 Referencing Error Messages


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-configure007.html b/jsf-configure007.html index 5fa5020..3fd12d4 100644 --- a/jsf-configure007.html +++ b/jsf-configure007.html @@ -6,66 +6,51 @@ Using Default Validators + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    16.7 Using Default Validators

    @@ -93,60 +78,43 @@

    16.7 Using Default Validators


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-configure008.html b/jsf-configure008.html index 7f55204..7816864 100644 --- a/jsf-configure008.html +++ b/jsf-configure008.html @@ -6,66 +6,51 @@ Registering a Custom Validator + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    16.8 Registering a Custom Validator

    @@ -128,60 +113,43 @@

    16.8 Registering a Custom Validator


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-configure009.html b/jsf-configure009.html index 8998adb..a0c153d 100644 --- a/jsf-configure009.html +++ b/jsf-configure009.html @@ -6,66 +6,51 @@ Registering a Custom Converter + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    16.9 Registering a Custom Converter

    @@ -119,60 +104,43 @@

    16.9 Registering a Custom Converter


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-configure010.html b/jsf-configure010.html index 511d963..fc1d4d0 100644 --- a/jsf-configure010.html +++ b/jsf-configure010.html @@ -6,66 +6,51 @@ Configuring Navigation Rules + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    16.10 Configuring Navigation Rules

    @@ -245,60 +230,43 @@

    16.10 Configuring Navigation Rules


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-configure011.html b/jsf-configure011.html index d2edf50..4d394b2 100644 --- a/jsf-configure011.html +++ b/jsf-configure011.html @@ -6,66 +6,51 @@ Registering a Custom Renderer with a Render Kit + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    16.11 Registering a Custom Renderer with a Render Kit

    @@ -208,60 +193,43 @@

    16.11 Registering a Cus


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-configure012.html b/jsf-configure012.html index b80b8e5..a2295ca 100644 --- a/jsf-configure012.html +++ b/jsf-configure012.html @@ -6,66 +6,51 @@ Registering a Custom Component + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    16.12 Registering a Custom Component

    @@ -131,60 +116,43 @@

    16.12 Registering a Custom Component


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-configure013.html b/jsf-configure013.html index 6df801e..45a6a1e 100644 --- a/jsf-configure013.html +++ b/jsf-configure013.html @@ -6,66 +6,51 @@ Basic Requirements of a JavaServer Faces Application + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    16.13 Basic Requirements of a JavaServer Faces Application

    @@ -482,60 +467,43 @@

    16.13.3 Including the C


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-custom.html b/jsf-custom.html index ff3f5cd..c11a5fe 100644 --- a/jsf-custom.html +++ b/jsf-custom.html @@ -6,66 +6,51 @@ Creating Custom UI Components and Other Custom Objects + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    15 Creating Custom UI Components and Other Custom Objects

    @@ -132,60 +117,43 @@

    15 Creating Cust


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-custom001.html b/jsf-custom001.html index 42edc62..e89b87f 100644 --- a/jsf-custom001.html +++ b/jsf-custom001.html @@ -6,66 +6,51 @@ Introduction to Creating Custom Components + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    15.1 Introduction to Creating Custom Components

    @@ -156,60 +141,43 @@

    15.1 Introduction to Creatin


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-custom002.html b/jsf-custom002.html index 7d0e9d2..1e19c3a 100644 --- a/jsf-custom002.html +++ b/jsf-custom002.html @@ -6,66 +6,51 @@ Determining Whether You Need a Custom Component or Renderer + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    15.2 Determining Whether You Need a Custom Component or Renderer

    @@ -337,60 +322,43 @@

    15.2.3 Component, Renderer, and


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-custom003.html b/jsf-custom003.html index 14bd6f3..7c79c68 100644 --- a/jsf-custom003.html +++ b/jsf-custom003.html @@ -6,66 +6,51 @@ Understanding the Image Map Example + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    15.3 Understanding the Image Map Example

    @@ -429,60 +414,43 @@

    15.3.5 Summary of the Imag


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-custom004.html b/jsf-custom004.html index aa41a66..a9595e8 100644 --- a/jsf-custom004.html +++ b/jsf-custom004.html @@ -6,66 +6,51 @@ Steps for Creating a Custom Component + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    15.4 Steps for Creating a Custom Component

    @@ -132,60 +117,43 @@

    15.4 Steps for Creating a Custom


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-custom005.html b/jsf-custom005.html index 555f3bb..d91d099 100644 --- a/jsf-custom005.html +++ b/jsf-custom005.html @@ -6,66 +6,51 @@ Creating Custom Component Classes + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    15.5 Creating Custom Component Classes

    @@ -666,60 +651,43 @@

    15.5.5 Saving and Restoring State


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-custom006.html b/jsf-custom006.html index c918c8d..dda1625 100644 --- a/jsf-custom006.html +++ b/jsf-custom006.html @@ -6,66 +6,51 @@ Delegating Rendering to a Renderer + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    15.6 Delegating Rendering to a Renderer

    @@ -235,60 +220,43 @@

    15.6.2 Identifying the Renderer Type


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-custom007.html b/jsf-custom007.html index fbb6d30..5f56960 100644 --- a/jsf-custom007.html +++ b/jsf-custom007.html @@ -6,66 +6,51 @@ Implementing an Event Listener + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    15.7 Implementing an Event Listener

    @@ -213,60 +198,43 @@

    15.7.2 Implementing Action Listeners


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-custom008.html b/jsf-custom008.html index 4bfd714..e814497 100644 --- a/jsf-custom008.html +++ b/jsf-custom008.html @@ -6,66 +6,51 @@ Handling Events for Custom Components + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    15.8 Handling Events for Custom Components

    @@ -146,60 +131,43 @@

    15.8 Handling Events for Custom C


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-custom009.html b/jsf-custom009.html index 738967e..4d53755 100644 --- a/jsf-custom009.html +++ b/jsf-custom009.html @@ -6,66 +6,51 @@ Defining the Custom Component Tag in a Tag Library Descriptor + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    15.9 Defining the Custom Component Tag in a Tag Library Descriptor

    @@ -137,60 +122,43 @@

    15.9 Defi


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-custom010.html b/jsf-custom010.html index 9537cd5..b3a01a0 100644 --- a/jsf-custom010.html +++ b/jsf-custom010.html @@ -6,66 +6,51 @@ Using a Custom Component + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    15.10 Using a Custom Component

    @@ -175,60 +160,43 @@

    15.10 Using a Custom Component


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-custom011.html b/jsf-custom011.html index 75f2aa1..52ad751 100644 --- a/jsf-custom011.html +++ b/jsf-custom011.html @@ -6,66 +6,51 @@ Creating and Using a Custom Converter + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    15.11 Creating and Using a Custom Converter

    @@ -391,60 +376,43 @@

    15.11.2 Using a Custom Converter


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-custom012.html b/jsf-custom012.html index 1d290b3..3c84b72 100644 --- a/jsf-custom012.html +++ b/jsf-custom012.html @@ -6,66 +6,51 @@ Creating and Using a Custom Validator + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    15.12 Creating and Using a Custom Validator

    @@ -425,60 +410,43 @@

    15.12.3 Using a Custom Validator


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-custom013.html b/jsf-custom013.html index c940981..1a0ba04 100644 --- a/jsf-custom013.html +++ b/jsf-custom013.html @@ -6,66 +6,51 @@ Binding Component Values and Instances to Managed Bean Properties + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    15.13 Binding Component Values and Instances to Managed Bean Properties

    @@ -488,60 +473,43 @@

    15.13.3 Binding a Compo


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-custom014.html b/jsf-custom014.html index 618b202..787b253 100644 --- a/jsf-custom014.html +++ b/jsf-custom014.html @@ -6,66 +6,51 @@ Binding Converters, Listeners, and Validators to Managed Bean Properties + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    15.14 Binding Converters, Listeners, and Validators to Managed Bean Properties

    @@ -162,60 +147,43 @@


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-develop.html b/jsf-develop.html index 6bff20e..846e416 100644 --- a/jsf-develop.html +++ b/jsf-develop.html @@ -6,66 +6,51 @@ Developing with JavaServer Faces Technology + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    12 Developing with JavaServer Faces Technology

    @@ -96,60 +81,43 @@

    12 Developing with JavaServ


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-develop001.html b/jsf-develop001.html index dec556c..af2bc58 100644 --- a/jsf-develop001.html +++ b/jsf-develop001.html @@ -6,66 +6,51 @@ Managed Beans in JavaServer Faces Technology + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    12.1 Managed Beans in JavaServer Faces Technology

    @@ -298,60 +283,43 @@

    12.1.2 Using the EL to Referenc


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-develop002.html b/jsf-develop002.html index a473f66..12859da 100644 --- a/jsf-develop002.html +++ b/jsf-develop002.html @@ -6,66 +6,51 @@ Writing Bean Properties + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    12.2 Writing Bean Properties

    @@ -706,60 +691,43 @@

    12.2.3 W


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-develop003.html b/jsf-develop003.html index c320c90..e8dd1c8 100644 --- a/jsf-develop003.html +++ b/jsf-develop003.html @@ -6,66 +6,51 @@ Writing Managed Bean Methods + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    12.3 Writing Managed Bean Methods

    @@ -370,60 +355,43 @@

    12.3.5 Writing a Method


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-el.html b/jsf-el.html index dff8524..f2fba27 100644 --- a/jsf-el.html +++ b/jsf-el.html @@ -6,66 +6,51 @@ Expression Language + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    9 Expression Language

    @@ -115,60 +100,43 @@

    9 Expression Language


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-el001.html b/jsf-el001.html index 009cbfd..f70e4ab 100644 --- a/jsf-el001.html +++ b/jsf-el001.html @@ -6,66 +6,51 @@ Overview of the EL + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    9.1 Overview of the EL

    @@ -127,60 +112,43 @@

    9.1 Overview of the EL


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-el002.html b/jsf-el002.html index f981dc6..c4f2481 100644 --- a/jsf-el002.html +++ b/jsf-el002.html @@ -6,66 +6,51 @@ Immediate and Deferred Evaluation Syntax + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    9.2 Immediate and Deferred Evaluation Syntax

    @@ -172,60 +157,43 @@

    9.2.2 Deferred Evaluation


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-el003.html b/jsf-el003.html index 32c324d..1245eac 100644 --- a/jsf-el003.html +++ b/jsf-el003.html @@ -6,66 +6,51 @@ Value and Method Expressions + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    9.3 Value and Method Expressions

    @@ -624,60 +609,43 @@

    9.3.3 Lambda Expressions


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-el004.html b/jsf-el004.html index 32e544b..2daa802 100644 --- a/jsf-el004.html +++ b/jsf-el004.html @@ -6,66 +6,51 @@ Operations on Collection Objects + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    9.4 Operations on Collection Objects

    @@ -204,60 +189,43 @@

    9.4 Operations on Collection Objects
    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-el005.html b/jsf-el005.html index 9eaa7ba..1f2c829 100644 --- a/jsf-el005.html +++ b/jsf-el005.html @@ -6,66 +6,51 @@ Operators + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    9.5 Operators

    @@ -164,60 +149,43 @@

    9.5 Operators


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-el006.html b/jsf-el006.html index b08410d..5107f7f 100644 --- a/jsf-el006.html +++ b/jsf-el006.html @@ -6,66 +6,51 @@ Reserved Words + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    9.6 Reserved Words

    @@ -95,60 +80,43 @@

    9.6 Reserved Words


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-el007.html b/jsf-el007.html index 29631d7..f5699f1 100644 --- a/jsf-el007.html +++ b/jsf-el007.html @@ -6,66 +6,51 @@ Examples of EL Expressions + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    9.7 Examples of EL Expressions

    @@ -197,60 +182,43 @@

    9.7 Examples of EL Expressions


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-el008.html b/jsf-el008.html index ad2ee14..c6628f7 100644 --- a/jsf-el008.html +++ b/jsf-el008.html @@ -6,66 +6,51 @@ Further Information about the Expression Language + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    9.8 Further Information about the Expression Language

    @@ -92,60 +77,43 @@

    9.8 Further Informati


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-facelets.html b/jsf-facelets.html index aca07d4..d417bee 100644 --- a/jsf-facelets.html +++ b/jsf-facelets.html @@ -6,66 +6,51 @@ Introduction to Facelets + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    8 Introduction to Facelets

    @@ -119,60 +104,43 @@

    8 Introduction to Facelets


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-facelets001.html b/jsf-facelets001.html index a5b2fa8..197dcf8 100644 --- a/jsf-facelets001.html +++ b/jsf-facelets001.html @@ -6,66 +6,51 @@ What Is Facelets? + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    8.1 What Is Facelets?

    @@ -287,60 +272,43 @@

    8.1 What Is Facelets?


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-facelets002.html b/jsf-facelets002.html index c71af1d..0848faf 100644 --- a/jsf-facelets002.html +++ b/jsf-facelets002.html @@ -6,66 +6,51 @@ The Lifecycle of a Facelets Application + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    8.2 The Lifecycle of a Facelets Application

    @@ -126,60 +111,43 @@

    8.2 The Lifecycle of a Facelets


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-facelets003.html b/jsf-facelets003.html index efca3cb..7769868 100644 --- a/jsf-facelets003.html +++ b/jsf-facelets003.html @@ -6,66 +6,51 @@ Developing a Simple Facelets Application: The guessnumber-jsf Example Application + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    8.3 Developing a Simple Facelets Application: The guessnumber-jsf Example Application

    @@ -540,60 +525,43 @@

    8.3.3.3 To Run the guessnumber-jsf E


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-facelets004.html b/jsf-facelets004.html index e52be18..7b4e566 100644 --- a/jsf-facelets004.html +++ b/jsf-facelets004.html @@ -6,66 +6,51 @@ Using Facelets Templates + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    8.4 Using Facelets Templates

    @@ -247,60 +232,43 @@

    8.4 Using Facelets Templates


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-facelets005.html b/jsf-facelets005.html index 9aed7f3..9a34570 100644 --- a/jsf-facelets005.html +++ b/jsf-facelets005.html @@ -6,66 +6,51 @@ Composite Components + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    8.5 Composite Components

    @@ -257,60 +242,43 @@

    8.5 Composite Components


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-facelets006.html b/jsf-facelets006.html index a3b90f9..235c642 100644 --- a/jsf-facelets006.html +++ b/jsf-facelets006.html @@ -6,66 +6,51 @@ Web Resources + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    8.6 Web Resources

    @@ -143,60 +128,43 @@

    8.6 Web Resources


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-facelets007.html b/jsf-facelets007.html index 8ba97a4..3fd50d9 100644 --- a/jsf-facelets007.html +++ b/jsf-facelets007.html @@ -6,66 +6,51 @@ Relocatable Resources + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    8.7 Relocatable Resources

    @@ -113,60 +98,43 @@

    8.7 Relocatable Resources


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-facelets008.html b/jsf-facelets008.html index 6167c96..8fb2222 100644 --- a/jsf-facelets008.html +++ b/jsf-facelets008.html @@ -6,66 +6,51 @@ Resource Library Contracts + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    8.8 Resource Library Contracts

    @@ -375,60 +360,43 @@

    8.8.1.5 To Run the hello1-rlc Example


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-facelets009.html b/jsf-facelets009.html index 3476cfd..4ba46d3 100644 --- a/jsf-facelets009.html +++ b/jsf-facelets009.html @@ -6,66 +6,51 @@ HTML5-Friendly Markup + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    8.9 HTML5-Friendly Markup

    @@ -712,60 +697,43 @@

    8.9.3.5 To Run the reservation Example
    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-intro.html b/jsf-intro.html index d10df1c..d82865f 100644 --- a/jsf-intro.html +++ b/jsf-intro.html @@ -6,66 +6,51 @@ JavaServer Faces Technology + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    7 JavaServer Faces Technology

    @@ -114,60 +99,43 @@

    7 JavaServer Faces Technology


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-intro001.html b/jsf-intro001.html index 261efe9..68d0b9b 100644 --- a/jsf-intro001.html +++ b/jsf-intro001.html @@ -6,66 +6,51 @@ Introduction to JavaServer Faces Technology + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    7.1 Introduction to JavaServer Faces Technology

    @@ -129,60 +114,43 @@

    7.1 Introduction to JavaSer


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-intro002.html b/jsf-intro002.html index 3fb5b76..94a32af 100644 --- a/jsf-intro002.html +++ b/jsf-intro002.html @@ -6,66 +6,51 @@ What Is a JavaServer Faces Application? + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    7.2 What Is a JavaServer Faces Application?

    @@ -115,13 +100,8 @@

    7.2 What Is a JavaServer Faces A JavaServer Faces technology.

    -

    Figure 7-1 Responding to a Client Request for a JavaServer Faces Page

    -
    -
    -

    Description of Figure 7-1 follows
    -Description of "Figure 7-1 Responding to -a Client Request for a JavaServer Faces Page"
    -

    +
    *Figure 7-1 Responding to a Client Request for a JavaServer Faces Page *
    +

    Diagram that shows a browser accessing the myfacelet.xhtml page using an HTTP Request and the server sending the rendered HTML page using an HTTP Response.

    The web page, myfacelet.xhtml, is built using JavaServer Faces @@ -152,60 +132,43 @@

    7.2 What Is a JavaServer Faces A


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-intro003.html b/jsf-intro003.html index f584e02..c2c2bae 100644 --- a/jsf-intro003.html +++ b/jsf-intro003.html @@ -6,66 +6,51 @@ JavaServer Faces Technology Benefits + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    7.3 JavaServer Faces Technology Benefits

    @@ -95,13 +80,8 @@

    7.3 JavaServer Faces Technology Be in Figure 7-2.

    -

    Figure 7-2 Java Web Application Technologies

    -
    -
    -

    Description of Figure 7-2 follows
    -Description of "Figure 7-2 Java Web -Application Technologies"
    -

    +
    *Figure 7-2 Java Web Application Technologies *
    +

    Diagram of web application technologies. JavaServer Pages, the JSP Standard Tag Library, and JavaServer Faces rest on Java Servlet technology.

    This layering of APIs enables several important application use cases, @@ -144,60 +124,43 @@

    7.3 JavaServer Faces Technology Be


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-intro004.html b/jsf-intro004.html index 1f3e59e..20df165 100644 --- a/jsf-intro004.html +++ b/jsf-intro004.html @@ -6,66 +6,51 @@ A Simple JavaServer Faces Application + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    7.4 A Simple JavaServer Faces Application

    @@ -206,60 +191,43 @@

    7.4 A Simple JavaServer Faces App


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-intro005.html b/jsf-intro005.html index dbc6d20..91c285e 100644 --- a/jsf-intro005.html +++ b/jsf-intro005.html @@ -6,66 +6,51 @@ User Interface Component Model + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    7.5 User Interface Component Model

    @@ -578,60 +563,43 @@

    7.5.5 Validation Model


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-intro006.html b/jsf-intro006.html index 9a7e46a..54ce782 100644 --- a/jsf-intro006.html +++ b/jsf-intro006.html @@ -6,66 +6,51 @@ Navigation Model + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +
    @@ -296,60 +281,43 @@

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-intro007.html b/jsf-intro007.html index a214aba..ec25db7 100644 --- a/jsf-intro007.html +++ b/jsf-intro007.html @@ -6,66 +6,51 @@ The Lifecycle of a JavaServer Faces Application + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    7.7 The Lifecycle of a JavaServer Faces Application

    @@ -139,13 +124,8 @@

    7.7.1 Overview of the JavaSe Figure 7-3 illustrates these steps.

    -

    Figure 7-3 JavaServer Faces Standard Request-Response Lifecycle

    -
    -
    -

    Description of Figure 7-3 follows
    -Description of "Figure 7-3 JavaServer -Faces Standard Request-Response Lifecycle"
    -

    +
    *Figure 7-3 JavaServer Faces Standard Request-Response Lifecycle *
    +

    Flow diagram of Faces request and Faces response, including event and validation processing, error handling, model updating, application invocation.

    The request-response lifecycle handles two kinds of requests: initial @@ -427,60 +407,43 @@

    7.7.7 Render Response Phase


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-intro008.html b/jsf-intro008.html index d6a14ca..8a6afe1 100644 --- a/jsf-intro008.html +++ b/jsf-intro008.html @@ -6,66 +6,51 @@ Partial Processing and Partial Rendering + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    7.8 Partial Processing and Partial Rendering

    @@ -94,60 +79,43 @@

    7.8 Partial Processing and Par


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-intro009.html b/jsf-intro009.html index 32882b5..fb80549 100644 --- a/jsf-intro009.html +++ b/jsf-intro009.html @@ -6,66 +6,51 @@ Further Information about JavaServer Faces Technology + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    7.9 Further Information about JavaServer Faces Technology

    @@ -92,60 +77,43 @@

    7.9 Further Infor


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-page-core.html b/jsf-page-core.html index 885b282..8312406 100644 --- a/jsf-page-core.html +++ b/jsf-page-core.html @@ -6,66 +6,51 @@ Using Converters, Listeners, and Validators + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    11 Using Converters, Listeners, and Validators

    @@ -118,60 +103,43 @@

    11 Using Converters, Listener


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-page-core001.html b/jsf-page-core001.html index b72f95f..45ebf2b 100644 --- a/jsf-page-core001.html +++ b/jsf-page-core001.html @@ -6,66 +6,51 @@ Using the Standard Converters + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    11.1 Using the Standard Converters

    @@ -569,60 +554,43 @@

    11.1.3 Using NumberConverter


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-page-core002.html b/jsf-page-core002.html index 2c97593..24a17a1 100644 --- a/jsf-page-core002.html +++ b/jsf-page-core002.html @@ -6,66 +6,51 @@ Registering Listeners on Components + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    11.2 Registering Listeners on Components

    @@ -279,60 +264,43 @@

    11.2.2 Registering an Act


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-page-core003.html b/jsf-page-core003.html index 7834747..0b5f3eb 100644 --- a/jsf-page-core003.html +++ b/jsf-page-core003.html @@ -6,66 +6,51 @@ Using the Standard Validators + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    11.3 Using the Standard Validators

    @@ -279,60 +264,43 @@

    11.3.2 Using Validator Tags


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-page-core004.html b/jsf-page-core004.html index f6404db..2527b0c 100644 --- a/jsf-page-core004.html +++ b/jsf-page-core004.html @@ -6,66 +6,51 @@ Referencing a Managed Bean Method + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    11.4 Referencing a Managed Bean Method

    @@ -261,60 +246,43 @@

    11.4.4 Referenci


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-page.html b/jsf-page.html index 803e5fb..b60f868 100644 --- a/jsf-page.html +++ b/jsf-page.html @@ -6,66 +6,51 @@ Using JavaServer Faces Technology in Web Pages + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    10 Using JavaServer Faces Technology in Web Pages

    @@ -109,60 +94,43 @@

    10 Using JavaServer Face


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-page001.html b/jsf-page001.html index 9d7edae..33b6280 100644 --- a/jsf-page001.html +++ b/jsf-page001.html @@ -6,66 +6,51 @@ Setting Up a Page + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    10.1 Setting Up a Page

    @@ -145,60 +130,43 @@

    10.1 Setting Up a Page


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-page002.html b/jsf-page002.html index a5e8069..4123cf6 100644 --- a/jsf-page002.html +++ b/jsf-page002.html @@ -6,66 +6,51 @@ Adding Components to a Page Using HTML Tag Library Tags + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    10.2 Adding Components to a Page Using HTML Tag Library Tags

    @@ -625,13 +610,8 @@

    10.2.3 Adding a Form Component

    Login button.

    -

    Figure 10-1 A Typical Form

    -
    -
    -

    Description of Figure 10-1 follows
    -Description of "Figure 10-1 A -Typical Form"
    -

    +
    *Figure 10-1 A Typical Form *
    +

    Form with User Name and Password text fields and a Login button.

    The h:form tag represents the form on the page and encloses all the @@ -681,13 +661,8 @@

    10.2.4 Using Text Components

    Figure 10-2 shows examples of these text components.

    -

    Figure 10-2 Example Text Components

    -
    -
    -

    Description of Figure 10-2 follows
    -Description of "Figure 10-2 -Example Text Components"
    -

    +
    *Figure 10-2 Example Text Components *
    +

    A form.

    Text components can be categorized as either input or output. A @@ -1428,13 +1403,8 @@

    10.2.8 Displaying Compone

    Figure 10-3 shows examples of these components.

    -

    Figure 10-3 Example Components for Selecting One Item

    -
    -
    -

    Description of Figure 10-3 follows
    -Description of "Figure 10-3 Example -Components for Selecting One Item"
    -

    +
    *Figure 10-3 Example Components for Selecting One Item *
    +

    Options, check box, and lists.

    10.2.8.1 Displaying a Check Box Using the h:selectBooleanCheckbox Tag

    @@ -1538,13 +1508,8 @@

    10.2.9 Displaying C

    Figure 10-4 shows examples of these components.

    -

    Figure 10-4 Example Components for Selecting Multiple Values

    -
    -
    -

    Description of Figure 10-4 follows
    -Description of "Figure 10-4 -Example Components for Selecting Multiple Values"
    -

    +
    *Figure 10-4 Example Components for Selecting Multiple Values *
    +

    Check box group, scrollable box, and unscrollable box.

    These tags allow the user to select zero or more values from a set of @@ -2479,60 +2444,43 @@

    10.2


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsf-page003.html b/jsf-page003.html index 0bd580c..e0bae0b 100644 --- a/jsf-page003.html +++ b/jsf-page003.html @@ -6,66 +6,51 @@ Using Core Tags + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    10.3 Using Core Tags

    @@ -413,60 +398,43 @@

    10.3 Using Core Tags


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsonp.html b/jsonp.html index 3524e39..e8256c3 100644 --- a/jsonp.html +++ b/jsonp.html @@ -6,66 +6,51 @@ JSON Processing + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    19 JSON Processing

    @@ -111,60 +96,43 @@

    19 JSON Processing


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsonp001.html b/jsonp001.html index 96dce13..43429c6 100644 --- a/jsonp001.html +++ b/jsonp001.html @@ -6,66 +6,51 @@ Introduction to JSON + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    19.1 Introduction to JSON

    @@ -213,60 +198,43 @@

    19.1.3 Generating and Parsing JSON Dat


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsonp002.html b/jsonp002.html index 4e39a3c..a66af41 100644 --- a/jsonp002.html +++ b/jsonp002.html @@ -6,66 +6,51 @@ JSON Processing in the Java EE Platform + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    19.2 JSON Processing in the Java EE Platform

    @@ -205,60 +190,43 @@

    19.2 JSON Processing in the Jav


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsonp003.html b/jsonp003.html index c7dae17..1d480b2 100644 --- a/jsonp003.html +++ b/jsonp003.html @@ -6,66 +6,51 @@ Using the Object Model API + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    19.3 Using the Object Model API

    @@ -329,60 +314,43 @@

    19.3.4 Writing an Object Model to a


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsonp004.html b/jsonp004.html index 3d4603d..547a33d 100644 --- a/jsonp004.html +++ b/jsonp004.html @@ -6,66 +6,51 @@ Using the Streaming API + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    19.4 Using the Streaming API

    @@ -240,60 +225,43 @@

    19.4.2 Writing JSON Data Using a Ge


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsonp005.html b/jsonp005.html index 547d65f..dc26a53 100644 --- a/jsonp005.html +++ b/jsonp005.html @@ -6,66 +6,51 @@ JSON in Java EE RESTful Web Services + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    19.5 JSON in Java EE RESTful Web Services

    @@ -99,60 +84,43 @@

    19.5 JSON in Java EE RESTful Web S


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsonp006.html b/jsonp006.html index 126c4cb..83a2248 100644 --- a/jsonp006.html +++ b/jsonp006.html @@ -6,66 +6,51 @@ The jsonpmodel Example Application + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    19.6 The jsonpmodel Example Application

    @@ -260,60 +245,43 @@

    19.6.2.2 To Run t


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsonp007.html b/jsonp007.html index 2fdbc39..a57d9cd 100644 --- a/jsonp007.html +++ b/jsonp007.html @@ -6,66 +6,51 @@ The jsonpstreaming Example Application + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    19.7 The jsonpstreaming Example Application

    @@ -260,60 +245,43 @@

    19.7.2.2 To R


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/jsonp008.html b/jsonp008.html index df2dff6..dad099b 100644 --- a/jsonp008.html +++ b/jsonp008.html @@ -6,66 +6,51 @@ Further Information about the Java API for JSON Processing + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    19.8 Further Information about the Java API for JSON Processing

    @@ -80,60 +65,43 @@

    19.8 Further


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/overview.html b/overview.html index 0ad8794..104eacd 100644 --- a/overview.html +++ b/overview.html @@ -6,66 +6,51 @@ Overview + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    1 Overview

    @@ -119,60 +104,43 @@

    1 Overview


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/overview001.html b/overview001.html index 0d54e89..e244c8d 100644 --- a/overview001.html +++ b/overview001.html @@ -6,66 +6,51 @@ Introduction to Java EE + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    1.1 Introduction to Java EE

    @@ -124,60 +109,43 @@

    1.1 Introduction to Java EE


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/overview002.html b/overview002.html index c12e3b1..8ba32f6 100644 --- a/overview002.html +++ b/overview002.html @@ -6,66 +6,51 @@ Java EE 7 Platform Highlights + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    1.2 Java EE 7 Platform Highlights

    @@ -121,60 +106,43 @@

    1.2 Java EE 7 Platform Highlights


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/overview003.html b/overview003.html index 78c9976..44e9dad 100644 --- a/overview003.html +++ b/overview003.html @@ -6,66 +6,51 @@ Java EE Application Model + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    1.3 Java EE Application Model

    @@ -113,60 +98,43 @@

    1.3 Java EE Application Model


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/overview004.html b/overview004.html index d150344..21f3167 100644 --- a/overview004.html +++ b/overview004.html @@ -6,66 +6,51 @@ Distributed Multitiered Applications + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    1.4 Distributed Multitiered Applications

    @@ -111,13 +96,8 @@

    1.4 Distributed Multitiered Applic between the client application and back-end storage.

    -

    Figure 1-1 Multitiered Applications

    -
    -
    -

    Description of Figure 1-1 follows
    -Description of "Figure 1-1 Multitiered -Applications"
    -

    +
    *Figure 1-1 Multitiered Applications *
    +

    Diagram of multitiered application structure, including client tier, web tier, business tier, and EIS tier.

    1.4.1 Security

    @@ -286,13 +266,8 @@

    1.4.3.5 Java EE Server Communications

    -

    Figure 1-2 Server Communication

    -
    -
    -

    Description of Figure 1-2 follows
    -Description of "Figure 1-2 Server -Communication"
    -

    +
    *Figure 1-2 Server Communication *
    +

    Diagram of client-server communication. Application clients access the business tier directly. Browsers, web pages, and applets access the web tier.

    @@ -321,13 +296,8 @@

    1.4.4 Web Components

    processing.

    -

    Figure 1-3 Web Tier and Java EE Applications

    -
    -
    -

    Description of Figure 1-3 follows
    -Description of "Figure 1-3 Web Tier and -Java EE Applications"
    -

    +
    *Figure 1-3 Web Tier and Java EE Applications *
    +

    Diagram of client-server communication showing detail of JavaBeans components and web pages in the web tier.

    @@ -343,13 +313,8 @@

    1.4.5 Business Components

    it back to the client program.

    -

    Figure 1-4 Business and EIS Tiers

    -
    -
    -

    Description of Figure 1-4 follows
    -Description of "Figure 1-4 Business and -EIS Tiers"
    -

    +
    *Figure 1-4 Business and EIS Tiers *
    +

    Diagram of client-server communication showing detail of entities, session beans, and message-driven beans in the business tier.

    @@ -367,60 +332,43 @@

    1.4.6 Enterprise Information System


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/overview005.html b/overview005.html index 7a41d9f..67bd582 100644 --- a/overview005.html +++ b/overview005.html @@ -6,66 +6,51 @@ Java EE Containers + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    1.5 Java EE Containers

    @@ -144,13 +129,8 @@

    1.5.2 Container Types

    Java EE containers, as illustrated in Figure 1-5.

    -

    Figure 1-5 Java EE Server and Containers

    -
    -
    -

    Description of Figure 1-5 follows
    -Description of "Figure 1-5 Java EE Server -and Containers"
    -

    +
    *Figure 1-5 Java EE Server and Containers *
    +

    Diagram of client-server communication showing servlets and web pages in the web tier and enterprise beans in the business tier.

    The server and containers are as follows:

    @@ -187,60 +167,43 @@

    1.5.2 Container Types


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/overview006.html b/overview006.html index aff8439..a2ebc73 100644 --- a/overview006.html +++ b/overview006.html @@ -6,66 +6,51 @@ Web Services Support + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    1.6 Web Services Support

    @@ -178,60 +163,43 @@

    1.6.3 WSDL Standard Format


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/overview007.html b/overview007.html index 7887c6b..f3ba0c5 100644 --- a/overview007.html +++ b/overview007.html @@ -6,66 +6,51 @@ Java EE Application Assembly and Deployment + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    1.7 Java EE Application Assembly and Deployment

    @@ -95,60 +80,43 @@

    1.7 Java EE Application Ass


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/overview008.html b/overview008.html index 52eb6c8..103883f 100644 --- a/overview008.html +++ b/overview008.html @@ -6,66 +6,51 @@ Java EE 7 APIs + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    1.8 Java EE 7 APIs

    @@ -74,52 +59,32 @@

    1.8 Java EE 7 APIs

    containers.

    -

    Figure 1-6 Java EE Containers

    -
    -
    -

    Description of Figure 1-6 follows
    -Description of "Figure 1-6 Java EE -Containers"
    -

    +
    *Figure 1-6 Java EE Containers *
    +

    Diagram of Java EE containers and their relationships

    Figure 1-7 shows the availability of the Java EE 7 APIs in the web container.

    -

    Figure 1-7 Java EE APIs in the Web Container

    -
    -
    -

    Description of Figure 1-7 follows
    -Description of "Figure 1-7 Java EE APIs -in the Web Container"
    -

    +
    *Figure 1-7 Java EE APIs in the Web Container *
    +

    Diagram of Java EE APIs in the web container

    Figure 1-8 shows the availability of the Java EE 7 APIs in the EJB container.

    -

    Figure 1-8 Java EE APIs in the EJB Container

    -
    -
    -

    Description of Figure 1-8 follows
    -Description of "Figure 1-8 Java EE APIs -in the EJB Container"
    -

    +
    *Figure 1-8 Java EE APIs in the EJB Container *
    +

    Diagram of Java EE APIs in the EJB container

    Figure 1-9 shows the availability of the Java EE 7 APIs in the application client container.

    -

    Figure 1-9 Java EE APIs in the Application Client Container

    -
    -
    -

    Description of Figure 1-9 follows
    -Description of "Figure 1-9 Java EE APIs -in the Application Client Container"
    -

    +
    *Figure 1-9 Java EE APIs in the Application Client Container *
    +

    Diagram of Java EE APIs in the application client container

    The following sections give a brief summary of the technologies required @@ -624,60 +589,43 @@

    1.8.21 Batch Applications for


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/overview009.html b/overview009.html index 2c9eca9..0700273 100644 --- a/overview009.html +++ b/overview009.html @@ -6,66 +6,51 @@ Java EE 7 APIs in the Java Platform, Standard Edition 7 + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    1.9 Java EE 7 APIs in the Java Platform, Standard Edition 7

    @@ -251,60 +236,43 @@

    1.9.9 Common Annotations for t


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/overview010.html b/overview010.html index e2d4f6c..46ec179 100644 --- a/overview010.html +++ b/overview010.html @@ -6,66 +6,51 @@ GlassFish Server Tools + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    1.10 GlassFish Server Tools

    @@ -170,60 +155,43 @@

    1.10 GlassFish Server Tools


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/packaging.html b/packaging.html index 15c221c..56f67c9 100644 --- a/packaging.html +++ b/packaging.html @@ -6,66 +6,51 @@ Packaging + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    5 Packaging

    @@ -99,60 +84,43 @@

    5 Packaging


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/packaging001.html b/packaging001.html index 61f9539..da11198 100644 --- a/packaging001.html +++ b/packaging001.html @@ -6,66 +6,51 @@ Packaging Applications + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    5.1 Packaging Applications

    @@ -95,13 +80,8 @@

    5.1 Packaging Applications

    specified in the source code.

    -

    Figure 5-1 EAR File Structure

    -
    -
    -

    Description of Figure 5-1 follows
    -Description of "Figure 5-1 EAR File -Structure"
    -

    +
    *Figure 5-1 EAR File Structure *
    +

    Diagram of EAR file structure. META-INF and web, application client, EJB, and resource adapter modules are under the assembly root.

    The two types of deployment descriptors are Java EE and runtime. A Java @@ -159,60 +139,43 @@

    5.1 Packaging Applications


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/packaging002.html b/packaging002.html index 4547aee..ed91a86 100644 --- a/packaging002.html +++ b/packaging002.html @@ -6,66 +6,51 @@ Packaging Enterprise Beans + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    5.2 Packaging Enterprise Beans

    @@ -99,13 +84,8 @@

    5.2.1 Packaging Enterpris file. Figure 5-2 shows the contents of an EJB JAR file.

    -

    Figure 5-2 Structure of an Enterprise Bean JAR

    -
    -
    -

    Description of Figure 5-2 follows
    -Description of "Figure 5-2 Structure of -an Enterprise Bean JAR"
    -

    +
    *Figure 5-2 Structure of an Enterprise Bean JAR *
    +

    Diagram showing the structure and contents of an enterprise bean JAR file.

    @@ -186,60 +166,43 @@

    5.2.2 Packaging Enterprise Be


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/packaging003.html b/packaging003.html index 1ea4ee1..52e6a88 100644 --- a/packaging003.html +++ b/packaging003.html @@ -6,66 +6,51 @@ Packaging Web Archives + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    5.3 Packaging Web Archives

    @@ -149,72 +134,50 @@

    5.3 Packaging Web Archives

    5-3.

    -

    Figure 5-3 Web Module Structure

    -
    -
    -

    Description of Figure 5-3 follows
    -Description of "Figure 5-3 Web Module -Structure"
    -

    +
    *Figure 5-3 Web Module Structure *
    +

    Diagram of web module structure. WEB-INF and web pages are under the root. Under WEB-INF are descriptors and the lib and classes directories.


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/packaging004.html b/packaging004.html index ff08a7e..d5cca97 100644 --- a/packaging004.html +++ b/packaging004.html @@ -6,66 +6,51 @@ Packaging Resource Adapter Archives + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    5.4 Packaging Resource Adapter Archives

    @@ -100,60 +85,43 @@

    5.4 Packaging Resource Adapter Arch


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/partbeanvalidation.html b/partbeanvalidation.html index c72ca63..2123b84 100644 --- a/partbeanvalidation.html +++ b/partbeanvalidation.html @@ -6,66 +6,51 @@ Bean Validation + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +
    @@ -102,60 +87,43 @@

    Bean Validation


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/partcasestudies.html b/partcasestudies.html index b6d02ae..bd08aa4 100644 --- a/partcasestudies.html +++ b/partcasestudies.html @@ -6,66 +6,51 @@ Case Studies + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +
    @@ -106,60 +91,43 @@

    Case Studies


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/partcdi.html b/partcdi.html index a8d4f8a..b1079aa 100644 --- a/partcdi.html +++ b/partcdi.html @@ -6,66 +6,51 @@ Contexts and Dependency Injection for Java EE + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +
    @@ -110,60 +95,43 @@

    Contexts and Dependency I


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/partentbeans.html b/partentbeans.html index 4f53b4a..fa5e93a 100644 --- a/partentbeans.html +++ b/partentbeans.html @@ -6,66 +6,51 @@ Enterprise Beans + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +
    @@ -113,60 +98,43 @@

    Enterprise Beans


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/partintro.html b/partintro.html index 7d56b93..fc16d9b 100644 --- a/partintro.html +++ b/partintro.html @@ -6,66 +6,51 @@ Introduction + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +
    @@ -100,60 +85,43 @@

    Introduction


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/partmessaging.html b/partmessaging.html index 3d77b74..e98d271 100644 --- a/partmessaging.html +++ b/partmessaging.html @@ -6,66 +6,51 @@ Messaging + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +
    @@ -101,60 +86,43 @@

    Messaging


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/partpersist.html b/partpersist.html index 1c5f59e..80f213a 100644 --- a/partpersist.html +++ b/partpersist.html @@ -6,66 +6,51 @@ Persistence + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +
    @@ -126,60 +111,43 @@

    Persistence


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/partplatform.html b/partplatform.html index a11aee2..4c69c2a 100644 --- a/partplatform.html +++ b/partplatform.html @@ -6,66 +6,51 @@ Platform Basics + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +
    @@ -103,60 +88,43 @@

    Platform Basics


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/partsecurity.html b/partsecurity.html index 09d97a5..3b29a66 100644 --- a/partsecurity.html +++ b/partsecurity.html @@ -6,66 +6,51 @@ Security + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +
    @@ -110,60 +95,43 @@

    Security


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/partsupporttechs.html b/partsupporttechs.html index 163df5f..f07e22f 100644 --- a/partsupporttechs.html +++ b/partsupporttechs.html @@ -6,66 +6,51 @@ Java EE Supporting Technologies + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +
    @@ -115,60 +100,43 @@

    Java EE Supporting Technologies


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/partwebsvcs.html b/partwebsvcs.html index 117dccc..0be19ab 100644 --- a/partwebsvcs.html +++ b/partwebsvcs.html @@ -6,66 +6,51 @@ Web Services + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +
    @@ -113,60 +98,43 @@

    Web Services


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/partwebtier.html b/partwebtier.html index 9329355..64749b5 100644 --- a/partwebtier.html +++ b/partwebtier.html @@ -6,66 +6,51 @@ The Web Tier + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +
    @@ -148,60 +133,43 @@

    The Web Tier


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/persistence-basicexamples.html b/persistence-basicexamples.html index 89ea2d8..a43d2ed 100644 --- a/persistence-basicexamples.html +++ b/persistence-basicexamples.html @@ -6,66 +6,51 @@ Running the Persistence Examples + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    38 Running the Persistence Examples

    @@ -98,60 +83,43 @@

    38 Running the Persistence Examples
    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/persistence-basicexamples001.html b/persistence-basicexamples001.html index 750de6c..b4786ae 100644 --- a/persistence-basicexamples001.html +++ b/persistence-basicexamples001.html @@ -6,66 +6,51 @@ Overview of the Persistence Examples + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    38.1 Overview of the Persistence Examples

    @@ -82,60 +67,43 @@

    38.1 Overview of the Persistence E


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/persistence-basicexamples002.html b/persistence-basicexamples002.html index 69e2100..3f62872 100644 --- a/persistence-basicexamples002.html +++ b/persistence-basicexamples002.html @@ -6,66 +6,51 @@ The order Application + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    38.2 The order Application

    @@ -97,13 +82,8 @@

    38.2 The order Application

    Figure 38-1.

    -

    Figure 38-1 Database Schema for the order Application

    -
    -
    -

    Description of Figure 38-1 follows
    -Description of "Figure 38-1 Database -Schema for the order Application"
    -

    +
    *Figure 38-1 Database Schema for the order Application *
    +

    Diagram showing the database schema for the order application

    @@ -995,60 +975,43 @@

    38.2.8.2 To Run the order Example
    -

    - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/persistence-basicexamples003.html b/persistence-basicexamples003.html index fae06d2..d454768 100644 --- a/persistence-basicexamples003.html +++ b/persistence-basicexamples003.html @@ -6,66 +6,51 @@ The roster Application + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    38.3 The roster Application

    @@ -87,13 +72,8 @@

    38.3 The roster Application

    is shown in Figure 38-2.

    -

    Figure 38-2 Database Schema for the roster Application

    -
    -
    -

    Description of Figure 38-2 follows
    -Description of "Figure 38-2 Database -Schema for the roster Application"
    -

    +
    *Figure 38-2 Database Schema for the roster Application *
    +

    Diagram showing the database schema for the roster application

    @@ -625,60 +605,43 @@

    38.3.5.2 To Run the roster Exampl
    -

    - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/persistence-basicexamples004.html b/persistence-basicexamples004.html index 69bdc77..7d573a9 100644 --- a/persistence-basicexamples004.html +++ b/persistence-basicexamples004.html @@ -6,66 +6,51 @@ The address-book Application + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    38.4 The address-book Application

    @@ -396,60 +381,43 @@

    38.4.4.2 To Run the address


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/persistence-cache.html b/persistence-cache.html index 2bffbd7..dd5c184 100644 --- a/persistence-cache.html +++ b/persistence-cache.html @@ -6,66 +6,51 @@ Using a Second-Level Cache with Java Persistence API Applications + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    44 Using a Second-Level Cache with Java Persistence API Applications

    @@ -93,60 +78,43 @@

    44 Us


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/persistence-cache001.html b/persistence-cache001.html index 3ac529e..6896d6b 100644 --- a/persistence-cache001.html +++ b/persistence-cache001.html @@ -6,66 +6,51 @@ Overview of the Second-Level Cache + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    44.1 Overview of the Second-Level Cache

    @@ -243,60 +228,43 @@

    44.1.1 Controlling whether E


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/persistence-cache002.html b/persistence-cache002.html index c795c0b..d69cb03 100644 --- a/persistence-cache002.html +++ b/persistence-cache002.html @@ -6,66 +6,51 @@ Specifying the Cache Mode Settings to Improve Performance + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    44.2 Specifying the Cache Mode Settings to Improve Performance

    @@ -405,60 +390,43 @@

    44.2.2.4 Removing All Data from the Ca


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/persistence-criteria.html b/persistence-criteria.html index 9c60d3c..8303520 100644 --- a/persistence-criteria.html +++ b/persistence-criteria.html @@ -6,66 +6,51 @@ Using the Criteria API to Create Queries + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    40 Using the Criteria API to Create Queries

    @@ -98,60 +83,43 @@

    40 Using the Criteria API to C


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/persistence-criteria001.html b/persistence-criteria001.html index 7e9a92b..def8567 100644 --- a/persistence-criteria001.html +++ b/persistence-criteria001.html @@ -6,66 +6,51 @@ Overview of the Criteria and Metamodel APIs + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    40.1 Overview of the Criteria and Metamodel APIs

    @@ -208,60 +193,43 @@

    40.1 Overview of the Criter


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/persistence-criteria002.html b/persistence-criteria002.html index a2428c5..a7ce23b 100644 --- a/persistence-criteria002.html +++ b/persistence-criteria002.html @@ -6,66 +6,51 @@ Using the Metamodel API to Model Entity Classes + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    40.2 Using the Metamodel API to Model Entity Classes

    @@ -206,60 +191,43 @@

    40.2.1 Using Metamodel Classes


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/persistence-criteria003.html b/persistence-criteria003.html index 041b147..50a200d 100644 --- a/persistence-criteria003.html +++ b/persistence-criteria003.html @@ -6,66 +6,51 @@ Using the Criteria API and Metamodel API to Create Basic Typesafe Queries + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    40.3 Using the Criteria API and Metamodel API to Create Basic Typesafe Queries

    @@ -718,60 +703,43 @@

    40.3.7.2 Collection-Valued Query Result


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/persistence-entitygraphs.html b/persistence-entitygraphs.html index b0969b1..17fd1c6 100644 --- a/persistence-entitygraphs.html +++ b/persistence-entitygraphs.html @@ -6,66 +6,51 @@ Creating Fetch Plans with Entity Graphs + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    43 Creating Fetch Plans with Entity Graphs

    @@ -99,60 +84,43 @@

    43 Creating Fetch Plans with En


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/persistence-entitygraphs001.html b/persistence-entitygraphs001.html index f22d3be..4a84565 100644 --- a/persistence-entitygraphs001.html +++ b/persistence-entitygraphs001.html @@ -6,66 +6,51 @@ Overview of Using Fetch Plans and Entity Graphs + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    43.1 Overview of Using Fetch Plans and Entity Graphs

    @@ -97,60 +82,43 @@

    43.1 Overview of Using


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/persistence-entitygraphs002.html b/persistence-entitygraphs002.html index be0ae33..1d16e21 100644 --- a/persistence-entitygraphs002.html +++ b/persistence-entitygraphs002.html @@ -6,66 +6,51 @@ Entity Graph Basics + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    43.2 Entity Graph Basics

    @@ -203,60 +188,43 @@

    43.2.2.2 Load Graphs


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/persistence-entitygraphs003.html b/persistence-entitygraphs003.html index 084ebfa..e620388 100644 --- a/persistence-entitygraphs003.html +++ b/persistence-entitygraphs003.html @@ -6,66 +6,51 @@ Using Named Entity Graphs + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    43.3 Using Named Entity Graphs

    @@ -183,60 +168,43 @@

    43.3.2 Obtaini


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/persistence-entitygraphs004.html b/persistence-entitygraphs004.html index 62bcf7a..e1908d0 100644 --- a/persistence-entitygraphs004.html +++ b/persistence-entitygraphs004.html @@ -6,66 +6,51 @@ Using Entity Graphs in Query Operations + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    43.4 Using Entity Graphs in Query Operations

    @@ -106,60 +91,43 @@

    43.4 Using Entity Graphs in Que


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/persistence-intro.html b/persistence-intro.html index 195c537..189cfbd 100644 --- a/persistence-intro.html +++ b/persistence-intro.html @@ -6,66 +6,51 @@ Introduction to the Java Persistence API + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    37 Introduction to the Java Persistence API

    @@ -106,60 +91,43 @@

    37 Introduction to the Java Pe


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/persistence-intro001.html b/persistence-intro001.html index 3e25050..d97bcbb 100644 --- a/persistence-intro001.html +++ b/persistence-intro001.html @@ -6,66 +6,51 @@ Overview of the Java Persistence API + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    37.1 Overview of the Java Persistence API

    @@ -94,60 +79,43 @@

    37.1 Overview of the Java Persiste


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/persistence-intro002.html b/persistence-intro002.html index cf0684a..e3af6f4 100644 --- a/persistence-intro002.html +++ b/persistence-intro002.html @@ -6,66 +6,51 @@ Entities + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    37.2 Entities

    @@ -927,60 +912,43 @@

    37.2.6 Embeddable Classes in Entities
    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/persistence-intro003.html b/persistence-intro003.html index 544c7ed..da3d8cf 100644 --- a/persistence-intro003.html +++ b/persistence-intro003.html @@ -6,66 +6,51 @@ Entity Inheritance + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    37.3 Entity Inheritance

    @@ -394,60 +379,43 @@

    37.3.4.3 The Joined Subclass Strategy


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/persistence-intro004.html b/persistence-intro004.html index 845f746..c1a4dff 100644 --- a/persistence-intro004.html +++ b/persistence-intro004.html @@ -6,66 +6,51 @@ Managing Entities + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    37.4 Managing Entities

    @@ -503,60 +488,43 @@

    37.4.2 Persistence Units


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/persistence-intro005.html b/persistence-intro005.html index 31b1fe1..65fee83 100644 --- a/persistence-intro005.html +++ b/persistence-intro005.html @@ -6,66 +6,51 @@ Querying Entities + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    37.5 Querying Entities

    @@ -119,60 +104,43 @@

    37.5 Querying Entities


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/persistence-intro006.html b/persistence-intro006.html index 4e040e2..44e87d5 100644 --- a/persistence-intro006.html +++ b/persistence-intro006.html @@ -6,66 +6,51 @@ Database Schema Creation + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    37.6 Database Schema Creation

    @@ -271,60 +256,43 @@

    37.6.2 Loading Data Using SQL Scripts
    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/persistence-intro007.html b/persistence-intro007.html index f1d2258..178bc12 100644 --- a/persistence-intro007.html +++ b/persistence-intro007.html @@ -6,66 +6,51 @@ Further Information about Persistence + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    37.7 Further Information about Persistence

    @@ -105,60 +90,43 @@

    37.7 Further Information about Pe


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/persistence-locking.html b/persistence-locking.html index 5218a81..bdeeb6e 100644 --- a/persistence-locking.html +++ b/persistence-locking.html @@ -6,66 +6,51 @@ Controlling Concurrent Access to Entity Data with Locking + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    42 Controlling Concurrent Access to Entity Data with Locking

    @@ -92,60 +77,43 @@

    42 Controllin


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/persistence-locking001.html b/persistence-locking001.html index 3ea98fb..9563559 100644 --- a/persistence-locking001.html +++ b/persistence-locking001.html @@ -6,66 +6,51 @@ Overview of Entity Locking and Concurrency + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    42.1 Overview of Entity Locking and Concurrency

    @@ -198,60 +183,43 @@

    42.1.1 Using Optimistic Locking


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/persistence-locking002.html b/persistence-locking002.html index 2ba571e..b71af66 100644 --- a/persistence-locking002.html +++ b/persistence-locking002.html @@ -6,66 +6,51 @@ Lock Modes + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    42.2 Lock Modes

    @@ -321,60 +306,43 @@

    42.2.2.1 Pessimistic Locking Timeouts


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/persistence-querylanguage.html b/persistence-querylanguage.html index 478aa79..6a31802 100644 --- a/persistence-querylanguage.html +++ b/persistence-querylanguage.html @@ -6,66 +6,51 @@ The Java Persistence Query Language + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    39 The Java Persistence Query Language

    @@ -109,60 +94,43 @@

    39 The Java Persistence Query Langu


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/persistence-querylanguage001.html b/persistence-querylanguage001.html index f1b0f32..a36d50e 100644 --- a/persistence-querylanguage001.html +++ b/persistence-querylanguage001.html @@ -6,66 +6,51 @@ Overview of the Java Persistence Query Language + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    39.1 Overview of the Java Persistence Query Language

    @@ -89,60 +74,43 @@

    39.1 Overview of the Ja


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/persistence-querylanguage002.html b/persistence-querylanguage002.html index b530be6..7814fd3 100644 --- a/persistence-querylanguage002.html +++ b/persistence-querylanguage002.html @@ -6,66 +6,51 @@ Query Language Terminology + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    39.2 Query Language Terminology

    @@ -116,60 +101,43 @@

    39.2 Query Language Terminology


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/persistence-querylanguage003.html b/persistence-querylanguage003.html index c857ed8..9b1e8fc 100644 --- a/persistence-querylanguage003.html +++ b/persistence-querylanguage003.html @@ -6,66 +6,51 @@ Creating Queries Using the Java Persistence Query Language + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    39.3 Creating Queries Using the Java Persistence Query Language

    @@ -182,60 +167,43 @@

    39.3.2 Positional Parameters in Querie


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/persistence-querylanguage004.html b/persistence-querylanguage004.html index 143999a..3a9f3d7 100644 --- a/persistence-querylanguage004.html +++ b/persistence-querylanguage004.html @@ -6,66 +6,51 @@ Simplified Query Language Syntax + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    39.4 Simplified Query Language Syntax

    @@ -178,60 +163,43 @@

    39.4.2 Update and Delete Statements


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/persistence-querylanguage005.html b/persistence-querylanguage005.html index 99d6975..813fc67 100644 --- a/persistence-querylanguage005.html +++ b/persistence-querylanguage005.html @@ -6,66 +6,51 @@ Example Queries + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    39.5 Example Queries

    @@ -635,60 +620,43 @@

    39.5.4.2 Delete Queries


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/persistence-querylanguage006.html b/persistence-querylanguage006.html index 8e0caed..f3181da 100644 --- a/persistence-querylanguage006.html +++ b/persistence-querylanguage006.html @@ -6,66 +6,51 @@ Full Query Language Syntax + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    39.6 Full Query Language Syntax

    @@ -2183,60 +2168,43 @@

    39.6.8 GROUP BY and HAVING Clauses


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/persistence-string-queries.html b/persistence-string-queries.html index 2427ba8..2765137 100644 --- a/persistence-string-queries.html +++ b/persistence-string-queries.html @@ -6,66 +6,51 @@ Creating and Using String-Based Criteria Queries + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    41 Creating and Using String-Based Criteria Queries

    @@ -96,60 +81,43 @@

    41 Creating and Using


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/persistence-string-queries001.html b/persistence-string-queries001.html index 2b9dc30..25fd22a 100644 --- a/persistence-string-queries001.html +++ b/persistence-string-queries001.html @@ -6,66 +6,51 @@ Overview of String-Based Criteria API Queries + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    41.1 Overview of String-Based Criteria API Queries

    @@ -102,60 +87,43 @@

    41.1 Overview of String-B


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/persistence-string-queries002.html b/persistence-string-queries002.html index cf3af86..de22f98 100644 --- a/persistence-string-queries002.html +++ b/persistence-string-queries002.html @@ -6,66 +6,51 @@ Creating String-Based Queries + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    41.2 Creating String-Based Queries

    @@ -152,60 +137,43 @@

    41.2 Creating String-Based Queries


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/persistence-string-queries003.html b/persistence-string-queries003.html index 0878510..128f1d8 100644 --- a/persistence-string-queries003.html +++ b/persistence-string-queries003.html @@ -6,66 +6,51 @@ Executing String-Based Queries + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    41.3 Executing String-Based Queries

    @@ -89,60 +74,43 @@

    41.3 Executing String-Based Queries


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/preface.html b/preface.html index fedbd2b..2e710fc 100644 --- a/preface.html +++ b/preface.html @@ -6,66 +6,51 @@ Preface + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    Preface

    @@ -322,60 +307,43 @@

    Default Paths and File Names


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/resource-creation.html b/resource-creation.html index ed5b94a..e21d4aa 100644 --- a/resource-creation.html +++ b/resource-creation.html @@ -6,66 +6,51 @@ Resource Creation + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    3 Resource Creation

    @@ -100,60 +85,43 @@

    3 Resource Creation


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/resource-creation001.html b/resource-creation001.html index ba589f0..b48cd27 100644 --- a/resource-creation001.html +++ b/resource-creation001.html @@ -6,66 +6,51 @@ Resources and JNDI Naming + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    3.1 Resources and JNDI Naming

    @@ -112,60 +97,43 @@

    3.1 Resources and JNDI Naming


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/resource-creation002.html b/resource-creation002.html index 5a6391b..ebc57c9 100644 --- a/resource-creation002.html +++ b/resource-creation002.html @@ -6,66 +6,51 @@ DataSource Objects and Connection Pools + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    3.2 DataSource Objects and Connection Pools

    @@ -138,60 +123,43 @@

    3.2 DataSource Objects and Conn


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/resource-creation003.html b/resource-creation003.html index 9a434ed..8ac94dd 100644 --- a/resource-creation003.html +++ b/resource-creation003.html @@ -6,66 +6,51 @@ Creating Resources Administratively + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    3.3 Creating Resources Administratively

    @@ -100,60 +85,43 @@

    3.3 Creating Resources Administrati


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/resources.html b/resources.html index 228332c..839ab57 100644 --- a/resources.html +++ b/resources.html @@ -6,66 +6,51 @@ Resource Adapters and Contracts + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    52 Resource Adapters and Contracts

    @@ -101,60 +86,43 @@

    52 Resource Adapters and Contracts


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/resources001.html b/resources001.html index ea90fd4..7d64881 100644 --- a/resources001.html +++ b/resources001.html @@ -6,66 +6,51 @@ What Is a Resource Adapter? + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    52.1 What Is a Resource Adapter?

    @@ -79,13 +64,8 @@

    52.1 What Is a Resource Adapter?

    facilitates communication between a Java EE application and an EIS.

    -

    Figure 52-1 Resource Adapters

    -
    -
    -

    Description of Figure 52-1 follows
    -Description of "Figure 52-1 Resource -Adapters"
    -

    +
    *Figure 52-1 Resource Adapters *
    +

    Resource Adapter Contracts

    Stored in a Resource Adapter Archive (RAR) file, a resource adapter can @@ -269,60 +249,43 @@

    52.1.3 Outbound and Inbound Contracts
    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/resources002.html b/resources002.html index 7abe4e5..011e9b4 100644 --- a/resources002.html +++ b/resources002.html @@ -6,66 +6,51 @@ Metadata Annotations + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    52.2 Metadata Annotations

    @@ -207,60 +192,43 @@

    52.2 Metadata Annotations


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/resources003.html b/resources003.html index 6f0f2eb..7999e79 100644 --- a/resources003.html +++ b/resources003.html @@ -6,66 +6,51 @@ Common Client Interface + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    52.3 Common Client Interface

    @@ -139,60 +124,43 @@

    52.3 Common Client Interface


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/resources004.html b/resources004.html index d6b92bb..27f875a 100644 --- a/resources004.html +++ b/resources004.html @@ -6,66 +6,51 @@ Using Resource Adapters with Contexts and Dependency Injection for Java EE (CDI) + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    52.4 Using Resource Adapters with Contexts and Dependency Injection for Java EE (CDI)

    @@ -114,60 +99,43 @@

    - - - - - - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    - - - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    - - - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    - - - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/resources005.html b/resources005.html index f975b55..8d42bec 100644 --- a/resources005.html +++ b/resources005.html @@ -6,66 +6,51 @@ Further Information about Resource Adapters + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    52.5 Further Information about Resource Adapters

    @@ -104,60 +89,43 @@

    52.5 Further Information ab


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/security-advanced.html b/security-advanced.html index b7ac662..9b7f995 100644 --- a/security-advanced.html +++ b/security-advanced.html @@ -6,66 +6,51 @@ Java EE Security: Advanced Topics + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    50 Java EE Security: Advanced Topics

    @@ -112,60 +97,43 @@

    50 Java EE Security: Advanced Topics
    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/security-advanced001.html b/security-advanced001.html index 8596d99..ef22021 100644 --- a/security-advanced001.html +++ b/security-advanced001.html @@ -6,66 +6,51 @@ Working with Digital Certificates + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    50.1 Working with Digital Certificates

    @@ -400,60 +385,43 @@

    50.1.3.1 To Specify a Differe


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/security-advanced002.html b/security-advanced002.html index 8f79f4a..9732ade 100644 --- a/security-advanced002.html +++ b/security-advanced002.html @@ -6,66 +6,51 @@ Authentication Mechanisms + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    50.2 Authentication Mechanisms

    @@ -166,13 +151,8 @@

    50.2.2 Mutual Authentication

    mutual authentication.

    -

    Figure 50-1 Certificate-Based Mutual Authentication

    -
    -
    -

    Description of Figure 50-1 follows
    -Description of "Figure 50-1 -Certificate-Based Mutual Authentication"
    -

    +
    *Figure 50-1 Certificate-Based Mutual Authentication *
    +

    Diagram of six steps in mutual authentication with certificates

    In user name/password-based mutual authentication, the following actions @@ -207,13 +187,8 @@

    50.2.2 Mutual Authentication

    name/password-based mutual authentication.

    -

    Figure 50-2 User Name/Password-Based Mutual Authentication

    -
    -
    -

    Description of Figure 50-2 follows
    -Description of "Figure 50-2 User -Name/Password-Based Mutual Authentication"
    -

    +
    *Figure 50-2 User Name/Password-Based Mutual Authentication *
    +

    Diagram of five steps in mutual authentication with user name and password

    50.2.2.1 Enabling Mutual Authentication over SSL

    @@ -374,60 +349,43 @@

    50.2.2.2 Creati


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/security-advanced003.html b/security-advanced003.html index c250001..c472e99 100644 --- a/security-advanced003.html +++ b/security-advanced003.html @@ -6,66 +6,51 @@ Using the JDBC Realm for User Authentication + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    50.3 Using the JDBC Realm for User Authentication

    @@ -231,60 +216,43 @@

    50.3.1 To Configure a JDBC Aut


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/security-advanced004.html b/security-advanced004.html index 69028ef..d9876bd 100644 --- a/security-advanced004.html +++ b/security-advanced004.html @@ -6,66 +6,51 @@ Securing HTTP Resources + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    50.4 Securing HTTP Resources

    @@ -259,60 +244,43 @@

    50.4 Securing HTTP Resources


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/security-advanced005.html b/security-advanced005.html index 9947891..b61e971 100644 --- a/security-advanced005.html +++ b/security-advanced005.html @@ -6,66 +6,51 @@ Securing Application Clients + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    50.5 Securing Application Clients

    @@ -164,60 +149,43 @@

    50.5.2 Using Programmatic Login


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/security-advanced006.html b/security-advanced006.html index d2d689f..d33200c 100644 --- a/security-advanced006.html +++ b/security-advanced006.html @@ -6,66 +6,51 @@ Securing Enterprise Information Systems Applications + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    50.6 Securing Enterprise Information Systems Applications

    @@ -342,60 +327,43 @@

    50.6.5 Mapping an Ap


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/security-advanced007.html b/security-advanced007.html index c3d1cdc..2a45ca5 100644 --- a/security-advanced007.html +++ b/security-advanced007.html @@ -6,66 +6,51 @@ Configuring Security Using Deployment Descriptors + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    50.7 Configuring Security Using Deployment Descriptors

    @@ -191,60 +176,43 @@

    - - - - - - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    - - - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    - - - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    - - - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/security-advanced008.html b/security-advanced008.html index c660c51..90e84c2 100644 --- a/security-advanced008.html +++ b/security-advanced008.html @@ -6,66 +6,51 @@ Further Information about Advanced Security Topics + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    50.8 Further Information about Advanced Security Topics

    @@ -106,60 +91,43 @@

    50.8 Further Informa


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/security-intro.html b/security-intro.html index 5b4c811..bc75863 100644 --- a/security-intro.html +++ b/security-intro.html @@ -6,66 +6,51 @@ Introduction to Security in the Java EE Platform + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    47 Introduction to Security in the Java EE Platform

    @@ -108,60 +93,43 @@

    47 Introduction to Sec


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/security-intro001.html b/security-intro001.html index 6e9846a..451a5a8 100644 --- a/security-intro001.html +++ b/security-intro001.html @@ -6,66 +6,51 @@ Overview of Java EE Security + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    47.1 Overview of Java EE Security

    @@ -159,13 +144,8 @@

    47.1.1.1 Step 1: Initial Request

    application URL. This action is shown in Figure 47-1.

    -

    Figure 47-1 Initial Request

    -
    -
    -

    Description of Figure 47-1 follows
    -Description of "Figure 47-1 Initial -Request"
    -

    +
    *Figure 47-1 Initial Request *
    +

    Diagram of initial request from web client to web server for access to a protected resource

    Since the client has not yet authenticated itself to the application @@ -188,13 +168,8 @@

    47.1.1.2 Step 2: Initial Authentication

    -

    Figure 47-2 Initial Authentication

    -
    -
    -

    Description of Figure 47-2 follows
    -Description of "Figure 47-2 Initial -Authentication"
    -

    +
    *Figure 47-2 Initial Authentication *
    +

    Diagram of initial authentication: server sends form to client, which sends authentication data to server for validation

    @@ -210,13 +185,8 @@

    47.1.1.3 Step 3: URL Authorization

    Figure 47-3 shows this process.

    -

    Figure 47-3 URL Authorization

    -
    -
    -

    Description of Figure 47-3 follows
    -Description of "Figure 47-3 URL -Authorization"
    -

    +
    *Figure 47-3 URL Authorization *
    +

    Diagram of URL authorization

    The web server’s evaluation stops with an "is authorized" outcome when @@ -232,13 +202,8 @@

    47.1.1.4 Step 4: Fulfilling the original URL request, as shown in Figure 47-4.

    -

    Figure 47-4 Fulfilling the Original Request

    -
    -
    -

    Description of Figure 47-4 follows
    -Description of "Figure 47-4 Fulfilling -the Original Request"
    -

    +
    *Figure 47-4 Fulfilling the Original Request *
    +

    Diagram of request fulfillment, showing server returning result to client

    In our example, the response URL of a web page is returned, enabling the @@ -258,13 +223,8 @@

    47.1.1.5 Step 5: Invok one in the web server and one in the EJB container.

    -

    Figure 47-5 Invoking an Enterprise Bean Business Method

    -
    -
    -

    Description of Figure 47-5 follows
    -Description of "Figure 47-5 Invoking an -Enterprise Bean Business Method"
    -

    +
    *Figure 47-5 Invoking an Enterprise Bean Business Method *
    +

    Diagram of authorization process between web component and enterprise bean

    The EJB container is responsible for enforcing access control on the @@ -402,60 +362,43 @@

    47.1.3 Characteristics of Appli


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/security-intro002.html b/security-intro002.html index 5dae88a..c94af19 100644 --- a/security-intro002.html +++ b/security-intro002.html @@ -6,66 +6,51 @@ Security Mechanisms + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    47.2 Security Mechanisms

    @@ -356,60 +341,43 @@

    47.2.2.3 Message-Layer Security


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/security-intro003.html b/security-intro003.html index 1259ffa..ed7af6d 100644 --- a/security-intro003.html +++ b/security-intro003.html @@ -6,66 +6,51 @@ Securing Containers + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    47.3 Securing Containers

    @@ -196,60 +181,43 @@

    47.3.3 Using Programmatic Security


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/security-intro004.html b/security-intro004.html index 1c4df0b..78b613f 100644 --- a/security-intro004.html +++ b/security-intro004.html @@ -6,66 +6,51 @@ Securing GlassFish Server + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    47.4 Securing GlassFish Server

    @@ -119,60 +104,43 @@

    47.4 Securing GlassFish Server


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/security-intro005.html b/security-intro005.html index bb54b98..32a6ae7 100644 --- a/security-intro005.html +++ b/security-intro005.html @@ -6,66 +6,51 @@ Working with Realms, Users, Groups, and Roles + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    47.5 Working with Realms, Users, Groups, and Roles

    @@ -134,13 +119,8 @@

    47.5.1 What Are Realms, Users, G Roles.

    -

    Figure 47-6 Mapping Roles to Users and Groups

    -
    -
    -

    Description of Figure 47-6 follows
    -Description of "Figure 47-6 Mapping Roles -to Users and Groups"
    -

    +
    *Figure 47-6 Mapping Roles to Users and Groups *
    +

    Diagram of role mapping, showing creation of users and groups, definition of roles, and mapping of roles to users and groups

    The following sections provide more information on realms, users, @@ -538,60 +518,43 @@

    47.5.4 Mapping Roles to Users and Gro


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/security-intro006.html b/security-intro006.html index b699c49..c79d779 100644 --- a/security-intro006.html +++ b/security-intro006.html @@ -6,66 +6,51 @@ Establishing a Secure Connection Using SSL + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    47.6 Establishing a Secure Connection Using SSL

    @@ -195,60 +180,43 @@

    47.6.1 Verifying and Configuring


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/security-intro007.html b/security-intro007.html index a1b2f22..452d8fd 100644 --- a/security-intro007.html +++ b/security-intro007.html @@ -6,66 +6,51 @@ Further Information about Security + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    47.7 Further Information about Security

    @@ -116,60 +101,43 @@

    47.7 Further Information about Secur


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/security-javaee.html b/security-javaee.html index 5d0a146..0c88216 100644 --- a/security-javaee.html +++ b/security-javaee.html @@ -6,66 +6,51 @@ Getting Started Securing Enterprise Applications + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    49 Getting Started Securing Enterprise Applications

    @@ -94,60 +79,43 @@

    49 Getting Started Sec


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/security-javaee001.html b/security-javaee001.html index e810475..6267e44 100644 --- a/security-javaee001.html +++ b/security-javaee001.html @@ -6,66 +6,51 @@ Basic Security Tasks for Enterprise Applications + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    49.1 Basic Security Tasks for Enterprise Applications

    @@ -100,60 +85,43 @@

    49.1 Basic Security Ta


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/security-javaee002.html b/security-javaee002.html index 81133a9..4e1b98d 100644 --- a/security-javaee002.html +++ b/security-javaee002.html @@ -6,66 +6,51 @@ Securing Enterprise Beans + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    49.2 Securing Enterprise Beans

    @@ -603,13 +588,8 @@

    49.2.3 Propagating a Security Id illustrates this concept.

    -

    Figure 49-1 Security Identity Propagation

    -
    -
    -

    Description of Figure 49-1 follows
    -Description of "Figure 49-1 Security -Identity Propagation"
    -

    +
    *Figure 49-1 Security Identity Propagation *
    +

    Diagram of security identity propagation from client to intermediate container to target container

    In this illustration, an application client is making a call to an @@ -723,60 +703,43 @@

    49.2.4 Deploying Secure Enterprise Be


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/security-javaee003.html b/security-javaee003.html index ac7cf5e..11870f7 100644 --- a/security-javaee003.html +++ b/security-javaee003.html @@ -6,66 +6,51 @@ Examples: Securing Enterprise Beans + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    49.3 Examples: Securing Enterprise Beans

    @@ -607,60 +592,43 @@

    49.3.2.5 To Run the converter-secur


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/security-webtier.html b/security-webtier.html index edc26bf..14c5e93 100644 --- a/security-webtier.html +++ b/security-webtier.html @@ -6,66 +6,51 @@ Getting Started Securing Web Applications + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    48 Getting Started Securing Web Applications

    @@ -102,60 +87,43 @@

    48 Getting Started Securing W


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/security-webtier001.html b/security-webtier001.html index 003bc56..dd3b933 100644 --- a/security-webtier001.html +++ b/security-webtier001.html @@ -6,66 +6,51 @@ Overview of Web Application Security + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    48.1 Overview of Web Application Security

    @@ -176,60 +161,43 @@

    48.1 Overview of Web Application S


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/security-webtier002.html b/security-webtier002.html index e4d1c6e..694e106 100644 --- a/security-webtier002.html +++ b/security-webtier002.html @@ -6,66 +6,51 @@ Securing Web Applications + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    48.2 Securing Web Applications

    @@ -518,13 +503,8 @@

    48.2.3.1 HTTP Basic Authentication

    authentication.

    -

    Figure 48-1 HTTP Basic Authentication

    -
    -
    -

    Description of Figure 48-1 follows
    -Description of "Figure 48-1 HTTP Basic -Authentication"
    -

    +
    *Figure 48-1 HTTP Basic Authentication *
    +

    Diagram of four steps in HTTP basic authentication between client and server

    @@ -571,13 +551,8 @@

    48.2.3.2 Form-Based Authentication

    authentication.

    -

    Figure 48-2 Form-Based Authentication

    -
    -
    -

    Description of Figure 48-2 follows
    -Description of "Figure 48-2 Form-Based -Authentication"
    -

    +
    *Figure 48-2 Form-Based Authentication *
    +

    Diagram of four steps in form-based authentication between client and server


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + +
    + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/security-webtier003.html b/security-webtier003.html index 1939806..99ab1bb 100644 --- a/security-webtier003.html +++ b/security-webtier003.html @@ -6,66 +6,51 @@ Using Programmatic Security with Web Applications + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    48.3 Using Programmatic Security with Web Applications

    @@ -413,60 +398,43 @@

    48.3.4 Declaring and Linking Role


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/security-webtier004.html b/security-webtier004.html index c6d3a4b..40f3061 100644 --- a/security-webtier004.html +++ b/security-webtier004.html @@ -6,66 +6,51 @@ Examples: Securing Web Applications + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    48.4 Examples: Securing Web Applications

    @@ -763,60 +748,43 @@

    48.4.4.5 To Run the hello1-formauth


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/servlets.html b/servlets.html index 12c61ba..e973b57 100644 --- a/servlets.html +++ b/servlets.html @@ -6,66 +6,51 @@ Java Servlet Technology + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    17 Java Servlet Technology

    @@ -140,60 +125,43 @@

    17 Java Servlet Technology


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/servlets001.html b/servlets001.html index 9c90313..dd2715a 100644 --- a/servlets001.html +++ b/servlets001.html @@ -6,66 +6,51 @@ What Is a Servlet? + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    17.1 What Is a Servlet?

    @@ -90,60 +75,43 @@

    17.1 What Is a Servlet?


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/servlets002.html b/servlets002.html index 0e99a4e..f2d0c65 100644 --- a/servlets002.html +++ b/servlets002.html @@ -6,66 +6,51 @@ Servlet Lifecycle + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    17.2 Servlet Lifecycle

    @@ -235,60 +220,43 @@

    17.2.2 Handling Servlet Errors


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/servlets003.html b/servlets003.html index 50bd315..46fd4ff 100644 --- a/servlets003.html +++ b/servlets003.html @@ -6,66 +6,51 @@ Sharing Information + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    17.3 Sharing Information

    @@ -194,60 +179,43 @@

    17.3.2 Controlling Co


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/servlets004.html b/servlets004.html index b1f170a..0bb2a05 100644 --- a/servlets004.html +++ b/servlets004.html @@ -6,66 +6,51 @@ Creating and Initializing a Servlet + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    17.4 Creating and Initializing a Servlet

    @@ -115,60 +100,43 @@

    17.4 Creating and Initializing a Se


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/servlets005.html b/servlets005.html index 8bbeb66..9eeeda4 100644 --- a/servlets005.html +++ b/servlets005.html @@ -6,66 +6,51 @@ Writing Service Methods + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    17.5 Writing Service Methods

    @@ -254,60 +239,43 @@

    17.5.2 Constructing Responses


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/servlets006.html b/servlets006.html index da3b50a..bb80a20 100644 --- a/servlets006.html +++ b/servlets006.html @@ -6,66 +6,51 @@ Filtering Requests and Responses + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    17.6 Filtering Requests and Responses

    @@ -251,13 +236,8 @@

    17.6.3 Specifying Filter Mappings

    to servlets S1 and S2.

    -

    Figure 17-1 Filter-to-Servlet Mapping

    -
    -
    -

    Description of Figure 17-1 follows
    -Description of "Figure 17-1 -Filter-to-Servlet Mapping"
    -

    +
    *Figure 17-1 Filter-to-Servlet Mapping *
    +

    Diagram of filter-to-servlet mapping with filters F1-F3 and servlets S1-S3. F1 filters S1-S3, then F2 filters S2, then F3 filters S1 and S2.

    Recall that a filter chain is one of the objects passed to the @@ -367,60 +347,43 @@

    17.6.3.1 To Specify Filte


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/servlets007.html b/servlets007.html index a6e8360..af468c6 100644 --- a/servlets007.html +++ b/servlets007.html @@ -6,66 +6,51 @@ Invoking Other Web Resources + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    17.7 Invoking Other Web Resources

    @@ -159,60 +144,43 @@

    17.7.2 Transferring Contr


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/servlets008.html b/servlets008.html index e205788..03ff8d4 100644 --- a/servlets008.html +++ b/servlets008.html @@ -6,66 +6,51 @@ Accessing the Web Context + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    17.8 Accessing the Web Context

    @@ -101,60 +86,43 @@

    17.8 Accessing the Web Context


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/servlets009.html b/servlets009.html index e6ec85c..d153933 100644 --- a/servlets009.html +++ b/servlets009.html @@ -6,66 +6,51 @@ Maintaining Client State + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    17.9 Maintaining Client State

    @@ -197,60 +182,43 @@

    17.9.4 Session Tracking


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/servlets010.html b/servlets010.html index cda7cb3..765a796 100644 --- a/servlets010.html +++ b/servlets010.html @@ -6,66 +6,51 @@ Finalizing a Servlet + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    17.10 Finalizing a Servlet

    @@ -251,60 +236,43 @@

    17.10.3 Creating Polite Long-Runni


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/servlets011.html b/servlets011.html index 7c0487c..9f3e315 100644 --- a/servlets011.html +++ b/servlets011.html @@ -6,66 +6,51 @@ Uploading Files with Java Servlet Technology + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    17.11 Uploading Files with Java Servlet Technology

    @@ -206,60 +191,43 @@

    17.11.2 The getParts and getPart Metho


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/servlets012.html b/servlets012.html index bb6601e..6520aca 100644 --- a/servlets012.html +++ b/servlets012.html @@ -6,66 +6,51 @@ Asynchronous Processing + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    17.12 Asynchronous Processing

    @@ -332,60 +317,43 @@

    17.12.2 Waiting for a Resource


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/servlets013.html b/servlets013.html index a07d681..a184644 100644 --- a/servlets013.html +++ b/servlets013.html @@ -6,66 +6,51 @@ Nonblocking I/O + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    17.13 Nonblocking I/O

    @@ -302,60 +287,43 @@

    17.13.1 Reading


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/servlets014.html b/servlets014.html index f247e45..c41879c 100644 --- a/servlets014.html +++ b/servlets014.html @@ -6,66 +6,51 @@ Protocol Upgrade Processing + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    17.14 Protocol Upgrade Processing

    @@ -244,60 +229,43 @@

    17.14 Protocol Upgrade Processing


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/servlets015.html b/servlets015.html index 2a4bc74..02c2df1 100644 --- a/servlets015.html +++ b/servlets015.html @@ -6,66 +6,51 @@ The mood Example Application + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    17.15 The mood Example Application

    @@ -249,60 +234,43 @@

    17.15.2.2 To Run the mood Example U


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/servlets016.html b/servlets016.html index 6360dcd..90682fa 100644 --- a/servlets016.html +++ b/servlets016.html @@ -6,66 +6,51 @@ The fileupload Example Application + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    17.16 The fileupload Example Application

    @@ -455,60 +440,43 @@

    17.16.2.3 To Run the fileupload Example
    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/servlets017.html b/servlets017.html index 801d190..c001cb8 100644 --- a/servlets017.html +++ b/servlets017.html @@ -6,66 +6,51 @@ The dukeetf Example Application + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    17.17 The dukeetf Example Application

    @@ -435,60 +420,43 @@

    17.17.2.2 To Run the


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/servlets018.html b/servlets018.html index 07c82f3..fbfec0e 100644 --- a/servlets018.html +++ b/servlets018.html @@ -6,66 +6,51 @@ Further Information about Java Servlet Technology + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    17.18 Further Information about Java Servlet Technology

    @@ -77,60 +62,43 @@

    17.18 Further Informa


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/target.html b/target.html index 4b51738..3d4738e 100644 --- a/target.html +++ b/target.html @@ -6,105 +6,69 @@ Java Platform, Enterprise Edition The Java EE Tutorial Java Platform, Enterprise Edition Java Platform, Enterprise Edition The Java EE Tutorial Java Platform, Enterprise Edition Preface “Preface” Audience “Audience” Documentation Accessibility “Documentation Accessibility” Access to Oracle Support “Access to Oracle Support” Before You Read This Book “Before You Read This Book” Related Documentation “Related Documentation” Conventions “Conventions” Default Paths and File Names “Default Paths and File Names” Overview “Overview” This chapter introduces… the paragraph beginning “This chapter introduces…” Introduction to Java EE “Introduction to Java EE” Java EE 7 Platform Highlights “Java EE 7 Platform Highlights” Java EE Application Model “Java EE Application Model” Distributed Multitiered Applications “Distributed Multitiered Applications” Multitiered Applications “Multitiered Applications” Security “Security” Java EE Components “Java EE Components” Java EE Clients “Java EE Clients” Web Clients “Web Clients” Application Clients “Application Clients” Applets “Applets” The JavaBeans Component Architecture “The JavaBeans Component Architecture” Java EE Server Communications “Java EE Server Communications” Server Communication “Server Communication” Web Components “Web Components” Web Tier and Java EE Applications “Web Tier and Java EE Applications” Business Components “Business Components” Business and EIS Tiers “Business and EIS Tiers” Enterprise Information System Tier “Enterprise Information System Tier” Java EE Containers “Java EE Containers” Container Services “Container Services” Container Types “Container Types” Java EE Server and Containers “Java EE Server and Containers” Web Services Support “Web Services Support” XML “XML” SOAP Transport Protocol “SOAP Transport Protocol” WSDL Standard Format “WSDL Standard Format” Java EE Application Assembly and Deployment “Java EE Application Assembly and Deployment” Java EE 7 APIs “Java EE 7 APIs” Java EE Containers “Java EE Containers” Java EE APIs in the Web Container “Java EE APIs in the Web Container” Java EE APIs in the EJB Container “Java EE APIs in the EJB Container” Java EE APIs in the Application Client Container “Java EE APIs in the Application Client Container” Enterprise JavaBeans Technology “Enterprise JavaBeans Technology” Java Servlet Technology “Java Servlet Technology” JavaServer Faces Technology “JavaServer Faces Technology” JavaServer Pages Technology “JavaServer Pages Technology” JavaServer Pages Standard Tag Library “JavaServer Pages Standard Tag Library” Java Persistence API “Java Persistence API” Java Transaction API “Java Transaction API” Java API for RESTful Web Services “Java API for RESTful Web Services” Managed Beans “Managed Beans” Contexts and Dependency Injection for Java EE “Contexts and Dependency Injection for Java EE” Dependency Injection for Java “Dependency Injection for Java” Bean Validation “Bean Validation” Java Message Service API “Java Message Service API” Java EE Connector Architecture “Java EE Connector Architecture” JavaMail API “JavaMail API” Java Authorization Contract for Containers “Java Authorization Contract for Containers” Java Authentication Service Provider Interface for Containers “Java Authentication Service Provider Interface for Containers” Java API for WebSocket “Java API for WebSocket” Java API for JSON Processing “Java API for JSON Processing” Concurrency Utilities for Java EE “Concurrency Utilities for Java EE” Batch Applications for the Java Platform “Batch Applications for the Java Platform” Java EE 7 APIs in the Java Platform, Standard Edition 7 “Java EE 7 APIs in the Java Platform, Standard Edition 7” Java Database Connectivity API “Java Database Connectivity API” Java Naming and Directory Interface API “Java Naming and Directory Interface API” JavaBeans Activation Framework “JavaBeans Activation Framework” Java API for XML Processing “Java API for XML Processing” Java Architecture for XML Binding “Java Architecture for XML Binding” Java API for XML Web Services “Java API for XML Web Services” SOAP with Attachments API for Java “SOAP with Attachments API for Java” Java Authentication and Authorization Service “Java Authentication and Authorization Service” Common Annotations for the Java Platform “Common Annotations for the Java Platform” GlassFish Server Tools “GlassFish Server Tools” GlassFish Server Tools “GlassFish Server Tools” Using the Tutorial Examples “Using the Tutorial Examples” This chapter tells… the paragraph beginning “This chapter tells…” Required Software “Required Software” Java Platform, Standard Edition “Java Platform, Standard Edition” Java EE 7 Software Development Kit “Java EE 7 Software Development Kit” SDK Installation Tips “SDK Installation Tips” Java EE 7 Tutorial Component “Java EE 7 Tutorial Component” NetBeans IDE “NetBeans IDE” To Install NetBeans IDE without GlassFish Server “To Install NetBeans IDE without GlassFish Server” To Add GlassFish Server as a Server Using NetBeans IDE “To Add GlassFish Server as a Server Using NetBeans IDE” Apache Maven “Apache Maven” Starting and Stopping GlassFish Server “Starting and Stopping GlassFish Server” To Start GlassFish Server Using NetBeans IDE “To Start GlassFish Server Using NetBeans IDE” To Stop GlassFish Server Using NetBeans IDE “To Stop GlassFish Server Using NetBeans IDE” To Start GlassFish Server Using the Command Line “To Start GlassFish Server Using the Command Line” To Stop GlassFish Server Using the Command Line “To Stop GlassFish Server Using the Command Line” Starting the Administration Console “Starting the Administration Console” To Start the Administration Console Using NetBeans IDE “To Start the Administration Console Using NetBeans IDE” Starting and Stopping the Java DB Server “Starting and Stopping the Java DB Server” To Start the Database Server Using NetBeans IDE “To Start the Database Server Using NetBeans IDE” Next Steps “Next Steps” Building the Examples “Building the Examples” Tutorial Example Directory Structure “Tutorial Example Directory Structure” Java EE 7 Maven Archetypes in the Tutorial “Java EE 7 Maven Archetypes in the Tutorial” Installing the Tutorial Archetypes “Installing the Tutorial Archetypes” Installing the Tutorial Archetypes Using NetBeans IDE “Installing the Tutorial Archetypes Using NetBeans IDE” Installing the Tutorial Archetypes Using Maven “Installing the Tutorial Archetypes Using Maven” Getting the Latest Updates to the Tutorial “Getting the Latest Updates to the Tutorial” To Update the Tutorial Using NetBeans IDE “To Update the Tutorial Using NetBeans IDE” To Update the Tutorial Using the Command Line “To Update the Tutorial Using the Command Line” Debugging Java EE Applications “Debugging Java EE Applications” Using the Server Log “Using the Server Log” To Use the Administration Console Log Viewer “To Use the Administration Console Log Viewer” Using a Debugger “Using a Debugger” To Debug an Application Using a Debugger “To Debug an Application Using a Debugger” Resource Creation “Resource Creation” A resource is… the paragraph beginning “A resource is…” Resources and JNDI Naming “Resources and JNDI Naming” DataSource Objects and Connection Pools “DataSource Objects and Connection Pools” Creating Resources Administratively “Creating Resources Administratively” Injection “Injection” This chapter provides… the paragraph beginning “This chapter provides…” Resource Injection “Resource Injection” Dependency Injection “Dependency Injection” The Main Differences between Resource Injection and Dependency Injection “The Main Differences between Resource Injection and Dependency Injection” Differences between Resource Injection and Dependency Injection “Differences between Resource Injection and Dependency Injection” Packaging “Packaging” This chapter describes… the paragraph beginning “This chapter describes…” Packaging Applications “Packaging Applications” EAR File Structure “EAR File Structure” Packaging Enterprise Beans “Packaging Enterprise Beans” Packaging Enterprise Beans in EJB JAR Modules “Packaging Enterprise Beans in EJB JAR Modules” Structure of an Enterprise Bean JAR “Structure of an Enterprise Bean JAR” Packaging Enterprise Beans in WAR Modules “Packaging Enterprise Beans in WAR Modules” Packaging Web Archives “Packaging Web Archives” Web Module Structure “Web Module Structure” Packaging Resource Adapter Archives “Packaging Resource Adapter Archives” Getting Started with Web Applications “Getting Started with Web Applications” This chapter introduces… the paragraph beginning “This chapter introduces…” Web Applications “Web Applications” Java Web Application Request Handling “Java Web Application Request Handling” Web Application Lifecycle “Web Application Lifecycle” A Web Module That Uses JavaServer Faces Technology: The hello1 Example “A Web Module That Uses JavaServer Faces Technology: The hello1 Example” To View the hello1 Web Module Using NetBeans IDE “To View the hello1 Web Module Using NetBeans IDE” Introduction to Scopes “Introduction to Scopes” Packaging and Deploying the hello1 Web Module “Packaging and Deploying the hello1 Web Module” To Build and Package the hello1 Web Module Using NetBeans IDE “To Build and Package the hello1 Web Module Using NetBeans IDE” To Build and Package the hello1 Web Module Using Maven “To Build and Package the hello1 Web Module Using Maven” Viewing Deployed Web Modules “Viewing Deployed Web Modules” To View Deployed Web Modules Using the Administration Console “To View Deployed Web Modules Using the Administration Console” To View Deployed Web Modules Using the asadmin Command “To View Deployed Web Modules Using the asadmin Command” To View Deployed Web Modules Using NetBeans IDE “To View Deployed Web Modules Using NetBeans IDE” Running the Deployed hello1 Web Module “Running the Deployed hello1 Web Module” Dynamic Reloading of Deployed Modules “Dynamic Reloading of Deployed Modules” Undeploying the hello1 Web Module “Undeploying the hello1 Web Module” To Undeploy the hello1 Web Module Using NetBeans IDE “To Undeploy the hello1 Web Module Using NetBeans IDE” To Undeploy the hello1 Web Module Using Maven “To Undeploy the hello1 Web Module Using Maven” A Web Module That Uses Java Servlet Technology: The hello2 Example “A Web Module That Uses Java Servlet Technology: The hello2 Example” Mapping URLs to Web Components “Mapping URLs to Web Components” Examining the hello2 Web Module “Examining the hello2 Web Module” To View the hello2 Web Module Using NetBeans IDE “To View the hello2 Web Module Using NetBeans IDE” Running the hello2 Example “Running the hello2 Example” To Run the hello2 Example Using NetBeans IDE “To Run the hello2 Example Using NetBeans IDE” To Run the hello2 Example Using Maven “To Run the hello2 Example Using Maven” Configuring Web Applications “Configuring Web Applications” Setting Context Parameters “Setting Context Parameters” To Add a Context Parameter Using NetBeans IDE “To Add a Context Parameter Using NetBeans IDE” To Create a web.xml File Using NetBeans IDE “To Create a web.xml File Using NetBeans IDE” Declaring Welcome Files “Declaring Welcome Files” Mapping Errors to Error Screens “Mapping Errors to Error Screens” To Set Up Error Mapping Using NetBeans IDE “To Set Up Error Mapping Using NetBeans IDE” Declaring Resource References “Declaring Resource References” Web Components That Accept Resource Injections “Web Components That Accept Resource Injections” Declaring a Reference to a Resource “Declaring a Reference to a Resource” Declaring a Reference to a Web Service “Declaring a Reference to a Web Service” Further Information about Web Applications “Further Information about Web Applications” JavaServer Faces Technology “JavaServer Faces Technology” JavaServer Faces technology… the paragraph beginning “JavaServer Faces technology…” Introduction to JavaServer Faces Technology “Introduction to JavaServer Faces Technology” What Is a JavaServer Faces Application? “What Is a JavaServer Faces Application?” Responding to a Client Request for a JavaServer Faces Page “Responding to a Client Request for a JavaServer Faces Page” JavaServer Faces Technology Benefits “JavaServer Faces Technology Benefits” Java Web Application Technologies “Java Web Application Technologies” A Simple JavaServer Faces Application “A Simple JavaServer Faces Application” User Interface Component Model “User Interface Component Model” User Interface Component Classes “User Interface Component Classes” Component Rendering Model “Component Rendering Model” Conversion Model “Conversion Model” Event and Listener Model “Event and Listener Model” Validation Model “Validation Model” Navigation Model “Navigation Model” The Lifecycle of a JavaServer Faces Application “The Lifecycle of a JavaServer Faces Application” Overview of the JavaServer Faces Lifecycle “Overview of the JavaServer Faces Lifecycle” JavaServer Faces Standard Request-Response Lifecycle “JavaServer Faces Standard Request-Response Lifecycle” Restore View Phase “Restore View Phase” Apply Request Values Phase “Apply Request Values Phase” Process Validations Phase “Process Validations Phase” Update Model Values Phase “Update Model Values Phase” Invoke Application Phase “Invoke Application Phase” Render Response Phase “Render Response Phase” Partial Processing and Partial Rendering “Partial Processing and Partial Rendering” Further Information about JavaServer Faces Technology “Further Information about JavaServer Faces Technology” Introduction to Facelets “Introduction to Facelets” The term Facelets… the paragraph beginning “The term Facelets…” What Is Facelets? “What Is Facelets?” Tag Libraries Supported by Facelets “Tag Libraries Supported by Facelets” The Lifecycle of a Facelets Application “The Lifecycle of a Facelets Application” Developing a Simple Facelets Application: The guessnumber-jsf Example Application “Developing a Simple Facelets Application: The guessnumber-jsf Example Application” Creating a Facelets Application “Creating a Facelets Application” Developing a Managed Bean “Developing a Managed Bean” Creating Facelets Views “Creating Facelets Views” Configuring the Application “Configuring the Application” Running the guessnumber-jsf Facelets Example “Running the guessnumber-jsf Facelets Example” To Build, Package, and Deploy the guessnumber-jsf Example Using NetBeans IDE “To Build, Package, and Deploy the guessnumber-jsf Example Using NetBeans IDE” To Build, Package, and Deploy the guessnumber-jsf Example Using Maven “To Build, Package, and Deploy the guessnumber-jsf Example Using Maven” To Run the guessnumber-jsf Example “To Run the guessnumber-jsf Example” Using Facelets Templates “Using Facelets Templates” Facelets Templating Tags “Facelets Templating Tags” Composite Components “Composite Components” Composite Component Tags “Composite Component Tags” Web Resources “Web Resources” Relocatable Resources “Relocatable Resources” Resource Library Contracts “Resource Library Contracts” The hello1-rlc Example Application “The hello1-rlc Example Application” Configuring the hello1-rlc Example “Configuring the hello1-rlc Example” The Facelets Pages for the hello1-rlc Example “The Facelets Pages for the hello1-rlc Example” To Build, Package, and Deploy the hello1-rlc Example Using NetBeans IDE “To Build, Package, and Deploy the hello1-rlc Example Using NetBeans IDE” To Build, Package, and Deploy the hello1-rlc Example Using Maven “To Build, Package, and Deploy the hello1-rlc Example Using Maven” To Run the hello1-rlc Example “To Run the hello1-rlc Example” HTML5-Friendly Markup “HTML5-Friendly Markup” Using Pass-Through Elements “Using Pass-Through Elements” How Facelets Renders HTML5 Elements “How Facelets Renders HTML5 Elements” Using Pass-Through Attributes “Using Pass-Through Attributes” The reservation Example Application “The reservation Example Application” The Facelets Pages for the reservation Application “The Facelets Pages for the reservation Application” The Managed Bean for the reservation Application “The Managed Bean for the reservation Application” To Build, Package, and Deploy the reservation Example Using NetBeans IDE “To Build, Package, and Deploy the reservation Example Using NetBeans IDE” To Build, Package, and Deploy the reservation Example Using Maven “To Build, Package, and Deploy the reservation Example Using Maven” To Run the reservation Example “To Run the reservation Example” Expression Language “Expression Language” This chapter introduces… the paragraph beginning “This chapter introduces…” Overview of the EL “Overview of the EL” Immediate and Deferred Evaluation Syntax “Immediate and Deferred Evaluation Syntax” Immediate Evaluation “Immediate Evaluation” Deferred Evaluation “Deferred Evaluation” Value and Method Expressions “Value and Method Expressions” Value Expressions “Value Expressions” Referencing Objects “Referencing Objects” Referencing Object Properties or Collection Elements “Referencing Object Properties or Collection Elements” Referencing Literals “Referencing Literals” Parameterized Method Calls “Parameterized Method Calls” Where Value Expressions Can Be Used “Where Value Expressions Can Be Used” Method Expressions “Method Expressions” Lambda Expressions “Lambda Expressions” Operations on Collection Objects “Operations on Collection Objects” Operators “Operators” Reserved Words “Reserved Words” Examples of EL Expressions “Examples of EL Expressions” Example Expressions “Example Expressions” Further Information about the Expression Language “Further Information about the Expression Language” Using JavaServer Faces Technology in Web Pages “Using JavaServer Faces Technology in Web Pages” Web pages (Facelets… the paragraph beginning “Web pages (Facelets…” Setting Up a Page “Setting Up a Page” Adding Components to a Page Using HTML Tag Library Tags “Adding Components to a Page Using HTML Tag Library Tags” The Component Tags “The Component Tags” Common Component Tag Attributes “Common Component Tag Attributes” Common Component Tag Attributes “Common Component Tag Attributes” The id Attribute “The id Attribute” The immediate Attribute “The immediate Attribute” The rendered Attribute “The rendered Attribute” The style and styleClass Attributes “The style and styleClass Attributes” The value and binding Attributes “The value and binding Attributes” Adding HTML Head and Body Tags “Adding HTML Head and Body Tags” Adding a Form Component “Adding a Form Component” A Typical Form “A Typical Form” Using Text Components “Using Text Components” Example Text Components “Example Text Components” Input Tags “Input Tags” Input Tag Attributes “Input Tag Attributes” Output Tags “Output Tags” Rendering a Field with the h:inputText Tag “Rendering a Field with the h:inputText Tag” Rendering a Password Field with the h:inputSecret Tag “Rendering a Password Field with the h:inputSecret Tag” Rendering a Label with the h:outputLabel Tag “Rendering a Label with the h:outputLabel Tag” Rendering a Link with the h:outputLink Tag “Rendering a Link with the h:outputLink Tag” Displaying a Formatted Message with the h:outputFormat Tag “Displaying a Formatted Message with the h:outputFormat Tag” Using Command Component Tags for Performing Actions and Navigation “Using Command Component Tags for Performing Actions and Navigation” Rendering a Button with the h:commandButton Tag “Rendering a Button with the h:commandButton Tag” Rendering a Link with the h:commandLink Tag “Rendering a Link with the h:commandLink Tag” Adding Graphics and Images with the h:graphicImage Tag “Adding Graphics and Images with the h:graphicImage Tag” Laying Out Components with the h:panelGrid and h:panelGroup Tags “Laying Out Components with the h:panelGrid and h:panelGroup Tags” Panel Component Tags “Panel Component Tags” Displaying Components for Selecting One Value “Displaying Components for Selecting One Value” Example Components for Selecting One Item “Example Components for Selecting One Item” Displaying a Check Box Using the h:selectBooleanCheckbox Tag “Displaying a Check Box Using the h:selectBooleanCheckbox Tag” Displaying a Menu Using the h:selectOneMenu Tag “Displaying a Menu Using the h:selectOneMenu Tag” Displaying Components for Selecting Multiple Values “Displaying Components for Selecting Multiple Values” Example Components for Selecting Multiple Values “Example Components for Selecting Multiple Values” Using the f:selectItem and f:selectItems Tags “Using the f:selectItem and f:selectItems Tags” Using the f:selectItems Tag “Using the f:selectItems Tag” Using the f:selectItem Tag “Using the f:selectItem Tag” Displaying the Results from Selection Components “Displaying the Results from Selection Components” Using Data-Bound Table Components “Using Data-Bound Table Components” Optional Attributes for the h:dataTable Tag “Optional Attributes for the h:dataTable Tag” Displaying Error Messages with the h:message and h:messages Tags “Displaying Error Messages with the h:message and h:messages Tags” Creating Bookmarkable URLs with the h:button and h:link Tags “Creating Bookmarkable URLs with the h:button and h:link Tags” Using View Parameters to Configure Bookmarkable URLs “Using View Parameters to Configure Bookmarkable URLs” The bookmarks Example Application “The bookmarks Example Application” To Build, Package, and Deploy the bookmarks Example Using NetBeans IDE “To Build, Package, and Deploy the bookmarks Example Using NetBeans IDE” To Build, Package, and Deploy the bookmarks Example Using Maven “To Build, Package, and Deploy the bookmarks Example Using Maven” To Run the bookmarks Example “To Run the bookmarks Example” Resource Relocation Using h:outputScript and h:outputStylesheet Tags “Resource Relocation Using h:outputScript and h:outputStylesheet Tags” Using Core Tags “Using Core Tags” Event-Handling Core Tags “Event-Handling Core Tags” Data-Conversion Core Tags “Data-Conversion Core Tags” Facet Core Tags “Facet Core Tags” Core Tags That Represent Items in a List “Core Tags That Represent Items in a List” Validator Core Tags “Validator Core Tags” Miscellaneous Core Tags “Miscellaneous Core Tags” Where the Core Tags Are Explained “Where the Core Tags Are Explained” Using Converters, Listeners, and Validators “Using Converters, Listeners, and Validators” The previous chapter… the paragraph beginning “The previous chapter…” Using the Standard Converters “Using the Standard Converters” Converter Classes and Converter IDs “Converter Classes and Converter IDs” Converting a Component's Value “Converting a Component's Value” Using DateTimeConverter “Using DateTimeConverter” Attributes for the f:convertDateTime Tag “Attributes for the f:convertDateTime Tag” Using NumberConverter “Using NumberConverter” Attributes for the f:convertNumber Tag “Attributes for the f:convertNumber Tag” Registering Listeners on Components “Registering Listeners on Components” Registering a Value-Change Listener on a Component “Registering a Value-Change Listener on a Component” Attributes for the f:valueChangeListener Tag “Attributes for the f:valueChangeListener Tag” Registering an Action Listener on a Component “Registering an Action Listener on a Component” Using the Standard Validators “Using the Standard Validators” The Validator Classes “The Validator Classes” Validating a Component's Value “Validating a Component's Value” Using Validator Tags “Using Validator Tags” Referencing a Managed Bean Method “Referencing a Managed Bean Method” Component Tag Attributes That Reference Managed Bean Methods “Component Tag Attributes That Reference Managed Bean Methods” Referencing a Method That Performs Navigation “Referencing a Method That Performs Navigation” Referencing a Method That Handles an Action Event “Referencing a Method That Handles an Action Event” Referencing a Method That Performs Validation “Referencing a Method That Performs Validation” Referencing a Method That Handles a Value-Change Event “Referencing a Method That Handles a Value-Change Event” Developing with JavaServer Faces Technology “Developing with JavaServer Faces Technology” This chapter provides… the paragraph beginning “This chapter provides…” Managed Beans in JavaServer Faces Technology “Managed Beans in JavaServer Faces Technology” Creating a Managed Bean “Creating a Managed Bean” Using the EL to Reference Managed Beans “Using the EL to Reference Managed Beans” Writing Bean Properties “Writing Bean Properties” Writing Properties Bound to Component Values “Writing Properties Bound to Component Values” Acceptable Types of Component Values “Acceptable Types of Component Values” UIInput and UIOutput Properties “UIInput and UIOutput Properties” UIData Properties “UIData Properties” UISelectBoolean Properties “UISelectBoolean Properties” UISelectMany Properties “UISelectMany Properties” UISelectOne Properties “UISelectOne Properties” UISelectItem Properties “UISelectItem Properties” UISelectItems Properties “UISelectItems Properties” Writing Properties Bound to Component Instances “Writing Properties Bound to Component Instances” Writing Properties Bound to Converters, Listeners, or Validators “Writing Properties Bound to Converters, Listeners, or Validators” Writing Managed Bean Methods “Writing Managed Bean Methods” Why Use Managed Beans “Why Use Managed Beans” Writing a Method to Handle Navigation “Writing a Method to Handle Navigation” Writing a Method to Handle an Action Event “Writing a Method to Handle an Action Event” Writing a Method to Perform Validation “Writing a Method to Perform Validation” Writing a Method to Handle a Value-Change Event “Writing a Method to Handle a Value-Change Event” Using Ajax with JavaServer Faces Technology “Using Ajax with JavaServer Faces Technology” This chapter describes… the paragraph beginning “This chapter describes…” Overview of Ajax “Overview of Ajax” Using Ajax Functionality with JavaServer Faces Technology “Using Ajax Functionality with JavaServer Faces Technology” Using Ajax with Facelets “Using Ajax with Facelets” Using the f:ajax Tag “Using the f:ajax Tag” Attributes of the f:ajax Tag “Attributes of the f:ajax Tag” Execute and Render Keywords “Execute and Render Keywords” Sending an Ajax Request “Sending an Ajax Request” Using the event Attribute “Using the event Attribute” Using the execute Attribute “Using the execute Attribute” Using the immediate Attribute “Using the immediate Attribute” Using the listener Attribute “Using the listener Attribute” Monitoring Events on the Client “Monitoring Events on the Client” Properties of the onevent Data Object “Properties of the onevent Data Object” Handling Errors “Handling Errors” Valid Error Values for the Data Object status Property “Valid Error Values for the Data Object status Property” Receiving an Ajax Response “Receiving an Ajax Response” Ajax Request Lifecycle “Ajax Request Lifecycle” Grouping of Components “Grouping of Components” Loading JavaScript as a Resource “Loading JavaScript as a Resource” Using JavaScript API in a Facelets Application “Using JavaScript API in a Facelets Application” Possible Values for the Options Parameter “Possible Values for the Options Parameter” Using the @ResourceDependency Annotation in a Bean Class “Using the @ResourceDependency Annotation in a Bean Class” The ajaxguessnumber Example Application “The ajaxguessnumber Example Application” The ajaxguessnumber Source Files “The ajaxguessnumber Source Files” The ajaxgreeting.xhtml Facelets Page “The ajaxgreeting.xhtml Facelets Page” The UserNumberBean Backing Bean “The UserNumberBean Backing Bean” The DukesNumberBean CDI Managed Bean “The DukesNumberBean CDI Managed Bean” Running the ajaxguessnumber Example “Running the ajaxguessnumber Example” To Build, Package, and Deploy the ajaxguessnumber Example Using NetBeans IDE “To Build, Package, and Deploy the ajaxguessnumber Example Using NetBeans IDE” To Build, Package, and Deploy the ajaxguessnumber Example Using Maven “To Build, Package, and Deploy the ajaxguessnumber Example Using Maven” To Run the ajaxguessnumber Example “To Run the ajaxguessnumber Example” Further Information about Ajax in JavaServer Faces Technology “Further Information about Ajax in JavaServer Faces Technology” Composite Components: Advanced Topics and an Example “Composite Components: Advanced Topics and an Example” This chapter describes… the paragraph beginning “This chapter describes…” Attributes of a Composite Component “Attributes of a Composite Component” Commonly Used Attributes of the composite:attribute Tag “Commonly Used Attributes of the composite:attribute Tag” Invoking a Managed Bean “Invoking a Managed Bean” Validating Composite Component Values “Validating Composite Component Values” Validator Tags “Validator Tags” The compositecomponentexample Example Application “The compositecomponentexample Example Application” The Composite Component File “The Composite Component File” The Using Page “The Using Page” The Managed Bean “The Managed Bean” Running the compositecomponentexample Example “Running the compositecomponentexample Example” To Build, Package, and Deploy the compositecomponentexample Example Using NetBeans IDE “To Build, Package, and Deploy the compositecomponentexample Example Using NetBeans IDE” To Build, Package, and Deploy the compositecomponentexample Example Using Maven “To Build, Package, and Deploy the compositecomponentexample Example Using Maven” To Run the compositecomponentexample Example “To Run the compositecomponentexample Example” Creating Custom UI Components and Other Custom Objects “Creating Custom UI Components and Other Custom Objects” This chapter describes… the paragraph beginning “This chapter describes…” Introduction to Creating Custom Components “Introduction to Creating Custom Components” Determining Whether You Need a Custom Component or Renderer “Determining Whether You Need a Custom Component or Renderer” When to Use a Custom Component “When to Use a Custom Component” When to Use a Custom Renderer “When to Use a Custom Renderer” Component, Renderer, and Tag Combinations “Component, Renderer, and Tag Combinations” Requirements for Custom Components, Custom Renderers, and Custom Tags “Requirements for Custom Components, Custom Renderers, and Custom Tags” Understanding the Image Map Example “Understanding the Image Map Example” Why Use JavaServer Faces Technology to Implement an Image Map? “Why Use JavaServer Faces Technology to Implement an Image Map?” Understanding the Rendered HTML “Understanding the Rendered HTML” Understanding the Facelets Page “Understanding the Facelets Page” Configuring Model Data “Configuring Model Data” Summary of the Image Map Application Classes “Summary of the Image Map Application Classes” Image Map Classes “Image Map Classes” Steps for Creating a Custom Component “Steps for Creating a Custom Component” Creating Custom Component Classes “Creating Custom Component Classes” Specifying the Component Family “Specifying the Component Family” Performing Encoding “Performing Encoding” Performing Decoding “Performing Decoding” Enabling Component Properties to Accept Expressions “Enabling Component Properties to Accept Expressions” Saving and Restoring State “Saving and Restoring State” Delegating Rendering to a Renderer “Delegating Rendering to a Renderer” Creating the Renderer Class “Creating the Renderer Class” Identifying the Renderer Type “Identifying the Renderer Type” Implementing an Event Listener “Implementing an Event Listener” Implementing Value-Change Listeners “Implementing Value-Change Listeners” Implementing Action Listeners “Implementing Action Listeners” Handling Events for Custom Components “Handling Events for Custom Components” Defining the Custom Component Tag in a Tag Library Descriptor “Defining the Custom Component Tag in a Tag Library Descriptor” Using a Custom Component “Using a Custom Component” Creating and Using a Custom Converter “Creating and Using a Custom Converter” Creating a Custom Converter “Creating a Custom Converter” Using a Custom Converter “Using a Custom Converter” Creating and Using a Custom Validator “Creating and Using a Custom Validator” Implementing the Validator Interface “Implementing the Validator Interface” Specifying a Custom Tag “Specifying a Custom Tag” Using a Custom Validator “Using a Custom Validator” Binding Component Values and Instances to Managed Bean Properties “Binding Component Values and Instances to Managed Bean Properties” Examples of Value-Binding Expressions “Examples of Value-Binding Expressions” Binding a Component Value to a Property “Binding a Component Value to a Property” Binding a Component Value to an Implicit Object “Binding a Component Value to an Implicit Object” Implicit Objects “Implicit Objects” Binding a Component Instance to a Bean Property “Binding a Component Instance to a Bean Property” Binding Converters, Listeners, and Validators to Managed Bean Properties “Binding Converters, Listeners, and Validators to Managed Bean Properties” Configuring JavaServer Faces Applications “Configuring JavaServer Faces Applications” This chapter describes… the paragraph beginning “This chapter describes…” Introduction to Configuring JavaServer Faces Applications “Introduction to Configuring JavaServer Faces Applications” Using Annotations to Configure Managed Beans “Using Annotations to Configure Managed Beans” Using Managed Bean Scopes “Using Managed Bean Scopes” Application Configuration Resource File “Application Configuration Resource File” Configuring Eager Application-Scoped Managed Beans “Configuring Eager Application-Scoped Managed Beans” Ordering of Application Configuration Resource Files “Ordering of Application Configuration Resource Files” Using Faces Flows “Using Faces Flows” Two Faces Flows and Their Interactions “Two Faces Flows and Their Interactions” Packaging Flows in an Application “Packaging Flows in an Application” The Simplest Possible Flow: The simple-flow Example Application “The Simplest Possible Flow: The simple-flow Example Application” To Build, Package, and Deploy the simple-flow Example Using NetBeans IDE “To Build, Package, and Deploy the simple-flow Example Using NetBeans IDE” To Build, Package, and Deploy the simple-flow Example Using Maven “To Build, Package, and Deploy the simple-flow Example Using Maven” To Run the simple-flow Example “To Run the simple-flow Example” The checkout-module Example Application “The checkout-module Example Application” The Facelets Pages for the checkout-module Example “The Facelets Pages for the checkout-module Example” Using a Configuration File to Configure a Flow “Using a Configuration File to Configure a Flow” Using a Java Class to Configure a Flow “Using a Java Class to Configure a Flow” The Flow-Scoped Managed Beans “The Flow-Scoped Managed Beans” To Build, Package, and Deploy the checkout-module Example Using NetBeans IDE “To Build, Package, and Deploy the checkout-module Example Using NetBeans IDE” To Build, Package, and Deploy the checkout-module Example Using Maven “To Build, Package, and Deploy the checkout-module Example Using Maven” To Run the checkout-module Example “To Run the checkout-module Example” Configuring Managed Beans “Configuring Managed Beans” Using the managed-bean Element “Using the managed-bean Element” Initializing Properties Using the managed-property Element “Initializing Properties Using the managed-property Element” Subelements of managed-property Elements That Define Property Values “Subelements of managed-property Elements That Define Property Values” Referencing a Java Enum Type “Referencing a Java Enum Type” Referencing a Context Initialization Parameter “Referencing a Context Initialization Parameter” Initializing Map Properties “Initializing Map Properties” Initializing Array and List Properties “Initializing Array and List Properties” Initializing Managed Bean Properties “Initializing Managed Bean Properties” Allowable Connections between Scoped Objects “Allowable Connections between Scoped Objects” Initializing Maps and Lists “Initializing Maps and Lists” Registering Application Messages “Registering Application Messages” Using FacesMessage to Create a Message “Using FacesMessage to Create a Message” Referencing Error Messages “Referencing Error Messages” Using Default Validators “Using Default Validators” Registering a Custom Validator “Registering a Custom Validator” Registering a Custom Converter “Registering a Custom Converter” Configuring Navigation Rules “Configuring Navigation Rules” Common Outcome Strings “Common Outcome Strings” Registering a Custom Renderer with a Render Kit “Registering a Custom Renderer with a Render Kit” Registering a Custom Component “Registering a Custom Component” Basic Requirements of a JavaServer Faces Application “Basic Requirements of a JavaServer Faces Application” Configuring an Application with a Web Deployment Descriptor “Configuring an Application with a Web Deployment Descriptor” Identifying the Servlet for Lifecycle Processing “Identifying the Servlet for Lifecycle Processing” To Specify a Path to an Application Configuration Resource File “To Specify a Path to an Application Configuration Resource File” To Specify Where State Is Saved “To Specify Where State Is Saved” Configuring Project Stage “Configuring Project Stage” Including the Classes, Pages, and Other Resources “Including the Classes, Pages, and Other Resources” Java Servlet Technology “Java Servlet Technology” Java Servlet technology… the paragraph beginning “Java Servlet technology…” What Is a Servlet? “What Is a Servlet?” Servlet Lifecycle “Servlet Lifecycle” Handling Servlet Lifecycle Events “Handling Servlet Lifecycle Events” Defining the Listener Class “Defining the Listener Class” Servlet Lifecycle Events “Servlet Lifecycle Events” Handling Servlet Errors “Handling Servlet Errors” Sharing Information “Sharing Information” Using Scope Objects “Using Scope Objects” Scope Objects “Scope Objects” Controlling Concurrent Access to Shared Resources “Controlling Concurrent Access to Shared Resources” Creating and Initializing a Servlet “Creating and Initializing a Servlet” Writing Service Methods “Writing Service Methods” Getting Information from Requests “Getting Information from Requests” Constructing Responses “Constructing Responses” Filtering Requests and Responses “Filtering Requests and Responses” Programming Filters “Programming Filters” Programming Customized Requests and Responses “Programming Customized Requests and Responses” Specifying Filter Mappings “Specifying Filter Mappings” Filter-to-Servlet Mapping “Filter-to-Servlet Mapping” To Specify Filter Mappings Using NetBeans IDE “To Specify Filter Mappings Using NetBeans IDE” Invoking Other Web Resources “Invoking Other Web Resources” Including Other Resources in the Response “Including Other Resources in the Response” Transferring Control to Another Web Component “Transferring Control to Another Web Component” Accessing the Web Context “Accessing the Web Context” Maintaining Client State “Maintaining Client State” Accessing a Session “Accessing a Session” Associating Objects with a Session “Associating Objects with a Session” Session Management “Session Management” To Set the Timeout Period Using NetBeans IDE “To Set the Timeout Period Using NetBeans IDE” Session Tracking “Session Tracking” Finalizing a Servlet “Finalizing a Servlet” Tracking Service Requests “Tracking Service Requests” Notifying Methods to Shut Down “Notifying Methods to Shut Down” Creating Polite Long-Running Methods “Creating Polite Long-Running Methods” Uploading Files with Java Servlet Technology “Uploading Files with Java Servlet Technology” The @MultipartConfig Annotation “The @MultipartConfig Annotation” The getParts and getPart Methods “The getParts and getPart Methods” Asynchronous Processing “Asynchronous Processing” Asynchronous Processing in Servlets “Asynchronous Processing in Servlets” Functionality Provided by the AsyncContext Class “Functionality Provided by the AsyncContext Class” Waiting for a Resource “Waiting for a Resource” Nonblocking I/O “Nonblocking I/O” Nonblocking I/O Support in javax.servlet.ServletInputStream “Nonblocking I/O Support in javax.servlet.ServletInputStream” Nonblocking I/O Support in javax.servlet.ServletOutputStream “Nonblocking I/O Support in javax.servlet.ServletOutputStream” Listener Interfaces for Nonblocking I/O Support “Listener Interfaces for Nonblocking I/O Support” Reading a Large HTTP POST Request Using Nonblocking I/O “Reading a Large HTTP POST Request Using Nonblocking I/O” Protocol Upgrade Processing “Protocol Upgrade Processing” Protocol Upgrade Support “Protocol Upgrade Support” The mood Example Application “The mood Example Application” Components of the mood Example Application “Components of the mood Example Application” Running the mood Example “Running the mood Example” To Run the mood Example Using NetBeans IDE “To Run the mood Example Using NetBeans IDE” To Run the mood Example Using Maven “To Run the mood Example Using Maven” The fileupload Example Application “The fileupload Example Application” Architecture of the fileupload Example Application “Architecture of the fileupload Example Application” Running the fileupload Example “Running the fileupload Example” To Build, Package, and Deploy the fileupload Example Using NetBeans IDE “To Build, Package, and Deploy the fileupload Example Using NetBeans IDE” To Build, Package, and Deploy the fileupload Example Using Maven “To Build, Package, and Deploy the fileupload Example Using Maven” To Run the fileupload Example “To Run the fileupload Example” The dukeetf Example Application “The dukeetf Example Application” Architecture of the dukeetf Example Application “Architecture of the dukeetf Example Application” The Servlet “The Servlet” The Enterprise Bean “The Enterprise Bean” The HTML Page “The HTML Page” Running the dukeetf Example Application “Running the dukeetf Example Application” To Run the dukeetf Example Application Using NetBeans IDE “To Run the dukeetf Example Application Using NetBeans IDE” To Run the dukeetf Example Application Using Maven “To Run the dukeetf Example Application Using Maven” Further Information about Java Servlet Technology “Further Information about Java Servlet Technology” Java API for WebSocket “Java API for WebSocket” This chapter describes… the paragraph beginning “This chapter describes…” Introduction to WebSocket “Introduction to WebSocket” Creating WebSocket Applications in the Java EE Platform “Creating WebSocket Applications in the Java EE Platform” Creating and Deploying a WebSocket Endpoint “Creating and Deploying a WebSocket Endpoint” Programmatic Endpoints “Programmatic Endpoints” Annotated Endpoints “Annotated Endpoints” WebSocket Endpoint Lifecycle Annotations “WebSocket Endpoint Lifecycle Annotations” Sending and Receiving Messages “Sending and Receiving Messages” Sending Messages “Sending Messages” Sending Messages to All Peers Connected to an Endpoint “Sending Messages to All Peers Connected to an Endpoint” Receiving Messages “Receiving Messages” Maintaining Client State “Maintaining Client State” Using Encoders and Decoders “Using Encoders and Decoders” Implementing Encoders to Convert Java Objects into WebSocket Messages “Implementing Encoders to Convert Java Objects into WebSocket Messages” Implementing Decoders to Convert WebSocket Messages into Java Objects “Implementing Decoders to Convert WebSocket Messages into Java Objects” Path Parameters “Path Parameters” Handling Errors “Handling Errors” Specifying an Endpoint Configurator Class “Specifying an Endpoint Configurator Class” The dukeetf2 Example Application “The dukeetf2 Example Application” Architecture of the dukeetf2 Sample Application “Architecture of the dukeetf2 Sample Application” The Endpoint “The Endpoint” The Enterprise Bean “The Enterprise Bean” The HTML Page “The HTML Page” Running the dukeetf2 Example Application “Running the dukeetf2 Example Application” To Run the dukeetf2 Example Application Using NetBeans IDE “To Run the dukeetf2 Example Application Using NetBeans IDE” To Run the dukeetf2 Example Application Using Maven “To Run the dukeetf2 Example Application Using Maven” The websocketbot Example Application “The websocketbot Example Application” Architecture of the websocketbot Example Application “Architecture of the websocketbot Example Application” The CDI Bean “The CDI Bean” The WebSocket Endpoint “The WebSocket Endpoint” The Application Messages “The Application Messages” The Encoder Classes “The Encoder Classes” The Message Decoder “The Message Decoder” The HTML Page “The HTML Page” Running the websocketbot Example Application “Running the websocketbot Example Application” To Run the websocketbot Example Application Using NetBeans IDE “To Run the websocketbot Example Application Using NetBeans IDE” To Run the websocketbot Example Application Using Maven “To Run the websocketbot Example Application Using Maven” To Test the websocketbot Example Application “To Test the websocketbot Example Application” Further Information about WebSocket “Further Information about WebSocket” JSON Processing “JSON Processing” This chapter describes… the paragraph beginning “This chapter describes…” Introduction to JSON “Introduction to JSON” JSON Syntax “JSON Syntax” Uses of JSON “Uses of JSON” Generating and Parsing JSON Data “Generating and Parsing JSON Data” JSON Processing in the Java EE Platform “JSON Processing in the Java EE Platform” Main Classes and Interfaces in javax.json “Main Classes and Interfaces in javax.json” Main Classes and Interfaces in javax.json.stream “Main Classes and Interfaces in javax.json.stream” Using the Object Model API “Using the Object Model API” Creating an Object Model from JSON Data “Creating an Object Model from JSON Data” Creating an Object Model from Application Code “Creating an Object Model from Application Code” Navigating an Object Model “Navigating an Object Model” Writing an Object Model to a Stream “Writing an Object Model to a Stream” Using the Streaming API “Using the Streaming API” Reading JSON Data Using a Parser “Reading JSON Data Using a Parser” Writing JSON Data Using a Generator “Writing JSON Data Using a Generator” JSON in Java EE RESTful Web Services “JSON in Java EE RESTful Web Services” The jsonpmodel Example Application “The jsonpmodel Example Application” Components of the jsonpmodel Example Application “Components of the jsonpmodel Example Application” Running the jsonpmodel Example Application “Running the jsonpmodel Example Application” To Run the jsonpmodel Example Application Using NetBeans IDE “To Run the jsonpmodel Example Application Using NetBeans IDE” To Run the jsonpmodel Example Application Using Maven “To Run the jsonpmodel Example Application Using Maven” The jsonpstreaming Example Application “The jsonpstreaming Example Application” Components of the jsonpstreaming Example Application “Components of the jsonpstreaming Example Application” Running the jsonpstreaming Example Application “Running the jsonpstreaming Example Application” To Run the jsonpstreaming Example Application Using NetBeans IDE “To Run the jsonpstreaming Example Application Using NetBeans IDE” To Run the jsonpstreaming Example Application Using Maven “To Run the jsonpstreaming Example Application Using Maven” Further Information about the Java API for JSON Processing “Further Information about the Java API for JSON Processing” Internationalizing and Localizing Web Applications “Internationalizing and Localizing Web Applications” The process of… the paragraph beginning “The process of…” Java Platform Localization Classes “Java Platform Localization Classes” Providing Localized Messages and Labels “Providing Localized Messages and Labels” Establishing the Locale “Establishing the Locale” Setting the Resource Bundle “Setting the Resource Bundle” Retrieving Localized Messages “Retrieving Localized Messages” Date and Number Formatting “Date and Number Formatting” Character Sets and Encodings “Character Sets and Encodings” Character Sets “Character Sets” Character Encoding “Character Encoding” Introduction to Bean Validation “Introduction to Bean Validation” This chapter describes… the paragraph beginning “This chapter describes…” Overview of Bean Validation “Overview of Bean Validation” Using Bean Validation Constraints “Using Bean Validation Constraints” Built-In Bean Validation Constraints “Built-In Bean Validation Constraints” Validating Null and Empty Strings “Validating Null and Empty Strings” Validating Constructors and Methods “Validating Constructors and Methods” Cross-Parameter Constraints “Cross-Parameter Constraints” Identifying Parameter Constraint Violations “Identifying Parameter Constraint Violations” Adding Constraints to Method Return Values “Adding Constraints to Method Return Values” Further Information about Bean Validation “Further Information about Bean Validation” Bean Validation: Advanced Topics “Bean Validation: Advanced Topics” This chapter describes… the paragraph beginning “This chapter describes…” Creating Custom Constraints “Creating Custom Constraints” Using the Built-In Constraints to Make a New Constraint “Using the Built-In Constraints to Make a New Constraint” Removing Ambiguity in Constraint Targets “Removing Ambiguity in Constraint Targets” Customizing Validator Messages “Customizing Validator Messages” The ValidationMessages Resource Bundle “The ValidationMessages Resource Bundle” Localizing Validation Messages “Localizing Validation Messages” Grouping Constraints “Grouping Constraints” Customizing Group Validation Order “Customizing Group Validation Order” Using Method Constraints in Type Hierarchies “Using Method Constraints in Type Hierarchies” Rules for Using Method Constraints in Type Hierarchies “Rules for Using Method Constraints in Type Hierarchies” Introduction to Contexts and Dependency Injection for Java EE “Introduction to Contexts and Dependency Injection for Java EE” This chapter describes… the paragraph beginning “This chapter describes…” Getting Started “Getting Started” Overview of CDI “Overview of CDI” About Beans “About Beans” About CDI Managed Beans “About CDI Managed Beans” Beans as Injectable Objects “Beans as Injectable Objects” Using Qualifiers “Using Qualifiers” Injecting Beans “Injecting Beans” Using Scopes “Using Scopes” Scopes “Scopes” Giving Beans EL Names “Giving Beans EL Names” Adding Setter and Getter Methods “Adding Setter and Getter Methods” Using a Managed Bean in a Facelets Page “Using a Managed Bean in a Facelets Page” Injecting Objects by Using Producer Methods “Injecting Objects by Using Producer Methods” Configuring a CDI Application “Configuring a CDI Application” Using the @PostConstruct and @PreDestroy Annotations with CDI Managed Bean Classes “Using the @PostConstruct and @PreDestroy Annotations with CDI Managed Bean Classes” To Initialize a Managed Bean Using the @PostConstruct Annotation “To Initialize a Managed Bean Using the @PostConstruct Annotation” To Prepare for the Destruction of a Managed Bean Using the @PreDestroy Annotation “To Prepare for the Destruction of a Managed Bean Using the @PreDestroy Annotation” Further Information about CDI “Further Information about CDI” Running the Basic Contexts and Dependency Injection Examples “Running the Basic Contexts and Dependency Injection Examples” This chapter describes… the paragraph beginning “This chapter describes…” Building and Running the CDI Samples “Building and Running the CDI Samples” The simplegreeting CDI Example “The simplegreeting CDI Example” The simplegreeting Source Files “The simplegreeting Source Files” The Facelets Template and Page “The Facelets Template and Page” Running the simplegreeting Example “Running the simplegreeting Example” To Build, Package, and Run the simplegreeting Example Using NetBeans IDE “To Build, Package, and Run the simplegreeting Example Using NetBeans IDE” To Build, Package, and Deploy the simplegreeting Example Using Maven “To Build, Package, and Deploy the simplegreeting Example Using Maven” To Run the simplegreeting Example “To Run the simplegreeting Example” The guessnumber-cdi CDI Example “The guessnumber-cdi CDI Example” The guessnumber-cdi Source Files “The guessnumber-cdi Source Files” The @MaxNumber and @Random Qualifier Interfaces “The @MaxNumber and @Random Qualifier Interfaces” The Generator Managed Bean “The Generator Managed Bean” The UserNumberBean Managed Bean “The UserNumberBean Managed Bean” The Facelets Page “The Facelets Page” Running the guessnumber-cdi Example “Running the guessnumber-cdi Example” To Build, Package, and Deploy the guessnumber-cdi Example Using NetBeans IDE “To Build, Package, and Deploy the guessnumber-cdi Example Using NetBeans IDE” To Build, Package, and Deploy the guessnumber-cdi Example Using Maven “To Build, Package, and Deploy the guessnumber-cdi Example Using Maven” To Run the guessnumber Example “To Run the guessnumber Example” Contexts and Dependency Injection for Java EE: Advanced Topics “Contexts and Dependency Injection for Java EE: Advanced Topics” This chapter describes… the paragraph beginning “This chapter describes…” Packaging CDI Applications “Packaging CDI Applications” Using Alternatives in CDI Applications “Using Alternatives in CDI Applications” Using Specialization “Using Specialization” Using Producer Methods, Producer Fields, and Disposer Methods in CDI Applications “Using Producer Methods, Producer Fields, and Disposer Methods in CDI Applications” Using Producer Methods “Using Producer Methods” Using Producer Fields to Generate Resources “Using Producer Fields to Generate Resources” Using a Disposer Method “Using a Disposer Method” Using Predefined Beans in CDI Applications “Using Predefined Beans in CDI Applications” Injection of Predefined Beans “Injection of Predefined Beans” Using Events in CDI Applications “Using Events in CDI Applications” Defining Events “Defining Events” Using Observer Methods to Handle Events “Using Observer Methods to Handle Events” Firing Events “Firing Events” Using Interceptors in CDI Applications “Using Interceptors in CDI Applications” Using Decorators in CDI Applications “Using Decorators in CDI Applications” Using Stereotypes in CDI Applications “Using Stereotypes in CDI Applications” Running the Advanced Contexts and Dependency Injection Examples “Running the Advanced Contexts and Dependency Injection Examples” This chapter describes… the paragraph beginning “This chapter describes…” Building and Running the CDI Advanced Examples “Building and Running the CDI Advanced Examples” The encoder Example: Using Alternatives “The encoder Example: Using Alternatives” The Coder Interface and Implementations “The Coder Interface and Implementations” The encoder Facelets Page and Managed Bean “The encoder Facelets Page and Managed Bean” Running the encoder Example “Running the encoder Example” To Build, Package, and Deploy the encoder Example Using NetBeans IDE “To Build, Package, and Deploy the encoder Example Using NetBeans IDE” To Run the encoder Example Using NetBeans IDE “To Run the encoder Example Using NetBeans IDE” To Build, Package, and Deploy the encoder Example Using Maven “To Build, Package, and Deploy the encoder Example Using Maven” To Run the encoder Example Using Maven “To Run the encoder Example Using Maven” The producermethods Example: Using a Producer Method to Choose a Bean Implementation “The producermethods Example: Using a Producer Method to Choose a Bean Implementation” Components of the producermethods Example “Components of the producermethods Example” Running the producermethods Example “Running the producermethods Example” To Build, Package, and Deploy the producermethods Example Using NetBeans IDE “To Build, Package, and Deploy the producermethods Example Using NetBeans IDE” To Build, Package, and Deploy the producermethods Example Using Maven “To Build, Package, and Deploy the producermethods Example Using Maven” To Run the producermethods Example “To Run the producermethods Example” The producerfields Example: Using Producer Fields to Generate Resources “The producerfields Example: Using Producer Fields to Generate Resources” The Producer Field for the producerfields Example “The Producer Field for the producerfields Example” The producerfields Entity and Session Bean “The producerfields Entity and Session Bean” The producerfields Facelets Pages and Managed Bean “The producerfields Facelets Pages and Managed Bean” Running the producerfields Example “Running the producerfields Example” To Build, Package, and Deploy the producerfields Example Using NetBeans IDE “To Build, Package, and Deploy the producerfields Example Using NetBeans IDE” To Build, Package, and Deploy the producerfields Example Using Maven “To Build, Package, and Deploy the producerfields Example Using Maven” To Run the producerfields Example “To Run the producerfields Example” The billpayment Example: Using Events and Interceptors “The billpayment Example: Using Events and Interceptors” Overview of the billpayment Example “Overview of the billpayment Example” The PaymentEvent Event Class “The PaymentEvent Event Class” The PaymentHandler Event Listener “The PaymentHandler Event Listener” The billpayment Facelets Pages and Managed Bean “The billpayment Facelets Pages and Managed Bean” The LoggedInterceptor Interceptor Class “The LoggedInterceptor Interceptor Class” Running the billpayment Example “Running the billpayment Example” To Build, Package, and Deploy the billpayment Example Using NetBeans IDE “To Build, Package, and Deploy the billpayment Example Using NetBeans IDE” To Build, Package, and Deploy the billpayment Example Using Maven “To Build, Package, and Deploy the billpayment Example Using Maven” To Run the billpayment Example “To Run the billpayment Example” The decorators Example: Decorating a Bean “The decorators Example: Decorating a Bean” Overview of the decorators Example “Overview of the decorators Example” Components of the decorators Example “Components of the decorators Example” Running the decorators Example “Running the decorators Example” To Build, Package, and Deploy the decorators Example Using NetBeans IDE “To Build, Package, and Deploy the decorators Example Using NetBeans IDE” To Build, Package, and Deploy the decorators Example Using Maven “To Build, Package, and Deploy the decorators Example Using Maven” To Run the decorators Example “To Run the decorators Example” Introduction to Web Services “Introduction to Web Services” This part of… the paragraph beginning “This part of…” What Are Web Services? “What Are Web Services?” Types of Web Services “Types of Web Services” "Big" Web Services “"Big" Web Services” RESTful Web Services “RESTful Web Services” Deciding Which Type of Web Service to Use “Deciding Which Type of Web Service to Use” Building Web Services with JAX-WS “Building Web Services with JAX-WS” This chapter describes… the paragraph beginning “This chapter describes…” Overview of Java API for XML Web Services “Overview of Java API for XML Web Services” Creating a Simple Web Service and Clients with JAX-WS “Creating a Simple Web Service and Clients with JAX-WS” Communication between a JAX-WS Web Service and a Client “Communication between a JAX-WS Web Service and a Client” Basic Steps for Creating a Web Service and Client “Basic Steps for Creating a Web Service and Client” Requirements of a JAX-WS Endpoint “Requirements of a JAX-WS Endpoint” Coding the Service Endpoint Implementation Class “Coding the Service Endpoint Implementation Class” Building, Packaging, and Deploying the Service “Building, Packaging, and Deploying the Service” To Build, Package, and Deploy the Service Using NetBeans IDE “To Build, Package, and Deploy the Service Using NetBeans IDE” Next Steps “Next Steps” To Build, Package, and Deploy the Service Using Maven “To Build, Package, and Deploy the Service Using Maven” Next Steps “Next Steps” Testing the Methods of a Web Service Endpoint “Testing the Methods of a Web Service Endpoint” To Test the Service without a Client “To Test the Service without a Client” A Simple JAX-WS Application Client “A Simple JAX-WS Application Client” Coding the Application Client “Coding the Application Client” Running the Application Client “Running the Application Client” To Run the Application Client Using NetBeans IDE “To Run the Application Client Using NetBeans IDE” To Run the Application Client Using Maven “To Run the Application Client Using Maven” A Simple JAX-WS Web Client “A Simple JAX-WS Web Client” Coding the Servlet “Coding the Servlet” Running the Web Client “Running the Web Client” To Run the Web Client Using NetBeans IDE “To Run the Web Client Using NetBeans IDE” To Run the Web Client Using Maven “To Run the Web Client Using Maven” Types Supported by JAX-WS “Types Supported by JAX-WS” Schema-to-Java Mapping “Schema-to-Java Mapping” Mapping of XML Data Types to Java Data Types in JAXB “Mapping of XML Data Types to Java Data Types in JAXB” Java-to-Schema Mapping “Java-to-Schema Mapping” Mapping of Java Classes to XML Data Types in JAXB “Mapping of Java Classes to XML Data Types in JAXB” Web Services Interoperability and JAX-WS “Web Services Interoperability and JAX-WS” Further Information about JAX-WS “Further Information about JAX-WS” Building RESTful Web Services with JAX-RS “Building RESTful Web Services with JAX-RS” This chapter describes… the paragraph beginning “This chapter describes…” What Are RESTful Web Services? “What Are RESTful Web Services?” Creating a RESTful Root Resource Class “Creating a RESTful Root Resource Class” Developing RESTful Web Services with JAX-RS “Developing RESTful Web Services with JAX-RS” Summary of JAX-RS Annotations “Summary of JAX-RS Annotations” Overview of a JAX-RS Application “Overview of a JAX-RS Application” The @Path Annotation and URI Path Templates “The @Path Annotation and URI Path Templates” Examples of URI Path Templates “Examples of URI Path Templates” Responding to HTTP Methods and Requests “Responding to HTTP Methods and Requests” The Request Method Designator Annotations “The Request Method Designator Annotations” Using Entity Providers to Map HTTP Response and Request Entity Bodies “Using Entity Providers to Map HTTP Response and Request Entity Bodies” Types Supported for HTTP Request and Response Entity Bodies “Types Supported for HTTP Request and Response Entity Bodies” Using @Consumes and @Produces to Customize Requests and Responses “Using @Consumes and @Produces to Customize Requests and Responses” The @Produces Annotation “The @Produces Annotation” The @Consumes Annotation “The @Consumes Annotation” Extracting Request Parameters “Extracting Request Parameters” Configuring JAX-RS Applications “Configuring JAX-RS Applications” Configuring a JAX-RS Application Using a Subclass of Application “Configuring a JAX-RS Application Using a Subclass of Application” Configuring the Base URI in web.xml “Configuring the Base URI in web.xml” Example Applications for JAX-RS “Example Applications for JAX-RS” Creating a Simple RESTful Web Service “Creating a Simple RESTful Web Service” To Create a RESTful Web Service Using NetBeans IDE “To Create a RESTful Web Service Using NetBeans IDE” The rsvp Example Application “The rsvp Example Application” Components of the rsvp Example Application “Components of the rsvp Example Application” Running the rsvp Example Application “Running the rsvp Example Application” To Run the rsvp Example Application Using NetBeans IDE “To Run the rsvp Example Application Using NetBeans IDE” To Run the rsvp Example Application Using Maven “To Run the rsvp Example Application Using Maven” Real-World Examples “Real-World Examples” Further Information about JAX-RS “Further Information about JAX-RS” Accessing REST Resources with the JAX-RS Client API “Accessing REST Resources with the JAX-RS Client API” This chapter describes… the paragraph beginning “This chapter describes…” Overview of the Client API “Overview of the Client API” Creating a Basic Client Request Using the Client API “Creating a Basic Client Request Using the Client API” Obtaining the Client Instance “Obtaining the Client Instance” Setting the Client Target “Setting the Client Target” Setting Path Parameters in Targets “Setting Path Parameters in Targets” Invoking the Request “Invoking the Request” Using the Client API in the JAX-RS Example Applications “Using the Client API in the JAX-RS Example Applications” The Client API in the rsvp Example Application “The Client API in the rsvp Example Application” The Client API in the customer Example Application “The Client API in the customer Example Application” Advanced Features of the Client API “Advanced Features of the Client API” Configuring the Client Request “Configuring the Client Request” Setting Message Headers in the Client Request “Setting Message Headers in the Client Request” Setting Cookies in the Client Request “Setting Cookies in the Client Request” Adding Filters to the Client “Adding Filters to the Client” Asynchronous Invocations in the Client API “Asynchronous Invocations in the Client API” Using Custom Callbacks in Asynchronous Invocations “Using Custom Callbacks in Asynchronous Invocations” Using Reactive Approach in Asynchronous Invocations “Using Reactive Approach in Asynchronous Invocations” Using Server-Sent Events “Using Server-Sent Events” Overview of the SSE API “Overview of the SSE API” Broadcasting Using SSE “Broadcasting Using SSE” Listening and Receiving Events “Listening and Receiving Events” JAX-RS: Advanced Topics and an Example “JAX-RS: Advanced Topics and an Example” The Java API… the paragraph beginning “The Java API…” Annotations for Field and Bean Properties of Resource Classes “Annotations for Field and Bean Properties of Resource Classes” Advanced JAX-RS Annotations “Advanced JAX-RS Annotations” Extracting Path Parameters “Extracting Path Parameters” Extracting Query Parameters “Extracting Query Parameters” Extracting Form Data “Extracting Form Data” Extracting the Java Type of a Request or Response “Extracting the Java Type of a Request or Response” Validating Resource Data with Bean Validation “Validating Resource Data with Bean Validation” Using Constraint Annotations on Resource Methods “Using Constraint Annotations on Resource Methods” Validating Entity Data “Validating Entity Data” Validation Exception Handling and Response Codes “Validation Exception Handling and Response Codes” Subresources and Runtime Resource Resolution “Subresources and Runtime Resource Resolution” Subresource Methods “Subresource Methods” Subresource Locators “Subresource Locators” Integrating JAX-RS with EJB Technology and CDI “Integrating JAX-RS with EJB Technology and CDI” Conditional HTTP Requests “Conditional HTTP Requests” Runtime Content Negotiation “Runtime Content Negotiation” Using JAX-RS with JAXB “Using JAX-RS with JAXB” Using Java Objects to Model Your Data “Using Java Objects to Model Your Data” Starting from an Existing XML Schema Definition “Starting from an Existing XML Schema Definition” Using JSON with JAX-RS and JAXB “Using JSON with JAX-RS and JAXB” The customer Example Application “The customer Example Application” Overview of the customer Example Application “Overview of the customer Example Application” The Customer and Address Entity Classes “The Customer and Address Entity Classes” The CustomerService Class “The CustomerService Class” Using the JAX-RS Client in the CustomerBean Classes “Using the JAX-RS Client in the CustomerBean Classes” Running the customer Example “Running the customer Example” To Build, Package, and Deploy the customer Example Using NetBeans IDE “To Build, Package, and Deploy the customer Example Using NetBeans IDE” To Build, Package, and Deploy the customer Example Using Maven “To Build, Package, and Deploy the customer Example Using Maven” Enterprise Beans “Enterprise Beans” Enterprise beans are… the paragraph beginning “Enterprise beans are…” What Is an Enterprise Bean? “What Is an Enterprise Bean?” Benefits of Enterprise Beans “Benefits of Enterprise Beans” When to Use Enterprise Beans “When to Use Enterprise Beans” Types of Enterprise Beans “Types of Enterprise Beans” Enterprise Bean Types “Enterprise Bean Types” What Is a Session Bean? “What Is a Session Bean?” Types of Session Beans “Types of Session Beans” Stateful Session Beans “Stateful Session Beans” Stateless Session Beans “Stateless Session Beans” Singleton Session Beans “Singleton Session Beans” When to Use Session Beans “When to Use Session Beans” What Is a Message-Driven Bean? “What Is a Message-Driven Bean?” What Makes Message-Driven Beans Different from Session Beans? “What Makes Message-Driven Beans Different from Session Beans?” When to Use Message-Driven Beans “When to Use Message-Driven Beans” Accessing Enterprise Beans “Accessing Enterprise Beans” Using Enterprise Beans in Clients “Using Enterprise Beans in Clients” Portable JNDI Syntax “Portable JNDI Syntax” Deciding on Remote or Local Access “Deciding on Remote or Local Access” Local Clients “Local Clients” Accessing Local Enterprise Beans Using the No-Interface View “Accessing Local Enterprise Beans Using the No-Interface View” Accessing Local Enterprise Beans That Implement Business Interfaces “Accessing Local Enterprise Beans That Implement Business Interfaces” Remote Clients “Remote Clients” Interfaces for an Enterprise Bean with Remote Access “Interfaces for an Enterprise Bean with Remote Access” Web Service Clients “Web Service Clients” Method Parameters and Access “Method Parameters and Access” Isolation “Isolation” Granularity of Accessed Data “Granularity of Accessed Data” The Contents of an Enterprise Bean “The Contents of an Enterprise Bean” Naming Conventions for Enterprise Beans “Naming Conventions for Enterprise Beans” Naming Conventions for Enterprise Beans “Naming Conventions for Enterprise Beans” The Lifecycles of Enterprise Beans “The Lifecycles of Enterprise Beans” The Lifecycle of a Stateful Session Bean “The Lifecycle of a Stateful Session Bean” Lifecycle of a Stateful Session Bean “Lifecycle of a Stateful Session Bean” The Lifecycle of a Stateless Session Bean “The Lifecycle of a Stateless Session Bean” Lifecycle of a Stateless or Singleton Session Bean “Lifecycle of a Stateless or Singleton Session Bean” The Lifecycle of a Singleton Session Bean “The Lifecycle of a Singleton Session Bean” The Lifecycle of a Message-Driven Bean “The Lifecycle of a Message-Driven Bean” Lifecycle of a Message-Driven Bean “Lifecycle of a Message-Driven Bean” Further Information about Enterprise Beans “Further Information about Enterprise Beans” Getting Started with Enterprise Beans “Getting Started with Enterprise Beans” This chapter shows… the paragraph beginning “This chapter shows…” Starting With Enterprise Beans “Starting With Enterprise Beans” Creating the Enterprise Bean “Creating the Enterprise Bean” Coding the Enterprise Bean Class “Coding the Enterprise Bean Class” Creating the converter Web Client “Creating the converter Web Client” Running the converter Example “Running the converter Example” To Run the converter Example Using NetBeans IDE “To Run the converter Example Using NetBeans IDE” To Run the converter Example Using Maven “To Run the converter Example Using Maven” Modifying the Java EE Application “Modifying the Java EE Application” To Modify a Class File “To Modify a Class File” Running the Enterprise Bean Examples “Running the Enterprise Bean Examples” This chapter describes… the paragraph beginning “This chapter describes…” Overview of the EJB Examples “Overview of the EJB Examples” The cart Example “The cart Example” The Business Interface “The Business Interface” Session Bean Class “Session Bean Class” Lifecycle Callback Methods “Lifecycle Callback Methods” Business Methods “Business Methods” The @Remove Method “The @Remove Method” Helper Classes “Helper Classes” Running the cart Example “Running the cart Example” To Run the cart Example Using NetBeans IDE “To Run the cart Example Using NetBeans IDE” To Run the cart Example Using Maven “To Run the cart Example Using Maven” A Singleton Session Bean Example: counter “A Singleton Session Bean Example: counter” Creating a Singleton Session Bean “Creating a Singleton Session Bean” Initializing Singleton Session Beans “Initializing Singleton Session Beans” Managing Concurrent Access in a Singleton Session Bean “Managing Concurrent Access in a Singleton Session Bean” Handling Errors in a Singleton Session Bean “Handling Errors in a Singleton Session Bean” The Architecture of the counter Example “The Architecture of the counter Example” Running the counter Example “Running the counter Example” To Run the counter Example Using NetBeans IDE “To Run the counter Example Using NetBeans IDE” To Run the counter Example Using Maven “To Run the counter Example Using Maven” A Web Service Example: helloservice “A Web Service Example: helloservice” The Web Service Endpoint Implementation Class “The Web Service Endpoint Implementation Class” Stateless Session Bean Implementation Class “Stateless Session Bean Implementation Class” Running the helloservice Example “Running the helloservice Example” To Build, Package, and Deploy the helloservice Example Using NetBeans IDE “To Build, Package, and Deploy the helloservice Example Using NetBeans IDE” To Build, Package, and Deploy the helloservice Example Using Maven “To Build, Package, and Deploy the helloservice Example Using Maven” To Test the Service without a Client “To Test the Service without a Client” Using the Timer Service “Using the Timer Service” Creating Calendar-Based Timer Expressions “Creating Calendar-Based Timer Expressions” Calendar-Based Timer Attributes “Calendar-Based Timer Attributes” Specifying Multiple Values in Calendar Expressions “Specifying Multiple Values in Calendar Expressions” Programmatic Timers “Programmatic Timers” The @Timeout Method “The @Timeout Method” Creating Programmatic Timers “Creating Programmatic Timers” Automatic Timers “Automatic Timers” Canceling and Saving Timers “Canceling and Saving Timers” Getting Timer Information “Getting Timer Information” Transactions and Timers “Transactions and Timers” The timersession Example “The timersession Example” Running the timersession Example “Running the timersession Example” To Run the timersession Example Using NetBeans IDE “To Run the timersession Example Using NetBeans IDE” To Build, Package, and Deploy the timersession Example Using Maven “To Build, Package, and Deploy the timersession Example Using Maven” To Run the Web Client “To Run the Web Client” Handling Exceptions “Handling Exceptions” Using the Embedded Enterprise Bean Container “Using the Embedded Enterprise Bean Container” This chapter demonstrates… the paragraph beginning “This chapter demonstrates…” Overview of the Embedded Enterprise Bean Container “Overview of the Embedded Enterprise Bean Container” Developing Embeddable Enterprise Bean Applications “Developing Embeddable Enterprise Bean Applications” Required Enterprise Bean Features in the Embeddable Container “Required Enterprise Bean Features in the Embeddable Container” Running Embedded Applications “Running Embedded Applications” Creating the Enterprise Bean Container “Creating the Enterprise Bean Container” Explicitly Specifying Enterprise Bean Modules to Be Initialized “Explicitly Specifying Enterprise Bean Modules to Be Initialized” Looking Up Session Bean References “Looking Up Session Bean References” Shutting Down the Enterprise Bean Container “Shutting Down the Enterprise Bean Container” The standalone Example Application “The standalone Example Application” Overview of the standalone Example Application “Overview of the standalone Example Application” To Run the standalone Example Application Using NetBeans IDE “To Run the standalone Example Application Using NetBeans IDE” To Run the standalone Example Application Using Maven “To Run the standalone Example Application Using Maven” Using Asynchronous Method Invocation in Session Beans “Using Asynchronous Method Invocation in Session Beans” This chapter discusses… the paragraph beginning “This chapter discusses…” Asynchronous Method Invocation “Asynchronous Method Invocation” Creating an Asynchronous Business Method “Creating an Asynchronous Business Method” Calling Asynchronous Methods from Enterprise Bean Clients “Calling Asynchronous Methods from Enterprise Bean Clients” Retrieving the Final Result from an Asynchronous Method Invocation “Retrieving the Final Result from an Asynchronous Method Invocation” Cancelling an Asynchronous Method Invocation “Cancelling an Asynchronous Method Invocation” Checking the Status of an Asynchronous Method Invocation “Checking the Status of an Asynchronous Method Invocation” The async Example Application “The async Example Application” Architecture of the async-war Module “Architecture of the async-war Module” Running the async Example “Running the async Example” To Run the async Example Application Using NetBeans IDE “To Run the async Example Application Using NetBeans IDE” To Run the async Example Application Using Maven “To Run the async Example Application Using Maven” Introduction to the Java Persistence API “Introduction to the Java Persistence API” This chapter provides… the paragraph beginning “This chapter provides…” Overview of the Java Persistence API “Overview of the Java Persistence API” Entities “Entities” Requirements for Entity Classes “Requirements for Entity Classes” Persistent Fields and Properties in Entity Classes “Persistent Fields and Properties in Entity Classes” Persistent Fields “Persistent Fields” Persistent Properties “Persistent Properties” Using Collections in Entity Fields and Properties “Using Collections in Entity Fields and Properties” Validating Persistent Fields and Properties “Validating Persistent Fields and Properties” Primary Keys in Entities “Primary Keys in Entities” Multiplicity in Entity Relationships “Multiplicity in Entity Relationships” Direction in Entity Relationships “Direction in Entity Relationships” Bidirectional Relationships “Bidirectional Relationships” Unidirectional Relationships “Unidirectional Relationships” Queries and Relationship Direction “Queries and Relationship Direction” Cascade Operations and Relationships “Cascade Operations and Relationships” Cascade Operations for Entities “Cascade Operations for Entities” Orphan Removal in Relationships “Orphan Removal in Relationships” Embeddable Classes in Entities “Embeddable Classes in Entities” Entity Inheritance “Entity Inheritance” Abstract Entities “Abstract Entities” Mapped Superclasses “Mapped Superclasses” Non-Entity Superclasses “Non-Entity Superclasses” Entity Inheritance Mapping Strategies “Entity Inheritance Mapping Strategies” The Single Table per Class Hierarchy Strategy “The Single Table per Class Hierarchy Strategy” @DiscriminatorColumn Elements “@DiscriminatorColumn Elements” The Table per Concrete Class Strategy “The Table per Concrete Class Strategy” The Joined Subclass Strategy “The Joined Subclass Strategy” Managing Entities “Managing Entities” The EntityManager Interface “The EntityManager Interface” Container-Managed Entity Managers “Container-Managed Entity Managers” Application-Managed Entity Managers “Application-Managed Entity Managers” Finding Entities Using the EntityManager “Finding Entities Using the EntityManager” Managing an Entity Instance's Lifecycle “Managing an Entity Instance's Lifecycle” Persisting Entity Instances “Persisting Entity Instances” Removing Entity Instances “Removing Entity Instances” Synchronizing Entity Data to the Database “Synchronizing Entity Data to the Database” Persistence Units “Persistence Units” Querying Entities “Querying Entities” Database Schema Creation “Database Schema Creation” Configuring an Application to Create or Drop Database Tables “Configuring an Application to Create or Drop Database Tables” Schema Creation Actions “Schema Creation Actions” Settings for Create and Delete Source Properties “Settings for Create and Delete Source Properties” Loading Data Using SQL Scripts “Loading Data Using SQL Scripts” Further Information about Persistence “Further Information about Persistence” Running the Persistence Examples “Running the Persistence Examples” This chapter explains… the paragraph beginning “This chapter explains…” Overview of the Persistence Examples “Overview of the Persistence Examples” The order Application “The order Application” Database Schema for the order Application “Database Schema for the order Application” Entity Relationships in the order Application “Entity Relationships in the order Application” Self-Referential Relationships “Self-Referential Relationships” One-to-One Relationships “One-to-One Relationships” One-to-Many Relationship Mapped to Overlapping Primary and Foreign Keys “One-to-Many Relationship Mapped to Overlapping Primary and Foreign Keys” Unidirectional Relationships “Unidirectional Relationships” Primary Keys in the order Application “Primary Keys in the order Application” Generated Primary Keys “Generated Primary Keys” Compound Primary Keys “Compound Primary Keys” Entity Mapped to More Than One Database Table “Entity Mapped to More Than One Database Table” Cascade Operations in the order Application “Cascade Operations in the order Application” BLOB and CLOB Database Types in the order Application “BLOB and CLOB Database Types in the order Application” Temporal Types in the order Application “Temporal Types in the order Application” Managing the order Application's Entities “Managing the order Application's Entities” Creating Entities “Creating Entities” Finding Entities “Finding Entities” Setting Entity Relationships “Setting Entity Relationships” Using Queries “Using Queries” Removing Entities “Removing Entities” Running the order Example “Running the order Example” To Run the order Example Using NetBeans IDE “To Run the order Example Using NetBeans IDE” To Run the order Example Using Maven “To Run the order Example Using Maven” The roster Application “The roster Application” Database Schema for the roster Application “Database Schema for the roster Application” Relationships in the roster Application “Relationships in the roster Application” The Many-To-Many Relationship in roster “The Many-To-Many Relationship in roster” Entity Inheritance in the roster Application “Entity Inheritance in the roster Application” Criteria Queries in the roster Application “Criteria Queries in the roster Application” Metamodel Classes in the roster Application “Metamodel Classes in the roster Application” Obtaining a CriteriaBuilder Instance in RequestBean “Obtaining a CriteriaBuilder Instance in RequestBean” Creating Criteria Queries in RequestBean's Business Methods “Creating Criteria Queries in RequestBean's Business Methods” Automatic Table Generation in the roster Application “Automatic Table Generation in the roster Application” Running the roster Example “Running the roster Example” To Run the roster Example Using NetBeans IDE “To Run the roster Example Using NetBeans IDE” To Run the roster Example Using Maven “To Run the roster Example Using Maven” The address-book Application “The address-book Application” Bean Validation Constraints in address-book “Bean Validation Constraints in address-book” Specifying Error Messages for Constraints in address-book “Specifying Error Messages for Constraints in address-book” Validating Contact Input from a JavaServer Faces Application “Validating Contact Input from a JavaServer Faces Application” Running the address-book Example “Running the address-book Example” To Run the address-book Example Using NetBeans IDE “To Run the address-book Example Using NetBeans IDE” To Run the address-book Example Using Maven “To Run the address-book Example Using Maven” The Java Persistence Query Language “The Java Persistence Query Language” This chapter describes… the paragraph beginning “This chapter describes…” Overview of the Java Persistence Query Language “Overview of the Java Persistence Query Language” Query Language Terminology “Query Language Terminology” Creating Queries Using the Java Persistence Query Language “Creating Queries Using the Java Persistence Query Language” Named Parameters in Queries “Named Parameters in Queries” Positional Parameters in Queries “Positional Parameters in Queries” Simplified Query Language Syntax “Simplified Query Language Syntax” Select Statements “Select Statements” Update and Delete Statements “Update and Delete Statements” Example Queries “Example Queries” Simple Queries “Simple Queries” A Basic Select Query “A Basic Select Query” Eliminating Duplicate Values “Eliminating Duplicate Values” Using Named Parameters “Using Named Parameters” Queries That Navigate to Related Entities “Queries That Navigate to Related Entities” A Simple Query with Relationships “A Simple Query with Relationships” Navigating to Single-Valued Relationship Fields “Navigating to Single-Valued Relationship Fields” Traversing Relationships with an Input Parameter “Traversing Relationships with an Input Parameter” Traversing Multiple Relationships “Traversing Multiple Relationships” Navigating According to Related Fields “Navigating According to Related Fields” Queries with Other Conditional Expressions “Queries with Other Conditional Expressions” The LIKE Expression “The LIKE Expression” The IS NULL Expression “The IS NULL Expression” The IS EMPTY Expression “The IS EMPTY Expression” The BETWEEN Expression “The BETWEEN Expression” Comparison Operators “Comparison Operators” Bulk Updates and Deletes “Bulk Updates and Deletes” Update Queries “Update Queries” Delete Queries “Delete Queries” Full Query Language Syntax “Full Query Language Syntax” BNF Symbols “BNF Symbols” BNF Symbol Summary “BNF Symbol Summary” BNF Grammar of the Java Persistence Query Language “BNF Grammar of the Java Persistence Query Language” FROM Clause “FROM Clause” Identifiers “Identifiers” Identification Variables “Identification Variables” Range Variable Declarations “Range Variable Declarations” Collection Member Declarations “Collection Member Declarations” Joins “Joins” Path Expressions “Path Expressions” Examples of Path Expressions “Examples of Path Expressions” Expression Types “Expression Types” Navigation “Navigation” WHERE Clause “WHERE Clause” Literals “Literals” Input Parameters “Input Parameters” Conditional Expressions “Conditional Expressions” Operators and Their Precedence “Operators and Their Precedence” Query Language Order Precedence “Query Language Order Precedence” BETWEEN Expressions “BETWEEN Expressions” IN Expressions “IN Expressions” LIKE Expressions “LIKE Expressions” LIKE Expression Examples “LIKE Expression Examples” NULL Comparison Expressions “NULL Comparison Expressions” Empty Collection Comparison Expressions “Empty Collection Comparison Expressions” Collection Member Expressions “Collection Member Expressions” Subqueries “Subqueries” Functional Expressions “Functional Expressions” String Expressions “String Expressions” Arithmetic Expressions “Arithmetic Expressions” Date/Time Expressions “Date/Time Expressions” Case Expressions “Case Expressions” NULL Values “NULL Values” AND Operator Logic “AND Operator Logic” OR Operator Logic “OR Operator Logic” Equality Semantics “Equality Semantics” NOT Operator Logic “NOT Operator Logic” Conditional Test “Conditional Test” SELECT Clause “SELECT Clause” Return Types “Return Types” Aggregate Functions in Select Statements “Aggregate Functions in Select Statements” The DISTINCT Keyword “The DISTINCT Keyword” Constructor Expressions “Constructor Expressions” ORDER BY Clause “ORDER BY Clause” GROUP BY and HAVING Clauses “GROUP BY and HAVING Clauses” Using the Criteria API to Create Queries “Using the Criteria API to Create Queries” The Criteria API… the paragraph beginning “The Criteria API…” Overview of the Criteria and Metamodel APIs “Overview of the Criteria and Metamodel APIs” Using the Metamodel API to Model Entity Classes “Using the Metamodel API to Model Entity Classes” Using Metamodel Classes “Using Metamodel Classes” Using the Criteria API and Metamodel API to Create Basic Typesafe Queries “Using the Criteria API and Metamodel API to Create Basic Typesafe Queries” Creating a Criteria Query “Creating a Criteria Query” Query Roots “Query Roots” Querying Relationships Using Joins “Querying Relationships Using Joins” Path Navigation in Criteria Queries “Path Navigation in Criteria Queries” Restricting Criteria Query Results “Restricting Criteria Query Results” The Expression Interface Methods “The Expression Interface Methods” Conditional Methods in the Expression Interface “Conditional Methods in the Expression Interface” Expression Methods in the CriteriaBuilder Interface “Expression Methods in the CriteriaBuilder Interface” Conditional Methods in the CriteriaBuilder Interface “Conditional Methods in the CriteriaBuilder Interface” Compound Predicate Methods in the CriteriaBuilder Interface “Compound Predicate Methods in the CriteriaBuilder Interface” Managing Criteria Query Results “Managing Criteria Query Results” Ordering Results “Ordering Results” Grouping Results “Grouping Results” Executing Queries “Executing Queries” Single-Valued Query Results “Single-Valued Query Results” Collection-Valued Query Results “Collection-Valued Query Results” Creating and Using String-Based Criteria Queries “Creating and Using String-Based Criteria Queries” This chapter describes… the paragraph beginning “This chapter describes…” Overview of String-Based Criteria API Queries “Overview of String-Based Criteria API Queries” Creating String-Based Queries “Creating String-Based Queries” Executing String-Based Queries “Executing String-Based Queries” Controlling Concurrent Access to Entity Data with Locking “Controlling Concurrent Access to Entity Data with Locking” This chapter details… the paragraph beginning “This chapter details…” Overview of Entity Locking and Concurrency “Overview of Entity Locking and Concurrency” Using Optimistic Locking “Using Optimistic Locking” Lock Modes “Lock Modes” Lock Modes for Concurrent Entity Access “Lock Modes for Concurrent Entity Access” Setting the Lock Mode “Setting the Lock Mode” Using Pessimistic Locking “Using Pessimistic Locking” Pessimistic Locking Timeouts “Pessimistic Locking Timeouts” Creating Fetch Plans with Entity Graphs “Creating Fetch Plans with Entity Graphs” This chapter explains… the paragraph beginning “This chapter explains…” Overview of Using Fetch Plans and Entity Graphs “Overview of Using Fetch Plans and Entity Graphs” Entity Graph Basics “Entity Graph Basics” The Default Entity Graph “The Default Entity Graph” Using Entity Graphs in Persistence Operations “Using Entity Graphs in Persistence Operations” Fetch Graphs “Fetch Graphs” Load Graphs “Load Graphs” Using Named Entity Graphs “Using Named Entity Graphs” Applying Named Entity Graph Annotations to Entity Classes “Applying Named Entity Graph Annotations to Entity Classes” Obtaining EntityGraph Instances from Named Entity Graphs “Obtaining EntityGraph Instances from Named Entity Graphs” Using Entity Graphs in Query Operations “Using Entity Graphs in Query Operations” Using a Second-Level Cache with Java Persistence API Applications “Using a Second-Level Cache with Java Persistence API Applications” This chapter explains… the paragraph beginning “This chapter explains…” Overview of the Second-Level Cache “Overview of the Second-Level Cache” Cache Mode Settings for the Second-Level Cache “Cache Mode Settings for the Second-Level Cache” Controlling whether Entities May Be Cached “Controlling whether Entities May Be Cached” Specifying the Cache Mode Settings to Improve Performance “Specifying the Cache Mode Settings to Improve Performance” Setting the Cache Retrieval and Store Modes “Setting the Cache Retrieval and Store Modes” Cache Retrieval Mode “Cache Retrieval Mode” Cache Store Mode “Cache Store Mode” Setting the Cache Retrieval or Store Mode “Setting the Cache Retrieval or Store Mode” Controlling the Second-Level Cache Programmatically “Controlling the Second-Level Cache Programmatically” Overview of the javax.persistence.Cache Interface “Overview of the javax.persistence.Cache Interface” Checking whether an Entity's Data Is Cached “Checking whether an Entity's Data Is Cached” Removing an Entity from the Cache “Removing an Entity from the Cache” Removing All Data from the Cache “Removing All Data from the Cache” Java Message Service Concepts “Java Message Service Concepts” This chapter provides… the paragraph beginning “This chapter provides…” Overview of the JMS API “Overview of the JMS API” What Is Messaging? “What Is Messaging?” What Is the JMS API? “What Is the JMS API?” When Can You Use the JMS API? “When Can You Use the JMS API?” Messaging in an Enterprise Application “Messaging in an Enterprise Application” How Does the JMS API Work with the Java EE Platform? “How Does the JMS API Work with the Java EE Platform?” Basic JMS API Concepts “Basic JMS API Concepts” JMS API Architecture “JMS API Architecture” JMS API Architecture “JMS API Architecture” Messaging Styles “Messaging Styles” Point-to-Point Messaging Style “Point-to-Point Messaging Style” Point-to-Point Messaging “Point-to-Point Messaging” Publish/Subscribe Messaging Style “Publish/Subscribe Messaging Style” Publish/Subscribe Messaging “Publish/Subscribe Messaging” Message Consumption “Message Consumption” The JMS API Programming Model “The JMS API Programming Model” The JMS API Programming Model “The JMS API Programming Model” JMS Administered Objects “JMS Administered Objects” JMS Connection Factories “JMS Connection Factories” JMS Destinations “JMS Destinations” Connections “Connections” Sessions “Sessions” JMSContext Objects “JMSContext Objects” JMS Message Producers “JMS Message Producers” JMS Message Consumers “JMS Message Consumers” JMS Message Listeners “JMS Message Listeners” JMS Message Selectors “JMS Message Selectors” Consuming Messages from Topics “Consuming Messages from Topics” Creating Durable Subscriptions “Creating Durable Subscriptions” Nondurable Subscriptions and Consumers “Nondurable Subscriptions and Consumers” Consumers on a Durable Subscription “Consumers on a Durable Subscription” Creating Shared Subscriptions “Creating Shared Subscriptions” JMS Messages “JMS Messages” Message Headers “Message Headers” How JMS Message Header Field Values Are Set “How JMS Message Header Field Values Are Set” Message Properties “Message Properties” Message Bodies “Message Bodies” JMS Message Types “JMS Message Types” JMS Queue Browsers “JMS Queue Browsers” JMS Exception Handling “JMS Exception Handling” Using Advanced JMS Features “Using Advanced JMS Features” Controlling Message Acknowledgment “Controlling Message Acknowledgment” Specifying Options for Sending Messages “Specifying Options for Sending Messages” Specifying Message Persistence “Specifying Message Persistence” Setting Message Priority Levels “Setting Message Priority Levels” Allowing Messages to Expire “Allowing Messages to Expire” Specifying a Delivery Delay “Specifying a Delivery Delay” Using JMSProducer Method Chaining “Using JMSProducer Method Chaining” Creating Temporary Destinations “Creating Temporary Destinations” Using JMS Local Transactions “Using JMS Local Transactions” Using JMS Local Transactions “Using JMS Local Transactions” Sending Messages Asynchronously “Sending Messages Asynchronously” Using the JMS API in Java EE Applications “Using the JMS API in Java EE Applications” Overview of Using the JMS API “Overview of Using the JMS API” Creating Resources for Java EE Applications “Creating Resources for Java EE Applications” Using Resource Injection in Enterprise Bean or Web Components “Using Resource Injection in Enterprise Bean or Web Components” Injecting a ConnectionFactory, Queue, or Topic “Injecting a ConnectionFactory, Queue, or Topic” Injecting a JMSContext Object “Injecting a JMSContext Object” Using Java EE Components to Produce and to Synchronously Receive Messages “Using Java EE Components to Produce and to Synchronously Receive Messages” Managing JMS Resources in Web and EJB Components “Managing JMS Resources in Web and EJB Components” Managing Transactions in Session Beans “Managing Transactions in Session Beans” Using Message-Driven Beans to Receive Messages Asynchronously “Using Message-Driven Beans to Receive Messages Asynchronously” @ActivationConfigProperty Settings for Message-Driven Beans “@ActivationConfigProperty Settings for Message-Driven Beans” Managing JTA Transactions “Managing JTA Transactions” Further Information about JMS “Further Information about JMS” Java Message Service Examples “Java Message Service Examples” This chapter provides… the paragraph beginning “This chapter provides…” Building and Running Java Message Service Examples “Building and Running Java Message Service Examples” Overview of the JMS Examples “Overview of the JMS Examples” JMS Examples That Show the Use of Java EE Application Clients “JMS Examples That Show the Use of Java EE Application Clients” JMS Examples That Show the Use of Java EE Web and EJB Components “JMS Examples That Show the Use of Java EE Web and EJB Components” Writing Simple JMS Applications “Writing Simple JMS Applications” Overview of Writing Simple JMS Application “Overview of Writing Simple JMS Application” Starting the JMS Provider “Starting the JMS Provider” Creating JMS Administered Objects “Creating JMS Administered Objects” To Create Resources for the Simple Examples “To Create Resources for the Simple Examples” Building All the Simple Examples “Building All the Simple Examples” To Build All the Simple Examples Using NetBeans IDE “To Build All the Simple Examples Using NetBeans IDE” To Build All the Simple Examples Using Maven “To Build All the Simple Examples Using Maven” Sending Messages “Sending Messages” General Steps Performed in the Example “General Steps Performed in the Example” The Producer.java Client “The Producer.java Client” To Run the Producer Client “To Run the Producer Client” Receiving Messages Synchronously “Receiving Messages Synchronously” The SynchConsumer.java Client “The SynchConsumer.java Client” To Run the SynchConsumer and Producer Clients “To Run the SynchConsumer and Producer Clients” Using a Message Listener for Asynchronous Message Delivery “Using a Message Listener for Asynchronous Message Delivery” Writing the AsynchConsumer.java and TextListener.java Clients “Writing the AsynchConsumer.java and TextListener.java Clients” To Run the AsynchConsumer and Producer Clients “To Run the AsynchConsumer and Producer Clients” Browsing Messages on a Queue “Browsing Messages on a Queue” The MessageBrowser.java Client “The MessageBrowser.java Client” To Run the QueueBrowser Client “To Run the QueueBrowser Client” Running Multiple Consumers on the Same Destination “Running Multiple Consumers on the Same Destination” Acknowledging Messages “Acknowledging Messages” Message Acknowledgment with Synchronous and Asynchronous Consumers “Message Acknowledgment with Synchronous and Asynchronous Consumers” To Run the ClientAckConsumer Client “To Run the ClientAckConsumer Client” Writing More Advanced JMS Applications “Writing More Advanced JMS Applications” Using Durable Subscriptions “Using Durable Subscriptions” To Create Resources for the Durable Subscription Example “To Create Resources for the Durable Subscription Example” To Run the Durable Subscription Example “To Run the Durable Subscription Example” To Run the unsubscriber Example “To Run the unsubscriber Example” Using Local Transactions “Using Local Transactions” Transactions: JMS Client Example “Transactions: JMS Client Example” To Create Resources for the transactedexample Example “To Create Resources for the transactedexample Example” To Run the transactedexample Clients “To Run the transactedexample Clients” Writing High Performance and Scalable JMS Applications “Writing High Performance and Scalable JMS Applications” Using Shared Nondurable Subscriptions “Using Shared Nondurable Subscriptions” Writing the Clients for the Shared Consumer Example “Writing the Clients for the Shared Consumer Example” To Run the SharedConsumer and Producer Clients “To Run the SharedConsumer and Producer Clients” Using Shared Durable Subscriptions “Using Shared Durable Subscriptions” To Run the SharedDurableConsumer and Producer Clients “To Run the SharedDurableConsumer and Producer Clients” Sending and Receiving Messages Using a Simple Web Application “Sending and Receiving Messages Using a Simple Web Application” The websimplemessage Application “The websimplemessage Application” The websimplemessage Facelets Pages “The websimplemessage Facelets Pages” The websimplemessage Managed Beans “The websimplemessage Managed Beans” Running the websimplemessage Example “Running the websimplemessage Example” Creating Resources for the websimplemessage Example “Creating Resources for the websimplemessage Example” To Package and Deploy websimplemessage Using NetBeans IDE “To Package and Deploy websimplemessage Using NetBeans IDE” To Package and Deploy websimplemessage Using Maven “To Package and Deploy websimplemessage Using Maven” To Run the websimplemessage Example “To Run the websimplemessage Example” Receiving Messages Asynchronously Using a Message-Driven Bean “Receiving Messages Asynchronously Using a Message-Driven Bean” Overview of the simplemessage Example “Overview of the simplemessage Example” The simplemessage Application “The simplemessage Application” The simplemessage Application Client “The simplemessage Application Client” The simplemessage Message-Driven Bean Class “The simplemessage Message-Driven Bean Class” The onMessage Method “The onMessage Method” Running the simplemessage Example “Running the simplemessage Example” Creating Resources for the simplemessage Example “Creating Resources for the simplemessage Example” To Run the simplemessage Example Using NetBeans IDE “To Run the simplemessage Example Using NetBeans IDE” To Run the simplemessage Example Using Maven “To Run the simplemessage Example Using Maven” Sending Messages from a Session Bean to an MDB “Sending Messages from a Session Bean to an MDB” Writing the Application Components for the clientsessionmdb Example “Writing the Application Components for the clientsessionmdb Example” An Enterprise Bean Application: Client to Session Bean to Message-Driven Bean “An Enterprise Bean Application: Client to Session Bean to Message-Driven Bean” Coding the Application Client: MyAppClient.java “Coding the Application Client: MyAppClient.java” Coding the Publisher Session Bean “Coding the Publisher Session Bean” Coding the Message-Driven Bean: MessageBean.java “Coding the Message-Driven Bean: MessageBean.java” Running the clientsessionmdb Example “Running the clientsessionmdb Example” To Run clientsessionmdb Using NetBeans IDE “To Run clientsessionmdb Using NetBeans IDE” To Run clientsessionmdb Using Maven “To Run clientsessionmdb Using Maven” Using an Entity to Join Messages from Two MDBs “Using an Entity to Join Messages from Two MDBs” Overview of the clientmdbentity Example Application “Overview of the clientmdbentity Example Application” An Enterprise Bean Application: Client to Message-Driven Beans to Entity “An Enterprise Bean Application: Client to Message-Driven Beans to Entity” Writing the Application Components for the clientmdbentity Example “Writing the Application Components for the clientmdbentity Example” Coding the Application Client: HumanResourceClient.java “Coding the Application Client: HumanResourceClient.java” Coding the Message-Driven Beans for the clientmdbentity Example “Coding the Message-Driven Beans for the clientmdbentity Example” Coding the Entity Class for the clientmdbentity Example “Coding the Entity Class for the clientmdbentity Example” Running the clientmdbentity Example “Running the clientmdbentity Example” To Run clientmdbentity Using NetBeans IDE “To Run clientmdbentity Using NetBeans IDE” To Run clientmdbentity Using Maven “To Run clientmdbentity Using Maven” Viewing the Application Output “Viewing the Application Output” Using NetBeans IDE to Create JMS Resources “Using NetBeans IDE to Create JMS Resources” To Create JMS Resources Using NetBeans IDE “To Create JMS Resources Using NetBeans IDE” To Delete JMS Resources Using NetBeans IDE “To Delete JMS Resources Using NetBeans IDE” Introduction to Security in the Java EE Platform “Introduction to Security in the Java EE Platform” This chapter introduces… the paragraph beginning “This chapter introduces…” Overview of Java EE Security “Overview of Java EE Security” A Simple Application Security Walkthrough “A Simple Application Security Walkthrough” Step 1: Initial Request “Step 1: Initial Request” Initial Request “Initial Request” Step 2: Initial Authentication “Step 2: Initial Authentication” Initial Authentication “Initial Authentication” Step 3: URL Authorization “Step 3: URL Authorization” URL Authorization “URL Authorization” Step 4: Fulfilling the Original Request “Step 4: Fulfilling the Original Request” Fulfilling the Original Request “Fulfilling the Original Request” Step 5: Invoking Enterprise Bean Business Methods “Step 5: Invoking Enterprise Bean Business Methods” Invoking an Enterprise Bean Business Method “Invoking an Enterprise Bean Business Method” Features of a Security Mechanism “Features of a Security Mechanism” Characteristics of Application Security “Characteristics of Application Security” Security Mechanisms “Security Mechanisms” Java SE Security Mechanisms “Java SE Security Mechanisms” Java EE Security Mechanisms “Java EE Security Mechanisms” Application-Layer Security “Application-Layer Security” Transport-Layer Security “Transport-Layer Security” Message-Layer Security “Message-Layer Security” Securing Containers “Securing Containers” Using Annotations to Specify Security Information “Using Annotations to Specify Security Information” Using Deployment Descriptors for Declarative Security “Using Deployment Descriptors for Declarative Security” Using Programmatic Security “Using Programmatic Security” Securing GlassFish Server “Securing GlassFish Server” Working with Realms, Users, Groups, and Roles “Working with Realms, Users, Groups, and Roles” What Are Realms, Users, Groups, and Roles? “What Are Realms, Users, Groups, and Roles?” Mapping Roles to Users and Groups “Mapping Roles to Users and Groups” What Is a Realm? “What Is a Realm?” What Is a User? “What Is a User?” What Is a Group? “What Is a Group?” What Is a Role? “What Is a Role?” Some Other Terminology “Some Other Terminology” Managing Users and Groups in GlassFish Server “Managing Users and Groups in GlassFish Server” To Add Users to GlassFish Server “To Add Users to GlassFish Server” Setting Up Security Roles “Setting Up Security Roles” Mapping Roles to Users and Groups “Mapping Roles to Users and Groups” Establishing a Secure Connection Using SSL “Establishing a Secure Connection Using SSL” Verifying and Configuring SSL Support “Verifying and Configuring SSL Support” Further Information about Security “Further Information about Security” Getting Started Securing Web Applications “Getting Started Securing Web Applications” This chapter describes… the paragraph beginning “This chapter describes…” Overview of Web Application Security “Overview of Web Application Security” Securing Web Applications “Securing Web Applications” Overview of Securing Web Applications “Overview of Securing Web Applications” Specifying Security Constraints “Specifying Security Constraints” Specifying a Web Resource Collection “Specifying a Web Resource Collection” Specifying an Authorization Constraint “Specifying an Authorization Constraint” Specifying a Secure Connection “Specifying a Secure Connection” Specifying Security Constraints for Resources “Specifying Security Constraints for Resources” Specifying Authentication Mechanisms “Specifying Authentication Mechanisms” HTTP Basic Authentication “HTTP Basic Authentication” HTTP Basic Authentication “HTTP Basic Authentication” Form-Based Authentication “Form-Based Authentication” Form-Based Authentication “Form-Based Authentication” Digest Authentication “Digest Authentication” Specifying an Authentication Mechanism in the Deployment Descriptor “Specifying an Authentication Mechanism in the Deployment Descriptor” Declaring Security Roles “Declaring Security Roles” Using Programmatic Security with Web Applications “Using Programmatic Security with Web Applications” Authenticating Users Programmatically “Authenticating Users Programmatically” Checking Caller Identity Programmatically “Checking Caller Identity Programmatically” Example Code for Programmatic Security “Example Code for Programmatic Security” Declaring and Linking Role References “Declaring and Linking Role References” Examples: Securing Web Applications “Examples: Securing Web Applications” Overview of Examples of Securing Web Applications “Overview of Examples of Securing Web Applications” To Set Up Your System for Running the Security Examples “To Set Up Your System for Running the Security Examples” The hello2-basicauth Example: Basic Authentication with a Servlet “The hello2-basicauth Example: Basic Authentication with a Servlet” Specifying Security for Basic Authentication Using Annotations “Specifying Security for Basic Authentication Using Annotations” To Build, Package, and Deploy the hello2-basicauth Example Using NetBeans IDE “To Build, Package, and Deploy the hello2-basicauth Example Using NetBeans IDE” To Build, Package, and Deploy the hello2-basicauth Example Using Maven “To Build, Package, and Deploy the hello2-basicauth Example Using Maven” To Run the hello2-basicauth Example “To Run the hello2-basicauth Example” The hello1-formauth Example: Form-Based Authentication with a JavaServer Faces Application “The hello1-formauth Example: Form-Based Authentication with a JavaServer Faces Application” Creating the Login Form and the Error Page “Creating the Login Form and the Error Page” Specifying Security for the Form-Based Authentication Example “Specifying Security for the Form-Based Authentication Example” To Build, Package, and Deploy the hello1-formauth Example Using NetBeans IDE “To Build, Package, and Deploy the hello1-formauth Example Using NetBeans IDE” To Build, Package, and Deploy the hello1-formauth Example Using Maven and the asadmin Command “To Build, Package, and Deploy the hello1-formauth Example Using Maven and the asadmin Command” To Run the hello1-formauth Example “To Run the hello1-formauth Example” Next Steps “Next Steps” Getting Started Securing Enterprise Applications “Getting Started Securing Enterprise Applications” This chapter describes… the paragraph beginning “This chapter describes…” Basic Security Tasks for Enterprise Applications “Basic Security Tasks for Enterprise Applications” Securing Enterprise Beans “Securing Enterprise Beans” Securing an Enterprise Bean Using Declarative Security “Securing an Enterprise Bean Using Declarative Security” Specifying Authorized Users by Declaring Security Roles “Specifying Authorized Users by Declaring Security Roles” Specifying an Authentication Mechanism and Secure Connection “Specifying an Authentication Mechanism and Secure Connection” Securing an Enterprise Bean Programmatically “Securing an Enterprise Bean Programmatically” Accessing an Enterprise Bean Caller's Security Context “Accessing an Enterprise Bean Caller's Security Context” Propagating a Security Identity (Run-As) “Propagating a Security Identity (Run-As)” Security Identity Propagation “Security Identity Propagation” Configuring a Component's Propagated Security Identity “Configuring a Component's Propagated Security Identity” Trust between Containers “Trust between Containers” Deploying Secure Enterprise Beans “Deploying Secure Enterprise Beans” Examples: Securing Enterprise Beans “Examples: Securing Enterprise Beans” The cart-secure Example: Securing an Enterprise Bean with Declarative Security “The cart-secure Example: Securing an Enterprise Bean with Declarative Security” Annotating the Bean “Annotating the Bean” To Run the cart-secure Example Using NetBeans IDE “To Run the cart-secure Example Using NetBeans IDE” To Run the cart-secure Example Using Maven “To Run the cart-secure Example Using Maven” The converter-secure Example: Securing an Enterprise Bean with Programmatic Security “The converter-secure Example: Securing an Enterprise Bean with Programmatic Security” Modifying ConverterBean “Modifying ConverterBean” Modifying ConverterServlet “Modifying ConverterServlet” To Run the converter-secure Example Using NetBeans IDE “To Run the converter-secure Example Using NetBeans IDE” To Run the converter-secure Example Using Maven “To Run the converter-secure Example Using Maven” To Run the converter-secure Example “To Run the converter-secure Example” Java EE Security: Advanced Topics “Java EE Security: Advanced Topics” This chapter provides… the paragraph beginning “This chapter provides…” Working with Digital Certificates “Working with Digital Certificates” Creating a Server Certificate “Creating a Server Certificate” To Use keytool to Create a Server Certificate “To Use keytool to Create a Server Certificate” Adding Users to the Certificate Realm “Adding Users to the Certificate Realm” Using a Different Server Certificate with GlassFish Server “Using a Different Server Certificate with GlassFish Server” To Specify a Different Server Certificate “To Specify a Different Server Certificate” Authentication Mechanisms “Authentication Mechanisms” Client Authentication “Client Authentication” Mutual Authentication “Mutual Authentication” Certificate-Based Mutual Authentication “Certificate-Based Mutual Authentication” User Name/Password-Based Mutual Authentication “User Name/Password-Based Mutual Authentication” Enabling Mutual Authentication over SSL “Enabling Mutual Authentication over SSL” Creating a Client Certificate for Mutual Authentication “Creating a Client Certificate for Mutual Authentication” Using the JDBC Realm for User Authentication “Using the JDBC Realm for User Authentication” To Configure a JDBC Authentication Realm “To Configure a JDBC Authentication Realm” Securing HTTP Resources “Securing HTTP Resources” Securing Application Clients “Securing Application Clients” Using Login Modules “Using Login Modules” Using Programmatic Login “Using Programmatic Login” Securing Enterprise Information Systems Applications “Securing Enterprise Information Systems Applications” Overview of Securing Enterprise Information Systems Applications “Overview of Securing Enterprise Information Systems Applications” Container-Managed Sign-On “Container-Managed Sign-On” Component-Managed Sign-On “Component-Managed Sign-On” Configuring Resource Adapter Security “Configuring Resource Adapter Security” Mapping an Application Principal to EIS Principals “Mapping an Application Principal to EIS Principals” Configuring Security Using Deployment Descriptors “Configuring Security Using Deployment Descriptors” Specifying Security for Basic Authentication in the Deployment Descriptor “Specifying Security for Basic Authentication in the Deployment Descriptor” Specifying Non-Default Principal-to-Role Mapping in the Deployment Descriptor “Specifying Non-Default Principal-to-Role Mapping in the Deployment Descriptor” Further Information about Advanced Security Topics “Further Information about Advanced Security Topics” Transactions “Transactions” This chapter describes… the paragraph beginning “This chapter describes…” Overview of Transactions “Overview of Transactions” Transactions in Java EE Applications “Transactions in Java EE Applications” What Is a Transaction? “What Is a Transaction?” Container-Managed Transactions “Container-Managed Transactions” Transaction Attributes “Transaction Attributes” Transaction Scope “Transaction Scope” Required Attribute “Required Attribute” RequiresNew Attribute “RequiresNew Attribute” Mandatory Attribute “Mandatory Attribute” NotSupported Attribute “NotSupported Attribute” Supports Attribute “Supports Attribute” Never Attribute “Never Attribute” Summary of Transaction Attributes “Summary of Transaction Attributes” Transaction Attributes and Scope “Transaction Attributes and Scope” Setting Transaction Attributes “Setting Transaction Attributes” TransactionAttributeType Constants “TransactionAttributeType Constants” Rolling Back a Container-Managed Transaction “Rolling Back a Container-Managed Transaction” Synchronizing a Session Bean's Instance Variables “Synchronizing a Session Bean's Instance Variables” Methods Not Allowed in Container-Managed Transactions “Methods Not Allowed in Container-Managed Transactions” Bean-Managed Transactions “Bean-Managed Transactions” JTA Transactions “JTA Transactions” Returning without Committing “Returning without Committing” Methods Not Allowed in Bean-Managed Transactions “Methods Not Allowed in Bean-Managed Transactions” Transaction Timeouts “Transaction Timeouts” To Set a Transaction Timeout “To Set a Transaction Timeout” Updating Multiple Databases “Updating Multiple Databases” Updating Multiple Databases “Updating Multiple Databases” Updating Multiple Databases Across Java EE Servers “Updating Multiple Databases Across Java EE Servers” Transactions in Web Components “Transactions in Web Components” Further Information about Transactions “Further Information about Transactions” Resource Adapters and Contracts “Resource Adapters and Contracts” This chapter examines… the paragraph beginning “This chapter examines…” What Is a Resource Adapter? “What Is a Resource Adapter?” Resource Adapters “Resource Adapters” Management Contracts “Management Contracts” Lifecycle Management “Lifecycle Management” Work Management Contract “Work Management Contract” Generic Work Context Contract “Generic Work Context Contract” Outbound and Inbound Contracts “Outbound and Inbound Contracts” Metadata Annotations “Metadata Annotations” Common Client Interface “Common Client Interface” Using Resource Adapters with Contexts and Dependency Injection for Java EE (CDI) “Using Resource Adapters with Contexts and Dependency Injection for Java EE (CDI)” Further Information about Resource Adapters “Further Information about Resource Adapters” The Resource Adapter Examples “The Resource Adapter Examples” This chapter describes… the paragraph beginning “This chapter describes…” Overview of the Resource Adapter Examples “Overview of the Resource Adapter Examples” The trading Example “The trading Example” The trading Example “The trading Example” Using the Outbound Resource Adapter “Using the Outbound Resource Adapter” Classes and Interfaces in the javaeetutorial.trading.rar.api Package “Classes and Interfaces in the javaeetutorial.trading.rar.api Package” Implementing the Outbound Resource Adapter “Implementing the Outbound Resource Adapter” Architecture of the trading Example “Architecture of the trading Example” Interfaces Implemented in the trading-rar Module “Interfaces Implemented in the trading-rar Module” Running the trading Example “Running the trading Example” To Run the trading Example Using NetBeans IDE “To Run the trading Example Using NetBeans IDE” To Run the trading Example Using Maven “To Run the trading Example Using Maven” The traffic Example “The traffic Example” The traffic Example “The traffic Example” Using the Inbound Resource Adapter “Using the Inbound Resource Adapter” Implementing the Inbound Resource Adapter “Implementing the Inbound Resource Adapter” Architecture of the traffic Example “Architecture of the traffic Example” Interfaces Implemented in the traffic-rar Module “Interfaces Implemented in the traffic-rar Module” Running the traffic Example “Running the traffic Example” To Run the traffic Example Using NetBeans IDE “To Run the traffic Example Using NetBeans IDE” To Run the traffic Example Using Maven “To Run the traffic Example Using Maven” Using Java EE Interceptors “Using Java EE Interceptors” This chapter discusses… the paragraph beginning “This chapter discusses…” Overview of Interceptors “Overview of Interceptors” Interceptor Metadata Annotations “Interceptor Metadata Annotations” Interceptor Classes “Interceptor Classes” Interceptor Lifecycle “Interceptor Lifecycle” Interceptors and CDI “Interceptors and CDI” Using Interceptors “Using Interceptors” Intercepting Method Invocations “Intercepting Method Invocations” Using Multiple Method Interceptors “Using Multiple Method Interceptors” Accessing Target Method Parameters from an Interceptor Class “Accessing Target Method Parameters from an Interceptor Class” Intercepting Lifecycle Callback Events “Intercepting Lifecycle Callback Events” Using AroundConstruct Interceptor Methods “Using AroundConstruct Interceptor Methods” Using Multiple Lifecycle Callback Interceptors “Using Multiple Lifecycle Callback Interceptors” Intercepting Timeout Events “Intercepting Timeout Events” Using Multiple Timeout Interceptors “Using Multiple Timeout Interceptors” Binding Interceptors to Components “Binding Interceptors to Components” Declaring the Interceptor Bindings on an Interceptor Class “Declaring the Interceptor Bindings on an Interceptor Class” Binding a Component to an Interceptor “Binding a Component to an Interceptor” Ordering Interceptors “Ordering Interceptors” Interceptor Priority Constants “Interceptor Priority Constants” The interceptor Example Application “The interceptor Example Application” Running the interceptor Example “Running the interceptor Example” To Run the interceptor Example Using NetBeans IDE “To Run the interceptor Example Using NetBeans IDE” To Run the interceptor Example Using Maven “To Run the interceptor Example Using Maven” Batch Processing “Batch Processing” This chapter describes… the paragraph beginning “This chapter describes…” Introduction to Batch Processing “Introduction to Batch Processing” Steps in Batch Jobs “Steps in Batch Jobs” Chunk Steps in a Batch Job “Chunk Steps in a Batch Job” Parallel Processing “Parallel Processing” Status and Decision Elements “Status and Decision Elements” Steps and Decision Elements in a Job “Steps and Decision Elements in a Job” Batch Framework Functionality “Batch Framework Functionality” Batch Processing in Java EE “Batch Processing in Java EE” The Batch Processing Framework “The Batch Processing Framework” Creating Batch Applications “Creating Batch Applications” Elements of a Batch Job “Elements of a Batch Job” Properties and Parameters “Properties and Parameters” Job Instances and Job Executions “Job Instances and Job Executions” Batch and Exit Status “Batch and Exit Status” Batch Status Values “Batch Status Values” Simple Use Case “Simple Use Case” Chunk Step “Chunk Step” Task Step “Task Step” Using the Job Specification Language “Using the Job Specification Language” The job Element “The job Element” The step Element “The step Element” The chunk Element “The chunk Element” Attributes of the chunk Element “Attributes of the chunk Element” The batchlet Element “The batchlet Element” The partition Element “The partition Element” The flow Element “The flow Element” The split Element “The split Element” The decision Element “The decision Element” Creating Batch Artifacts “Creating Batch Artifacts” Batch Artifact Interfaces “Batch Artifact Interfaces” Main Batch Artifact Interfaces “Main Batch Artifact Interfaces” Partition Batch Artifact Interfaces “Partition Batch Artifact Interfaces” Listener Batch Artifact Interfaces “Listener Batch Artifact Interfaces” Dependency Injection in Batch Artifacts “Dependency Injection in Batch Artifacts” Using the Context Objects from the Batch Runtime “Using the Context Objects from the Batch Runtime” Submitting Jobs to the Batch Runtime “Submitting Jobs to the Batch Runtime” Starting a Job “Starting a Job” Checking the Status of a Job “Checking the Status of a Job” Invoking the Batch Runtime in Your Application “Invoking the Batch Runtime in Your Application” Packaging Batch Applications “Packaging Batch Applications” The webserverlog Example Application “The webserverlog Example Application” Architecture of the webserverlog Example Application “Architecture of the webserverlog Example Application” The Job Definition File “The Job Definition File” The LogLine and LogFilteredLine Items “The LogLine and LogFilteredLine Items” The Chunk Step Batch Artifacts “The Chunk Step Batch Artifacts” The Listener Batch Artifacts “The Listener Batch Artifacts” The Task Step Batch Artifact “The Task Step Batch Artifact” The JavaServer Faces Pages “The JavaServer Faces Pages” The Managed Bean “The Managed Bean” Running the webserverlog Example Application “Running the webserverlog Example Application” To Run the webserverlog Example Application Using NetBeans IDE “To Run the webserverlog Example Application Using NetBeans IDE” To Run the webserverlog Example Application Using Maven “To Run the webserverlog Example Application Using Maven” The phonebilling Example Application “The phonebilling Example Application” Architecture of the phonebilling Example Application “Architecture of the phonebilling Example Application” The Job Definition File “The Job Definition File” The CallRecord and PhoneBill Entities “The CallRecord and PhoneBill Entities” The Call Records Chunk Step “The Call Records Chunk Step” The Phone Billing Chunk Step “The Phone Billing Chunk Step” The JavaServer Faces Pages “The JavaServer Faces Pages” The Managed Bean “The Managed Bean” Running the phonebilling Example Application “Running the phonebilling Example Application” To Run the phonebilling Example Application Using NetBeans IDE “To Run the phonebilling Example Application Using NetBeans IDE” To Run the phonebilling Example Application Using Maven “To Run the phonebilling Example Application Using Maven” Further Information about Batch Processing “Further Information about Batch Processing” Concurrency Utilities for Java EE “Concurrency Utilities for Java EE” This chapter describes… the paragraph beginning “This chapter describes…” Concurrency Basics “Concurrency Basics” Threads and Processes “Threads and Processes” Main Components of the Concurrency Utilities “Main Components of the Concurrency Utilities” Concurrency and Transactions “Concurrency and Transactions” Concurrency and Security “Concurrency and Security” The jobs Concurrency Example “The jobs Concurrency Example” Running the jobs Example “Running the jobs Example” To Configure GlassFish Server for the Basic Concurrency Example “To Configure GlassFish Server for the Basic Concurrency Example” To Build, Package, and Deploy the jobs Example Using NetBeans IDE “To Build, Package, and Deploy the jobs Example Using NetBeans IDE” To Build, Package, and Deploy the jobs Example Using Maven “To Build, Package, and Deploy the jobs Example Using Maven” To Run the jobs Example and Submit Jobs with Low Priority “To Run the jobs Example and Submit Jobs with Low Priority” To Run the jobs Example and Submit Jobs with High Priority “To Run the jobs Example and Submit Jobs with High Priority” The taskcreator Concurrency Example “The taskcreator Concurrency Example” Architecture of the taskcreator Example “Architecture of the taskcreator Example” Running the taskcreator Example “Running the taskcreator Example” To Build, Package, and Deploy the taskcreator Example Using NetBeans IDE “To Build, Package, and Deploy the taskcreator Example Using NetBeans IDE” To Build, Package, and Deploy the taskcreator Example Using Maven “To Build, Package, and Deploy the taskcreator Example Using Maven” To Run the taskcreator Example “To Run the taskcreator Example” Further Information about the Concurrency Utilities “Further Information about the Concurrency Utilities” Duke's Bookstore Case Study Example “Duke's Bookstore Case Study Example” The Duke's Bookstore… the paragraph beginning “The Duke's Bookstore…” Design and Architecture of Duke's Bookstore “Design and Architecture of Duke's Bookstore” The Duke's Bookstore Interface “The Duke's Bookstore Interface” The Book Java Persistence API Entity “The Book Java Persistence API Entity” Enterprise Beans Used in Duke's Bookstore “Enterprise Beans Used in Duke's Bookstore” Facelets Pages and Managed Beans Used in Duke's Bookstore “Facelets Pages and Managed Beans Used in Duke's Bookstore” Custom Components and Other Custom Objects Used in Duke's Bookstore “Custom Components and Other Custom Objects Used in Duke's Bookstore” Properties Files Used in Duke's Bookstore “Properties Files Used in Duke's Bookstore” Deployment Descriptors Used in Duke's Bookstore “Deployment Descriptors Used in Duke's Bookstore” Running the Duke's Bookstore Case Study Application “Running the Duke's Bookstore Case Study Application” To Build and Deploy Duke's Bookstore Using NetBeans IDE “To Build and Deploy Duke's Bookstore Using NetBeans IDE” To Build and Deploy Duke's Bookstore Using Maven “To Build and Deploy Duke's Bookstore Using Maven” To Run Duke's Bookstore “To Run Duke's Bookstore” Duke's Tutoring Case Study Example “Duke's Tutoring Case Study Example” The Duke's Tutoring… the paragraph beginning “The Duke's Tutoring…” Design and Architecture of Duke's Tutoring “Design and Architecture of Duke's Tutoring” Architecture of the Duke's Tutoring Example Application “Architecture of the Duke's Tutoring Example Application” Main Interface “Main Interface” Java Persistence API Entities Used in the Main Interface “Java Persistence API Entities Used in the Main Interface” Enterprise Beans Used in the Main Interface “Enterprise Beans Used in the Main Interface” WebSocket Endpoint Used in the Main Interface “WebSocket Endpoint Used in the Main Interface” Facelets Files Used in the Main Interface “Facelets Files Used in the Main Interface” Helper Classes Used in the Main Interface “Helper Classes Used in the Main Interface” Properties Files “Properties Files” Deployment Descriptors Used in Duke's Tutoring “Deployment Descriptors Used in Duke's Tutoring” Administration Interface “Administration Interface” Enterprise Beans Used in the Administration Interface “Enterprise Beans Used in the Administration Interface” Facelets Files Used in the Administration Interface “Facelets Files Used in the Administration Interface” CDI Managed Beans Used in the Administration Interface “CDI Managed Beans Used in the Administration Interface” Helper Classes Used in the Administration Interface “Helper Classes Used in the Administration Interface” Running the Duke's Tutoring Case Study Application “Running the Duke's Tutoring Case Study Application” Running Duke's Tutoring “Running Duke's Tutoring” To Build and Deploy Duke's Tutoring Using NetBeans IDE “To Build and Deploy Duke's Tutoring Using NetBeans IDE” Before You Begin “Before You Begin” To Build and Deploy Duke's Tutoring Using Maven “To Build and Deploy Duke's Tutoring Using Maven” Using Duke's Tutoring “Using Duke's Tutoring” Duke's Forest Case Study Example “Duke's Forest Case Study Example” This chapter describes… the paragraph beginning “This chapter describes…” Overview of the Duke's Forest Case Study Example “Overview of the Duke's Forest Case Study Example” Design and Architecture of Duke's Forest “Design and Architecture of Duke's Forest” Architecture of the Duke's Forest Example Application “Architecture of the Duke's Forest Example Application” Interactions between Duke's Forest Components “Interactions between Duke's Forest Components” The events Project “The events Project” The entities Project “The entities Project” Duke's Forest Database Tables and Their Relationships “Duke's Forest Database Tables and Their Relationships” The dukes-payment Project “The dukes-payment Project” The dukes-resources Project “The dukes-resources Project” The Duke's Store Project “The Duke's Store Project” Enterprise Beans Used in Duke's Store “Enterprise Beans Used in Duke's Store” Facelets Files Used in the Main Interface of Duke's Store “Facelets Files Used in the Main Interface of Duke's Store” Facelets Files Used in the Administration Interface of Duke's Store “Facelets Files Used in the Administration Interface of Duke's Store” Managed Beans Used in Duke's Store “Managed Beans Used in Duke's Store” Helper Classes Used in Duke's Store “Helper Classes Used in Duke's Store” Qualifiers Used in Duke's Store “Qualifiers Used in Duke's Store” Event Handlers Used in Duke's Store “Event Handlers Used in Duke's Store” Deployment Descriptors Used in Duke's Store “Deployment Descriptors Used in Duke's Store” The Duke's Shipment Project “The Duke's Shipment Project” Enterprise Beans Used in Duke's Shipment “Enterprise Beans Used in Duke's Shipment” Facelets Files Used in Duke's Shipment “Facelets Files Used in Duke's Shipment” Managed Beans Used in Duke's Shipment “Managed Beans Used in Duke's Shipment” Helper Class Used in Duke's Shipment “Helper Class Used in Duke's Shipment” Qualifier Used in Duke's Shipment “Qualifier Used in Duke's Shipment” Deployment Descriptors Used in Duke's Shipment “Deployment Descriptors Used in Duke's Shipment” Building and Deploying the Duke's Forest Case Study Application “Building and Deploying the Duke's Forest Case Study Application” To Build and Deploy the Duke's Forest Application Using NetBeans IDE “To Build and Deploy the Duke's Forest Application Using NetBeans IDE” To Build and Deploy the Duke's Forest Application Using Maven “To Build and Deploy the Duke's Forest Application Using Maven” Running the Duke's Forest Application “Running the Duke's Forest Application” To Register as a Duke's Store Customer “To Register as a Duke's Store Customer” To Purchase Products “To Purchase Products” To Approve Shipment of a Product “To Approve Shipment of a Product” To Create a New Product “To Create a New Product” + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - - + +
    + + + + + - - + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Contents + +
    -
    +

    Java Platform, Enterprise Edition The Java EE Tutorial Java Platform, Enterprise Edition Java Platform, Enterprise Edition The Java EE Tutorial Java Platform, Enterprise Edition Preface “Preface” Audience “Audience” Documentation Accessibility “Documentation Accessibility” Access to Oracle Support “Access to Oracle Support” Before You Read This Book “Before You Read This Book” Related Documentation “Related Documentation” Conventions “Conventions” Default Paths and File Names “Default Paths and File Names” Overview “Overview” This chapter introduces… the paragraph beginning “This chapter introduces…” Introduction to Java EE “Introduction to Java EE” Java EE 7 Platform Highlights “Java EE 7 Platform Highlights” Java EE Application Model “Java EE Application Model” Distributed Multitiered Applications “Distributed Multitiered Applications” Multitiered Applications “Multitiered Applications” Security “Security” Java EE Components “Java EE Components” Java EE Clients “Java EE Clients” Web Clients “Web Clients” Application Clients “Application Clients” Applets “Applets” The JavaBeans Component Architecture “The JavaBeans Component Architecture” Java EE Server Communications “Java EE Server Communications” Server Communication “Server Communication” Web Components “Web Components” Web Tier and Java EE Applications “Web Tier and Java EE Applications” Business Components “Business Components” Business and EIS Tiers “Business and EIS Tiers” Enterprise Information System Tier “Enterprise Information System Tier” Java EE Containers “Java EE Containers” Container Services “Container Services” Container Types “Container Types” Java EE Server and Containers “Java EE Server and Containers” Web Services Support “Web Services Support” XML “XML” SOAP Transport Protocol “SOAP Transport Protocol” WSDL Standard Format “WSDL Standard Format” Java EE Application Assembly and Deployment “Java EE Application Assembly and Deployment” Java EE 7 APIs “Java EE 7 APIs” Java EE Containers “Java EE Containers” Java EE APIs in the Web Container “Java EE APIs in the Web Container” Java EE APIs in the EJB Container “Java EE APIs in the EJB Container” Java EE APIs in the Application Client Container “Java EE APIs in the Application Client Container” Enterprise JavaBeans Technology “Enterprise JavaBeans Technology” Java Servlet Technology “Java Servlet Technology” JavaServer Faces Technology “JavaServer Faces Technology” JavaServer Pages Technology “JavaServer Pages Technology” JavaServer Pages Standard Tag Library “JavaServer Pages Standard Tag Library” Java Persistence API “Java Persistence API” Java Transaction API “Java Transaction API” Java API for RESTful Web Services “Java API for RESTful Web Services” Managed Beans “Managed Beans” Contexts and Dependency Injection for Java EE “Contexts and Dependency Injection for Java EE” Dependency Injection for Java “Dependency Injection for Java” Bean Validation “Bean Validation” Java Message Service API “Java Message Service API” Java EE Connector Architecture “Java EE Connector Architecture” JavaMail API “JavaMail API” Java Authorization Contract for Containers “Java Authorization Contract for Containers” Java Authentication Service Provider Interface for Containers “Java Authentication Service Provider Interface for Containers” Java API for WebSocket “Java API for WebSocket” Java API for JSON Processing “Java API for JSON Processing” Concurrency Utilities for Java EE “Concurrency Utilities for Java EE” Batch Applications for the Java Platform “Batch Applications for the Java Platform” Java EE 7 APIs in the Java Platform, Standard Edition 7 “Java EE 7 APIs in the Java Platform, Standard Edition 7” Java Database Connectivity API “Java Database Connectivity API” Java Naming and Directory Interface API “Java Naming and Directory Interface API” JavaBeans Activation Framework “JavaBeans Activation Framework” Java API for XML Processing “Java API for XML Processing” Java Architecture for XML Binding “Java Architecture for XML Binding” Java API for XML Web Services “Java API for XML Web Services” SOAP with Attachments API for Java “SOAP with Attachments API for Java” Java Authentication and Authorization Service “Java Authentication and Authorization Service” Common Annotations for the Java Platform “Common Annotations for the Java Platform” GlassFish Server Tools “GlassFish Server Tools” GlassFish Server Tools “GlassFish Server Tools” Using the Tutorial Examples “Using the Tutorial Examples” This chapter tells… the paragraph beginning “This chapter tells…” Required Software “Required Software” Java Platform, Standard Edition “Java Platform, Standard Edition” Java EE 7 Software Development Kit “Java EE 7 Software Development Kit” SDK Installation Tips “SDK Installation Tips” Java EE 7 Tutorial Component “Java EE 7 Tutorial Component” NetBeans IDE “NetBeans IDE” To Install NetBeans IDE without GlassFish Server “To Install NetBeans IDE without GlassFish Server” To Add GlassFish Server as a Server Using NetBeans IDE “To Add GlassFish Server as a Server Using NetBeans IDE” Apache Maven “Apache Maven” Starting and Stopping GlassFish Server “Starting and Stopping GlassFish Server” To Start GlassFish Server Using NetBeans IDE “To Start GlassFish Server Using NetBeans IDE” To Stop GlassFish Server Using NetBeans IDE “To Stop GlassFish Server Using NetBeans IDE” To Start GlassFish Server Using the Command Line “To Start GlassFish Server Using the Command Line” To Stop GlassFish Server Using the Command Line “To Stop GlassFish Server Using the Command Line” Starting the Administration Console “Starting the Administration Console” To Start the Administration Console Using NetBeans IDE “To Start the Administration Console Using NetBeans IDE” Starting and Stopping the Java DB Server “Starting and Stopping the Java DB Server” To Start the Database Server Using NetBeans IDE “To Start the Database Server Using NetBeans IDE” Next Steps “Next Steps” Building the Examples “Building the Examples” Tutorial Example Directory Structure “Tutorial Example Directory Structure” Java EE 7 Maven Archetypes in the Tutorial “Java EE 7 Maven Archetypes in the Tutorial” Installing the Tutorial Archetypes “Installing the Tutorial Archetypes” Installing the Tutorial Archetypes Using NetBeans IDE “Installing the Tutorial Archetypes Using NetBeans IDE” Installing the Tutorial Archetypes Using Maven “Installing the Tutorial Archetypes Using Maven” Getting the Latest Updates to the Tutorial “Getting the Latest Updates to the Tutorial” To Update the Tutorial Using NetBeans IDE “To Update the Tutorial Using NetBeans IDE” To Update the Tutorial Using the Command Line “To Update the Tutorial Using the Command Line” Debugging Java EE Applications “Debugging Java EE Applications” Using the Server Log “Using the Server Log” To Use the Administration Console Log Viewer “To Use the Administration Console Log Viewer” Using a Debugger “Using a Debugger” To Debug an Application Using a Debugger “To Debug an Application Using a Debugger” Resource Creation “Resource Creation” A resource is… the paragraph beginning “A resource is…” Resources and JNDI Naming “Resources and JNDI Naming” DataSource Objects and Connection Pools “DataSource Objects and Connection Pools” Creating Resources Administratively “Creating Resources Administratively” Injection “Injection” This chapter provides… the paragraph beginning “This chapter provides…” Resource Injection “Resource Injection” Dependency Injection “Dependency Injection” The Main Differences between Resource Injection and Dependency Injection “The Main Differences between Resource Injection and Dependency Injection” Differences between Resource Injection and Dependency Injection “Differences between Resource Injection and Dependency Injection” Packaging “Packaging” This chapter describes… the paragraph beginning “This chapter describes…” Packaging Applications “Packaging Applications” EAR File Structure “EAR File Structure” Packaging Enterprise Beans “Packaging Enterprise Beans” Packaging Enterprise Beans in EJB JAR Modules “Packaging Enterprise Beans in EJB JAR Modules” Structure of an Enterprise Bean JAR “Structure of an Enterprise Bean JAR” Packaging Enterprise Beans in WAR Modules “Packaging Enterprise Beans in WAR Modules” Packaging Web Archives “Packaging Web Archives” Web Module Structure “Web Module Structure” Packaging Resource Adapter Archives “Packaging Resource Adapter Archives” Getting Started with Web Applications “Getting Started with Web Applications” This chapter introduces… the paragraph beginning “This chapter introduces…” Web Applications “Web Applications” Java Web Application Request Handling “Java Web Application Request Handling” Web Application Lifecycle “Web Application Lifecycle” A Web Module That Uses JavaServer Faces Technology: The hello1 Example “A Web Module That Uses JavaServer Faces Technology: The hello1 Example” To View the hello1 Web Module Using NetBeans IDE “To View the hello1 Web Module Using NetBeans IDE” Introduction to Scopes “Introduction to Scopes” Packaging and Deploying the hello1 Web Module “Packaging and Deploying the hello1 Web Module” To Build and Package the hello1 Web Module Using NetBeans IDE “To Build and Package the hello1 Web Module Using NetBeans IDE” To Build and Package the hello1 Web Module Using Maven “To Build and Package the hello1 Web Module Using Maven” Viewing Deployed Web Modules “Viewing Deployed Web Modules” To View Deployed Web Modules Using the Administration Console “To View Deployed Web Modules Using the Administration Console” To View Deployed Web Modules Using the asadmin Command “To View Deployed Web Modules Using the asadmin Command” To View Deployed Web Modules Using NetBeans IDE “To View Deployed Web Modules Using NetBeans IDE” Running the Deployed hello1 Web Module “Running the Deployed hello1 Web Module” Dynamic Reloading of Deployed Modules “Dynamic Reloading of Deployed Modules” Undeploying the hello1 Web Module “Undeploying the hello1 Web Module” To Undeploy the hello1 Web Module Using NetBeans IDE “To Undeploy the hello1 Web Module Using NetBeans IDE” To Undeploy the hello1 Web Module Using Maven “To Undeploy the hello1 Web Module Using Maven” A Web Module That Uses Java Servlet Technology: The hello2 Example “A Web Module That Uses Java Servlet Technology: The hello2 Example” Mapping URLs to Web Components “Mapping URLs to Web Components” Examining the hello2 Web Module “Examining the hello2 Web Module” To View the hello2 Web Module Using NetBeans IDE “To View the hello2 Web Module Using NetBeans IDE” Running the hello2 Example “Running the hello2 Example” To Run the hello2 Example Using NetBeans IDE “To Run the hello2 Example Using NetBeans IDE” To Run the hello2 Example Using Maven “To Run the hello2 Example Using Maven” Configuring Web Applications “Configuring Web Applications” Setting Context Parameters “Setting Context Parameters” To Add a Context Parameter Using NetBeans IDE “To Add a Context Parameter Using NetBeans IDE” To Create a web.xml File Using NetBeans IDE “To Create a web.xml File Using NetBeans IDE” Declaring Welcome Files “Declaring Welcome Files” Mapping Errors to Error Screens “Mapping Errors to Error Screens” To Set Up Error Mapping Using NetBeans IDE “To Set Up Error Mapping Using NetBeans IDE” Declaring Resource References “Declaring Resource References” Web Components That Accept Resource Injections “Web Components That Accept Resource Injections” Declaring a Reference to a Resource “Declaring a Reference to a Resource” Declaring a Reference to a Web Service “Declaring a Reference to a Web Service” Further Information about Web Applications “Further Information about Web Applications” JavaServer Faces Technology “JavaServer Faces Technology” JavaServer Faces technology… the paragraph beginning “JavaServer Faces technology…” Introduction to JavaServer Faces Technology “Introduction to JavaServer Faces Technology” What Is a JavaServer Faces Application? “What Is a JavaServer Faces Application?” Responding to a Client Request for a JavaServer Faces Page “Responding to a Client Request for a JavaServer Faces Page” JavaServer Faces Technology Benefits “JavaServer Faces Technology Benefits” Java Web Application Technologies “Java Web Application Technologies” A Simple JavaServer Faces Application “A Simple JavaServer Faces Application” User Interface Component Model “User Interface Component Model” User Interface Component Classes “User Interface Component Classes” Component Rendering Model “Component Rendering Model” Conversion Model “Conversion Model” Event and Listener Model “Event and Listener Model” Validation Model “Validation Model” Navigation Model “Navigation Model” The Lifecycle of a JavaServer Faces Application “The Lifecycle of a JavaServer Faces Application” Overview of the JavaServer Faces Lifecycle “Overview of the JavaServer Faces Lifecycle” JavaServer Faces Standard Request-Response Lifecycle “JavaServer Faces Standard Request-Response Lifecycle” Restore View Phase “Restore View Phase” Apply Request Values Phase “Apply Request Values Phase” Process Validations Phase “Process Validations Phase” Update Model Values Phase “Update Model Values Phase” Invoke Application Phase “Invoke Application Phase” Render Response Phase “Render Response Phase” Partial Processing and Partial Rendering “Partial Processing and Partial Rendering” Further Information about JavaServer Faces Technology “Further Information about JavaServer Faces Technology” Introduction to Facelets “Introduction to Facelets” The term Facelets… the paragraph beginning “The term Facelets…” What Is Facelets? “What Is Facelets?” Tag Libraries Supported by Facelets “Tag Libraries Supported by Facelets” The Lifecycle of a Facelets Application “The Lifecycle of a Facelets Application” Developing a Simple Facelets Application: The guessnumber-jsf Example Application “Developing a Simple Facelets Application: The guessnumber-jsf Example Application” Creating a Facelets Application “Creating a Facelets Application” Developing a Managed Bean “Developing a Managed Bean” Creating Facelets Views “Creating Facelets Views” Configuring the Application “Configuring the Application” Running the guessnumber-jsf Facelets Example “Running the guessnumber-jsf Facelets Example” To Build, Package, and Deploy the guessnumber-jsf Example Using NetBeans IDE “To Build, Package, and Deploy the guessnumber-jsf Example Using NetBeans IDE” To Build, Package, and Deploy the guessnumber-jsf Example Using Maven “To Build, Package, and Deploy the guessnumber-jsf Example Using Maven” To Run the guessnumber-jsf Example “To Run the guessnumber-jsf Example” Using Facelets Templates “Using Facelets Templates” Facelets Templating Tags “Facelets Templating Tags” Composite Components “Composite Components” Composite Component Tags “Composite Component Tags” Web Resources “Web Resources” Relocatable Resources “Relocatable Resources” Resource Library Contracts “Resource Library Contracts” The hello1-rlc Example Application “The hello1-rlc Example Application” Configuring the hello1-rlc Example “Configuring the hello1-rlc Example” The Facelets Pages for the hello1-rlc Example “The Facelets Pages for the hello1-rlc Example” To Build, Package, and Deploy the hello1-rlc Example Using NetBeans IDE “To Build, Package, and Deploy the hello1-rlc Example Using NetBeans IDE” To Build, Package, and Deploy the hello1-rlc Example Using Maven “To Build, Package, and Deploy the hello1-rlc Example Using Maven” To Run the hello1-rlc Example “To Run the hello1-rlc Example” HTML5-Friendly Markup “HTML5-Friendly Markup” Using Pass-Through Elements “Using Pass-Through Elements” How Facelets Renders HTML5 Elements “How Facelets Renders HTML5 Elements” Using Pass-Through Attributes “Using Pass-Through Attributes” The reservation Example Application “The reservation Example Application” The Facelets Pages for the reservation Application “The Facelets Pages for the reservation Application” The Managed Bean for the reservation Application “The Managed Bean for the reservation Application” To Build, Package, and Deploy the reservation Example Using NetBeans IDE “To Build, Package, and Deploy the reservation Example Using NetBeans IDE” To Build, Package, and Deploy the reservation Example Using Maven “To Build, Package, and Deploy the reservation Example Using Maven” To Run the reservation Example “To Run the reservation Example” Expression Language “Expression Language” This chapter introduces… the paragraph beginning “This chapter introduces…” Overview of the EL “Overview of the EL” Immediate and Deferred Evaluation Syntax “Immediate and Deferred Evaluation Syntax” Immediate Evaluation “Immediate Evaluation” Deferred Evaluation “Deferred Evaluation” Value and Method Expressions “Value and Method Expressions” Value Expressions “Value Expressions” Referencing Objects “Referencing Objects” Referencing Object Properties or Collection Elements “Referencing Object Properties or Collection Elements” Referencing Literals “Referencing Literals” Parameterized Method Calls “Parameterized Method Calls” Where Value Expressions Can Be Used “Where Value Expressions Can Be Used” Method Expressions “Method Expressions” Lambda Expressions “Lambda Expressions” Operations on Collection Objects “Operations on Collection Objects” Operators “Operators” Reserved Words “Reserved Words” Examples of EL Expressions “Examples of EL Expressions” Example Expressions “Example Expressions” Further Information about the Expression Language “Further Information about the Expression Language” Using JavaServer Faces Technology in Web Pages “Using JavaServer Faces Technology in Web Pages” Web pages (Facelets… the paragraph beginning “Web pages (Facelets…” Setting Up a Page “Setting Up a Page” Adding Components to a Page Using HTML Tag Library Tags “Adding Components to a Page Using HTML Tag Library Tags” The Component Tags “The Component Tags” Common Component Tag Attributes “Common Component Tag Attributes” Common Component Tag Attributes “Common Component Tag Attributes” The id Attribute “The id Attribute” The immediate Attribute “The immediate Attribute” The rendered Attribute “The rendered Attribute” The style and styleClass Attributes “The style and styleClass Attributes” The value and binding Attributes “The value and binding Attributes” Adding HTML Head and Body Tags “Adding HTML Head and Body Tags” Adding a Form Component “Adding a Form Component” A Typical Form “A Typical Form” Using Text Components “Using Text Components” Example Text Components “Example Text Components” Input Tags “Input Tags” Input Tag Attributes “Input Tag Attributes” Output Tags “Output Tags” Rendering a Field with the h:inputText Tag “Rendering a Field with the h:inputText Tag” Rendering a Password Field with the h:inputSecret Tag “Rendering a Password Field with the h:inputSecret Tag” Rendering a Label with the h:outputLabel Tag “Rendering a Label with the h:outputLabel Tag” Rendering a Link with the h:outputLink Tag “Rendering a Link with the h:outputLink Tag” Displaying a Formatted Message with the h:outputFormat Tag “Displaying a Formatted Message with the h:outputFormat Tag” Using Command Component Tags for Performing Actions and Navigation “Using Command Component Tags for Performing Actions and Navigation” Rendering a Button with the h:commandButton Tag “Rendering a Button with the h:commandButton Tag” Rendering a Link with the h:commandLink Tag “Rendering a Link with the h:commandLink Tag” Adding Graphics and Images with the h:graphicImage Tag “Adding Graphics and Images with the h:graphicImage Tag” Laying Out Components with the h:panelGrid and h:panelGroup Tags “Laying Out Components with the h:panelGrid and h:panelGroup Tags” Panel Component Tags “Panel Component Tags” Displaying Components for Selecting One Value “Displaying Components for Selecting One Value” Example Components for Selecting One Item “Example Components for Selecting One Item” Displaying a Check Box Using the h:selectBooleanCheckbox Tag “Displaying a Check Box Using the h:selectBooleanCheckbox Tag” Displaying a Menu Using the h:selectOneMenu Tag “Displaying a Menu Using the h:selectOneMenu Tag” Displaying Components for Selecting Multiple Values “Displaying Components for Selecting Multiple Values” Example Components for Selecting Multiple Values “Example Components for Selecting Multiple Values” Using the f:selectItem and f:selectItems Tags “Using the f:selectItem and f:selectItems Tags” Using the f:selectItems Tag “Using the f:selectItems Tag” Using the f:selectItem Tag “Using the f:selectItem Tag” Displaying the Results from Selection Components “Displaying the Results from Selection Components” Using Data-Bound Table Components “Using Data-Bound Table Components” Optional Attributes for the h:dataTable Tag “Optional Attributes for the h:dataTable Tag” Displaying Error Messages with the h:message and h:messages Tags “Displaying Error Messages with the h:message and h:messages Tags” Creating Bookmarkable URLs with the h:button and h:link Tags “Creating Bookmarkable URLs with the h:button and h:link Tags” Using View Parameters to Configure Bookmarkable URLs “Using View Parameters to Configure Bookmarkable URLs” The bookmarks Example Application “The bookmarks Example Application” To Build, Package, and Deploy the bookmarks Example Using NetBeans IDE “To Build, Package, and Deploy the bookmarks Example Using NetBeans IDE” To Build, Package, and Deploy the bookmarks Example Using Maven “To Build, Package, and Deploy the bookmarks Example Using Maven” To Run the bookmarks Example “To Run the bookmarks Example” Resource Relocation Using h:outputScript and h:outputStylesheet Tags “Resource Relocation Using h:outputScript and h:outputStylesheet Tags” Using Core Tags “Using Core Tags” Event-Handling Core Tags “Event-Handling Core Tags” Data-Conversion Core Tags “Data-Conversion Core Tags” Facet Core Tags “Facet Core Tags” Core Tags That Represent Items in a List “Core Tags That Represent Items in a List” Validator Core Tags “Validator Core Tags” Miscellaneous Core Tags “Miscellaneous Core Tags” Where the Core Tags Are Explained “Where the Core Tags Are Explained” Using Converters, Listeners, and Validators “Using Converters, Listeners, and Validators” The previous chapter… the paragraph beginning “The previous chapter…” Using the Standard Converters “Using the Standard Converters” Converter Classes and Converter IDs “Converter Classes and Converter IDs” Converting a Component’s Value “Converting a Component’s Value” Using DateTimeConverter “Using DateTimeConverter” Attributes for the f:convertDateTime Tag “Attributes for the f:convertDateTime Tag” Using NumberConverter “Using NumberConverter” Attributes for the f:convertNumber Tag “Attributes for the f:convertNumber Tag” Registering Listeners on Components “Registering Listeners on Components” Registering a Value-Change Listener on a Component “Registering a Value-Change Listener on a Component” Attributes for the f:valueChangeListener Tag “Attributes for the f:valueChangeListener Tag” Registering an Action Listener on a Component “Registering an Action Listener on a Component” Using the Standard Validators “Using the Standard Validators” The Validator Classes “The Validator Classes” Validating a Component’s Value “Validating a Component’s Value” Using Validator Tags “Using Validator Tags” Referencing a Managed Bean Method “Referencing a Managed Bean Method” Component Tag Attributes That Reference Managed Bean Methods “Component Tag Attributes That Reference Managed Bean Methods” Referencing a Method That Performs Navigation “Referencing a Method That Performs Navigation” Referencing a Method That Handles an Action Event “Referencing a Method That Handles an Action Event” Referencing a Method That Performs Validation “Referencing a Method That Performs Validation” Referencing a Method That Handles a Value-Change Event “Referencing a Method That Handles a Value-Change Event” Developing with JavaServer Faces Technology “Developing with JavaServer Faces Technology” This chapter provides… the paragraph beginning “This chapter provides…” Managed Beans in JavaServer Faces Technology “Managed Beans in JavaServer Faces Technology” Creating a Managed Bean “Creating a Managed Bean” Using the EL to Reference Managed Beans “Using the EL to Reference Managed Beans” Writing Bean Properties “Writing Bean Properties” Writing Properties Bound to Component Values “Writing Properties Bound to Component Values” Acceptable Types of Component Values “Acceptable Types of Component Values” UIInput and UIOutput Properties “UIInput and UIOutput Properties” UIData Properties “UIData Properties” UISelectBoolean Properties “UISelectBoolean Properties” UISelectMany Properties “UISelectMany Properties” UISelectOne Properties “UISelectOne Properties” UISelectItem Properties “UISelectItem Properties” UISelectItems Properties “UISelectItems Properties” Writing Properties Bound to Component Instances “Writing Properties Bound to Component Instances” Writing Properties Bound to Converters, Listeners, or Validators “Writing Properties Bound to Converters, Listeners, or Validators” Writing Managed Bean Methods “Writing Managed Bean Methods” Why Use Managed Beans “Why Use Managed Beans” Writing a Method to Handle Navigation “Writing a Method to Handle Navigation” Writing a Method to Handle an Action Event “Writing a Method to Handle an Action Event” Writing a Method to Perform Validation “Writing a Method to Perform Validation” Writing a Method to Handle a Value-Change Event “Writing a Method to Handle a Value-Change Event” Using Ajax with JavaServer Faces Technology “Using Ajax with JavaServer Faces Technology” This chapter describes… the paragraph beginning “This chapter describes…” Overview of Ajax “Overview of Ajax” Using Ajax Functionality with JavaServer Faces Technology “Using Ajax Functionality with JavaServer Faces Technology” Using Ajax with Facelets “Using Ajax with Facelets” Using the f:ajax Tag “Using the f:ajax Tag” Attributes of the f:ajax Tag “Attributes of the f:ajax Tag” Execute and Render Keywords “Execute and Render Keywords” Sending an Ajax Request “Sending an Ajax Request” Using the event Attribute “Using the event Attribute” Using the execute Attribute “Using the execute Attribute” Using the immediate Attribute “Using the immediate Attribute” Using the listener Attribute “Using the listener Attribute” Monitoring Events on the Client “Monitoring Events on the Client” Properties of the onevent Data Object “Properties of the onevent Data Object” Handling Errors “Handling Errors” Valid Error Values for the Data Object status Property “Valid Error Values for the Data Object status Property” Receiving an Ajax Response “Receiving an Ajax Response” Ajax Request Lifecycle “Ajax Request Lifecycle” Grouping of Components “Grouping of Components” Loading JavaScript as a Resource “Loading JavaScript as a Resource” Using JavaScript API in a Facelets Application “Using JavaScript API in a Facelets Application” Possible Values for the Options Parameter “Possible Values for the Options Parameter” Using the @ResourceDependency Annotation in a Bean Class “Using the @ResourceDependency Annotation in a Bean Class” The ajaxguessnumber Example Application “The ajaxguessnumber Example Application” The ajaxguessnumber Source Files “The ajaxguessnumber Source Files” The ajaxgreeting.xhtml Facelets Page “The ajaxgreeting.xhtml Facelets Page” The UserNumberBean Backing Bean “The UserNumberBean Backing Bean” The DukesNumberBean CDI Managed Bean “The DukesNumberBean CDI Managed Bean” Running the ajaxguessnumber Example “Running the ajaxguessnumber Example” To Build, Package, and Deploy the ajaxguessnumber Example Using NetBeans IDE “To Build, Package, and Deploy the ajaxguessnumber Example Using NetBeans IDE” To Build, Package, and Deploy the ajaxguessnumber Example Using Maven “To Build, Package, and Deploy the ajaxguessnumber Example Using Maven” To Run the ajaxguessnumber Example “To Run the ajaxguessnumber Example” Further Information about Ajax in JavaServer Faces Technology “Further Information about Ajax in JavaServer Faces Technology” Composite Components: Advanced Topics and an Example “Composite Components: Advanced Topics and an Example” This chapter describes… the paragraph beginning “This chapter describes…” Attributes of a Composite Component “Attributes of a Composite Component” Commonly Used Attributes of the composite:attribute Tag “Commonly Used Attributes of the composite:attribute Tag” Invoking a Managed Bean “Invoking a Managed Bean” Validating Composite Component Values “Validating Composite Component Values” Validator Tags “Validator Tags” The compositecomponentexample Example Application “The compositecomponentexample Example Application” The Composite Component File “The Composite Component File” The Using Page “The Using Page” The Managed Bean “The Managed Bean” Running the compositecomponentexample Example “Running the compositecomponentexample Example” To Build, Package, and Deploy the compositecomponentexample Example Using NetBeans IDE “To Build, Package, and Deploy the compositecomponentexample Example Using NetBeans IDE” To Build, Package, and Deploy the compositecomponentexample Example Using Maven “To Build, Package, and Deploy the compositecomponentexample Example Using Maven” To Run the compositecomponentexample Example “To Run the compositecomponentexample Example” Creating Custom UI Components and Other Custom Objects “Creating Custom UI Components and Other Custom Objects” This chapter describes… the paragraph beginning “This chapter describes…” Introduction to Creating Custom Components “Introduction to Creating Custom Components” Determining Whether You Need a Custom Component or Renderer “Determining Whether You Need a Custom Component or Renderer” When to Use a Custom Component “When to Use a Custom Component” When to Use a Custom Renderer “When to Use a Custom Renderer” Component, Renderer, and Tag Combinations “Component, Renderer, and Tag Combinations” Requirements for Custom Components, Custom Renderers, and Custom Tags “Requirements for Custom Components, Custom Renderers, and Custom Tags” Understanding the Image Map Example “Understanding the Image Map Example” Why Use JavaServer Faces Technology to Implement an Image Map? “Why Use JavaServer Faces Technology to Implement an Image Map?” Understanding the Rendered HTML “Understanding the Rendered HTML” Understanding the Facelets Page “Understanding the Facelets Page” Configuring Model Data “Configuring Model Data” Summary of the Image Map Application Classes “Summary of the Image Map Application Classes” Image Map Classes “Image Map Classes” Steps for Creating a Custom Component “Steps for Creating a Custom Component” Creating Custom Component Classes “Creating Custom Component Classes” Specifying the Component Family “Specifying the Component Family” Performing Encoding “Performing Encoding” Performing Decoding “Performing Decoding” Enabling Component Properties to Accept Expressions “Enabling Component Properties to Accept Expressions” Saving and Restoring State “Saving and Restoring State” Delegating Rendering to a Renderer “Delegating Rendering to a Renderer” Creating the Renderer Class “Creating the Renderer Class” Identifying the Renderer Type “Identifying the Renderer Type” Implementing an Event Listener “Implementing an Event Listener” Implementing Value-Change Listeners “Implementing Value-Change Listeners” Implementing Action Listeners “Implementing Action Listeners” Handling Events for Custom Components “Handling Events for Custom Components” Defining the Custom Component Tag in a Tag Library Descriptor “Defining the Custom Component Tag in a Tag Library Descriptor” Using a Custom Component “Using a Custom Component” Creating and Using a Custom Converter “Creating and Using a Custom Converter” Creating a Custom Converter “Creating a Custom Converter” Using a Custom Converter “Using a Custom Converter” Creating and Using a Custom Validator “Creating and Using a Custom Validator” Implementing the Validator Interface “Implementing the Validator Interface” Specifying a Custom Tag “Specifying a Custom Tag” Using a Custom Validator “Using a Custom Validator” Binding Component Values and Instances to Managed Bean Properties “Binding Component Values and Instances to Managed Bean Properties” Examples of Value-Binding Expressions “Examples of Value-Binding Expressions” Binding a Component Value to a Property “Binding a Component Value to a Property” Binding a Component Value to an Implicit Object “Binding a Component Value to an Implicit Object” Implicit Objects “Implicit Objects” Binding a Component Instance to a Bean Property “Binding a Component Instance to a Bean Property” Binding Converters, Listeners, and Validators to Managed Bean Properties “Binding Converters, Listeners, and Validators to Managed Bean Properties” Configuring JavaServer Faces Applications “Configuring JavaServer Faces Applications” This chapter describes… the paragraph beginning “This chapter describes…” Introduction to Configuring JavaServer Faces Applications “Introduction to Configuring JavaServer Faces Applications” Using Annotations to Configure Managed Beans “Using Annotations to Configure Managed Beans” Using Managed Bean Scopes “Using Managed Bean Scopes” Application Configuration Resource File “Application Configuration Resource File” Configuring Eager Application-Scoped Managed Beans “Configuring Eager Application-Scoped Managed Beans” Ordering of Application Configuration Resource Files “Ordering of Application Configuration Resource Files” Using Faces Flows “Using Faces Flows” Two Faces Flows and Their Interactions “Two Faces Flows and Their Interactions” Packaging Flows in an Application “Packaging Flows in an Application” The Simplest Possible Flow: The simple-flow Example Application “The Simplest Possible Flow: The simple-flow Example Application” To Build, Package, and Deploy the simple-flow Example Using NetBeans IDE “To Build, Package, and Deploy the simple-flow Example Using NetBeans IDE” To Build, Package, and Deploy the simple-flow Example Using Maven “To Build, Package, and Deploy the simple-flow Example Using Maven” To Run the simple-flow Example “To Run the simple-flow Example” The checkout-module Example Application “The checkout-module Example Application” The Facelets Pages for the checkout-module Example “The Facelets Pages for the checkout-module Example” Using a Configuration File to Configure a Flow “Using a Configuration File to Configure a Flow” Using a Java Class to Configure a Flow “Using a Java Class to Configure a Flow” The Flow-Scoped Managed Beans “The Flow-Scoped Managed Beans” To Build, Package, and Deploy the checkout-module Example Using NetBeans IDE “To Build, Package, and Deploy the checkout-module Example Using NetBeans IDE” To Build, Package, and Deploy the checkout-module Example Using Maven “To Build, Package, and Deploy the checkout-module Example Using Maven” To Run the checkout-module Example “To Run the checkout-module Example” Configuring Managed Beans “Configuring Managed Beans” Using the managed-bean Element “Using the managed-bean Element” Initializing Properties Using the managed-property Element “Initializing Properties Using the managed-property Element” Subelements of managed-property Elements That Define Property Values “Subelements of managed-property Elements That Define Property Values” Referencing a Java Enum Type “Referencing a Java Enum Type” Referencing a Context Initialization Parameter “Referencing a Context Initialization Parameter” Initializing Map Properties “Initializing Map Properties” Initializing Array and List Properties “Initializing Array and List Properties” Initializing Managed Bean Properties “Initializing Managed Bean Properties” Allowable Connections between Scoped Objects “Allowable Connections between Scoped Objects” Initializing Maps and Lists “Initializing Maps and Lists” Registering Application Messages “Registering Application Messages” Using FacesMessage to Create a Message “Using FacesMessage to Create a Message” Referencing Error Messages “Referencing Error Messages” Using Default Validators “Using Default Validators” Registering a Custom Validator “Registering a Custom Validator” Registering a Custom Converter “Registering a Custom Converter” Configuring Navigation Rules “Configuring Navigation Rules” Common Outcome Strings “Common Outcome Strings” Registering a Custom Renderer with a Render Kit “Registering a Custom Renderer with a Render Kit” Registering a Custom Component “Registering a Custom Component” Basic Requirements of a JavaServer Faces Application “Basic Requirements of a JavaServer Faces Application” Configuring an Application with a Web Deployment Descriptor “Configuring an Application with a Web Deployment Descriptor” Identifying the Servlet for Lifecycle Processing “Identifying the Servlet for Lifecycle Processing” To Specify a Path to an Application Configuration Resource File “To Specify a Path to an Application Configuration Resource File” To Specify Where State Is Saved “To Specify Where State Is Saved” Configuring Project Stage “Configuring Project Stage” Including the Classes, Pages, and Other Resources “Including the Classes, Pages, and Other Resources” Java Servlet Technology “Java Servlet Technology” Java Servlet technology… the paragraph beginning “Java Servlet technology…” What Is a Servlet? “What Is a Servlet?” Servlet Lifecycle “Servlet Lifecycle” Handling Servlet Lifecycle Events “Handling Servlet Lifecycle Events” Defining the Listener Class “Defining the Listener Class” Servlet Lifecycle Events “Servlet Lifecycle Events” Handling Servlet Errors “Handling Servlet Errors” Sharing Information “Sharing Information” Using Scope Objects “Using Scope Objects” Scope Objects “Scope Objects” Controlling Concurrent Access to Shared Resources “Controlling Concurrent Access to Shared Resources” Creating and Initializing a Servlet “Creating and Initializing a Servlet” Writing Service Methods “Writing Service Methods” Getting Information from Requests “Getting Information from Requests” Constructing Responses “Constructing Responses” Filtering Requests and Responses “Filtering Requests and Responses” Programming Filters “Programming Filters” Programming Customized Requests and Responses “Programming Customized Requests and Responses” Specifying Filter Mappings “Specifying Filter Mappings” Filter-to-Servlet Mapping “Filter-to-Servlet Mapping” To Specify Filter Mappings Using NetBeans IDE “To Specify Filter Mappings Using NetBeans IDE” Invoking Other Web Resources “Invoking Other Web Resources” Including Other Resources in the Response “Including Other Resources in the Response” Transferring Control to Another Web Component “Transferring Control to Another Web Component” Accessing the Web Context “Accessing the Web Context” Maintaining Client State “Maintaining Client State” Accessing a Session “Accessing a Session” Associating Objects with a Session “Associating Objects with a Session” Session Management “Session Management” To Set the Timeout Period Using NetBeans IDE “To Set the Timeout Period Using NetBeans IDE” Session Tracking “Session Tracking” Finalizing a Servlet “Finalizing a Servlet” Tracking Service Requests “Tracking Service Requests” Notifying Methods to Shut Down “Notifying Methods to Shut Down” Creating Polite Long-Running Methods “Creating Polite Long-Running Methods” Uploading Files with Java Servlet Technology “Uploading Files with Java Servlet Technology” The @MultipartConfig Annotation “The @MultipartConfig Annotation” The getParts and getPart Methods “The getParts and getPart Methods” Asynchronous Processing “Asynchronous Processing” Asynchronous Processing in Servlets “Asynchronous Processing in Servlets” Functionality Provided by the AsyncContext Class “Functionality Provided by the AsyncContext Class” Waiting for a Resource “Waiting for a Resource” Nonblocking I/O “Nonblocking I/O” Nonblocking I/O Support in javax.servlet.ServletInputStream “Nonblocking I/O Support in javax.servlet.ServletInputStream” Nonblocking I/O Support in javax.servlet.ServletOutputStream “Nonblocking I/O Support in javax.servlet.ServletOutputStream” Listener Interfaces for Nonblocking I/O Support “Listener Interfaces for Nonblocking I/O Support” Reading a Large HTTP POST Request Using Nonblocking I/O “Reading a Large HTTP POST Request Using Nonblocking I/O” Protocol Upgrade Processing “Protocol Upgrade Processing” Protocol Upgrade Support “Protocol Upgrade Support” The mood Example Application “The mood Example Application” Components of the mood Example Application “Components of the mood Example Application” Running the mood Example “Running the mood Example” To Run the mood Example Using NetBeans IDE “To Run the mood Example Using NetBeans IDE” To Run the mood Example Using Maven “To Run the mood Example Using Maven” The fileupload Example Application “The fileupload Example Application” Architecture of the fileupload Example Application “Architecture of the fileupload Example Application” Running the fileupload Example “Running the fileupload Example” To Build, Package, and Deploy the fileupload Example Using NetBeans IDE “To Build, Package, and Deploy the fileupload Example Using NetBeans IDE” To Build, Package, and Deploy the fileupload Example Using Maven “To Build, Package, and Deploy the fileupload Example Using Maven” To Run the fileupload Example “To Run the fileupload Example” The dukeetf Example Application “The dukeetf Example Application” Architecture of the dukeetf Example Application “Architecture of the dukeetf Example Application” The Servlet “The Servlet” The Enterprise Bean “The Enterprise Bean” The HTML Page “The HTML Page” Running the dukeetf Example Application “Running the dukeetf Example Application” To Run the dukeetf Example Application Using NetBeans IDE “To Run the dukeetf Example Application Using NetBeans IDE” To Run the dukeetf Example Application Using Maven “To Run the dukeetf Example Application Using Maven” Further Information about Java Servlet Technology “Further Information about Java Servlet Technology” Java API for WebSocket “Java API for WebSocket” This chapter describes… the paragraph beginning “This chapter describes…” Introduction to WebSocket “Introduction to WebSocket” Creating WebSocket Applications in the Java EE Platform “Creating WebSocket Applications in the Java EE Platform” Creating and Deploying a WebSocket Endpoint “Creating and Deploying a WebSocket Endpoint” Programmatic Endpoints “Programmatic Endpoints” Annotated Endpoints “Annotated Endpoints” WebSocket Endpoint Lifecycle Annotations “WebSocket Endpoint Lifecycle Annotations” Sending and Receiving Messages “Sending and Receiving Messages” Sending Messages “Sending Messages” Sending Messages to All Peers Connected to an Endpoint “Sending Messages to All Peers Connected to an Endpoint” Receiving Messages “Receiving Messages” Maintaining Client State “Maintaining Client State” Using Encoders and Decoders “Using Encoders and Decoders” Implementing Encoders to Convert Java Objects into WebSocket Messages “Implementing Encoders to Convert Java Objects into WebSocket Messages” Implementing Decoders to Convert WebSocket Messages into Java Objects “Implementing Decoders to Convert WebSocket Messages into Java Objects” Path Parameters “Path Parameters” Handling Errors “Handling Errors” Specifying an Endpoint Configurator Class “Specifying an Endpoint Configurator Class” The dukeetf2 Example Application “The dukeetf2 Example Application” Architecture of the dukeetf2 Sample Application “Architecture of the dukeetf2 Sample Application” The Endpoint “The Endpoint” The Enterprise Bean “The Enterprise Bean” The HTML Page “The HTML Page” Running the dukeetf2 Example Application “Running the dukeetf2 Example Application” To Run the dukeetf2 Example Application Using NetBeans IDE “To Run the dukeetf2 Example Application Using NetBeans IDE” To Run the dukeetf2 Example Application Using Maven “To Run the dukeetf2 Example Application Using Maven” The websocketbot Example Application “The websocketbot Example Application” Architecture of the websocketbot Example Application “Architecture of the websocketbot Example Application” The CDI Bean “The CDI Bean” The WebSocket Endpoint “The WebSocket Endpoint” The Application Messages “The Application Messages” The Encoder Classes “The Encoder Classes” The Message Decoder “The Message Decoder” The HTML Page “The HTML Page” Running the websocketbot Example Application “Running the websocketbot Example Application” To Run the websocketbot Example Application Using NetBeans IDE “To Run the websocketbot Example Application Using NetBeans IDE” To Run the websocketbot Example Application Using Maven “To Run the websocketbot Example Application Using Maven” To Test the websocketbot Example Application “To Test the websocketbot Example Application” Further Information about WebSocket “Further Information about WebSocket” JSON Processing “JSON Processing” This chapter describes… the paragraph beginning “This chapter describes…” Introduction to JSON “Introduction to JSON” JSON Syntax “JSON Syntax” Uses of JSON “Uses of JSON” Generating and Parsing JSON Data “Generating and Parsing JSON Data” JSON Processing in the Java EE Platform “JSON Processing in the Java EE Platform” Main Classes and Interfaces in javax.json “Main Classes and Interfaces in javax.json” Main Classes and Interfaces in javax.json.stream “Main Classes and Interfaces in javax.json.stream” Using the Object Model API “Using the Object Model API” Creating an Object Model from JSON Data “Creating an Object Model from JSON Data” Creating an Object Model from Application Code “Creating an Object Model from Application Code” Navigating an Object Model “Navigating an Object Model” Writing an Object Model to a Stream “Writing an Object Model to a Stream” Using the Streaming API “Using the Streaming API” Reading JSON Data Using a Parser “Reading JSON Data Using a Parser” Writing JSON Data Using a Generator “Writing JSON Data Using a Generator” JSON in Java EE RESTful Web Services “JSON in Java EE RESTful Web Services” The jsonpmodel Example Application “The jsonpmodel Example Application” Components of the jsonpmodel Example Application “Components of the jsonpmodel Example Application” Running the jsonpmodel Example Application “Running the jsonpmodel Example Application” To Run the jsonpmodel Example Application Using NetBeans IDE “To Run the jsonpmodel Example Application Using NetBeans IDE” To Run the jsonpmodel Example Application Using Maven “To Run the jsonpmodel Example Application Using Maven” The jsonpstreaming Example Application “The jsonpstreaming Example Application” Components of the jsonpstreaming Example Application “Components of the jsonpstreaming Example Application” Running the jsonpstreaming Example Application “Running the jsonpstreaming Example Application” To Run the jsonpstreaming Example Application Using NetBeans IDE “To Run the jsonpstreaming Example Application Using NetBeans IDE” To Run the jsonpstreaming Example Application Using Maven “To Run the jsonpstreaming Example Application Using Maven” Further Information about the Java API for JSON Processing “Further Information about the Java API for JSON Processing” Internationalizing and Localizing Web Applications “Internationalizing and Localizing Web Applications” The process of… the paragraph beginning “The process of…” Java Platform Localization Classes “Java Platform Localization Classes” Providing Localized Messages and Labels “Providing Localized Messages and Labels” Establishing the Locale “Establishing the Locale” Setting the Resource Bundle “Setting the Resource Bundle” Retrieving Localized Messages “Retrieving Localized Messages” Date and Number Formatting “Date and Number Formatting” Character Sets and Encodings “Character Sets and Encodings” Character Sets “Character Sets” Character Encoding “Character Encoding” Introduction to Bean Validation “Introduction to Bean Validation” This chapter describes… the paragraph beginning “This chapter describes…” Overview of Bean Validation “Overview of Bean Validation” Using Bean Validation Constraints “Using Bean Validation Constraints” Built-In Bean Validation Constraints “Built-In Bean Validation Constraints” Validating Null and Empty Strings “Validating Null and Empty Strings” Validating Constructors and Methods “Validating Constructors and Methods” Cross-Parameter Constraints “Cross-Parameter Constraints” Identifying Parameter Constraint Violations “Identifying Parameter Constraint Violations” Adding Constraints to Method Return Values “Adding Constraints to Method Return Values” Further Information about Bean Validation “Further Information about Bean Validation” Bean Validation: Advanced Topics “Bean Validation: Advanced Topics” This chapter describes… the paragraph beginning “This chapter describes…” Creating Custom Constraints “Creating Custom Constraints” Using the Built-In Constraints to Make a New Constraint “Using the Built-In Constraints to Make a New Constraint” Removing Ambiguity in Constraint Targets “Removing Ambiguity in Constraint Targets” Customizing Validator Messages “Customizing Validator Messages” The ValidationMessages Resource Bundle “The ValidationMessages Resource Bundle” Localizing Validation Messages “Localizing Validation Messages” Grouping Constraints “Grouping Constraints” Customizing Group Validation Order “Customizing Group Validation Order” Using Method Constraints in Type Hierarchies “Using Method Constraints in Type Hierarchies” Rules for Using Method Constraints in Type Hierarchies “Rules for Using Method Constraints in Type Hierarchies” Introduction to Contexts and Dependency Injection for Java EE “Introduction to Contexts and Dependency Injection for Java EE” This chapter describes… the paragraph beginning “This chapter describes…” Getting Started “Getting Started” Overview of CDI “Overview of CDI” About Beans “About Beans” About CDI Managed Beans “About CDI Managed Beans” Beans as Injectable Objects “Beans as Injectable Objects” Using Qualifiers “Using Qualifiers” Injecting Beans “Injecting Beans” Using Scopes “Using Scopes” Scopes “Scopes” Giving Beans EL Names “Giving Beans EL Names” Adding Setter and Getter Methods “Adding Setter and Getter Methods” Using a Managed Bean in a Facelets Page “Using a Managed Bean in a Facelets Page” Injecting Objects by Using Producer Methods “Injecting Objects by Using Producer Methods” Configuring a CDI Application “Configuring a CDI Application” Using the @PostConstruct and @PreDestroy Annotations with CDI Managed Bean Classes “Using the @PostConstruct and @PreDestroy Annotations with CDI Managed Bean Classes” To Initialize a Managed Bean Using the @PostConstruct Annotation “To Initialize a Managed Bean Using the @PostConstruct Annotation” To Prepare for the Destruction of a Managed Bean Using the @PreDestroy Annotation “To Prepare for the Destruction of a Managed Bean Using the @PreDestroy Annotation” Further Information about CDI “Further Information about CDI” Running the Basic Contexts and Dependency Injection Examples “Running the Basic Contexts and Dependency Injection Examples” This chapter describes… the paragraph beginning “This chapter describes…” Building and Running the CDI Samples “Building and Running the CDI Samples” The simplegreeting CDI Example “The simplegreeting CDI Example” The simplegreeting Source Files “The simplegreeting Source Files” The Facelets Template and Page “The Facelets Template and Page” Running the simplegreeting Example “Running the simplegreeting Example” To Build, Package, and Run the simplegreeting Example Using NetBeans IDE “To Build, Package, and Run the simplegreeting Example Using NetBeans IDE” To Build, Package, and Deploy the simplegreeting Example Using Maven “To Build, Package, and Deploy the simplegreeting Example Using Maven” To Run the simplegreeting Example “To Run the simplegreeting Example” The guessnumber-cdi CDI Example “The guessnumber-cdi CDI Example” The guessnumber-cdi Source Files “The guessnumber-cdi Source Files” The @MaxNumber and @Random Qualifier Interfaces “The @MaxNumber and @Random Qualifier Interfaces” The Generator Managed Bean “The Generator Managed Bean” The UserNumberBean Managed Bean “The UserNumberBean Managed Bean” The Facelets Page “The Facelets Page” Running the guessnumber-cdi Example “Running the guessnumber-cdi Example” To Build, Package, and Deploy the guessnumber-cdi Example Using NetBeans IDE “To Build, Package, and Deploy the guessnumber-cdi Example Using NetBeans IDE” To Build, Package, and Deploy the guessnumber-cdi Example Using Maven “To Build, Package, and Deploy the guessnumber-cdi Example Using Maven” To Run the guessnumber Example “To Run the guessnumber Example” Contexts and Dependency Injection for Java EE: Advanced Topics “Contexts and Dependency Injection for Java EE: Advanced Topics” This chapter describes… the paragraph beginning “This chapter describes…” Packaging CDI Applications “Packaging CDI Applications” Using Alternatives in CDI Applications “Using Alternatives in CDI Applications” Using Specialization “Using Specialization” Using Producer Methods, Producer Fields, and Disposer Methods in CDI Applications “Using Producer Methods, Producer Fields, and Disposer Methods in CDI Applications” Using Producer Methods “Using Producer Methods” Using Producer Fields to Generate Resources “Using Producer Fields to Generate Resources” Using a Disposer Method “Using a Disposer Method” Using Predefined Beans in CDI Applications “Using Predefined Beans in CDI Applications” Injection of Predefined Beans “Injection of Predefined Beans” Using Events in CDI Applications “Using Events in CDI Applications” Defining Events “Defining Events” Using Observer Methods to Handle Events “Using Observer Methods to Handle Events” Firing Events “Firing Events” Using Interceptors in CDI Applications “Using Interceptors in CDI Applications” Using Decorators in CDI Applications “Using Decorators in CDI Applications” Using Stereotypes in CDI Applications “Using Stereotypes in CDI Applications” Running the Advanced Contexts and Dependency Injection Examples “Running the Advanced Contexts and Dependency Injection Examples” This chapter describes… the paragraph beginning “This chapter describes…” Building and Running the CDI Advanced Examples “Building and Running the CDI Advanced Examples” The encoder Example: Using Alternatives “The encoder Example: Using Alternatives” The Coder Interface and Implementations “The Coder Interface and Implementations” The encoder Facelets Page and Managed Bean “The encoder Facelets Page and Managed Bean” Running the encoder Example “Running the encoder Example” To Build, Package, and Deploy the encoder Example Using NetBeans IDE “To Build, Package, and Deploy the encoder Example Using NetBeans IDE” To Run the encoder Example Using NetBeans IDE “To Run the encoder Example Using NetBeans IDE” To Build, Package, and Deploy the encoder Example Using Maven “To Build, Package, and Deploy the encoder Example Using Maven” To Run the encoder Example Using Maven “To Run the encoder Example Using Maven” The producermethods Example: Using a Producer Method to Choose a Bean Implementation “The producermethods Example: Using a Producer Method to Choose a Bean Implementation” Components of the producermethods Example “Components of the producermethods Example” Running the producermethods Example “Running the producermethods Example” To Build, Package, and Deploy the producermethods Example Using NetBeans IDE “To Build, Package, and Deploy the producermethods Example Using NetBeans IDE” To Build, Package, and Deploy the producermethods Example Using Maven “To Build, Package, and Deploy the producermethods Example Using Maven” To Run the producermethods Example “To Run the producermethods Example” The producerfields Example: Using Producer Fields to Generate Resources “The producerfields Example: Using Producer Fields to Generate Resources” The Producer Field for the producerfields Example “The Producer Field for the producerfields Example” The producerfields Entity and Session Bean “The producerfields Entity and Session Bean” The producerfields Facelets Pages and Managed Bean “The producerfields Facelets Pages and Managed Bean” Running the producerfields Example “Running the producerfields Example” To Build, Package, and Deploy the producerfields Example Using NetBeans IDE “To Build, Package, and Deploy the producerfields Example Using NetBeans IDE” To Build, Package, and Deploy the producerfields Example Using Maven “To Build, Package, and Deploy the producerfields Example Using Maven” To Run the producerfields Example “To Run the producerfields Example” The billpayment Example: Using Events and Interceptors “The billpayment Example: Using Events and Interceptors” Overview of the billpayment Example “Overview of the billpayment Example” The PaymentEvent Event Class “The PaymentEvent Event Class” The PaymentHandler Event Listener “The PaymentHandler Event Listener” The billpayment Facelets Pages and Managed Bean “The billpayment Facelets Pages and Managed Bean” The LoggedInterceptor Interceptor Class “The LoggedInterceptor Interceptor Class” Running the billpayment Example “Running the billpayment Example” To Build, Package, and Deploy the billpayment Example Using NetBeans IDE “To Build, Package, and Deploy the billpayment Example Using NetBeans IDE” To Build, Package, and Deploy the billpayment Example Using Maven “To Build, Package, and Deploy the billpayment Example Using Maven” To Run the billpayment Example “To Run the billpayment Example” The decorators Example: Decorating a Bean “The decorators Example: Decorating a Bean” Overview of the decorators Example “Overview of the decorators Example” Components of the decorators Example “Components of the decorators Example” Running the decorators Example “Running the decorators Example” To Build, Package, and Deploy the decorators Example Using NetBeans IDE “To Build, Package, and Deploy the decorators Example Using NetBeans IDE” To Build, Package, and Deploy the decorators Example Using Maven “To Build, Package, and Deploy the decorators Example Using Maven” To Run the decorators Example “To Run the decorators Example” Introduction to Web Services “Introduction to Web Services” This part of… the paragraph beginning “This part of…” What Are Web Services? “What Are Web Services?” Types of Web Services “Types of Web Services” "Big" Web Services “"Big" Web Services” RESTful Web Services “RESTful Web Services” Deciding Which Type of Web Service to Use “Deciding Which Type of Web Service to Use” Building Web Services with JAX-WS “Building Web Services with JAX-WS” This chapter describes… the paragraph beginning “This chapter describes…” Overview of Java API for XML Web Services “Overview of Java API for XML Web Services” Creating a Simple Web Service and Clients with JAX-WS “Creating a Simple Web Service and Clients with JAX-WS” Communication between a JAX-WS Web Service and a Client “Communication between a JAX-WS Web Service and a Client” Basic Steps for Creating a Web Service and Client “Basic Steps for Creating a Web Service and Client” Requirements of a JAX-WS Endpoint “Requirements of a JAX-WS Endpoint” Coding the Service Endpoint Implementation Class “Coding the Service Endpoint Implementation Class” Building, Packaging, and Deploying the Service “Building, Packaging, and Deploying the Service” To Build, Package, and Deploy the Service Using NetBeans IDE “To Build, Package, and Deploy the Service Using NetBeans IDE” Next Steps “Next Steps” To Build, Package, and Deploy the Service Using Maven “To Build, Package, and Deploy the Service Using Maven” Next Steps “Next Steps” Testing the Methods of a Web Service Endpoint “Testing the Methods of a Web Service Endpoint” To Test the Service without a Client “To Test the Service without a Client” A Simple JAX-WS Application Client “A Simple JAX-WS Application Client” Coding the Application Client “Coding the Application Client” Running the Application Client “Running the Application Client” To Run the Application Client Using NetBeans IDE “To Run the Application Client Using NetBeans IDE” To Run the Application Client Using Maven “To Run the Application Client Using Maven” A Simple JAX-WS Web Client “A Simple JAX-WS Web Client” Coding the Servlet “Coding the Servlet” Running the Web Client “Running the Web Client” To Run the Web Client Using NetBeans IDE “To Run the Web Client Using NetBeans IDE” To Run the Web Client Using Maven “To Run the Web Client Using Maven” Types Supported by JAX-WS “Types Supported by JAX-WS” Schema-to-Java Mapping “Schema-to-Java Mapping” Mapping of XML Data Types to Java Data Types in JAXB “Mapping of XML Data Types to Java Data Types in JAXB” Java-to-Schema Mapping “Java-to-Schema Mapping” Mapping of Java Classes to XML Data Types in JAXB “Mapping of Java Classes to XML Data Types in JAXB” Web Services Interoperability and JAX-WS “Web Services Interoperability and JAX-WS” Further Information about JAX-WS “Further Information about JAX-WS” Building RESTful Web Services with JAX-RS “Building RESTful Web Services with JAX-RS” This chapter describes… the paragraph beginning “This chapter describes…” What Are RESTful Web Services? “What Are RESTful Web Services?” Creating a RESTful Root Resource Class “Creating a RESTful Root Resource Class” Developing RESTful Web Services with JAX-RS “Developing RESTful Web Services with JAX-RS” Summary of JAX-RS Annotations “Summary of JAX-RS Annotations” Overview of a JAX-RS Application “Overview of a JAX-RS Application” The @Path Annotation and URI Path Templates “The @Path Annotation and URI Path Templates” Examples of URI Path Templates “Examples of URI Path Templates” Responding to HTTP Methods and Requests “Responding to HTTP Methods and Requests” The Request Method Designator Annotations “The Request Method Designator Annotations” Using Entity Providers to Map HTTP Response and Request Entity Bodies “Using Entity Providers to Map HTTP Response and Request Entity Bodies” Types Supported for HTTP Request and Response Entity Bodies “Types Supported for HTTP Request and Response Entity Bodies” Using @Consumes and @Produces to Customize Requests and Responses “Using @Consumes and @Produces to Customize Requests and Responses” The @Produces Annotation “The @Produces Annotation” The @Consumes Annotation “The @Consumes Annotation” Extracting Request Parameters “Extracting Request Parameters” Configuring JAX-RS Applications “Configuring JAX-RS Applications” Configuring a JAX-RS Application Using a Subclass of Application “Configuring a JAX-RS Application Using a Subclass of Application” Configuring the Base URI in web.xml “Configuring the Base URI in web.xml” Example Applications for JAX-RS “Example Applications for JAX-RS” Creating a Simple RESTful Web Service “Creating a Simple RESTful Web Service” To Create a RESTful Web Service Using NetBeans IDE “To Create a RESTful Web Service Using NetBeans IDE” The rsvp Example Application “The rsvp Example Application” Components of the rsvp Example Application “Components of the rsvp Example Application” Running the rsvp Example Application “Running the rsvp Example Application” To Run the rsvp Example Application Using NetBeans IDE “To Run the rsvp Example Application Using NetBeans IDE” To Run the rsvp Example Application Using Maven “To Run the rsvp Example Application Using Maven” Real-World Examples “Real-World Examples” Further Information about JAX-RS “Further Information about JAX-RS” Accessing REST Resources with the JAX-RS Client API “Accessing REST Resources with the JAX-RS Client API” This chapter describes… the paragraph beginning “This chapter describes…” Overview of the Client API “Overview of the Client API” Creating a Basic Client Request Using the Client API “Creating a Basic Client Request Using the Client API” Obtaining the Client Instance “Obtaining the Client Instance” Setting the Client Target “Setting the Client Target” Setting Path Parameters in Targets “Setting Path Parameters in Targets” Invoking the Request “Invoking the Request” Using the Client API in the JAX-RS Example Applications “Using the Client API in the JAX-RS Example Applications” The Client API in the rsvp Example Application “The Client API in the rsvp Example Application” The Client API in the customer Example Application “The Client API in the customer Example Application” Advanced Features of the Client API “Advanced Features of the Client API” Configuring the Client Request “Configuring the Client Request” Setting Message Headers in the Client Request “Setting Message Headers in the Client Request” Setting Cookies in the Client Request “Setting Cookies in the Client Request” Adding Filters to the Client “Adding Filters to the Client” Asynchronous Invocations in the Client API “Asynchronous Invocations in the Client API” Using Custom Callbacks in Asynchronous Invocations “Using Custom Callbacks in Asynchronous Invocations” Using Reactive Approach in Asynchronous Invocations “Using Reactive Approach in Asynchronous Invocations” Using Server-Sent Events “Using Server-Sent Events” Overview of the SSE API “Overview of the SSE API” Broadcasting Using SSE “Broadcasting Using SSE” Listening and Receiving Events “Listening and Receiving Events” JAX-RS: Advanced Topics and an Example “JAX-RS: Advanced Topics and an Example” The Java API… the paragraph beginning “The Java API…” Annotations for Field and Bean Properties of Resource Classes “Annotations for Field and Bean Properties of Resource Classes” Advanced JAX-RS Annotations “Advanced JAX-RS Annotations” Extracting Path Parameters “Extracting Path Parameters” Extracting Query Parameters “Extracting Query Parameters” Extracting Form Data “Extracting Form Data” Extracting the Java Type of a Request or Response “Extracting the Java Type of a Request or Response” Validating Resource Data with Bean Validation “Validating Resource Data with Bean Validation” Using Constraint Annotations on Resource Methods “Using Constraint Annotations on Resource Methods” Validating Entity Data “Validating Entity Data” Validation Exception Handling and Response Codes “Validation Exception Handling and Response Codes” Subresources and Runtime Resource Resolution “Subresources and Runtime Resource Resolution” Subresource Methods “Subresource Methods” Subresource Locators “Subresource Locators” Integrating JAX-RS with EJB Technology and CDI “Integrating JAX-RS with EJB Technology and CDI” Conditional HTTP Requests “Conditional HTTP Requests” Runtime Content Negotiation “Runtime Content Negotiation” Using JAX-RS with JAXB “Using JAX-RS with JAXB” Using Java Objects to Model Your Data “Using Java Objects to Model Your Data” Starting from an Existing XML Schema Definition “Starting from an Existing XML Schema Definition” Using JSON with JAX-RS and JAXB “Using JSON with JAX-RS and JAXB” The customer Example Application “The customer Example Application” Overview of the customer Example Application “Overview of the customer Example Application” The Customer and Address Entity Classes “The Customer and Address Entity Classes” The CustomerService Class “The CustomerService Class” Using the JAX-RS Client in the CustomerBean Classes “Using the JAX-RS Client in the CustomerBean Classes” Running the customer Example “Running the customer Example” To Build, Package, and Deploy the customer Example Using NetBeans IDE “To Build, Package, and Deploy the customer Example Using NetBeans IDE” To Build, Package, and Deploy the customer Example Using Maven “To Build, Package, and Deploy the customer Example Using Maven” Enterprise Beans “Enterprise Beans” Enterprise beans are… the paragraph beginning “Enterprise beans are…” What Is an Enterprise Bean? “What Is an Enterprise Bean?” Benefits of Enterprise Beans “Benefits of Enterprise Beans” When to Use Enterprise Beans “When to Use Enterprise Beans” Types of Enterprise Beans “Types of Enterprise Beans” Enterprise Bean Types “Enterprise Bean Types” What Is a Session Bean? “What Is a Session Bean?” Types of Session Beans “Types of Session Beans” Stateful Session Beans “Stateful Session Beans” Stateless Session Beans “Stateless Session Beans” Singleton Session Beans “Singleton Session Beans” When to Use Session Beans “When to Use Session Beans” What Is a Message-Driven Bean? “What Is a Message-Driven Bean?” What Makes Message-Driven Beans Different from Session Beans? “What Makes Message-Driven Beans Different from Session Beans?” When to Use Message-Driven Beans “When to Use Message-Driven Beans” Accessing Enterprise Beans “Accessing Enterprise Beans” Using Enterprise Beans in Clients “Using Enterprise Beans in Clients” Portable JNDI Syntax “Portable JNDI Syntax” Deciding on Remote or Local Access “Deciding on Remote or Local Access” Local Clients “Local Clients” Accessing Local Enterprise Beans Using the No-Interface View “Accessing Local Enterprise Beans Using the No-Interface View” Accessing Local Enterprise Beans That Implement Business Interfaces “Accessing Local Enterprise Beans That Implement Business Interfaces” Remote Clients “Remote Clients” Interfaces for an Enterprise Bean with Remote Access “Interfaces for an Enterprise Bean with Remote Access” Web Service Clients “Web Service Clients” Method Parameters and Access “Method Parameters and Access” Isolation “Isolation” Granularity of Accessed Data “Granularity of Accessed Data” The Contents of an Enterprise Bean “The Contents of an Enterprise Bean” Naming Conventions for Enterprise Beans “Naming Conventions for Enterprise Beans” Naming Conventions for Enterprise Beans “Naming Conventions for Enterprise Beans” The Lifecycles of Enterprise Beans “The Lifecycles of Enterprise Beans” The Lifecycle of a Stateful Session Bean “The Lifecycle of a Stateful Session Bean” Lifecycle of a Stateful Session Bean “Lifecycle of a Stateful Session Bean” The Lifecycle of a Stateless Session Bean “The Lifecycle of a Stateless Session Bean” Lifecycle of a Stateless or Singleton Session Bean “Lifecycle of a Stateless or Singleton Session Bean” The Lifecycle of a Singleton Session Bean “The Lifecycle of a Singleton Session Bean” The Lifecycle of a Message-Driven Bean “The Lifecycle of a Message-Driven Bean” Lifecycle of a Message-Driven Bean “Lifecycle of a Message-Driven Bean” Further Information about Enterprise Beans “Further Information about Enterprise Beans” Getting Started with Enterprise Beans “Getting Started with Enterprise Beans” This chapter shows… the paragraph beginning “This chapter shows…” Starting With Enterprise Beans “Starting With Enterprise Beans” Creating the Enterprise Bean “Creating the Enterprise Bean” Coding the Enterprise Bean Class “Coding the Enterprise Bean Class” Creating the converter Web Client “Creating the converter Web Client” Running the converter Example “Running the converter Example” To Run the converter Example Using NetBeans IDE “To Run the converter Example Using NetBeans IDE” To Run the converter Example Using Maven “To Run the converter Example Using Maven” Modifying the Java EE Application “Modifying the Java EE Application” To Modify a Class File “To Modify a Class File” Running the Enterprise Bean Examples “Running the Enterprise Bean Examples” This chapter describes… the paragraph beginning “This chapter describes…” Overview of the EJB Examples “Overview of the EJB Examples” The cart Example “The cart Example” The Business Interface “The Business Interface” Session Bean Class “Session Bean Class” Lifecycle Callback Methods “Lifecycle Callback Methods” Business Methods “Business Methods” The @Remove Method “The @Remove Method” Helper Classes “Helper Classes” Running the cart Example “Running the cart Example” To Run the cart Example Using NetBeans IDE “To Run the cart Example Using NetBeans IDE” To Run the cart Example Using Maven “To Run the cart Example Using Maven” A Singleton Session Bean Example: counter “A Singleton Session Bean Example: counter” Creating a Singleton Session Bean “Creating a Singleton Session Bean” Initializing Singleton Session Beans “Initializing Singleton Session Beans” Managing Concurrent Access in a Singleton Session Bean “Managing Concurrent Access in a Singleton Session Bean” Handling Errors in a Singleton Session Bean “Handling Errors in a Singleton Session Bean” The Architecture of the counter Example “The Architecture of the counter Example” Running the counter Example “Running the counter Example” To Run the counter Example Using NetBeans IDE “To Run the counter Example Using NetBeans IDE” To Run the counter Example Using Maven “To Run the counter Example Using Maven” A Web Service Example: helloservice “A Web Service Example: helloservice” The Web Service Endpoint Implementation Class “The Web Service Endpoint Implementation Class” Stateless Session Bean Implementation Class “Stateless Session Bean Implementation Class” Running the helloservice Example “Running the helloservice Example” To Build, Package, and Deploy the helloservice Example Using NetBeans IDE “To Build, Package, and Deploy the helloservice Example Using NetBeans IDE” To Build, Package, and Deploy the helloservice Example Using Maven “To Build, Package, and Deploy the helloservice Example Using Maven” To Test the Service without a Client “To Test the Service without a Client” Using the Timer Service “Using the Timer Service” Creating Calendar-Based Timer Expressions “Creating Calendar-Based Timer Expressions” Calendar-Based Timer Attributes “Calendar-Based Timer Attributes” Specifying Multiple Values in Calendar Expressions “Specifying Multiple Values in Calendar Expressions” Programmatic Timers “Programmatic Timers” The @Timeout Method “The @Timeout Method” Creating Programmatic Timers “Creating Programmatic Timers” Automatic Timers “Automatic Timers” Canceling and Saving Timers “Canceling and Saving Timers” Getting Timer Information “Getting Timer Information” Transactions and Timers “Transactions and Timers” The timersession Example “The timersession Example” Running the timersession Example “Running the timersession Example” To Run the timersession Example Using NetBeans IDE “To Run the timersession Example Using NetBeans IDE” To Build, Package, and Deploy the timersession Example Using Maven “To Build, Package, and Deploy the timersession Example Using Maven” To Run the Web Client “To Run the Web Client” Handling Exceptions “Handling Exceptions” Using the Embedded Enterprise Bean Container “Using the Embedded Enterprise Bean Container” This chapter demonstrates… the paragraph beginning “This chapter demonstrates…” Overview of the Embedded Enterprise Bean Container “Overview of the Embedded Enterprise Bean Container” Developing Embeddable Enterprise Bean Applications “Developing Embeddable Enterprise Bean Applications” Required Enterprise Bean Features in the Embeddable Container “Required Enterprise Bean Features in the Embeddable Container” Running Embedded Applications “Running Embedded Applications” Creating the Enterprise Bean Container “Creating the Enterprise Bean Container” Explicitly Specifying Enterprise Bean Modules to Be Initialized “Explicitly Specifying Enterprise Bean Modules to Be Initialized” Looking Up Session Bean References “Looking Up Session Bean References” Shutting Down the Enterprise Bean Container “Shutting Down the Enterprise Bean Container” The standalone Example Application “The standalone Example Application” Overview of the standalone Example Application “Overview of the standalone Example Application” To Run the standalone Example Application Using NetBeans IDE “To Run the standalone Example Application Using NetBeans IDE” To Run the standalone Example Application Using Maven “To Run the standalone Example Application Using Maven” Using Asynchronous Method Invocation in Session Beans “Using Asynchronous Method Invocation in Session Beans” This chapter discusses… the paragraph beginning “This chapter discusses…” Asynchronous Method Invocation “Asynchronous Method Invocation” Creating an Asynchronous Business Method “Creating an Asynchronous Business Method” Calling Asynchronous Methods from Enterprise Bean Clients “Calling Asynchronous Methods from Enterprise Bean Clients” Retrieving the Final Result from an Asynchronous Method Invocation “Retrieving the Final Result from an Asynchronous Method Invocation” Cancelling an Asynchronous Method Invocation “Cancelling an Asynchronous Method Invocation” Checking the Status of an Asynchronous Method Invocation “Checking the Status of an Asynchronous Method Invocation” The async Example Application “The async Example Application” Architecture of the async-war Module “Architecture of the async-war Module” Running the async Example “Running the async Example” To Run the async Example Application Using NetBeans IDE “To Run the async Example Application Using NetBeans IDE” To Run the async Example Application Using Maven “To Run the async Example Application Using Maven” Introduction to the Java Persistence API “Introduction to the Java Persistence API” This chapter provides… the paragraph beginning “This chapter provides…” Overview of the Java Persistence API “Overview of the Java Persistence API” Entities “Entities” Requirements for Entity Classes “Requirements for Entity Classes” Persistent Fields and Properties in Entity Classes “Persistent Fields and Properties in Entity Classes” Persistent Fields “Persistent Fields” Persistent Properties “Persistent Properties” Using Collections in Entity Fields and Properties “Using Collections in Entity Fields and Properties” Validating Persistent Fields and Properties “Validating Persistent Fields and Properties” Primary Keys in Entities “Primary Keys in Entities” Multiplicity in Entity Relationships “Multiplicity in Entity Relationships” Direction in Entity Relationships “Direction in Entity Relationships” Bidirectional Relationships “Bidirectional Relationships” Unidirectional Relationships “Unidirectional Relationships” Queries and Relationship Direction “Queries and Relationship Direction” Cascade Operations and Relationships “Cascade Operations and Relationships” Cascade Operations for Entities “Cascade Operations for Entities” Orphan Removal in Relationships “Orphan Removal in Relationships” Embeddable Classes in Entities “Embeddable Classes in Entities” Entity Inheritance “Entity Inheritance” Abstract Entities “Abstract Entities” Mapped Superclasses “Mapped Superclasses” Non-Entity Superclasses “Non-Entity Superclasses” Entity Inheritance Mapping Strategies “Entity Inheritance Mapping Strategies” The Single Table per Class Hierarchy Strategy “The Single Table per Class Hierarchy Strategy” @DiscriminatorColumn Elements “@DiscriminatorColumn Elements” The Table per Concrete Class Strategy “The Table per Concrete Class Strategy” The Joined Subclass Strategy “The Joined Subclass Strategy” Managing Entities “Managing Entities” The EntityManager Interface “The EntityManager Interface” Container-Managed Entity Managers “Container-Managed Entity Managers” Application-Managed Entity Managers “Application-Managed Entity Managers” Finding Entities Using the EntityManager “Finding Entities Using the EntityManager” Managing an Entity Instance’s Lifecycle “Managing an Entity Instance’s Lifecycle” Persisting Entity Instances “Persisting Entity Instances” Removing Entity Instances “Removing Entity Instances” Synchronizing Entity Data to the Database “Synchronizing Entity Data to the Database” Persistence Units “Persistence Units” Querying Entities “Querying Entities” Database Schema Creation “Database Schema Creation” Configuring an Application to Create or Drop Database Tables “Configuring an Application to Create or Drop Database Tables” Schema Creation Actions “Schema Creation Actions” Settings for Create and Delete Source Properties “Settings for Create and Delete Source Properties” Loading Data Using SQL Scripts “Loading Data Using SQL Scripts” Further Information about Persistence “Further Information about Persistence” Running the Persistence Examples “Running the Persistence Examples” This chapter explains… the paragraph beginning “This chapter explains…” Overview of the Persistence Examples “Overview of the Persistence Examples” The order Application “The order Application” Database Schema for the order Application “Database Schema for the order Application” Entity Relationships in the order Application “Entity Relationships in the order Application” Self-Referential Relationships “Self-Referential Relationships” One-to-One Relationships “One-to-One Relationships” One-to-Many Relationship Mapped to Overlapping Primary and Foreign Keys “One-to-Many Relationship Mapped to Overlapping Primary and Foreign Keys” Unidirectional Relationships “Unidirectional Relationships” Primary Keys in the order Application “Primary Keys in the order Application” Generated Primary Keys “Generated Primary Keys” Compound Primary Keys “Compound Primary Keys” Entity Mapped to More Than One Database Table “Entity Mapped to More Than One Database Table” Cascade Operations in the order Application “Cascade Operations in the order Application” BLOB and CLOB Database Types in the order Application “BLOB and CLOB Database Types in the order Application” Temporal Types in the order Application “Temporal Types in the order Application” Managing the order Application’s Entities “Managing the order Application’s Entities” Creating Entities “Creating Entities” Finding Entities “Finding Entities” Setting Entity Relationships “Setting Entity Relationships” Using Queries “Using Queries” Removing Entities “Removing Entities” Running the order Example “Running the order Example” To Run the order Example Using NetBeans IDE “To Run the order Example Using NetBeans IDE” To Run the order Example Using Maven “To Run the order Example Using Maven” The roster Application “The roster Application” Database Schema for the roster Application “Database Schema for the roster Application” Relationships in the roster Application “Relationships in the roster Application” The Many-To-Many Relationship in roster “The Many-To-Many Relationship in roster” Entity Inheritance in the roster Application “Entity Inheritance in the roster Application” Criteria Queries in the roster Application “Criteria Queries in the roster Application” Metamodel Classes in the roster Application “Metamodel Classes in the roster Application” Obtaining a CriteriaBuilder Instance in RequestBean “Obtaining a CriteriaBuilder Instance in RequestBean” Creating Criteria Queries in RequestBean’s Business Methods “Creating Criteria Queries in RequestBean’s Business Methods” Automatic Table Generation in the roster Application “Automatic Table Generation in the roster Application” Running the roster Example “Running the roster Example” To Run the roster Example Using NetBeans IDE “To Run the roster Example Using NetBeans IDE” To Run the roster Example Using Maven “To Run the roster Example Using Maven” The address-book Application “The address-book Application” Bean Validation Constraints in address-book “Bean Validation Constraints in address-book” Specifying Error Messages for Constraints in address-book “Specifying Error Messages for Constraints in address-book” Validating Contact Input from a JavaServer Faces Application “Validating Contact Input from a JavaServer Faces Application” Running the address-book Example “Running the address-book Example” To Run the address-book Example Using NetBeans IDE “To Run the address-book Example Using NetBeans IDE” To Run the address-book Example Using Maven “To Run the address-book Example Using Maven” The Java Persistence Query Language “The Java Persistence Query Language” This chapter describes… the paragraph beginning “This chapter describes…” Overview of the Java Persistence Query Language “Overview of the Java Persistence Query Language” Query Language Terminology “Query Language Terminology” Creating Queries Using the Java Persistence Query Language “Creating Queries Using the Java Persistence Query Language” Named Parameters in Queries “Named Parameters in Queries” Positional Parameters in Queries “Positional Parameters in Queries” Simplified Query Language Syntax “Simplified Query Language Syntax” Select Statements “Select Statements” Update and Delete Statements “Update and Delete Statements” Example Queries “Example Queries” Simple Queries “Simple Queries” A Basic Select Query “A Basic Select Query” Eliminating Duplicate Values “Eliminating Duplicate Values” Using Named Parameters “Using Named Parameters” Queries That Navigate to Related Entities “Queries That Navigate to Related Entities” A Simple Query with Relationships “A Simple Query with Relationships” Navigating to Single-Valued Relationship Fields “Navigating to Single-Valued Relationship Fields” Traversing Relationships with an Input Parameter “Traversing Relationships with an Input Parameter” Traversing Multiple Relationships “Traversing Multiple Relationships” Navigating According to Related Fields “Navigating According to Related Fields” Queries with Other Conditional Expressions “Queries with Other Conditional Expressions” The LIKE Expression “The LIKE Expression” The IS NULL Expression “The IS NULL Expression” The IS EMPTY Expression “The IS EMPTY Expression” The BETWEEN Expression “The BETWEEN Expression” Comparison Operators “Comparison Operators” Bulk Updates and Deletes “Bulk Updates and Deletes” Update Queries “Update Queries” Delete Queries “Delete Queries” Full Query Language Syntax “Full Query Language Syntax” BNF Symbols “BNF Symbols” BNF Symbol Summary “BNF Symbol Summary” BNF Grammar of the Java Persistence Query Language “BNF Grammar of the Java Persistence Query Language” FROM Clause “FROM Clause” Identifiers “Identifiers” Identification Variables “Identification Variables” Range Variable Declarations “Range Variable Declarations” Collection Member Declarations “Collection Member Declarations” Joins “Joins” Path Expressions “Path Expressions” Examples of Path Expressions “Examples of Path Expressions” Expression Types “Expression Types” Navigation “Navigation” WHERE Clause “WHERE Clause” Literals “Literals” Input Parameters “Input Parameters” Conditional Expressions “Conditional Expressions” Operators and Their Precedence “Operators and Their Precedence” Query Language Order Precedence “Query Language Order Precedence” BETWEEN Expressions “BETWEEN Expressions” IN Expressions “IN Expressions” LIKE Expressions “LIKE Expressions” LIKE Expression Examples “LIKE Expression Examples” NULL Comparison Expressions “NULL Comparison Expressions” Empty Collection Comparison Expressions “Empty Collection Comparison Expressions” Collection Member Expressions “Collection Member Expressions” Subqueries “Subqueries” Functional Expressions “Functional Expressions” String Expressions “String Expressions” Arithmetic Expressions “Arithmetic Expressions” Date/Time Expressions “Date/Time Expressions” Case Expressions “Case Expressions” NULL Values “NULL Values” AND Operator Logic “AND Operator Logic” OR Operator Logic “OR Operator Logic” Equality Semantics “Equality Semantics” NOT Operator Logic “NOT Operator Logic” Conditional Test “Conditional Test” SELECT Clause “SELECT Clause” Return Types “Return Types” Aggregate Functions in Select Statements “Aggregate Functions in Select Statements” The DISTINCT Keyword “The DISTINCT Keyword” Constructor Expressions “Constructor Expressions” ORDER BY Clause “ORDER BY Clause” GROUP BY and HAVING Clauses “GROUP BY and HAVING Clauses” Using the Criteria API to Create Queries “Using the Criteria API to Create Queries” The Criteria API… the paragraph beginning “The Criteria API…” Overview of the Criteria and Metamodel APIs “Overview of the Criteria and Metamodel APIs” Using the Metamodel API to Model Entity Classes “Using the Metamodel API to Model Entity Classes” Using Metamodel Classes “Using Metamodel Classes” Using the Criteria API and Metamodel API to Create Basic Typesafe Queries “Using the Criteria API and Metamodel API to Create Basic Typesafe Queries” Creating a Criteria Query “Creating a Criteria Query” Query Roots “Query Roots” Querying Relationships Using Joins “Querying Relationships Using Joins” Path Navigation in Criteria Queries “Path Navigation in Criteria Queries” Restricting Criteria Query Results “Restricting Criteria Query Results” The Expression Interface Methods “The Expression Interface Methods” Conditional Methods in the Expression Interface “Conditional Methods in the Expression Interface” Expression Methods in the CriteriaBuilder Interface “Expression Methods in the CriteriaBuilder Interface” Conditional Methods in the CriteriaBuilder Interface “Conditional Methods in the CriteriaBuilder Interface” Compound Predicate Methods in the CriteriaBuilder Interface “Compound Predicate Methods in the CriteriaBuilder Interface” Managing Criteria Query Results “Managing Criteria Query Results” Ordering Results “Ordering Results” Grouping Results “Grouping Results” Executing Queries “Executing Queries” Single-Valued Query Results “Single-Valued Query Results” Collection-Valued Query Results “Collection-Valued Query Results” Creating and Using String-Based Criteria Queries “Creating and Using String-Based Criteria Queries” This chapter describes… the paragraph beginning “This chapter describes…” Overview of String-Based Criteria API Queries “Overview of String-Based Criteria API Queries” Creating String-Based Queries “Creating String-Based Queries” Executing String-Based Queries “Executing String-Based Queries” Controlling Concurrent Access to Entity Data with Locking “Controlling Concurrent Access to Entity Data with Locking” This chapter details… the paragraph beginning “This chapter details…” Overview of Entity Locking and Concurrency “Overview of Entity Locking and Concurrency” Using Optimistic Locking “Using Optimistic Locking” Lock Modes “Lock Modes” Lock Modes for Concurrent Entity Access “Lock Modes for Concurrent Entity Access” Setting the Lock Mode “Setting the Lock Mode” Using Pessimistic Locking “Using Pessimistic Locking” Pessimistic Locking Timeouts “Pessimistic Locking Timeouts” Creating Fetch Plans with Entity Graphs “Creating Fetch Plans with Entity Graphs” This chapter explains… the paragraph beginning “This chapter explains…” Overview of Using Fetch Plans and Entity Graphs “Overview of Using Fetch Plans and Entity Graphs” Entity Graph Basics “Entity Graph Basics” The Default Entity Graph “The Default Entity Graph” Using Entity Graphs in Persistence Operations “Using Entity Graphs in Persistence Operations” Fetch Graphs “Fetch Graphs” Load Graphs “Load Graphs” Using Named Entity Graphs “Using Named Entity Graphs” Applying Named Entity Graph Annotations to Entity Classes “Applying Named Entity Graph Annotations to Entity Classes” Obtaining EntityGraph Instances from Named Entity Graphs “Obtaining EntityGraph Instances from Named Entity Graphs” Using Entity Graphs in Query Operations “Using Entity Graphs in Query Operations” Using a Second-Level Cache with Java Persistence API Applications “Using a Second-Level Cache with Java Persistence API Applications” This chapter explains… the paragraph beginning “This chapter explains…” Overview of the Second-Level Cache “Overview of the Second-Level Cache” Cache Mode Settings for the Second-Level Cache “Cache Mode Settings for the Second-Level Cache” Controlling whether Entities May Be Cached “Controlling whether Entities May Be Cached” Specifying the Cache Mode Settings to Improve Performance “Specifying the Cache Mode Settings to Improve Performance” Setting the Cache Retrieval and Store Modes “Setting the Cache Retrieval and Store Modes” Cache Retrieval Mode “Cache Retrieval Mode” Cache Store Mode “Cache Store Mode” Setting the Cache Retrieval or Store Mode “Setting the Cache Retrieval or Store Mode” Controlling the Second-Level Cache Programmatically “Controlling the Second-Level Cache Programmatically” Overview of the javax.persistence.Cache Interface “Overview of the javax.persistence.Cache Interface” Checking whether an Entity’s Data Is Cached “Checking whether an Entity’s Data Is Cached” Removing an Entity from the Cache “Removing an Entity from the Cache” Removing All Data from the Cache “Removing All Data from the Cache” Java Message Service Concepts “Java Message Service Concepts” This chapter provides… the paragraph beginning “This chapter provides…” Overview of the JMS API “Overview of the JMS API” What Is Messaging? “What Is Messaging?” What Is the JMS API? “What Is the JMS API?” When Can You Use the JMS API? “When Can You Use the JMS API?” Messaging in an Enterprise Application “Messaging in an Enterprise Application” How Does the JMS API Work with the Java EE Platform? “How Does the JMS API Work with the Java EE Platform?” Basic JMS API Concepts “Basic JMS API Concepts” JMS API Architecture “JMS API Architecture” JMS API Architecture “JMS API Architecture” Messaging Styles “Messaging Styles” Point-to-Point Messaging Style “Point-to-Point Messaging Style” Point-to-Point Messaging “Point-to-Point Messaging” Publish/Subscribe Messaging Style “Publish/Subscribe Messaging Style” Publish/Subscribe Messaging “Publish/Subscribe Messaging” Message Consumption “Message Consumption” The JMS API Programming Model “The JMS API Programming Model” The JMS API Programming Model “The JMS API Programming Model” JMS Administered Objects “JMS Administered Objects” JMS Connection Factories “JMS Connection Factories” JMS Destinations “JMS Destinations” Connections “Connections” Sessions “Sessions” JMSContext Objects “JMSContext Objects” JMS Message Producers “JMS Message Producers” JMS Message Consumers “JMS Message Consumers” JMS Message Listeners “JMS Message Listeners” JMS Message Selectors “JMS Message Selectors” Consuming Messages from Topics “Consuming Messages from Topics” Creating Durable Subscriptions “Creating Durable Subscriptions” Nondurable Subscriptions and Consumers “Nondurable Subscriptions and Consumers” Consumers on a Durable Subscription “Consumers on a Durable Subscription” Creating Shared Subscriptions “Creating Shared Subscriptions” JMS Messages “JMS Messages” Message Headers “Message Headers” How JMS Message Header Field Values Are Set “How JMS Message Header Field Values Are Set” Message Properties “Message Properties” Message Bodies “Message Bodies” JMS Message Types “JMS Message Types” JMS Queue Browsers “JMS Queue Browsers” JMS Exception Handling “JMS Exception Handling” Using Advanced JMS Features “Using Advanced JMS Features” Controlling Message Acknowledgment “Controlling Message Acknowledgment” Specifying Options for Sending Messages “Specifying Options for Sending Messages” Specifying Message Persistence “Specifying Message Persistence” Setting Message Priority Levels “Setting Message Priority Levels” Allowing Messages to Expire “Allowing Messages to Expire” Specifying a Delivery Delay “Specifying a Delivery Delay” Using JMSProducer Method Chaining “Using JMSProducer Method Chaining” Creating Temporary Destinations “Creating Temporary Destinations” Using JMS Local Transactions “Using JMS Local Transactions” Using JMS Local Transactions “Using JMS Local Transactions” Sending Messages Asynchronously “Sending Messages Asynchronously” Using the JMS API in Java EE Applications “Using the JMS API in Java EE Applications” Overview of Using the JMS API “Overview of Using the JMS API” Creating Resources for Java EE Applications “Creating Resources for Java EE Applications” Using Resource Injection in Enterprise Bean or Web Components “Using Resource Injection in Enterprise Bean or Web Components” Injecting a ConnectionFactory, Queue, or Topic “Injecting a ConnectionFactory, Queue, or Topic” Injecting a JMSContext Object “Injecting a JMSContext Object” Using Java EE Components to Produce and to Synchronously Receive Messages “Using Java EE Components to Produce and to Synchronously Receive Messages” Managing JMS Resources in Web and EJB Components “Managing JMS Resources in Web and EJB Components” Managing Transactions in Session Beans “Managing Transactions in Session Beans” Using Message-Driven Beans to Receive Messages Asynchronously “Using Message-Driven Beans to Receive Messages Asynchronously” @ActivationConfigProperty Settings for Message-Driven Beans “@ActivationConfigProperty Settings for Message-Driven Beans” Managing JTA Transactions “Managing JTA Transactions” Further Information about JMS “Further Information about JMS” Java Message Service Examples “Java Message Service Examples” This chapter provides… the paragraph beginning “This chapter provides…” Building and Running Java Message Service Examples “Building and Running Java Message Service Examples” Overview of the JMS Examples “Overview of the JMS Examples” JMS Examples That Show the Use of Java EE Application Clients “JMS Examples That Show the Use of Java EE Application Clients” JMS Examples That Show the Use of Java EE Web and EJB Components “JMS Examples That Show the Use of Java EE Web and EJB Components” Writing Simple JMS Applications “Writing Simple JMS Applications” Overview of Writing Simple JMS Application “Overview of Writing Simple JMS Application” Starting the JMS Provider “Starting the JMS Provider” Creating JMS Administered Objects “Creating JMS Administered Objects” To Create Resources for the Simple Examples “To Create Resources for the Simple Examples” Building All the Simple Examples “Building All the Simple Examples” To Build All the Simple Examples Using NetBeans IDE “To Build All the Simple Examples Using NetBeans IDE” To Build All the Simple Examples Using Maven “To Build All the Simple Examples Using Maven” Sending Messages “Sending Messages” General Steps Performed in the Example “General Steps Performed in the Example” The Producer.java Client “The Producer.java Client” To Run the Producer Client “To Run the Producer Client” Receiving Messages Synchronously “Receiving Messages Synchronously” The SynchConsumer.java Client “The SynchConsumer.java Client” To Run the SynchConsumer and Producer Clients “To Run the SynchConsumer and Producer Clients” Using a Message Listener for Asynchronous Message Delivery “Using a Message Listener for Asynchronous Message Delivery” Writing the AsynchConsumer.java and TextListener.java Clients “Writing the AsynchConsumer.java and TextListener.java Clients” To Run the AsynchConsumer and Producer Clients “To Run the AsynchConsumer and Producer Clients” Browsing Messages on a Queue “Browsing Messages on a Queue” The MessageBrowser.java Client “The MessageBrowser.java Client” To Run the QueueBrowser Client “To Run the QueueBrowser Client” Running Multiple Consumers on the Same Destination “Running Multiple Consumers on the Same Destination” Acknowledging Messages “Acknowledging Messages” Message Acknowledgment with Synchronous and Asynchronous Consumers “Message Acknowledgment with Synchronous and Asynchronous Consumers” To Run the ClientAckConsumer Client “To Run the ClientAckConsumer Client” Writing More Advanced JMS Applications “Writing More Advanced JMS Applications” Using Durable Subscriptions “Using Durable Subscriptions” To Create Resources for the Durable Subscription Example “To Create Resources for the Durable Subscription Example” To Run the Durable Subscription Example “To Run the Durable Subscription Example” To Run the unsubscriber Example “To Run the unsubscriber Example” Using Local Transactions “Using Local Transactions” Transactions: JMS Client Example “Transactions: JMS Client Example” To Create Resources for the transactedexample Example “To Create Resources for the transactedexample Example” To Run the transactedexample Clients “To Run the transactedexample Clients” Writing High Performance and Scalable JMS Applications “Writing High Performance and Scalable JMS Applications” Using Shared Nondurable Subscriptions “Using Shared Nondurable Subscriptions” Writing the Clients for the Shared Consumer Example “Writing the Clients for the Shared Consumer Example” To Run the SharedConsumer and Producer Clients “To Run the SharedConsumer and Producer Clients” Using Shared Durable Subscriptions “Using Shared Durable Subscriptions” To Run the SharedDurableConsumer and Producer Clients “To Run the SharedDurableConsumer and Producer Clients” Sending and Receiving Messages Using a Simple Web Application “Sending and Receiving Messages Using a Simple Web Application” The websimplemessage Application “The websimplemessage Application” The websimplemessage Facelets Pages “The websimplemessage Facelets Pages” The websimplemessage Managed Beans “The websimplemessage Managed Beans” Running the websimplemessage Example “Running the websimplemessage Example” Creating Resources for the websimplemessage Example “Creating Resources for the websimplemessage Example” To Package and Deploy websimplemessage Using NetBeans IDE “To Package and Deploy websimplemessage Using NetBeans IDE” To Package and Deploy websimplemessage Using Maven “To Package and Deploy websimplemessage Using Maven” To Run the websimplemessage Example “To Run the websimplemessage Example” Receiving Messages Asynchronously Using a Message-Driven Bean “Receiving Messages Asynchronously Using a Message-Driven Bean” Overview of the simplemessage Example “Overview of the simplemessage Example” The simplemessage Application “The simplemessage Application” The simplemessage Application Client “The simplemessage Application Client” The simplemessage Message-Driven Bean Class “The simplemessage Message-Driven Bean Class” The onMessage Method “The onMessage Method” Running the simplemessage Example “Running the simplemessage Example” Creating Resources for the simplemessage Example “Creating Resources for the simplemessage Example” To Run the simplemessage Example Using NetBeans IDE “To Run the simplemessage Example Using NetBeans IDE” To Run the simplemessage Example Using Maven “To Run the simplemessage Example Using Maven” Sending Messages from a Session Bean to an MDB “Sending Messages from a Session Bean to an MDB” Writing the Application Components for the clientsessionmdb Example “Writing the Application Components for the clientsessionmdb Example” An Enterprise Bean Application: Client to Session Bean to Message-Driven Bean “An Enterprise Bean Application: Client to Session Bean to Message-Driven Bean” Coding the Application Client: MyAppClient.java “Coding the Application Client: MyAppClient.java” Coding the Publisher Session Bean “Coding the Publisher Session Bean” Coding the Message-Driven Bean: MessageBean.java “Coding the Message-Driven Bean: MessageBean.java” Running the clientsessionmdb Example “Running the clientsessionmdb Example” To Run clientsessionmdb Using NetBeans IDE “To Run clientsessionmdb Using NetBeans IDE” To Run clientsessionmdb Using Maven “To Run clientsessionmdb Using Maven” Using an Entity to Join Messages from Two MDBs “Using an Entity to Join Messages from Two MDBs” Overview of the clientmdbentity Example Application “Overview of the clientmdbentity Example Application” An Enterprise Bean Application: Client to Message-Driven Beans to Entity “An Enterprise Bean Application: Client to Message-Driven Beans to Entity” Writing the Application Components for the clientmdbentity Example “Writing the Application Components for the clientmdbentity Example” Coding the Application Client: HumanResourceClient.java “Coding the Application Client: HumanResourceClient.java” Coding the Message-Driven Beans for the clientmdbentity Example “Coding the Message-Driven Beans for the clientmdbentity Example” Coding the Entity Class for the clientmdbentity Example “Coding the Entity Class for the clientmdbentity Example” Running the clientmdbentity Example “Running the clientmdbentity Example” To Run clientmdbentity Using NetBeans IDE “To Run clientmdbentity Using NetBeans IDE” To Run clientmdbentity Using Maven “To Run clientmdbentity Using Maven” Viewing the Application Output “Viewing the Application Output” Using NetBeans IDE to Create JMS Resources “Using NetBeans IDE to Create JMS Resources” To Create JMS Resources Using NetBeans IDE “To Create JMS Resources Using NetBeans IDE” To Delete JMS Resources Using NetBeans IDE “To Delete JMS Resources Using NetBeans IDE” Introduction to Security in the Java EE Platform “Introduction to Security in the Java EE Platform” This chapter introduces… the paragraph beginning “This chapter introduces…” Overview of Java EE Security “Overview of Java EE Security” A Simple Application Security Walkthrough “A Simple Application Security Walkthrough” Step 1: Initial Request “Step 1: Initial Request” Initial Request “Initial Request” Step 2: Initial Authentication “Step 2: Initial Authentication” Initial Authentication “Initial Authentication” Step 3: URL Authorization “Step 3: URL Authorization” URL Authorization “URL Authorization” Step 4: Fulfilling the Original Request “Step 4: Fulfilling the Original Request” Fulfilling the Original Request “Fulfilling the Original Request” Step 5: Invoking Enterprise Bean Business Methods “Step 5: Invoking Enterprise Bean Business Methods” Invoking an Enterprise Bean Business Method “Invoking an Enterprise Bean Business Method” Features of a Security Mechanism “Features of a Security Mechanism” Characteristics of Application Security “Characteristics of Application Security” Security Mechanisms “Security Mechanisms” Java SE Security Mechanisms “Java SE Security Mechanisms” Java EE Security Mechanisms “Java EE Security Mechanisms” Application-Layer Security “Application-Layer Security” Transport-Layer Security “Transport-Layer Security” Message-Layer Security “Message-Layer Security” Securing Containers “Securing Containers” Using Annotations to Specify Security Information “Using Annotations to Specify Security Information” Using Deployment Descriptors for Declarative Security “Using Deployment Descriptors for Declarative Security” Using Programmatic Security “Using Programmatic Security” Securing GlassFish Server “Securing GlassFish Server” Working with Realms, Users, Groups, and Roles “Working with Realms, Users, Groups, and Roles” What Are Realms, Users, Groups, and Roles? “What Are Realms, Users, Groups, and Roles?” Mapping Roles to Users and Groups “Mapping Roles to Users and Groups” What Is a Realm? “What Is a Realm?” What Is a User? “What Is a User?” What Is a Group? “What Is a Group?” What Is a Role? “What Is a Role?” Some Other Terminology “Some Other Terminology” Managing Users and Groups in GlassFish Server “Managing Users and Groups in GlassFish Server” To Add Users to GlassFish Server “To Add Users to GlassFish Server” Setting Up Security Roles “Setting Up Security Roles” Mapping Roles to Users and Groups “Mapping Roles to Users and Groups” Establishing a Secure Connection Using SSL “Establishing a Secure Connection Using SSL” Verifying and Configuring SSL Support “Verifying and Configuring SSL Support” Further Information about Security “Further Information about Security” Getting Started Securing Web Applications “Getting Started Securing Web Applications” This chapter describes… the paragraph beginning “This chapter describes…” Overview of Web Application Security “Overview of Web Application Security” Securing Web Applications “Securing Web Applications” Overview of Securing Web Applications “Overview of Securing Web Applications” Specifying Security Constraints “Specifying Security Constraints” Specifying a Web Resource Collection “Specifying a Web Resource Collection” Specifying an Authorization Constraint “Specifying an Authorization Constraint” Specifying a Secure Connection “Specifying a Secure Connection” Specifying Security Constraints for Resources “Specifying Security Constraints for Resources” Specifying Authentication Mechanisms “Specifying Authentication Mechanisms” HTTP Basic Authentication “HTTP Basic Authentication” HTTP Basic Authentication “HTTP Basic Authentication” Form-Based Authentication “Form-Based Authentication” Form-Based Authentication “Form-Based Authentication” Digest Authentication “Digest Authentication” Specifying an Authentication Mechanism in the Deployment Descriptor “Specifying an Authentication Mechanism in the Deployment Descriptor” Declaring Security Roles “Declaring Security Roles” Using Programmatic Security with Web Applications “Using Programmatic Security with Web Applications” Authenticating Users Programmatically “Authenticating Users Programmatically” Checking Caller Identity Programmatically “Checking Caller Identity Programmatically” Example Code for Programmatic Security “Example Code for Programmatic Security” Declaring and Linking Role References “Declaring and Linking Role References” Examples: Securing Web Applications “Examples: Securing Web Applications” Overview of Examples of Securing Web Applications “Overview of Examples of Securing Web Applications” To Set Up Your System for Running the Security Examples “To Set Up Your System for Running the Security Examples” The hello2-basicauth Example: Basic Authentication with a Servlet “The hello2-basicauth Example: Basic Authentication with a Servlet” Specifying Security for Basic Authentication Using Annotations “Specifying Security for Basic Authentication Using Annotations” To Build, Package, and Deploy the hello2-basicauth Example Using NetBeans IDE “To Build, Package, and Deploy the hello2-basicauth Example Using NetBeans IDE” To Build, Package, and Deploy the hello2-basicauth Example Using Maven “To Build, Package, and Deploy the hello2-basicauth Example Using Maven” To Run the hello2-basicauth Example “To Run the hello2-basicauth Example” The hello1-formauth Example: Form-Based Authentication with a JavaServer Faces Application “The hello1-formauth Example: Form-Based Authentication with a JavaServer Faces Application” Creating the Login Form and the Error Page “Creating the Login Form and the Error Page” Specifying Security for the Form-Based Authentication Example “Specifying Security for the Form-Based Authentication Example” To Build, Package, and Deploy the hello1-formauth Example Using NetBeans IDE “To Build, Package, and Deploy the hello1-formauth Example Using NetBeans IDE” To Build, Package, and Deploy the hello1-formauth Example Using Maven and the asadmin Command “To Build, Package, and Deploy the hello1-formauth Example Using Maven and the asadmin Command” To Run the hello1-formauth Example “To Run the hello1-formauth Example” Next Steps “Next Steps” Getting Started Securing Enterprise Applications “Getting Started Securing Enterprise Applications” This chapter describes… the paragraph beginning “This chapter describes…” Basic Security Tasks for Enterprise Applications “Basic Security Tasks for Enterprise Applications” Securing Enterprise Beans “Securing Enterprise Beans” Securing an Enterprise Bean Using Declarative Security “Securing an Enterprise Bean Using Declarative Security” Specifying Authorized Users by Declaring Security Roles “Specifying Authorized Users by Declaring Security Roles” Specifying an Authentication Mechanism and Secure Connection “Specifying an Authentication Mechanism and Secure Connection” Securing an Enterprise Bean Programmatically “Securing an Enterprise Bean Programmatically” Accessing an Enterprise Bean Caller’s Security Context “Accessing an Enterprise Bean Caller’s Security Context” Propagating a Security Identity (Run-As) “Propagating a Security Identity (Run-As)” Security Identity Propagation “Security Identity Propagation” Configuring a Component’s Propagated Security Identity “Configuring a Component’s Propagated Security Identity” Trust between Containers “Trust between Containers” Deploying Secure Enterprise Beans “Deploying Secure Enterprise Beans” Examples: Securing Enterprise Beans “Examples: Securing Enterprise Beans” The cart-secure Example: Securing an Enterprise Bean with Declarative Security “The cart-secure Example: Securing an Enterprise Bean with Declarative Security” Annotating the Bean “Annotating the Bean” To Run the cart-secure Example Using NetBeans IDE “To Run the cart-secure Example Using NetBeans IDE” To Run the cart-secure Example Using Maven “To Run the cart-secure Example Using Maven” The converter-secure Example: Securing an Enterprise Bean with Programmatic Security “The converter-secure Example: Securing an Enterprise Bean with Programmatic Security” Modifying ConverterBean “Modifying ConverterBean” Modifying ConverterServlet “Modifying ConverterServlet” To Run the converter-secure Example Using NetBeans IDE “To Run the converter-secure Example Using NetBeans IDE” To Run the converter-secure Example Using Maven “To Run the converter-secure Example Using Maven” To Run the converter-secure Example “To Run the converter-secure Example” Java EE Security: Advanced Topics “Java EE Security: Advanced Topics” This chapter provides… the paragraph beginning “This chapter provides…” Working with Digital Certificates “Working with Digital Certificates” Creating a Server Certificate “Creating a Server Certificate” To Use keytool to Create a Server Certificate “To Use keytool to Create a Server Certificate” Adding Users to the Certificate Realm “Adding Users to the Certificate Realm” Using a Different Server Certificate with GlassFish Server “Using a Different Server Certificate with GlassFish Server” To Specify a Different Server Certificate “To Specify a Different Server Certificate” Authentication Mechanisms “Authentication Mechanisms” Client Authentication “Client Authentication” Mutual Authentication “Mutual Authentication” Certificate-Based Mutual Authentication “Certificate-Based Mutual Authentication” User Name/Password-Based Mutual Authentication “User Name/Password-Based Mutual Authentication” Enabling Mutual Authentication over SSL “Enabling Mutual Authentication over SSL” Creating a Client Certificate for Mutual Authentication “Creating a Client Certificate for Mutual Authentication” Using the JDBC Realm for User Authentication “Using the JDBC Realm for User Authentication” To Configure a JDBC Authentication Realm “To Configure a JDBC Authentication Realm” Securing HTTP Resources “Securing HTTP Resources” Securing Application Clients “Securing Application Clients” Using Login Modules “Using Login Modules” Using Programmatic Login “Using Programmatic Login” Securing Enterprise Information Systems Applications “Securing Enterprise Information Systems Applications” Overview of Securing Enterprise Information Systems Applications “Overview of Securing Enterprise Information Systems Applications” Container-Managed Sign-On “Container-Managed Sign-On” Component-Managed Sign-On “Component-Managed Sign-On” Configuring Resource Adapter Security “Configuring Resource Adapter Security” Mapping an Application Principal to EIS Principals “Mapping an Application Principal to EIS Principals” Configuring Security Using Deployment Descriptors “Configuring Security Using Deployment Descriptors” Specifying Security for Basic Authentication in the Deployment Descriptor “Specifying Security for Basic Authentication in the Deployment Descriptor” Specifying Non-Default Principal-to-Role Mapping in the Deployment Descriptor “Specifying Non-Default Principal-to-Role Mapping in the Deployment Descriptor” Further Information about Advanced Security Topics “Further Information about Advanced Security Topics” Transactions “Transactions” This chapter describes… the paragraph beginning “This chapter describes…” Overview of Transactions “Overview of Transactions” Transactions in Java EE Applications “Transactions in Java EE Applications” What Is a Transaction? “What Is a Transaction?” Container-Managed Transactions “Container-Managed Transactions” Transaction Attributes “Transaction Attributes” Transaction Scope “Transaction Scope” Required Attribute “Required Attribute” RequiresNew Attribute “RequiresNew Attribute” Mandatory Attribute “Mandatory Attribute” NotSupported Attribute “NotSupported Attribute” Supports Attribute “Supports Attribute” Never Attribute “Never Attribute” Summary of Transaction Attributes “Summary of Transaction Attributes” Transaction Attributes and Scope “Transaction Attributes and Scope” Setting Transaction Attributes “Setting Transaction Attributes” TransactionAttributeType Constants “TransactionAttributeType Constants” Rolling Back a Container-Managed Transaction “Rolling Back a Container-Managed Transaction” Synchronizing a Session Bean’s Instance Variables “Synchronizing a Session Bean’s Instance Variables” Methods Not Allowed in Container-Managed Transactions “Methods Not Allowed in Container-Managed Transactions” Bean-Managed Transactions “Bean-Managed Transactions” JTA Transactions “JTA Transactions” Returning without Committing “Returning without Committing” Methods Not Allowed in Bean-Managed Transactions “Methods Not Allowed in Bean-Managed Transactions” Transaction Timeouts “Transaction Timeouts” To Set a Transaction Timeout “To Set a Transaction Timeout” Updating Multiple Databases “Updating Multiple Databases” Updating Multiple Databases “Updating Multiple Databases” Updating Multiple Databases Across Java EE Servers “Updating Multiple Databases Across Java EE Servers” Transactions in Web Components “Transactions in Web Components” Further Information about Transactions “Further Information about Transactions” Resource Adapters and Contracts “Resource Adapters and Contracts” This chapter examines… the paragraph beginning “This chapter examines…” What Is a Resource Adapter? “What Is a Resource Adapter?” Resource Adapters “Resource Adapters” Management Contracts “Management Contracts” Lifecycle Management “Lifecycle Management” Work Management Contract “Work Management Contract” Generic Work Context Contract “Generic Work Context Contract” Outbound and Inbound Contracts “Outbound and Inbound Contracts” Metadata Annotations “Metadata Annotations” Common Client Interface “Common Client Interface” Using Resource Adapters with Contexts and Dependency Injection for Java EE (CDI) “Using Resource Adapters with Contexts and Dependency Injection for Java EE (CDI)” Further Information about Resource Adapters “Further Information about Resource Adapters” The Resource Adapter Examples “The Resource Adapter Examples” This chapter describes… the paragraph beginning “This chapter describes…” Overview of the Resource Adapter Examples “Overview of the Resource Adapter Examples” The trading Example “The trading Example” The trading Example “The trading Example” Using the Outbound Resource Adapter “Using the Outbound Resource Adapter” Classes and Interfaces in the javaeetutorial.trading.rar.api Package “Classes and Interfaces in the javaeetutorial.trading.rar.api Package” Implementing the Outbound Resource Adapter “Implementing the Outbound Resource Adapter” Architecture of the trading Example “Architecture of the trading Example” Interfaces Implemented in the trading-rar Module “Interfaces Implemented in the trading-rar Module” Running the trading Example “Running the trading Example” To Run the trading Example Using NetBeans IDE “To Run the trading Example Using NetBeans IDE” To Run the trading Example Using Maven “To Run the trading Example Using Maven” The traffic Example “The traffic Example” The traffic Example “The traffic Example” Using the Inbound Resource Adapter “Using the Inbound Resource Adapter” Implementing the Inbound Resource Adapter “Implementing the Inbound Resource Adapter” Architecture of the traffic Example “Architecture of the traffic Example” Interfaces Implemented in the traffic-rar Module “Interfaces Implemented in the traffic-rar Module” Running the traffic Example “Running the traffic Example” To Run the traffic Example Using NetBeans IDE “To Run the traffic Example Using NetBeans IDE” To Run the traffic Example Using Maven “To Run the traffic Example Using Maven” Using Java EE Interceptors “Using Java EE Interceptors” This chapter discusses… the paragraph beginning “This chapter discusses…” Overview of Interceptors “Overview of Interceptors” Interceptor Metadata Annotations “Interceptor Metadata Annotations” Interceptor Classes “Interceptor Classes” Interceptor Lifecycle “Interceptor Lifecycle” Interceptors and CDI “Interceptors and CDI” Using Interceptors “Using Interceptors” Intercepting Method Invocations “Intercepting Method Invocations” Using Multiple Method Interceptors “Using Multiple Method Interceptors” Accessing Target Method Parameters from an Interceptor Class “Accessing Target Method Parameters from an Interceptor Class” Intercepting Lifecycle Callback Events “Intercepting Lifecycle Callback Events” Using AroundConstruct Interceptor Methods “Using AroundConstruct Interceptor Methods” Using Multiple Lifecycle Callback Interceptors “Using Multiple Lifecycle Callback Interceptors” Intercepting Timeout Events “Intercepting Timeout Events” Using Multiple Timeout Interceptors “Using Multiple Timeout Interceptors” Binding Interceptors to Components “Binding Interceptors to Components” Declaring the Interceptor Bindings on an Interceptor Class “Declaring the Interceptor Bindings on an Interceptor Class” Binding a Component to an Interceptor “Binding a Component to an Interceptor” Ordering Interceptors “Ordering Interceptors” Interceptor Priority Constants “Interceptor Priority Constants” The interceptor Example Application “The interceptor Example Application” Running the interceptor Example “Running the interceptor Example” To Run the interceptor Example Using NetBeans IDE “To Run the interceptor Example Using NetBeans IDE” To Run the interceptor Example Using Maven “To Run the interceptor Example Using Maven” Batch Processing “Batch Processing” This chapter describes… the paragraph beginning “This chapter describes…” Introduction to Batch Processing “Introduction to Batch Processing” Steps in Batch Jobs “Steps in Batch Jobs” Chunk Steps in a Batch Job “Chunk Steps in a Batch Job” Parallel Processing “Parallel Processing” Status and Decision Elements “Status and Decision Elements” Steps and Decision Elements in a Job “Steps and Decision Elements in a Job” Batch Framework Functionality “Batch Framework Functionality” Batch Processing in Java EE “Batch Processing in Java EE” The Batch Processing Framework “The Batch Processing Framework” Creating Batch Applications “Creating Batch Applications” Elements of a Batch Job “Elements of a Batch Job” Properties and Parameters “Properties and Parameters” Job Instances and Job Executions “Job Instances and Job Executions” Batch and Exit Status “Batch and Exit Status” Batch Status Values “Batch Status Values” Simple Use Case “Simple Use Case” Chunk Step “Chunk Step” Task Step “Task Step” Using the Job Specification Language “Using the Job Specification Language” The job Element “The job Element” The step Element “The step Element” The chunk Element “The chunk Element” Attributes of the chunk Element “Attributes of the chunk Element” The batchlet Element “The batchlet Element” The partition Element “The partition Element” The flow Element “The flow Element” The split Element “The split Element” The decision Element “The decision Element” Creating Batch Artifacts “Creating Batch Artifacts” Batch Artifact Interfaces “Batch Artifact Interfaces” Main Batch Artifact Interfaces “Main Batch Artifact Interfaces” Partition Batch Artifact Interfaces “Partition Batch Artifact Interfaces” Listener Batch Artifact Interfaces “Listener Batch Artifact Interfaces” Dependency Injection in Batch Artifacts “Dependency Injection in Batch Artifacts” Using the Context Objects from the Batch Runtime “Using the Context Objects from the Batch Runtime” Submitting Jobs to the Batch Runtime “Submitting Jobs to the Batch Runtime” Starting a Job “Starting a Job” Checking the Status of a Job “Checking the Status of a Job” Invoking the Batch Runtime in Your Application “Invoking the Batch Runtime in Your Application” Packaging Batch Applications “Packaging Batch Applications” The webserverlog Example Application “The webserverlog Example Application” Architecture of the webserverlog Example Application “Architecture of the webserverlog Example Application” The Job Definition File “The Job Definition File” The LogLine and LogFilteredLine Items “The LogLine and LogFilteredLine Items” The Chunk Step Batch Artifacts “The Chunk Step Batch Artifacts” The Listener Batch Artifacts “The Listener Batch Artifacts” The Task Step Batch Artifact “The Task Step Batch Artifact” The JavaServer Faces Pages “The JavaServer Faces Pages” The Managed Bean “The Managed Bean” Running the webserverlog Example Application “Running the webserverlog Example Application” To Run the webserverlog Example Application Using NetBeans IDE “To Run the webserverlog Example Application Using NetBeans IDE” To Run the webserverlog Example Application Using Maven “To Run the webserverlog Example Application Using Maven” The phonebilling Example Application “The phonebilling Example Application” Architecture of the phonebilling Example Application “Architecture of the phonebilling Example Application” The Job Definition File “The Job Definition File” The CallRecord and PhoneBill Entities “The CallRecord and PhoneBill Entities” The Call Records Chunk Step “The Call Records Chunk Step” The Phone Billing Chunk Step “The Phone Billing Chunk Step” The JavaServer Faces Pages “The JavaServer Faces Pages” The Managed Bean “The Managed Bean” Running the phonebilling Example Application “Running the phonebilling Example Application” To Run the phonebilling Example Application Using NetBeans IDE “To Run the phonebilling Example Application Using NetBeans IDE” To Run the phonebilling Example Application Using Maven “To Run the phonebilling Example Application Using Maven” Further Information about Batch Processing “Further Information about Batch Processing” Concurrency Utilities for Java EE “Concurrency Utilities for Java EE” This chapter describes… the paragraph beginning “This chapter describes…” Concurrency Basics “Concurrency Basics” Threads and Processes “Threads and Processes” Main Components of the Concurrency Utilities “Main Components of the Concurrency Utilities” Concurrency and Transactions “Concurrency and Transactions” Concurrency and Security “Concurrency and Security” The jobs Concurrency Example “The jobs Concurrency Example” Running the jobs Example “Running the jobs Example” To Configure GlassFish Server for the Basic Concurrency Example “To Configure GlassFish Server for the Basic Concurrency Example” To Build, Package, and Deploy the jobs Example Using NetBeans IDE “To Build, Package, and Deploy the jobs Example Using NetBeans IDE” To Build, Package, and Deploy the jobs Example Using Maven “To Build, Package, and Deploy the jobs Example Using Maven” To Run the jobs Example and Submit Jobs with Low Priority “To Run the jobs Example and Submit Jobs with Low Priority” To Run the jobs Example and Submit Jobs with High Priority “To Run the jobs Example and Submit Jobs with High Priority” The taskcreator Concurrency Example “The taskcreator Concurrency Example” Architecture of the taskcreator Example “Architecture of the taskcreator Example” Running the taskcreator Example “Running the taskcreator Example” To Build, Package, and Deploy the taskcreator Example Using NetBeans IDE “To Build, Package, and Deploy the taskcreator Example Using NetBeans IDE” To Build, Package, and Deploy the taskcreator Example Using Maven “To Build, Package, and Deploy the taskcreator Example Using Maven” To Run the taskcreator Example “To Run the taskcreator Example” Further Information about the Concurrency Utilities “Further Information about the Concurrency Utilities” Duke’s Bookstore Case Study Example “Duke’s Bookstore Case Study Example” The Duke’s Bookstore… the paragraph beginning “The Duke’s Bookstore…” Design and Architecture of Duke’s Bookstore “Design and Architecture of Duke’s Bookstore” The Duke’s Bookstore Interface “The Duke’s Bookstore Interface” The Book Java Persistence API Entity “The Book Java Persistence API Entity” Enterprise Beans Used in Duke’s Bookstore “Enterprise Beans Used in Duke’s Bookstore” Facelets Pages and Managed Beans Used in Duke’s Bookstore “Facelets Pages and Managed Beans Used in Duke’s Bookstore” Custom Components and Other Custom Objects Used in Duke’s Bookstore “Custom Components and Other Custom Objects Used in Duke’s Bookstore” Properties Files Used in Duke’s Bookstore “Properties Files Used in Duke’s Bookstore” Deployment Descriptors Used in Duke’s Bookstore “Deployment Descriptors Used in Duke’s Bookstore” Running the Duke’s Bookstore Case Study Application “Running the Duke’s Bookstore Case Study Application” To Build and Deploy Duke’s Bookstore Using NetBeans IDE “To Build and Deploy Duke’s Bookstore Using NetBeans IDE” To Build and Deploy Duke’s Bookstore Using Maven “To Build and Deploy Duke’s Bookstore Using Maven” To Run Duke’s Bookstore “To Run Duke’s Bookstore” Duke’s Tutoring Case Study Example “Duke’s Tutoring Case Study Example” The Duke’s Tutoring… the paragraph beginning “The Duke’s Tutoring…” Design and Architecture of Duke’s Tutoring “Design and Architecture of Duke’s Tutoring” Architecture of the Duke’s Tutoring Example Application “Architecture of the Duke’s Tutoring Example Application” Main Interface “Main Interface” Java Persistence API Entities Used in the Main Interface “Java Persistence API Entities Used in the Main Interface” Enterprise Beans Used in the Main Interface “Enterprise Beans Used in the Main Interface” WebSocket Endpoint Used in the Main Interface “WebSocket Endpoint Used in the Main Interface” Facelets Files Used in the Main Interface “Facelets Files Used in the Main Interface” Helper Classes Used in the Main Interface “Helper Classes Used in the Main Interface” Properties Files “Properties Files” Deployment Descriptors Used in Duke’s Tutoring “Deployment Descriptors Used in Duke’s Tutoring” Administration Interface “Administration Interface” Enterprise Beans Used in the Administration Interface “Enterprise Beans Used in the Administration Interface” Facelets Files Used in the Administration Interface “Facelets Files Used in the Administration Interface” CDI Managed Beans Used in the Administration Interface “CDI Managed Beans Used in the Administration Interface” Helper Classes Used in the Administration Interface “Helper Classes Used in the Administration Interface” Running the Duke’s Tutoring Case Study Application “Running the Duke’s Tutoring Case Study Application” Running Duke’s Tutoring “Running Duke’s Tutoring” To Build and Deploy Duke’s Tutoring Using NetBeans IDE “To Build and Deploy Duke’s Tutoring Using NetBeans IDE” Before You Begin “Before You Begin” To Build and Deploy Duke’s Tutoring Using Maven “To Build and Deploy Duke’s Tutoring Using Maven” Using Duke’s Tutoring “Using Duke’s Tutoring” Duke’s Forest Case Study Example “Duke’s Forest Case Study Example” This chapter describes… the paragraph beginning “This chapter describes…” Overview of the Duke’s Forest Case Study Example “Overview of the Duke’s Forest Case Study Example” Design and Architecture of Duke’s Forest “Design and Architecture of Duke’s Forest” Architecture of the Duke’s Forest Example Application “Architecture of the Duke’s Forest Example Application” Interactions between Duke’s Forest Components “Interactions between Duke’s Forest Components” The events Project “The events Project” The entities Project “The entities Project” Duke’s Forest Database Tables and Their Relationships “Duke’s Forest Database Tables and Their Relationships” The dukes-payment Project “The dukes-payment Project” The dukes-resources Project “The dukes-resources Project” The Duke’s Store Project “The Duke’s Store Project” Enterprise Beans Used in Duke’s Store “Enterprise Beans Used in Duke’s Store” Facelets Files Used in the Main Interface of Duke’s Store “Facelets Files Used in the Main Interface of Duke’s Store” Facelets Files Used in the Administration Interface of Duke’s Store “Facelets Files Used in the Administration Interface of Duke’s Store” Managed Beans Used in Duke’s Store “Managed Beans Used in Duke’s Store” Helper Classes Used in Duke’s Store “Helper Classes Used in Duke’s Store” Qualifiers Used in Duke’s Store “Qualifiers Used in Duke’s Store” Event Handlers Used in Duke’s Store “Event Handlers Used in Duke’s Store” Deployment Descriptors Used in Duke’s Store “Deployment Descriptors Used in Duke’s Store” The Duke’s Shipment Project “The Duke’s Shipment Project” Enterprise Beans Used in Duke’s Shipment “Enterprise Beans Used in Duke’s Shipment” Facelets Files Used in Duke’s Shipment “Facelets Files Used in Duke’s Shipment” Managed Beans Used in Duke’s Shipment “Managed Beans Used in Duke’s Shipment” Helper Class Used in Duke’s Shipment “Helper Class Used in Duke’s Shipment” Qualifier Used in Duke’s Shipment “Qualifier Used in Duke’s Shipment” Deployment Descriptors Used in Duke’s Shipment “Deployment Descriptors Used in Duke’s Shipment” Building and Deploying the Duke’s Forest Case Study Application “Building and Deploying the Duke’s Forest Case Study Application” To Build and Deploy the Duke’s Forest Application Using NetBeans IDE “To Build and Deploy the Duke’s Forest Application Using NetBeans IDE” To Build and Deploy the Duke’s Forest Application Using Maven “To Build and Deploy the Duke’s Forest Application Using Maven” Running the Duke’s Forest Application “Running the Duke’s Forest Application” To Register as a Duke’s Store Customer “To Register as a Duke’s Store Customer” To Purchase Products “To Purchase Products” To Approve Shipment of a Product “To Approve Shipment of a Product” To Create a New Product “To Create a New Product”


    - - - - - - - - -
    - - - - - - - - - -
      - -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + -
    + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/title.html b/title.html index 7274cf9..95adba6 100644 --- a/title.html +++ b/title.html @@ -6,66 +6,51 @@ Java Platform, Enterprise Edition The Java EE Tutorial, Release 8 + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    Java Platform, Enterprise Edition

    @@ -173,60 +158,43 @@

    Java Platform, Enterprise Edition


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/toc.html b/toc.html index 7cc5d05..1901bcf 100644 --- a/toc.html +++ b/toc.html @@ -6,61 +6,45 @@ Java Platform, Enterprise Edition The Java EE Tutorial Java Platform, Enterprise Edition, Release 8 + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Next + + + + + Contents + +
    -
    +

    Contents

    @@ -7431,55 +7415,37 @@

    59 Du


    - - - - - - - - -
    - - - - - - - - - -
      - - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + -
    + + + Next + + + + + Contents + +
    -
    - + +
    + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/transactions.html b/transactions.html index 0ef2476..ca1cf05 100644 --- a/transactions.html +++ b/transactions.html @@ -6,66 +6,51 @@ Transactions + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    51 Transactions

    @@ -111,60 +96,43 @@

    51 Transactions


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/transactions001.html b/transactions001.html index e279b3f..a6375d9 100644 --- a/transactions001.html +++ b/transactions001.html @@ -6,66 +6,51 @@ Overview of Transactions + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    51.1 Overview of Transactions

    @@ -86,60 +71,43 @@

    51.1 Overview of Transactions


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/transactions002.html b/transactions002.html index 7faae11..862d42c 100644 --- a/transactions002.html +++ b/transactions002.html @@ -6,66 +6,51 @@ Transactions in Java EE Applications + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    51.2 Transactions in Java EE Applications

    @@ -101,60 +86,43 @@

    51.2 Transactions in Java EE Appli


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/transactions003.html b/transactions003.html index 7f6ce45..8fba739 100644 --- a/transactions003.html +++ b/transactions003.html @@ -6,66 +6,51 @@ What Is a Transaction? + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    51.3 What Is a Transaction?

    @@ -110,60 +95,43 @@

    51.3 What Is a Transaction?


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/transactions004.html b/transactions004.html index e28756c..c056c2f 100644 --- a/transactions004.html +++ b/transactions004.html @@ -6,66 +6,51 @@ Container-Managed Transactions + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    51.4 Container-Managed Transactions

    @@ -118,13 +103,8 @@

    51.4.1 Transaction Attributes

    attribute of method-B.

    -

    Figure 51-1 Transaction Scope

    -
    -
    -

    Description of Figure 51-1 follows
    -Description of "Figure 51-1 Transaction -Scope"
    -

    +
    *Figure 51-1 Transaction Scope *
    +

    A diagram showing a transaction between two beans.

    A transaction attribute can have one of the following values:

    @@ -522,60 +502,43 @@

    51.4.4 Methods No


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/transactions005.html b/transactions005.html index 8485585..7373e5d 100644 --- a/transactions005.html +++ b/transactions005.html @@ -6,66 +6,51 @@ Bean-Managed Transactions + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    51.5 Bean-Managed Transactions

    @@ -167,60 +152,43 @@

    51.5.3 Methods Not All


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/transactions006.html b/transactions006.html index b3b8235..2568502 100644 --- a/transactions006.html +++ b/transactions006.html @@ -6,66 +6,51 @@ Transaction Timeouts + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    51.6 Transaction Timeouts

    @@ -107,60 +92,43 @@

    51.6.1 To Set a Transaction Timeout


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/transactions007.html b/transactions007.html index 7b6b8b1..4df8420 100644 --- a/transactions007.html +++ b/transactions007.html @@ -6,66 +6,51 @@ Updating Multiple Databases + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    51.7 Updating Multiple Databases

    @@ -94,81 +79,54 @@

    51.7 Updating Multiple Databases

    in the same transaction.

    -

    Figure 51-2 Updating Multiple Databases

    -
    -
    -

    Description of Figure 51-2 follows
    -Description of "Figure 51-2 Updating -Multiple Databases"
    -

    +
    *Figure 51-2 Updating Multiple Databases *
    +

    A diagram showing Bean-A updating databases X and Y, and Bean-B updating database Z.

    -

    Figure 51-3 Updating Multiple Databases Across Java EE Servers

    -
    -
    -

    Description of Figure 51-3 follows
    -Description of "Figure 51-3 Updating -Multiple Databases Across Java EE Servers"
    -

    +
    *Figure 51-3 Updating Multiple Databases Across Java EE Servers *
    +

    A diagram showing Bean-A on one Java EE server updating database X, and Bean-B on another Java EE server updating database Y.


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/transactions008.html b/transactions008.html index d39d27e..46942e7 100644 --- a/transactions008.html +++ b/transactions008.html @@ -6,66 +6,51 @@ Transactions in Web Components + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    51.8 Transactions in Web Components

    @@ -81,60 +66,43 @@

    51.8 Transactions in Web Components


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/transactions009.html b/transactions009.html index ecac39e..8aaa325 100644 --- a/transactions009.html +++ b/transactions009.html @@ -6,66 +6,51 @@ Further Information about Transactions + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    51.9 Further Information about Transactions

    @@ -77,60 +62,43 @@

    51.9 Further Information about T


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/usingexamples.html b/usingexamples.html index 28f040b..e7db001 100644 --- a/usingexamples.html +++ b/usingexamples.html @@ -6,66 +6,51 @@ Using the Tutorial Examples + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    2 Using the Tutorial Examples

    @@ -115,60 +100,43 @@

    2 Using the Tutorial Examples


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/usingexamples001.html b/usingexamples001.html index 1f3b97d..7a53dee 100644 --- a/usingexamples001.html +++ b/usingexamples001.html @@ -6,66 +6,51 @@ Required Software + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    2.1 Required Software

    @@ -250,60 +235,43 @@

    2.1.5 Apache Maven


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/usingexamples002.html b/usingexamples002.html index 056fb9e..7bae515 100644 --- a/usingexamples002.html +++ b/usingexamples002.html @@ -6,66 +6,51 @@ Starting and Stopping GlassFish Server + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    2.2 Starting and Stopping GlassFish Server

    @@ -155,60 +140,43 @@

    2.2.4 To Stop GlassFish


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/usingexamples003.html b/usingexamples003.html index 7db90d3..6256672 100644 --- a/usingexamples003.html +++ b/usingexamples003.html @@ -6,66 +6,51 @@ Starting the Administration Console + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    2.3 Starting the Administration Console

    @@ -112,60 +97,43 @@

    2.3.1 To Start t


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/usingexamples004.html b/usingexamples004.html index 70b4fde..d384054 100644 --- a/usingexamples004.html +++ b/usingexamples004.html @@ -6,66 +6,51 @@ Starting and Stopping the Java DB Server + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    2.4 Starting and Stopping the Java DB Server

    @@ -126,60 +111,43 @@

    2.4.1 To Start the Data


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/usingexamples005.html b/usingexamples005.html index d3254fd..1b6c4ae 100644 --- a/usingexamples005.html +++ b/usingexamples005.html @@ -6,66 +6,51 @@ Building the Examples + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    2.5 Building the Examples

    @@ -79,60 +64,43 @@

    2.5 Building the Examples


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/usingexamples006.html b/usingexamples006.html index be07857..bae41ec 100644 --- a/usingexamples006.html +++ b/usingexamples006.html @@ -6,66 +6,51 @@ Tutorial Example Directory Structure + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    2.6 Tutorial Example Directory Structure

    @@ -132,60 +117,43 @@

    2.6 Tutorial Example Directory Str


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/usingexamples007.html b/usingexamples007.html index 1101702..d85dfcd 100644 --- a/usingexamples007.html +++ b/usingexamples007.html @@ -6,66 +6,51 @@ Java EE 7 Maven Archetypes in the Tutorial + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    2.7 Java EE 7 Maven Archetypes in the Tutorial

    @@ -138,60 +123,43 @@

    2.7.1.2 Installing the T


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/usingexamples008.html b/usingexamples008.html index 3a84db0..669bff3 100644 --- a/usingexamples008.html +++ b/usingexamples008.html @@ -6,66 +6,51 @@ Getting the Latest Updates to the Tutorial + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    2.8 Getting the Latest Updates to the Tutorial

    @@ -131,60 +116,43 @@

    2.8.2 To Update the Tutor


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/usingexamples009.html b/usingexamples009.html index 1165193..aecdf9f 100644 --- a/usingexamples009.html +++ b/usingexamples009.html @@ -6,66 +6,51 @@ Debugging Java EE Applications + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    2.9 Debugging Java EE Applications

    @@ -172,60 +157,43 @@

    2.9.2.1 To Debug an Applicatio


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/webapp.html b/webapp.html index e252237..a899310 100644 --- a/webapp.html +++ b/webapp.html @@ -6,66 +6,51 @@ Getting Started with Web Applications + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    6 Getting Started with Web Applications

    @@ -104,60 +89,43 @@

    6 Getting Started with Web Applic


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/webapp001.html b/webapp001.html index 9dd89ee..b90b7e9 100644 --- a/webapp001.html +++ b/webapp001.html @@ -6,66 +6,51 @@ Web Applications + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    6.1 Web Applications

    @@ -112,13 +97,8 @@

    6.1 Web Applications

    HTTP response and returns it to the client.

    -

    Figure 6-1 Java Web Application Request Handling

    -
    -
    -

    Description of Figure 6-1 follows
    -Description of "Figure 6-1 Java Web -Application Request Handling"
    -

    +
    *Figure 6-1 Java Web Application Request Handling *
    +

    Diagram of web application request handling. Clients and servlets communicate using HttpServletRequest and HttpServletResponse.

    Servlets are Java programming language classes that dynamically process @@ -161,60 +141,43 @@

    6.1 Web Applications


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/webapp002.html b/webapp002.html index 9af6899..2878db0 100644 --- a/webapp002.html +++ b/webapp002.html @@ -6,66 +6,51 @@ Web Application Lifecycle + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    6.2 Web Application Lifecycle

    @@ -138,60 +123,43 @@

    6.2 Web Application Lifecycle


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/webapp003.html b/webapp003.html index 1dfa788..105525a 100644 --- a/webapp003.html +++ b/webapp003.html @@ -6,66 +6,51 @@ A Web Module That Uses JavaServer Faces Technology: The hello1 Example + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    6.3 A Web Module That Uses JavaServer Faces Technology: The hello1 Example

    @@ -657,60 +642,43 @@

    6.3.5.2 To Undeploy the h


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/webapp004.html b/webapp004.html index b5e8ab3..f275cbd 100644 --- a/webapp004.html +++ b/webapp004.html @@ -6,66 +6,51 @@ A Web Module That Uses Java Servlet Technology: The hello2 Example + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    6.4 A Web Module That Uses Java Servlet Technology: The hello2 Example

    @@ -385,60 +370,43 @@

    6.4.3.2 To Run the hello2 Example


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/webapp005.html b/webapp005.html index 7c8e5c1..adadf66 100644 --- a/webapp005.html +++ b/webapp005.html @@ -6,66 +6,51 @@ Configuring Web Applications + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    6.5 Configuring Web Applications

    @@ -478,60 +463,43 @@

    6.5.4.2 Declaring a Reference to


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/webapp006.html b/webapp006.html index 1c145a6..bfe4fce 100644 --- a/webapp006.html +++ b/webapp006.html @@ -6,66 +6,51 @@ Further Information about Web Applications + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    6.6 Further Information about Web Applications

    @@ -92,60 +77,43 @@

    6.6 Further Information abou


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/webi18n.html b/webi18n.html index 9f7ac91..5288a62 100644 --- a/webi18n.html +++ b/webi18n.html @@ -6,66 +6,51 @@ Internationalizing and Localizing Web Applications + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    20 Internationalizing and Localizing Web Applications

    @@ -102,60 +87,43 @@

    20 Internationalizin


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/webi18n001.html b/webi18n001.html index 6505597..6226b9b 100644 --- a/webi18n001.html +++ b/webi18n001.html @@ -6,66 +6,51 @@ Java Platform Localization Classes + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    20.1 Java Platform Localization Classes

    @@ -105,60 +90,43 @@

    20.1 Java Platform Localization Clas


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/webi18n002.html b/webi18n002.html index 6c5b34e..739ac5b 100644 --- a/webi18n002.html +++ b/webi18n002.html @@ -6,66 +6,51 @@ Providing Localized Messages and Labels + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    20.2 Providing Localized Messages and Labels

    @@ -286,60 +271,43 @@

    20.2.3 Retrieving Localized Messages


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/webi18n003.html b/webi18n003.html index 8d2294b..06ec5c4 100644 --- a/webi18n003.html +++ b/webi18n003.html @@ -6,66 +6,51 @@ Date and Number Formatting + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    20.3 Date and Number Formatting

    @@ -96,60 +81,43 @@

    20.3 Date and Number Formatting


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/webi18n004.html b/webi18n004.html index b4f2701..6c1e8b2 100644 --- a/webi18n004.html +++ b/webi18n004.html @@ -6,66 +6,51 @@ Character Sets and Encodings + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    20.4 Character Sets and Encodings

    @@ -156,60 +141,43 @@

    20.4.2 Character Encoding


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/webservices-intro.html b/webservices-intro.html index e8b5327..c4eccfe 100644 --- a/webservices-intro.html +++ b/webservices-intro.html @@ -6,66 +6,51 @@ Introduction to Web Services + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    27 Introduction to Web Services

    @@ -95,60 +80,43 @@

    27 Introduction to Web Services


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/webservices-intro001.html b/webservices-intro001.html index 065f537..a70226b 100644 --- a/webservices-intro001.html +++ b/webservices-intro001.html @@ -6,66 +6,51 @@ What Are Web Services? + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    27.1 What Are Web Services?

    @@ -85,60 +70,43 @@

    27.1 What Are Web Services?


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/webservices-intro002.html b/webservices-intro002.html index 1515be3..6b46424 100644 --- a/webservices-intro002.html +++ b/webservices-intro002.html @@ -6,66 +6,51 @@ Types of Web Services + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    27.2 Types of Web Services

    @@ -222,60 +207,43 @@

    27.2.2 RESTful Web Services


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/webservices-intro003.html b/webservices-intro003.html index 6eedae9..fdacaf6 100644 --- a/webservices-intro003.html +++ b/webservices-intro003.html @@ -6,66 +6,51 @@ Deciding Which Type of Web Service to Use + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    27.3 Deciding Which Type of Web Service to Use

    @@ -101,60 +86,43 @@

    27.3 Deciding Which Type of W


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/websocket.html b/websocket.html index 09b9842..d0fc1ed 100644 --- a/websocket.html +++ b/websocket.html @@ -6,66 +6,51 @@ Java API for WebSocket + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    18 Java API for WebSocket

    @@ -127,60 +112,43 @@

    18 Java API for WebSocket


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/websocket001.html b/websocket001.html index 9925e62..9c198f3 100644 --- a/websocket001.html +++ b/websocket001.html @@ -6,66 +6,51 @@ Introduction to WebSocket + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    18.1 Introduction to WebSocket

    @@ -165,60 +150,43 @@

    18.1 Introduction to WebSocket


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/websocket002.html b/websocket002.html index 29db6fd..09b209a 100644 --- a/websocket002.html +++ b/websocket002.html @@ -6,66 +6,51 @@ Creating WebSocket Applications in the Java EE Platform + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    18.2 Creating WebSocket Applications in the Java EE Platform

    @@ -171,60 +156,43 @@

    18.2.1 Creating and Deployi


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/websocket003.html b/websocket003.html index e40b6cd..bd07caa 100644 --- a/websocket003.html +++ b/websocket003.html @@ -6,66 +6,51 @@ Programmatic Endpoints + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    18.3 Programmatic Endpoints

    @@ -126,60 +111,43 @@

    18.3 Programmatic Endpoints


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/websocket004.html b/websocket004.html index 39dd886..88e73e1 100644 --- a/websocket004.html +++ b/websocket004.html @@ -6,66 +6,51 @@ Annotated Endpoints + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    18.4 Annotated Endpoints

    @@ -172,60 +157,43 @@

    18.4 Annotated Endpoints


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/websocket005.html b/websocket005.html index a111620..cdb0d4d 100644 --- a/websocket005.html +++ b/websocket005.html @@ -6,66 +6,51 @@ Sending and Receiving Messages + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    18.5 Sending and Receiving Messages

    @@ -226,60 +211,43 @@

    18.5.2 Receiving Messages


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/websocket006.html b/websocket006.html index 7da60fc..bdc966c 100644 --- a/websocket006.html +++ b/websocket006.html @@ -6,66 +6,51 @@ Maintaining Client State + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    18.6 Maintaining Client State

    @@ -106,60 +91,43 @@

    18.6 Maintaining Client State


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/websocket007.html b/websocket007.html index a40d3a5..647c7cd 100644 --- a/websocket007.html +++ b/websocket007.html @@ -6,66 +6,51 @@ Using Encoders and Decoders + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    18.7 Using Encoders and Decoders

    @@ -311,60 +296,43 @@

    1


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/websocket008.html b/websocket008.html index f031bf4..c1a5c67 100644 --- a/websocket008.html +++ b/websocket008.html @@ -6,66 +6,51 @@ Path Parameters + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    18.8 Path Parameters

    @@ -122,60 +107,43 @@

    18.8 Path Parameters


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/websocket009.html b/websocket009.html index 60145c0..4b14c6f 100644 --- a/websocket009.html +++ b/websocket009.html @@ -6,66 +6,51 @@ Handling Errors + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    18.9 Handling Errors

    @@ -102,60 +87,43 @@

    18.9 Handling Errors


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/websocket010.html b/websocket010.html index f65d0cb..8b37d07 100644 --- a/websocket010.html +++ b/websocket010.html @@ -6,66 +6,51 @@ Specifying an Endpoint Configurator Class + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    18.10 Specifying an Endpoint Configurator Class

    @@ -155,60 +140,43 @@

    18.10 Specifying an Endpoint


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/websocket011.html b/websocket011.html index a13f76f..baef130 100644 --- a/websocket011.html +++ b/websocket011.html @@ -6,66 +6,51 @@ The dukeetf2 Example Application + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    18.11 The dukeetf2 Example Application

    @@ -387,60 +372,43 @@

    18.11.2.2 To Run th


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/websocket012.html b/websocket012.html index 0db72e2..e33abdb 100644 --- a/websocket012.html +++ b/websocket012.html @@ -6,66 +6,51 @@ The websocketbot Example Application + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    18.12 The websocketbot Example Application

    @@ -570,60 +555,43 @@

    18.12.2.3 To Test the webs


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file diff --git a/websocket013.html b/websocket013.html index e0808ff..1092824 100644 --- a/websocket013.html +++ b/websocket013.html @@ -6,66 +6,51 @@ Further Information about WebSocket + - +
    - Java Platform, Enterprise Edition The Java EE Tutorial
    - Release 8 Java Platform, Enterprise Edition
    + Java Platform, Enterprise Edition (Java EE) 8
    + The Java EE Tutorial
    E63026-01

    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - - + +
    + + + + + - - + + + + + -
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    +

    18.13 Further Information about WebSocket

    @@ -80,60 +65,43 @@

    18.13 Further Information about Web


    - - - - - - - - -
    - - - - - - - - - -
      - - Previous -
    - Previous  -
    -
    - - Next -
    - Next -
    -
    -
    - Oracle Logo - -
    - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - -
    -
    -
    - - - - + +
      - - Go To Table Of Contents -
    - Contents -
    -
    + + + + + + + + + + + -
    + + + Previous + + + + + Next + + + + + Contents + +
    -
    - + + + Oracle Logo  + Copyright © 2017, Oracle and/or its affiliates. All rights reserved. + + + + \ No newline at end of file From 061609f027928a00b7596a6d9ad4ba4bcedd37c8 Mon Sep 17 00:00:00 2001 From: "joe.ruzzi" Date: Wed, 2 Aug 2017 12:31:02 -0400 Subject: [PATCH 6/8] Update site --- img_text/javaeett_dt_001.html | 80 ----------------------- img_text/javaeett_dt_002.html | 81 ------------------------ img_text/javaeett_dt_003.html | 80 ----------------------- img_text/javaeett_dt_004.html | 80 ----------------------- img_text/javaeett_dt_005.html | 80 ----------------------- img_text/javaeett_dt_006.html | 79 ----------------------- img_text/javaeett_dt_007.html | 79 ----------------------- img_text/javaeett_dt_008.html | 79 ----------------------- img_text/javaeett_dt_009.html | 79 ----------------------- img_text/javaeett_dt_010.html | 80 ----------------------- img_text/javaeett_dt_011.html | 80 ----------------------- img_text/javaeett_dt_012.html | 80 ----------------------- img_text/javaeett_dt_013.html | 80 ----------------------- img_text/javaeett_dt_014.html | 81 ------------------------ img_text/javaeett_dt_015.html | 81 ------------------------ img_text/javaeett_dt_016.html | 81 ------------------------ img_text/javaeett_dt_017.html | 82 ------------------------ img_text/javaeett_dt_018.html | 80 ----------------------- img_text/javaeett_dt_019.html | 80 ----------------------- img_text/javaeett_dt_020.html | 80 ----------------------- img_text/javaeett_dt_021.html | 79 ----------------------- img_text/javaeett_dt_022.html | 79 ----------------------- img_text/javaeett_dt_023.html | 79 ----------------------- img_text/javaeett_dt_024.html | 79 ----------------------- img_text/javaeett_dt_025.html | 79 ----------------------- img_text/javaeett_dt_026.html | 79 ----------------------- img_text/javaeett_dt_027.html | 80 ----------------------- img_text/javaeett_dt_028.html | 80 ----------------------- img_text/javaeett_dt_029.html | 80 ----------------------- img_text/javaeett_dt_030.html | 81 ------------------------ img_text/javaeett_dt_031.html | 80 ----------------------- img_text/javaeett_dt_032.html | 80 ----------------------- img_text/javaeett_dt_033.html | 80 ----------------------- img_text/javaeett_dt_034.html | 79 ----------------------- img_text/javaeett_dt_035.html | 81 ------------------------ img_text/javaeett_dt_036.html | 80 ----------------------- img_text/javaeett_dt_037.html | 80 ----------------------- img_text/javaeett_dt_038.html | 80 ----------------------- img_text/javaeett_dt_039.html | 80 ----------------------- img_text/javaeett_dt_040.html | 80 ----------------------- img_text/javaeett_dt_041.html | 79 ----------------------- img_text/javaeett_dt_042.html | 80 ----------------------- img_text/javaeett_dt_043.html | 80 ----------------------- img_text/javaeett_dt_044.html | 80 ----------------------- img_text/javaeett_dt_045.html | 80 ----------------------- img_text/javaeett_dt_046.html | 80 ----------------------- img_text/javaeett_dt_047.html | 80 ----------------------- img_text/javaeett_dt_048.html | 79 ----------------------- img_text/javaeett_dt_049.html | 80 ----------------------- img_text/javaeett_dt_050.html | 79 ----------------------- img_text/javaeett_dt_051.html | 80 ----------------------- img_text/javaeett_dt_052.html | 80 ----------------------- img_text/javaeett_dt_053.html | 79 ----------------------- img_text/javaeett_dt_054.html | 80 ----------------------- img_text/javaeett_dt_055.html | 80 ----------------------- img_text/javaeett_dt_056.html | 81 ------------------------ img_text/javaeett_dt_057.html | 80 ----------------------- img_text/javaeett_dt_058.html | 83 ------------------------ img_text/javaeett_dt_059.html | 84 ------------------------- img_text/javaeett_dt_060.html | 83 ------------------------ img_text/javaeett_dt_061.html | 83 ------------------------ img_text/javaeett_dt_062.html | 80 ----------------------- img_text/javaeett_dt_063.html | 81 ------------------------ img_text/javaeett_dt_064.html | 80 ----------------------- img_text/javaeett_dt_065_frmcmpnt.html | 79 ----------------------- img_text/javaeett_dt_066_slctmny.html | 79 ----------------------- img_text/javaeett_dt_067_slctn.html | 79 ----------------------- img_text/javaeett_dt_068_txtcmpnts.html | 80 ----------------------- overview.html | 3 + 69 files changed, 3 insertions(+), 5445 deletions(-) delete mode 100644 img_text/javaeett_dt_001.html delete mode 100644 img_text/javaeett_dt_002.html delete mode 100644 img_text/javaeett_dt_003.html delete mode 100644 img_text/javaeett_dt_004.html delete mode 100644 img_text/javaeett_dt_005.html delete mode 100644 img_text/javaeett_dt_006.html delete mode 100644 img_text/javaeett_dt_007.html delete mode 100644 img_text/javaeett_dt_008.html delete mode 100644 img_text/javaeett_dt_009.html delete mode 100644 img_text/javaeett_dt_010.html delete mode 100644 img_text/javaeett_dt_011.html delete mode 100644 img_text/javaeett_dt_012.html delete mode 100644 img_text/javaeett_dt_013.html delete mode 100644 img_text/javaeett_dt_014.html delete mode 100644 img_text/javaeett_dt_015.html delete mode 100644 img_text/javaeett_dt_016.html delete mode 100644 img_text/javaeett_dt_017.html delete mode 100644 img_text/javaeett_dt_018.html delete mode 100644 img_text/javaeett_dt_019.html delete mode 100644 img_text/javaeett_dt_020.html delete mode 100644 img_text/javaeett_dt_021.html delete mode 100644 img_text/javaeett_dt_022.html delete mode 100644 img_text/javaeett_dt_023.html delete mode 100644 img_text/javaeett_dt_024.html delete mode 100644 img_text/javaeett_dt_025.html delete mode 100644 img_text/javaeett_dt_026.html delete mode 100644 img_text/javaeett_dt_027.html delete mode 100644 img_text/javaeett_dt_028.html delete mode 100644 img_text/javaeett_dt_029.html delete mode 100644 img_text/javaeett_dt_030.html delete mode 100644 img_text/javaeett_dt_031.html delete mode 100644 img_text/javaeett_dt_032.html delete mode 100644 img_text/javaeett_dt_033.html delete mode 100644 img_text/javaeett_dt_034.html delete mode 100644 img_text/javaeett_dt_035.html delete mode 100644 img_text/javaeett_dt_036.html delete mode 100644 img_text/javaeett_dt_037.html delete mode 100644 img_text/javaeett_dt_038.html delete mode 100644 img_text/javaeett_dt_039.html delete mode 100644 img_text/javaeett_dt_040.html delete mode 100644 img_text/javaeett_dt_041.html delete mode 100644 img_text/javaeett_dt_042.html delete mode 100644 img_text/javaeett_dt_043.html delete mode 100644 img_text/javaeett_dt_044.html delete mode 100644 img_text/javaeett_dt_045.html delete mode 100644 img_text/javaeett_dt_046.html delete mode 100644 img_text/javaeett_dt_047.html delete mode 100644 img_text/javaeett_dt_048.html delete mode 100644 img_text/javaeett_dt_049.html delete mode 100644 img_text/javaeett_dt_050.html delete mode 100644 img_text/javaeett_dt_051.html delete mode 100644 img_text/javaeett_dt_052.html delete mode 100644 img_text/javaeett_dt_053.html delete mode 100644 img_text/javaeett_dt_054.html delete mode 100644 img_text/javaeett_dt_055.html delete mode 100644 img_text/javaeett_dt_056.html delete mode 100644 img_text/javaeett_dt_057.html delete mode 100644 img_text/javaeett_dt_058.html delete mode 100644 img_text/javaeett_dt_059.html delete mode 100644 img_text/javaeett_dt_060.html delete mode 100644 img_text/javaeett_dt_061.html delete mode 100644 img_text/javaeett_dt_062.html delete mode 100644 img_text/javaeett_dt_063.html delete mode 100644 img_text/javaeett_dt_064.html delete mode 100644 img_text/javaeett_dt_065_frmcmpnt.html delete mode 100644 img_text/javaeett_dt_066_slctmny.html delete mode 100644 img_text/javaeett_dt_067_slctn.html delete mode 100644 img_text/javaeett_dt_068_txtcmpnts.html diff --git a/img_text/javaeett_dt_001.html b/img_text/javaeett_dt_001.html deleted file mode 100644 index e365b30..0000000 --- a/img_text/javaeett_dt_001.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - Description of the illustration javaeett_dt_001 - - - - - - - - - -
    - Java Platform, Enterprise Edition (Java EE) 8
    - The Java EE Tutorial
    - E63026-01 -
    -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - -
    -

    Diagram of multitiered application structure, including client tier, web -tier, business tier, and EIS tier.

    -
    - - -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - - - Oracle Logo  - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - - - - - \ No newline at end of file diff --git a/img_text/javaeett_dt_002.html b/img_text/javaeett_dt_002.html deleted file mode 100644 index 501920b..0000000 --- a/img_text/javaeett_dt_002.html +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - Description of the illustration javaeett_dt_002 - - - - - - - - - -
    - Java Platform, Enterprise Edition (Java EE) 8
    - The Java EE Tutorial
    - E63026-01 -
    -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - -
    -

    Diagram of client-server communication. Application clients access the -business tier directly. Browsers, web pages, and applets access the web -tier.

    -
    - - -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - - - Oracle Logo  - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - - - - - \ No newline at end of file diff --git a/img_text/javaeett_dt_003.html b/img_text/javaeett_dt_003.html deleted file mode 100644 index 7ef5e04..0000000 --- a/img_text/javaeett_dt_003.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - Description of the illustration javaeett_dt_003 - - - - - - - - - -
    - Java Platform, Enterprise Edition (Java EE) 8
    - The Java EE Tutorial
    - E63026-01 -
    -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - -
    -

    Diagram of client-server communication showing detail of JavaBeans -components and web pages in the web tier.

    -
    - - -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - - - Oracle Logo  - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - - - - - \ No newline at end of file diff --git a/img_text/javaeett_dt_004.html b/img_text/javaeett_dt_004.html deleted file mode 100644 index a6f3819..0000000 --- a/img_text/javaeett_dt_004.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - Description of the illustration javaeett_dt_004 - - - - - - - - - -
    - Java Platform, Enterprise Edition (Java EE) 8
    - The Java EE Tutorial
    - E63026-01 -
    -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - -
    -

    Diagram of client-server communication showing detail of entities, -session beans, and message-driven beans in the business tier.

    -
    - - -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - - - Oracle Logo  - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - - - - - \ No newline at end of file diff --git a/img_text/javaeett_dt_005.html b/img_text/javaeett_dt_005.html deleted file mode 100644 index 40e29a2..0000000 --- a/img_text/javaeett_dt_005.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - Description of the illustration javaeett_dt_005 - - - - - - - - - -
    - Java Platform, Enterprise Edition (Java EE) 8
    - The Java EE Tutorial
    - E63026-01 -
    -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - -
    -

    Diagram of client-server communication showing servlets and web pages in -the web tier and enterprise beans in the business tier.

    -
    - - -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - - - Oracle Logo  - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - - - - - \ No newline at end of file diff --git a/img_text/javaeett_dt_006.html b/img_text/javaeett_dt_006.html deleted file mode 100644 index cddd4aa..0000000 --- a/img_text/javaeett_dt_006.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - Description of the illustration javaeett_dt_006 - - - - - - - - - -
    - Java Platform, Enterprise Edition (Java EE) 8
    - The Java EE Tutorial
    - E63026-01 -
    -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - -
    -

    Diagram of Java EE containers and their relationships

    -
    - - -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - - - Oracle Logo  - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - - - - - \ No newline at end of file diff --git a/img_text/javaeett_dt_007.html b/img_text/javaeett_dt_007.html deleted file mode 100644 index 1fb4856..0000000 --- a/img_text/javaeett_dt_007.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - Description of the illustration javaeett_dt_007 - - - - - - - - - -
    - Java Platform, Enterprise Edition (Java EE) 8
    - The Java EE Tutorial
    - E63026-01 -
    -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - -
    -

    Diagram of Java EE APIs in the web container

    -
    - - -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - - - Oracle Logo  - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - - - - - \ No newline at end of file diff --git a/img_text/javaeett_dt_008.html b/img_text/javaeett_dt_008.html deleted file mode 100644 index 3e36b55..0000000 --- a/img_text/javaeett_dt_008.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - Description of the illustration javaeett_dt_008 - - - - - - - - - -
    - Java Platform, Enterprise Edition (Java EE) 8
    - The Java EE Tutorial
    - E63026-01 -
    -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - -
    -

    Diagram of Java EE APIs in the EJB container

    -
    - - -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - - - Oracle Logo  - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - - - - - \ No newline at end of file diff --git a/img_text/javaeett_dt_009.html b/img_text/javaeett_dt_009.html deleted file mode 100644 index 8054e75..0000000 --- a/img_text/javaeett_dt_009.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - Description of the illustration javaeett_dt_009 - - - - - - - - - -
    - Java Platform, Enterprise Edition (Java EE) 8
    - The Java EE Tutorial
    - E63026-01 -
    -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - -
    -

    Diagram of Java EE APIs in the application client container

    -
    - - -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - - - Oracle Logo  - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - - - - - \ No newline at end of file diff --git a/img_text/javaeett_dt_010.html b/img_text/javaeett_dt_010.html deleted file mode 100644 index 86c06cd..0000000 --- a/img_text/javaeett_dt_010.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - Description of the illustration javaeett_dt_010 - - - - - - - - - -
    - Java Platform, Enterprise Edition (Java EE) 8
    - The Java EE Tutorial
    - E63026-01 -
    -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - -
    -

    Diagram of EAR file structure. META-INF and web, application client, -EJB, and resource adapter modules are under the assembly root.

    -
    - - -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - - - Oracle Logo  - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - - - - - \ No newline at end of file diff --git a/img_text/javaeett_dt_011.html b/img_text/javaeett_dt_011.html deleted file mode 100644 index d313764..0000000 --- a/img_text/javaeett_dt_011.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - Description of the illustration javaeett_dt_011 - - - - - - - - - -
    - Java Platform, Enterprise Edition (Java EE) 8
    - The Java EE Tutorial
    - E63026-01 -
    -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - -
    -

    Diagram showing the structure and contents of an enterprise bean JAR -file.

    -
    - - -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - - - Oracle Logo  - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - - - - - \ No newline at end of file diff --git a/img_text/javaeett_dt_012.html b/img_text/javaeett_dt_012.html deleted file mode 100644 index 69d5092..0000000 --- a/img_text/javaeett_dt_012.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - Description of the illustration javaeett_dt_012 - - - - - - - - - -
    - Java Platform, Enterprise Edition (Java EE) 8
    - The Java EE Tutorial
    - E63026-01 -
    -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - -
    -

    Diagram of web module structure. WEB-INF and web pages are under the -root. Under WEB-INF are descriptors and the lib and classes directories.

    -
    - - -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - - - Oracle Logo  - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - - - - - \ No newline at end of file diff --git a/img_text/javaeett_dt_013.html b/img_text/javaeett_dt_013.html deleted file mode 100644 index 5c46118..0000000 --- a/img_text/javaeett_dt_013.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - Description of the illustration javaeett_dt_013 - - - - - - - - - -
    - Java Platform, Enterprise Edition (Java EE) 8
    - The Java EE Tutorial
    - E63026-01 -
    -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - -
    -

    Diagram of web application request handling. Clients and servlets -communicate using HttpServletRequest and HttpServletResponse.

    -
    - - -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - - - Oracle Logo  - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - - - - - \ No newline at end of file diff --git a/img_text/javaeett_dt_014.html b/img_text/javaeett_dt_014.html deleted file mode 100644 index f028f72..0000000 --- a/img_text/javaeett_dt_014.html +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - Description of the illustration javaeett_dt_014 - - - - - - - - - -
    - Java Platform, Enterprise Edition (Java EE) 8
    - The Java EE Tutorial
    - E63026-01 -
    -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - -
    -

    Diagram that shows a browser accessing the myfacelet.xhtml page using an -HTTP Request and the server sending the rendered HTML page using an HTTP -Response.

    -
    - - -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - - - Oracle Logo  - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - - - - - \ No newline at end of file diff --git a/img_text/javaeett_dt_015.html b/img_text/javaeett_dt_015.html deleted file mode 100644 index 99851e2..0000000 --- a/img_text/javaeett_dt_015.html +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - Description of the illustration javaeett_dt_015 - - - - - - - - - -
    - Java Platform, Enterprise Edition (Java EE) 8
    - The Java EE Tutorial
    - E63026-01 -
    -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - -
    -

    Diagram of web application technologies. JavaServer Pages, the JSP -Standard Tag Library, and JavaServer Faces rest on Java Servlet -technology.

    -
    - - -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - - - Oracle Logo  - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - - - - - \ No newline at end of file diff --git a/img_text/javaeett_dt_016.html b/img_text/javaeett_dt_016.html deleted file mode 100644 index 797b079..0000000 --- a/img_text/javaeett_dt_016.html +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - Description of the illustration javaeett_dt_016 - - - - - - - - - -
    - Java Platform, Enterprise Edition (Java EE) 8
    - The Java EE Tutorial
    - E63026-01 -
    -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - -
    -

    Flow diagram of Faces request and Faces response, including event and -validation processing, error handling, model updating, application -invocation.

    -
    - - -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - - - Oracle Logo  - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - - - - - \ No newline at end of file diff --git a/img_text/javaeett_dt_017.html b/img_text/javaeett_dt_017.html deleted file mode 100644 index bdb5550..0000000 --- a/img_text/javaeett_dt_017.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - Description of the illustration javaeett_dt_017 - - - - - - - - - -
    - Java Platform, Enterprise Edition (Java EE) 8
    - The Java EE Tutorial
    - E63026-01 -
    -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - -
    -

    This figure shows two Faces flows, Flow A and Flow B. Each has a start -node and two additional pages. Each has an associated managed bean. Each -defines a return node, and each defines two parameters to be passed to -the other flow.

    -
    - - -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - - - Oracle Logo  - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - - - - - \ No newline at end of file diff --git a/img_text/javaeett_dt_018.html b/img_text/javaeett_dt_018.html deleted file mode 100644 index dbce6b2..0000000 --- a/img_text/javaeett_dt_018.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - Description of the illustration javaeett_dt_018 - - - - - - - - - -
    - Java Platform, Enterprise Edition (Java EE) 8
    - The Java EE Tutorial
    - E63026-01 -
    -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - -
    -

    Diagram of filter-to-servlet mapping with filters F1-F3 and servlets -S1-S3. F1 filters S1-S3, then F2 filters S2, then F3 filters S1 and S2.

    -
    - - -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - - - Oracle Logo  - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - - - - - \ No newline at end of file diff --git a/img_text/javaeett_dt_019.html b/img_text/javaeett_dt_019.html deleted file mode 100644 index a7e1ac4..0000000 --- a/img_text/javaeett_dt_019.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - Description of the illustration javaeett_dt_019 - - - - - - - - - -
    - Java Platform, Enterprise Edition (Java EE) 8
    - The Java EE Tutorial
    - E63026-01 -
    -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - -
    -

    Diagram showing a client and web service communicating through a SOAP -message.

    -
    - - -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - - - Oracle Logo  - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - - - - - \ No newline at end of file diff --git a/img_text/javaeett_dt_020.html b/img_text/javaeett_dt_020.html deleted file mode 100644 index 301552e..0000000 --- a/img_text/javaeett_dt_020.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - Description of the illustration javaeett_dt_020 - - - - - - - - - -
    - Java Platform, Enterprise Edition (Java EE) 8
    - The Java EE Tutorial
    - E63026-01 -
    -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - -
    -

    Diagram showing a remote client accessing an enterprise bean’s methods -through its remote interface.

    -
    - - -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - - - Oracle Logo  - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - - - - - \ No newline at end of file diff --git a/img_text/javaeett_dt_021.html b/img_text/javaeett_dt_021.html deleted file mode 100644 index 35cc741..0000000 --- a/img_text/javaeett_dt_021.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - Description of the illustration javaeett_dt_021 - - - - - - - - - -
    - Java Platform, Enterprise Edition (Java EE) 8
    - The Java EE Tutorial
    - E63026-01 -
    -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - -
    -

    Diagram showing the lifecycle of a stateful session bean.

    -
    - - -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - - - Oracle Logo  - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - - - - - \ No newline at end of file diff --git a/img_text/javaeett_dt_022.html b/img_text/javaeett_dt_022.html deleted file mode 100644 index 2ee2add..0000000 --- a/img_text/javaeett_dt_022.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - Description of the illustration javaeett_dt_022 - - - - - - - - - -
    - Java Platform, Enterprise Edition (Java EE) 8
    - The Java EE Tutorial
    - E63026-01 -
    -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - -
    -

    Diagram showing the lifecycle of a stateless or singleton session bean.

    -
    - - -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - - - Oracle Logo  - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - - - - - \ No newline at end of file diff --git a/img_text/javaeett_dt_023.html b/img_text/javaeett_dt_023.html deleted file mode 100644 index fcec6b1..0000000 --- a/img_text/javaeett_dt_023.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - Description of the illustration javaeett_dt_023 - - - - - - - - - -
    - Java Platform, Enterprise Edition (Java EE) 8
    - The Java EE Tutorial
    - E63026-01 -
    -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - -
    -

    Diagram showing the lifecycle of a message-driven bean.

    -
    - - -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - - - Oracle Logo  - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - - - - - \ No newline at end of file diff --git a/img_text/javaeett_dt_024.html b/img_text/javaeett_dt_024.html deleted file mode 100644 index e2d37d8..0000000 --- a/img_text/javaeett_dt_024.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - Description of the illustration javaeett_dt_024 - - - - - - - - - -
    - Java Platform, Enterprise Edition (Java EE) 8
    - The Java EE Tutorial
    - E63026-01 -
    -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - -
    -

    Diagram showing the database schema for the order application

    -
    - - -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - - - Oracle Logo  - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - - - - - \ No newline at end of file diff --git a/img_text/javaeett_dt_025.html b/img_text/javaeett_dt_025.html deleted file mode 100644 index 01e89db..0000000 --- a/img_text/javaeett_dt_025.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - Description of the illustration javaeett_dt_025 - - - - - - - - - -
    - Java Platform, Enterprise Edition (Java EE) 8
    - The Java EE Tutorial
    - E63026-01 -
    -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - -
    -

    Diagram showing the database schema for the roster application

    -
    - - -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - - - Oracle Logo  - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - - - - - \ No newline at end of file diff --git a/img_text/javaeett_dt_026.html b/img_text/javaeett_dt_026.html deleted file mode 100644 index 4973142..0000000 --- a/img_text/javaeett_dt_026.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - Description of the illustration javaeett_dt_026 - - - - - - - - - -
    - Java Platform, Enterprise Edition (Java EE) 8
    - The Java EE Tutorial
    - E63026-01 -
    -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - -
    -

    Diagram showing messaging between various departments in an enterprise

    -
    - - -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - - - Oracle Logo  - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - - - - - \ No newline at end of file diff --git a/img_text/javaeett_dt_027.html b/img_text/javaeett_dt_027.html deleted file mode 100644 index 8aa7226..0000000 --- a/img_text/javaeett_dt_027.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - Description of the illustration javaeett_dt_027 - - - - - - - - - -
    - Java Platform, Enterprise Edition (Java EE) 8
    - The Java EE Tutorial
    - E63026-01 -
    -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - -
    -

    Diagram of JMS API architecture, showing administrative tool, JMS -client, JNDI namespace, and JMS provider

    -
    - - -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - - - Oracle Logo  - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - - - - - \ No newline at end of file diff --git a/img_text/javaeett_dt_028.html b/img_text/javaeett_dt_028.html deleted file mode 100644 index 4657c94..0000000 --- a/img_text/javaeett_dt_028.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - Description of the illustration javaeett_dt_028 - - - - - - - - - -
    - Java Platform, Enterprise Edition (Java EE) 8
    - The Java EE Tutorial
    - E63026-01 -
    -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - -
    -

    Diagram of point-to-point messaging, showing Client 1 sending a message -to a queue, and Client 2 consuming and acknowledging the message

    -
    - - -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - - - Oracle Logo  - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - - - - - \ No newline at end of file diff --git a/img_text/javaeett_dt_029.html b/img_text/javaeett_dt_029.html deleted file mode 100644 index 69b0d2d..0000000 --- a/img_text/javaeett_dt_029.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - Description of the illustration javaeett_dt_029 - - - - - - - - - -
    - Java Platform, Enterprise Edition (Java EE) 8
    - The Java EE Tutorial
    - E63026-01 -
    -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - -
    -

    Diagram of pub/sub messaging, showing Client 1 sending a message to a -topic, and the message being delivered to two consumers to the topic

    -
    - - -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - - - Oracle Logo  - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - - - - - \ No newline at end of file diff --git a/img_text/javaeett_dt_030.html b/img_text/javaeett_dt_030.html deleted file mode 100644 index 103f30f..0000000 --- a/img_text/javaeett_dt_030.html +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - Description of the illustration javaeett_dt_030 - - - - - - - - - -
    - Java Platform, Enterprise Edition (Java EE) 8
    - The Java EE Tutorial
    - E63026-01 -
    -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - -
    -

    Diagram of the JMS API programming model: connection factory, -JMSContext, connection, session, message producer, message consumer, -messages, and destinations

    -
    - - -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - - - Oracle Logo  - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - - - - - \ No newline at end of file diff --git a/img_text/javaeett_dt_031.html b/img_text/javaeett_dt_031.html deleted file mode 100644 index e66cd62..0000000 --- a/img_text/javaeett_dt_031.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - Description of the illustration javaeett_dt_031 - - - - - - - - - -
    - Java Platform, Enterprise Edition (Java EE) 8
    - The Java EE Tutorial
    - E63026-01 -
    -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - -
    -

    Diagram showing messages being lost when nondurable subscriptions are -used

    -
    - - -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - - - Oracle Logo  - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - - - - - \ No newline at end of file diff --git a/img_text/javaeett_dt_032.html b/img_text/javaeett_dt_032.html deleted file mode 100644 index 5b19e13..0000000 --- a/img_text/javaeett_dt_032.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - Description of the illustration javaeett_dt_032 - - - - - - - - - -
    - Java Platform, Enterprise Edition (Java EE) 8
    - The Java EE Tutorial
    - E63026-01 -
    -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - -
    -

    Diagram showing messages being preserved when durable subscriptions are -used

    -
    - - -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - - - Oracle Logo  - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - - - - - \ No newline at end of file diff --git a/img_text/javaeett_dt_033.html b/img_text/javaeett_dt_033.html deleted file mode 100644 index e8d4390..0000000 --- a/img_text/javaeett_dt_033.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - Description of the illustration javaeett_dt_033 - - - - - - - - - -
    - Java Platform, Enterprise Edition (Java EE) 8
    - The Java EE Tutorial
    - E63026-01 -
    -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - -
    -

    Diagram of local transactions, showing separate transactions for sending -and consuming a message

    -
    - - -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - - - Oracle Logo  - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - - - - - \ No newline at end of file diff --git a/img_text/javaeett_dt_034.html b/img_text/javaeett_dt_034.html deleted file mode 100644 index 7844263..0000000 --- a/img_text/javaeett_dt_034.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - Description of the illustration javaeett_dt_034 - - - - - - - - - -
    - Java Platform, Enterprise Edition (Java EE) 8
    - The Java EE Tutorial
    - E63026-01 -
    -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - -
    -

    Diagram of steps in transaction example

    -
    - - -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - - - Oracle Logo  - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - - - - - \ No newline at end of file diff --git a/img_text/javaeett_dt_035.html b/img_text/javaeett_dt_035.html deleted file mode 100644 index d482c5c..0000000 --- a/img_text/javaeett_dt_035.html +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - Description of the illustration javaeett_dt_035 - - - - - - - - - -
    - Java Platform, Enterprise Edition (Java EE) 8
    - The Java EE Tutorial
    - E63026-01 -
    -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - -
    -

    Diagram showing a web application in which a managed bean sends a -message to a queue, and another managed bean receives the message from -the queue.

    -
    - - -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - - - Oracle Logo  - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - - - - - \ No newline at end of file diff --git a/img_text/javaeett_dt_036.html b/img_text/javaeett_dt_036.html deleted file mode 100644 index 38f3ddb..0000000 --- a/img_text/javaeett_dt_036.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - Description of the illustration javaeett_dt_036 - - - - - - - - - -
    - Java Platform, Enterprise Edition (Java EE) 8
    - The Java EE Tutorial
    - E63026-01 -
    -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - -
    -

    Diagram of application showing an application client sending a message -to a queue, and the message being delivered to a message-driven bean

    -
    - - -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - - - Oracle Logo  - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - - - - - \ No newline at end of file diff --git a/img_text/javaeett_dt_037.html b/img_text/javaeett_dt_037.html deleted file mode 100644 index a1f7e64..0000000 --- a/img_text/javaeett_dt_037.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - Description of the illustration javaeett_dt_037 - - - - - - - - - -
    - Java Platform, Enterprise Edition (Java EE) 8
    - The Java EE Tutorial
    - E63026-01 -
    -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - -
    -

    Diagram of application showing an application client calling a session -bean, which sends messages that are processed by a message-driven bean

    -
    - - -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - - - Oracle Logo  - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - - - - - \ No newline at end of file diff --git a/img_text/javaeett_dt_038.html b/img_text/javaeett_dt_038.html deleted file mode 100644 index 5fc70e5..0000000 --- a/img_text/javaeett_dt_038.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - Description of the illustration javaeett_dt_038 - - - - - - - - - -
    - Java Platform, Enterprise Edition (Java EE) 8
    - The Java EE Tutorial
    - E63026-01 -
    -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - -
    -

    Diagram of application showing an application client, two message-driven -beans, and an entity, as well as the associated topic and queue

    -
    - - -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - - - Oracle Logo  - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - - - - - \ No newline at end of file diff --git a/img_text/javaeett_dt_039.html b/img_text/javaeett_dt_039.html deleted file mode 100644 index 0e375cf..0000000 --- a/img_text/javaeett_dt_039.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - Description of the illustration javaeett_dt_039 - - - - - - - - - -
    - Java Platform, Enterprise Edition (Java EE) 8
    - The Java EE Tutorial
    - E63026-01 -
    -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - -
    -

    Diagram of initial request from web client to web server for access to a -protected resource

    -
    - - -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - - - Oracle Logo  - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - - - - - \ No newline at end of file diff --git a/img_text/javaeett_dt_040.html b/img_text/javaeett_dt_040.html deleted file mode 100644 index 9b47489..0000000 --- a/img_text/javaeett_dt_040.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - Description of the illustration javaeett_dt_040 - - - - - - - - - -
    - Java Platform, Enterprise Edition (Java EE) 8
    - The Java EE Tutorial
    - E63026-01 -
    -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - -
    -

    Diagram of initial authentication: server sends form to client, which -sends authentication data to server for validation

    -
    - - -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - - - Oracle Logo  - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - - - - - \ No newline at end of file diff --git a/img_text/javaeett_dt_041.html b/img_text/javaeett_dt_041.html deleted file mode 100644 index 7c3c5e3..0000000 --- a/img_text/javaeett_dt_041.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - Description of the illustration javaeett_dt_041 - - - - - - - - - -
    - Java Platform, Enterprise Edition (Java EE) 8
    - The Java EE Tutorial
    - E63026-01 -
    -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - -
    -

    Diagram of URL authorization

    -
    - - -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - - - Oracle Logo  - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - - - - - \ No newline at end of file diff --git a/img_text/javaeett_dt_042.html b/img_text/javaeett_dt_042.html deleted file mode 100644 index 78470b1..0000000 --- a/img_text/javaeett_dt_042.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - Description of the illustration javaeett_dt_042 - - - - - - - - - -
    - Java Platform, Enterprise Edition (Java EE) 8
    - The Java EE Tutorial
    - E63026-01 -
    -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - -
    -

    Diagram of request fulfillment, showing server returning result to -client

    -
    - - -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - - - Oracle Logo  - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - - - - - \ No newline at end of file diff --git a/img_text/javaeett_dt_043.html b/img_text/javaeett_dt_043.html deleted file mode 100644 index 847046d..0000000 --- a/img_text/javaeett_dt_043.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - Description of the illustration javaeett_dt_043 - - - - - - - - - -
    - Java Platform, Enterprise Edition (Java EE) 8
    - The Java EE Tutorial
    - E63026-01 -
    -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - -
    -

    Diagram of authorization process between web component and enterprise -bean

    -
    - - -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - - - Oracle Logo  - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - - - - - \ No newline at end of file diff --git a/img_text/javaeett_dt_044.html b/img_text/javaeett_dt_044.html deleted file mode 100644 index 411a767..0000000 --- a/img_text/javaeett_dt_044.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - Description of the illustration javaeett_dt_044 - - - - - - - - - -
    - Java Platform, Enterprise Edition (Java EE) 8
    - The Java EE Tutorial
    - E63026-01 -
    -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - -
    -

    Diagram of role mapping, showing creation of users and groups, -definition of roles, and mapping of roles to users and groups

    -
    - - -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - - - Oracle Logo  - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - - - - - \ No newline at end of file diff --git a/img_text/javaeett_dt_045.html b/img_text/javaeett_dt_045.html deleted file mode 100644 index 81f1ea6..0000000 --- a/img_text/javaeett_dt_045.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - Description of the illustration javaeett_dt_045 - - - - - - - - - -
    - Java Platform, Enterprise Edition (Java EE) 8
    - The Java EE Tutorial
    - E63026-01 -
    -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - -
    -

    Diagram of four steps in HTTP basic authentication between client and -server

    -
    - - -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - - - Oracle Logo  - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - - - - - \ No newline at end of file diff --git a/img_text/javaeett_dt_046.html b/img_text/javaeett_dt_046.html deleted file mode 100644 index dda2f55..0000000 --- a/img_text/javaeett_dt_046.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - Description of the illustration javaeett_dt_046 - - - - - - - - - -
    - Java Platform, Enterprise Edition (Java EE) 8
    - The Java EE Tutorial
    - E63026-01 -
    -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - -
    -

    Diagram of four steps in form-based authentication between client and -server

    -
    - - -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - - - Oracle Logo  - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - - - - - \ No newline at end of file diff --git a/img_text/javaeett_dt_047.html b/img_text/javaeett_dt_047.html deleted file mode 100644 index d3d75d0..0000000 --- a/img_text/javaeett_dt_047.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - Description of the illustration javaeett_dt_047 - - - - - - - - - -
    - Java Platform, Enterprise Edition (Java EE) 8
    - The Java EE Tutorial
    - E63026-01 -
    -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - -
    -

    Diagram of security identity propagation from client to intermediate -container to target container

    -
    - - -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - - - Oracle Logo  - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - - - - - \ No newline at end of file diff --git a/img_text/javaeett_dt_048.html b/img_text/javaeett_dt_048.html deleted file mode 100644 index edc8912..0000000 --- a/img_text/javaeett_dt_048.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - Description of the illustration javaeett_dt_048 - - - - - - - - - -
    - Java Platform, Enterprise Edition (Java EE) 8
    - The Java EE Tutorial
    - E63026-01 -
    -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - -
    -

    Diagram of six steps in mutual authentication with certificates

    -
    - - -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - - - Oracle Logo  - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - - - - - \ No newline at end of file diff --git a/img_text/javaeett_dt_049.html b/img_text/javaeett_dt_049.html deleted file mode 100644 index e2d885a..0000000 --- a/img_text/javaeett_dt_049.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - Description of the illustration javaeett_dt_049 - - - - - - - - - -
    - Java Platform, Enterprise Edition (Java EE) 8
    - The Java EE Tutorial
    - E63026-01 -
    -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - -
    -

    Diagram of five steps in mutual authentication with user name and -password

    -
    - - -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - - - Oracle Logo  - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - - - - - \ No newline at end of file diff --git a/img_text/javaeett_dt_050.html b/img_text/javaeett_dt_050.html deleted file mode 100644 index 0f26de5..0000000 --- a/img_text/javaeett_dt_050.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - Description of the illustration javaeett_dt_050 - - - - - - - - - -
    - Java Platform, Enterprise Edition (Java EE) 8
    - The Java EE Tutorial
    - E63026-01 -
    -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - -
    -

    A diagram showing a transaction between two beans.

    -
    - - -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - - - Oracle Logo  - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - - - - - \ No newline at end of file diff --git a/img_text/javaeett_dt_051.html b/img_text/javaeett_dt_051.html deleted file mode 100644 index 2082a63..0000000 --- a/img_text/javaeett_dt_051.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - Description of the illustration javaeett_dt_051 - - - - - - - - - -
    - Java Platform, Enterprise Edition (Java EE) 8
    - The Java EE Tutorial
    - E63026-01 -
    -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - -
    -

    A diagram showing Bean-A updating databases X and Y, and Bean-B updating -database Z.

    -
    - - -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - - - Oracle Logo  - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - - - - - \ No newline at end of file diff --git a/img_text/javaeett_dt_052.html b/img_text/javaeett_dt_052.html deleted file mode 100644 index 1108dff..0000000 --- a/img_text/javaeett_dt_052.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - Description of the illustration javaeett_dt_052 - - - - - - - - - -
    - Java Platform, Enterprise Edition (Java EE) 8
    - The Java EE Tutorial
    - E63026-01 -
    -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - -
    -

    A diagram showing Bean-A on one Java EE server updating database X, and -Bean-B on another Java EE server updating database Y.

    -
    - - -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - - - Oracle Logo  - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - - - - - \ No newline at end of file diff --git a/img_text/javaeett_dt_053.html b/img_text/javaeett_dt_053.html deleted file mode 100644 index 1e0474a..0000000 --- a/img_text/javaeett_dt_053.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - Description of the illustration javaeett_dt_053 - - - - - - - - - -
    - Java Platform, Enterprise Edition (Java EE) 8
    - The Java EE Tutorial
    - E63026-01 -
    -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - -
    -

    Resource Adapter Contracts

    -
    - - -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - - - Oracle Logo  - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - - - - - \ No newline at end of file diff --git a/img_text/javaeett_dt_054.html b/img_text/javaeett_dt_054.html deleted file mode 100644 index 47f9030..0000000 --- a/img_text/javaeett_dt_054.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - Description of the illustration javaeett_dt_054 - - - - - - - - - -
    - Java Platform, Enterprise Edition (Java EE) 8
    - The Java EE Tutorial
    - E63026-01 -
    -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - -
    -

    This figure shows the trading example components: a deployed WAR and RAR -that communicate with the EIS over a TCP socket.

    -
    - - -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - - - Oracle Logo  - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - - - - - \ No newline at end of file diff --git a/img_text/javaeett_dt_055.html b/img_text/javaeett_dt_055.html deleted file mode 100644 index ef269d4..0000000 --- a/img_text/javaeett_dt_055.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - Description of the illustration javaeett_dt_055 - - - - - - - - - -
    - Java Platform, Enterprise Edition (Java EE) 8
    - The Java EE Tutorial
    - E63026-01 -
    -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - -
    -

    This figure shows the classes in each of the modules of the trading -example.

    -
    - - -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - - - Oracle Logo  - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - - - - - \ No newline at end of file diff --git a/img_text/javaeett_dt_056.html b/img_text/javaeett_dt_056.html deleted file mode 100644 index ee32b24..0000000 --- a/img_text/javaeett_dt_056.html +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - Description of the illustration javaeett_dt_056 - - - - - - - - - -
    - Java Platform, Enterprise Edition (Java EE) 8
    - The Java EE Tutorial
    - E63026-01 -
    -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - -
    -

    This figure shows the components of the traffic example: a WAR -communicating with an enterprise bean using a JMS topic, and a RAR -communicating with an EIS over a TCP socket.

    -
    - - -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - - - Oracle Logo  - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - - - - - \ No newline at end of file diff --git a/img_text/javaeett_dt_057.html b/img_text/javaeett_dt_057.html deleted file mode 100644 index d5cc2b1..0000000 --- a/img_text/javaeett_dt_057.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - Description of the illustration javaeett_dt_057 - - - - - - - - - -
    - Java Platform, Enterprise Edition (Java EE) 8
    - The Java EE Tutorial
    - E63026-01 -
    -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - -
    -

    This figure shows the classes in each of the components of the traffic -example.

    -
    - - -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - - - Oracle Logo  - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - - - - - \ No newline at end of file diff --git a/img_text/javaeett_dt_058.html b/img_text/javaeett_dt_058.html deleted file mode 100644 index e39de71..0000000 --- a/img_text/javaeett_dt_058.html +++ /dev/null @@ -1,83 +0,0 @@ - - - - - - Description of the illustration javaeett_dt_058 - - - - - - - - - -
    - Java Platform, Enterprise Edition (Java EE) 8
    - The Java EE Tutorial
    - E63026-01 -
    -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - -
    -

    This figure shows a batch job that contains two chunk steps: step A and -step B. Step A has the three parts of a chunk-oriented step: input -retrieval A, business processing A, and output writing A. Step B also -has the three parts of a chunk-oriented step: input retrieval B, -business processing B, and output writing B.

    -
    - - -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - - - Oracle Logo  - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - - - - - \ No newline at end of file diff --git a/img_text/javaeett_dt_059.html b/img_text/javaeett_dt_059.html deleted file mode 100644 index 7318fdd..0000000 --- a/img_text/javaeett_dt_059.html +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - Description of the illustration javaeett_dt_059 - - - - - - - - - -
    - Java Platform, Enterprise Edition (Java EE) 8
    - The Java EE Tutorial
    - E63026-01 -
    -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - -
    -

    This figure shows a batch job that contains two chunk steps, a task step -and a decision element. The job starts with chunk step A, continues with -chunk step B, and then decision element D evaluates condition 1. The -condition is based on the status of step B. If condition 1 is true, the -job terminates; otherwise the job continues with step C and then the job -ends.

    -
    - - -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - - - Oracle Logo  - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - - - - - \ No newline at end of file diff --git a/img_text/javaeett_dt_060.html b/img_text/javaeett_dt_060.html deleted file mode 100644 index 36e6894..0000000 --- a/img_text/javaeett_dt_060.html +++ /dev/null @@ -1,83 +0,0 @@ - - - - - - Description of the illustration javaeett_dt_060 - - - - - - - - - -
    - Java Platform, Enterprise Edition (Java EE) 8
    - The Java EE Tutorial
    - E63026-01 -
    -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - -
    -

    The figure shows the architecture of the taskcreator example. The -JavaServer Faces page invokes methods on a CDI-managed bean, which -submits task initiation requests to an enterprise bean. The enterprise -bean uses a WebSocket endpoint to indicate to clients that an updated -task execution log is available.

    -
    - - -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - - - Oracle Logo  - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - - - - - \ No newline at end of file diff --git a/img_text/javaeett_dt_061.html b/img_text/javaeett_dt_061.html deleted file mode 100644 index 6d579a1..0000000 --- a/img_text/javaeett_dt_061.html +++ /dev/null @@ -1,83 +0,0 @@ - - - - - - Description of the illustration javaeett_dt_061 - - - - - - - - - -
    - Java Platform, Enterprise Edition (Java EE) 8
    - The Java EE Tutorial
    - E63026-01 -
    -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - -
    -

    Architecture diagram of the Duke’s Tutoring example application. Two -clients access the main interface and the admin interface deployed in -the web container. These interfaces communicate with enterprise beans -deployed in the EJB container. The enterprise beans communicate with the -database.

    -
    - - -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - - - Oracle Logo  - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - - - - - \ No newline at end of file diff --git a/img_text/javaeett_dt_062.html b/img_text/javaeett_dt_062.html deleted file mode 100644 index 65dece3..0000000 --- a/img_text/javaeett_dt_062.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - Description of the illustration javaeett_dt_062 - - - - - - - - - -
    - Java Platform, Enterprise Edition (Java EE) 8
    - The Java EE Tutorial
    - E63026-01 -
    -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - -
    -

    This figure shows the architecture of the main Duke’s Forest projects -and how they use the Events and Entities projects.

    -
    - - -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - - - Oracle Logo  - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - - - - - \ No newline at end of file diff --git a/img_text/javaeett_dt_063.html b/img_text/javaeett_dt_063.html deleted file mode 100644 index d6c002e..0000000 --- a/img_text/javaeett_dt_063.html +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - Description of the illustration javaeett_dt_063 - - - - - - - - - -
    - Java Platform, Enterprise Edition (Java EE) 8
    - The Java EE Tutorial
    - E63026-01 -
    -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - -
    -

    This figure shows the interactions between the Duke’s Store and Duke’s -Shipment projects (using REST and HTTP), and between the Duke’s Store -and Duke’s Payment projects (using REST and HTTP).

    -
    - - -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - - - Oracle Logo  - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - - - - - \ No newline at end of file diff --git a/img_text/javaeett_dt_064.html b/img_text/javaeett_dt_064.html deleted file mode 100644 index beeeb58..0000000 --- a/img_text/javaeett_dt_064.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - Description of the illustration javaeett_dt_064 - - - - - - - - - -
    - Java Platform, Enterprise Edition (Java EE) 8
    - The Java EE Tutorial
    - E63026-01 -
    -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - -
    -

    This figure shows the database tables in Duke’s Forest and their -relationships.

    -
    - - -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - - - Oracle Logo  - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - - - - - \ No newline at end of file diff --git a/img_text/javaeett_dt_065_frmcmpnt.html b/img_text/javaeett_dt_065_frmcmpnt.html deleted file mode 100644 index f1a1086..0000000 --- a/img_text/javaeett_dt_065_frmcmpnt.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - Description of the illustration javaeett_dt_065_frmcmpnt - - - - - - - - - -
    - Java Platform, Enterprise Edition (Java EE) 8
    - The Java EE Tutorial
    - E63026-01 -
    -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - -
    -

    Form with User Name and Password text fields and a Login button.

    -
    - - -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - - - Oracle Logo  - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - - - - - \ No newline at end of file diff --git a/img_text/javaeett_dt_066_slctmny.html b/img_text/javaeett_dt_066_slctmny.html deleted file mode 100644 index be6da0f..0000000 --- a/img_text/javaeett_dt_066_slctmny.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - Description of the illustration javaeett_dt_066_slctmny - - - - - - - - - -
    - Java Platform, Enterprise Edition (Java EE) 8
    - The Java EE Tutorial
    - E63026-01 -
    -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - -
    -

    Check box group, scrollable box, and unscrollable box.

    -
    - - -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - - - Oracle Logo  - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - - - - - \ No newline at end of file diff --git a/img_text/javaeett_dt_067_slctn.html b/img_text/javaeett_dt_067_slctn.html deleted file mode 100644 index 827c49b..0000000 --- a/img_text/javaeett_dt_067_slctn.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - Description of the illustration javaeett_dt_067_slctn - - - - - - - - - -
    - Java Platform, Enterprise Edition (Java EE) 8
    - The Java EE Tutorial
    - E63026-01 -
    -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - -
    -

    Options, check box, and lists.

    -
    - - -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - - - Oracle Logo  - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - - - - - \ No newline at end of file diff --git a/img_text/javaeett_dt_068_txtcmpnts.html b/img_text/javaeett_dt_068_txtcmpnts.html deleted file mode 100644 index c13287e..0000000 --- a/img_text/javaeett_dt_068_txtcmpnts.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - Description of the illustration javaeett_dt_068_txtcmpnts - - - - - - - - - -
    - Java Platform, Enterprise Edition (Java EE) 8
    - The Java EE Tutorial
    - E63026-01 -
    -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - -
    -

    A form. "User Name" labels a field. "Password" labels a password field. -"Comments" labels a multi-line field.

    -
    - - -
    - - - - - - - - - - - - -
    - - - Contents - -
    - - - - Oracle Logo  - Copyright © 2017, Oracle and/or its affiliates. All rights reserved. - - - - - \ No newline at end of file diff --git a/overview.html b/overview.html index 104eacd..4c0fc8d 100644 --- a/overview.html +++ b/overview.html @@ -55,6 +55,9 @@

    1 Overview

    +

    Welcome to Java EE!

    +
    +

    This chapter introduces you to Java EE enterprise application development. Here you will review development basics, learn about the Java EE architecture and APIs, become acquainted with important terms From 0dbdeec8eea0e7c3d958309104ad8afe14261ef5 Mon Sep 17 00:00:00 2001 From: "joe.ruzzi" Date: Wed, 2 Aug 2017 12:52:27 -0400 Subject: [PATCH 7/8] Update site --- overview.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/overview.html b/overview.html index 4c0fc8d..380e288 100644 --- a/overview.html +++ b/overview.html @@ -55,7 +55,7 @@

    1 Overview

    -

    Welcome to Java EE!

    +

    Welcome to Java EE! next.

    This chapter introduces you to Java EE enterprise application From 568515bebd7c262fa8759df23fdae53a51dd63da Mon Sep 17 00:00:00 2001 From: "joe.ruzzi" Date: Wed, 2 Aug 2017 16:20:51 -0400 Subject: [PATCH 8/8] Update site --- overview.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/overview.html b/overview.html index 380e288..4c0fc8d 100644 --- a/overview.html +++ b/overview.html @@ -55,7 +55,7 @@

    1 Overview

    -

    Welcome to Java EE! next.

    +

    Welcome to Java EE!

    This chapter introduces you to Java EE enterprise application

    ^co@1tDgjgB72(8T7&z&yZZdGq%@`44--`{3;QlQ^9o#frj=xzI+ zuKRJx^9A|CXRO7u3Exhba6{$%b@ed(`K6h_SW7@jGX$U%u@Gn*lLhSjd1Ro~h9aeW ze1Ej%_gWD9V=f{nGK&W7WjxV+FqqA=st1V{*uf&ut+YP^5Eav@=KhGr|6EXk>6bfI zcwLe3qJ$H?+}7ZZIDxC1x!|Jj!Ts-Qst$42DwsK5?kULoaF3EOa0(X ziW4W5BXoXnWZ^W=o|2_&BR?)YmO%K+@=itGN_Qr8r!ey~4<5Su8ws%aD!hh^hCHp` z@?0y{wRmRDCyJw`-a`Js*D+8Q-&SX$aPQ@x#p_ zqWIcokFS}?&6U|$?Vi62E|pmSV?I&ChN)jP?0k5IBXWN4_VDwmdS?UAoa9u{?xuQO zzBVa6$?Gy+@K0QfPGDlpHpa?NlDDj6Tdlj(y4a8Pgzzm4wRqJG8vmBO%-0ut^A&hS zcvbuyUvU;IkADUWO)xE$7910j9-m4xa5K_y#+a>rEur*V%DeMyA#qTsPZ~ghs5hA6@)nJr|No@xR&b$)-iev48}4Z95L99#J`Uh z{P!F+e841qCnrl8PxwNL`>1MMnUtgy# zYu&l{IH7Fzd{tgQ!yGzIDQ9AxIV()pqv&czcu13tjaO`XfWgfqueAXImzVn`R3tDF zy;c^Au77$RUAI8SYaEexnojGV6{6Vs_uy0AqV!Lx=nfcIzMR*|XZqXE7BrtJ@pAeJ zKbkbx!FsRT(`@7B`#|@r19NGq$Mo=D#Q5D|tow1noz2UsPqJ3S3tRW3eJYbS-%W*A zM1j}pK-v}B`q=oCrjmm6vyOEP9UCK4&fFtMJbRjT*GBFOyt51P+P>& zpRtx*XDx=65znjIZ~qaIw_`_gF27&S>x$`>4RyA|FE41fLpSTppz zx)+U4iO{8RuD~M`hB&9}MRh1iG*@_{IFhb|p{aUv-%lu^#4cZ8D%xi`b%7pl<(dVn z1emtRhulvj${;e05zqHy#{6xCkF@3Xhb_0Kq$Psql(o{~*IUG?6>lDbBxy(H)%Sr| z`9emm;v7ft$|~NA&i7x)Pxu;yG`!^|x)*$=Gg&h0!VmdFq^ZSgqih6b^e#N&ACLhX zFKdbLl%_Sbi+E)uz`uua=>QBCvbA%-Ra;FhdDm!sODLmbT8e zGSGkxdJDC>g&8#tT<;9XE87s1QHtm;ZFB6c=vMai8QOiL;`O}c#%EwJk~TvwO)Xy1 zzEozg=POc{m1rKMX{Qgz%cT`osMfGs7NCoA0RXeCP;MA#xd%X@wY^0zi1P-I?c0$C z0C*EyGx$IYlllwfpuM1mGRFk4e%10&|!3I-dJRgxCZJHu0jR}ld9EP9p$h@001_~wF+%&^{K zVvLh5>Luz|egiSq@s76T%jy@U8ua7WqRqiQ3Tn|&M-INzc}} z(ec6;q=LbwjUX+^M;%^x#ozCyXfWyMLour)EnJo}PO0$9x&&M3mUb%#(Ei+Ct+st# z-krF=%rp45_MOQM^<55Rt9-~yDC6~z(p7W6w7s+j&_%^2O8$bpEAwaK>pM3Dpj2!ovlIoNJ(2Zt%qMaH0$8|~5y=$Q4KN|bBJ2Mq_=8JX1t zFB5p|EJj70ASXK-Y3t?V`=dGNEyS|Q3_)Q(03<4A(FNM`C{z8{)#Ekhy^X|^I_O>LvpS-h!COK+u*02v8r~ae_zt%o|Ckt=7nF8x11?S-X`cU< zB`z`@`^sWl_iMwex_0cV4AUpS$Cpm5{KI&?i8t{-7ylJt0NR5a-8IjVWdHyG07*qo IM6N<$g85^O(9^6wa(`2^7s)E5#{do)8g>hh!_Z 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 literal 0 HcmV?d00001 diff --git a/img/javaeett_dt_041.png b/img/javaeett_dt_041.png new file mode 100644 index 0000000000000000000000000000000000000000..4bb074ccc605c26fee2f33ee254b26705cc3aa1e GIT binary patch literal 7192 zcmV+z9OvVSP)d4#d*5vWJ(deka*x~H;?)3S$&*y}e zsnp`|zSQa7>GZbG=DpMD_xJayw#3rm@agdPJ2^bL(dV_!=CjS^&(F`0wc5DN<9B<4 z-01V_@%X>g>P=f}bc>_T-tN%g@2SP(caP#o6mUMozZ0wU)Wuywm8!!^Et} z5e=C#b?b%Bhx z(B{|W@kUKougc{zE-$&v-n`Q2)7|LgG1XXOHx|m;o)p*YCt_cztri{)6_&n zNvN^95fKrJh={Sl(W$=CdwF@n*6O0IxV_QkSzTnq*z0t3b-1{=xzOmu*zBjo;xaNa zmzS55t;bVYV#V0&i>AW9)au&W+SJt5vdiYk(b@3u@HRF&m8rg)yx!;U_rAZty3pj9 zp{pSwAqx!;USelqZhBjAgB83QQBzmQ&eSV1I^*c=VPt5#(&=7XTWW1{w7I^Nx7&h}qkxpCnY!CgU2Bt>pC2VF zpTFOnskSvgNxswRwa(|Dz~JHG;f|W8kCvX_=IdZ{hJcu{8XO+X+2py<=f2P2#MkR@ zf|tD0>5-+mzRJ}W8Xm{iEDR10nWweD)#;M9+vM)`ilDZHiIBI& z)2_9=X@8aD?e&?eyGTb$wZ6zzVQjtA=*HRWSz~R<%+5JDJH^S)pTFS2$IP9$)3?s& zp}N$|-R-*3=e^SDeua*=&*oNUb~HK>!vFvnu1Q2eRCwC#-3?q+Wx4=xW~TQw1w+I& zH5dFS7Za5*gsB3x_xYFxPGkR=3Z~R_j+&JKJUjlbIzGFpAKVuJUS=l%;c~BJoCKo`<(Y+NJww= zMsM^+Z}djM-24C1lJ z9(w@d5f-737^d}d2a7ut9+P{yec&GJJGU~udm{G~C3o0$aZhu_tx-)LdE`&sg}d-N zxUc!bJSydwu+Oa^*9pMAFi)teG?or&;!osvXm3^)BvhIhB*UaaOGI&&t;?tFA)8Tx`8 zW~Z#&6IFe60J{3lJ6Eegd%^{@@|!3q-7!}Ssz$~{BjNmK`-O;zk^5st9$hsuCLT_F zI81Auy*AqGWsFYeK5Zt!++&qhK~S`-qh zuY7^Nh>A*HjgEwceIpQVR6u5es0w{^IjU+uF}>B^-IcqK zlABLWo<=DD#4`e#osl9WMRb(b8bVNjaxD8Hx5|36%JwZkBR#p>PdaJyddAH+!RLSjfS((ARCfdu& zAzpS(yhv{acsJyB(=-WRxKO@|*XDNBq*5((l+{F$-mbmx?l#;SEx{jaai>jDbi94y zb}rsd=`AlO4)E`FLvA8J-HXV;?};Ni1EiK z{-}r_sp5A(`kgHPgZy$1W-fByl=%=Td;fqz{r96r{U2M9eWg|Pu3T~6G@w`@TwBtq z+)K0X_)i|CuH!B@@lzIe(Ep8o`DcIY98JG%I`GO}zQs@7MJ~%kDZBIT=>xUyzTrck z0^Ei0fy*HOF=SW31VTw1>F0`kq{h-u6MT&3lTQ$QcG%|yR;lC~(Vse(TX(PJ`#kz8 zB2*p*Md%fA6N_?|HnDM6*p*9?=Cd5x^VCCn-{K~BvC)Zp6yqN1l6#0t?mHda4|LAe zW?#8Oz23ylIaX+i_X5d3RnY)k3-7a$X z6S;RfxaYdyc6fj1x%Eo!bR+EnZW{t1TX`yR#Z!}|Eo2cft zVHJ0+#ei)b#fC*188`QKBshTY>J0AfYVJQ&3+?U6XyueE)dCwUC!hk6`x9a0TU)oG ztz*$!cgOrvncip~Z#1g7>6O*=T+gDp>56~Ny)XUf-j`W)@5=(hy-oNKrY1QZ z!+;yIyGB5-O`eQu5So2U2|{nM&aSF2fGToxO=V@Cxf7A%UrSVTN9J!*Wp|EsH`Ehz zZC_l2Geh&NI45+s8C%W3O`d>r9>xiwR*Y?s-HBG*oOqMSt=E^c@&Vkh0{Dq%KgVZ2 zFG!J=ngavOO(R~-{quZut);-oV%TQr!8y6xTS6@2M+=_ znF)SH_P#6>_r8R!Mi-!%>?}Z}nxGgu^WMIla+ka{XwbZp$!Ok|5oq3>XdZ9IXmD>% zFAJ$COEi^Lgp{nv1xk|1@DR_f$z4+d-;z?ta}91?F~*-7BW2vUM&zCj_S2z^STP(E za40-6Ot(T6A(e#ww(qvr+cdcswYRswN()L6emeCf{J}B`?mM^MAMSB==IZ5@WbaD~ z+xt==9lsUuNB<-9E_V)+$ofMoakMI zmlb`E@zeC%ur{#Vv|YGG&dq0nWbaF5J`$=^-a+p~MI~QATPN)NMj+ffgwLRwjLc!h z1fBoe<%>0!(7ef<`%dLlURJx)OE^0%&=NO07m`_q&>F{c{vNIDZfVVz*X}c0%Kci$#fu#sgnKgKp3S?wV>N2G9VqRN6!OLXcy(&H) zt%9ld6Tg8czr2Jl0{0tRUPEt;P)_A#+(5Y^-DFBn4@sxB8)^lNkNjLIC?}%QM3k#| zkD5FGW2bqyiOjn*L;J$Kr0;Gh7Pa+#VJ?z~L)jCUZ5zlVhs;b2c`%?_%{B#h3gI3O z-T;1P`Ij(Yo*-*XBHr2DgL(0Gv|ttMO0jJswyDI%3Avh~xDdTv#ZBBy$i8_6OutJ* zO4HFkI8_1V1BLK&P)tfPLpGNo`Fl)WEOXp0<5dewr?q7{yJ894!`~&|;a?U(B#}8G z5%-7NwfDx!G_<%C%Xp1-Je><}=Qq7E?`g72NAVt4m8#73e^q&1-V*mN@P-8cD;r-c z(-`>w_`|LDz`aDy&6n|no22)K3J;a$$ISOPbALqWks?QF;- zla#a*FLXAyRJ>Ky#Bqs1ncfcXLGp{y@xkkvsJVUeE@%56+UC6eI`MuNPhvwR2Os^A zA%NZ+r_qpc-{z^BsM1?3CwD7$Tgd9ucad8L&bU+B<_rYyUBiE|{DYz*V^NYQ?kBek z?~U_mD7iJNiE^+M)7#mbflrfvV1mKzzM5!y8zgS(4cr4MIA13{)y}~C`^l~MjoYc3 zXr}jEXK%LQLiR`c9?GVmAKcz~GjfT0?ONsy73HgY&WvLvrM=K!ZcXovmuM)s7ptp@ z^I)m;cHEOMg3JF%-$U6H^orX z%^3{d0FG0QMaI8kGm%9dSW=Gch zgT*Dhz>XobPg`11W+F{NH{99(;xV3giqz**)v=mw76k6W1bpBmT2dwrC$kg~cf(ze z?RtF;xjg2s-b~lfIM@@I!InDarxVaY6 zJV8&c8v%C?Znn4q4<+y!R zL+`!7!Plgj*8sOA$Lc1-gUf9q9X=@GD@yp0 z_5RBCnR3^Zup{Hn^<2AsNpBgq>OKZ3z1t4;@9zNr7?W8F5vSY+SH(Lq$E?TpJgeRc zW!!EBcQ|QtJ!WoXTa8|jElP|9-ok@f!IYm}bLj^vG-%er zvK_rrdJ}HyeLpGP%g@kR3WPguy|u=gpf~5#=IB}dp|zU~psuDV!Q>9kc6wDc8Ld@K zG}626P+@-xPTkJjzm`l3*NWUOymPGBqED~_Fix;oYT(*>xiuHp8)JayzEpj=|DZdZ$rt;$4WdA;YsVA2kPaZogNS zDsFni+OY1-?Ol4eOO{!FE ziAehad4o`6f8h0S`;y*mQ?s%tH(MW`q2nfyJGkrVrhR{qEwwj>TiO`N8-B|DfFbVp z2l~P7LwdJ0Wo2>jrAybpw44r`ATDv&Tbu1<)Ba7qb36L7FK(wXF*w{LWl0LlvYYh; zS(~ub?f$?(ayvRF;%LdZMetL2DW9lF+&R|W;AO7WlPu5E>**eSGkj&^UDrIvX;=W& z;#v!R$!e>IPsJzM_@kcsR*iO2x zyRprhAfDEfdn8CFww}DfF5lf8T<)N*DxFvI?nX<(&B0|wMb4c=xNQm44i1!CPq}H= zl{mB0^c?NSl9#l&cLrzPedD+l>CHMP%F&W>$7RLg!~dI=wf?jyzD`!V;n-|eWH+Ow zT~|eR+px`I$*aGi+(GV{h;u>j$_eL=i^KSXb6MxGnB#cc~JnL?W+tO3G73nQ+3@S#;_VBg`*KzKXr|~I?J4@mYwUBwYO)t$%Y;>Okw%K{t zHBUTE9+qYpO6eQmvAbECnUJ6OGk0$H<@S)?QaJ%`2*Q0Xt{9)jacXXtYfI%BVe$R>SPSnlw9wZ+bC zg}75QFx)QETe-HJ$+#g}iep=j;gjp!a2vV^H|xF1?#ND0H)WPo@Y^fNt82B@kMz3w=I0&)aEvH74A~S9oe~L$E&?W;^v*%O#Yq#aeEjonRo1r zIgI=C$#pH`&*61EzU~a}9|ns%L~%zpUDhWeiCb*C^7jOaTYEC7SnLc1ZV2H1_S2J} z78ifY2Tm8<{(6@)?pZy;{H@{b#zFKCoOI_H2aVyhXRZf_9?2ND9r`~&?1Lo&icqLzS=oL5j_4v-s{(6CH zL7JHWsN#-nHZ$S(YSUNuAt>DZJ%Qua9xdhNJ9fsQLtnoS;)i($_B7+3>XO^=o#zhh zygR=RA)z%=ix(xi9W58DdndywH-LZrKK}ODv176L*l~~C2EVz(x+1r^IH@tap}0_k zJ2l_eauPdZ>eQ)3d^{~G<9Q`_%WddU+~^=2k_4TuRX}w*ol!syjr<7N-HK2vya)ba zbX88|-mwR!(l|8!7>V)Ead5ZXK6{t5A5t9_-37TDgw|}5#iYeU zo!XEDCw0i2WJHawXD3qm7P+VL(jAN6r$c9xTW&)S;?6G?pm;axglwHITS!8wNs&qH z2;72^)Yul>5_^bO^7lP(`v~5px#4%Vxk1MkMY>eL&*n#z zO^maVjN4I89(5`wFkHqSXlkO`#Vy|+`?jT+)^P}r+=iaQO&JdYsj;y!sWm@U*Vu~K zQ7gN(%ZXIJW6w5`nA(K@4Ca5vypnst?F)EU<}Pl?Zpdnb*Gy4eBk!VyL=~&em#SmmlIX_ro(0Im>Dx>5bW{4CNZ8@ z@}?PHb9)2c!?@Mu+u=>QN$_P3ujD>)dlv6$+>Y|C@|L(sj;}v_Sgb5Qa(e*p+T6wl zjh3Lf(cN>Ye6!(Fnx4dtIUsq@IB*>M&FvPvd;*P>F3H`BS`Qi<%#2%s1h#J{9#iKWHpXK0? z<1Epyi(8Ytd=`z2uE?E=_!p!<(uf+ffuD7ySdS2rUZ`^}F8or1a(dDy_TjTEB=P`o zJO9AhF3fF2^qLK1aW*Z{K+U;%k1$dYBDJ_3!==MJ_Te#O#wf+9`Pu8{mdlr4qmj`y zYqycM1e2ufmbht;5MCk|e4M$pyeYRsTp|xBx1lR@L$OFbXcUSIrP|H7jXKsNj1*d1 zA-&nfGf&(0AVsXHpphnb0vJnB#q>k*n8bdfMktaG|7FCQ-X z^m}pa!!mCf`Iye&p3-Ahl`f_ygMs^Dl{hu;w(;ba_@f}j@6FC$=hV{8{gtJRqTjj+zWdkx6)f$?~IbJr?LG$Y=i93 zr|1n+?1t{}@JjL%XGoBr_()>Ih720~ue)@L0gC96++KJyaOzF&D48jF%fPk7HOU=O z*(14S-lLtpof3SgBEc#6LKV1NJf)Z0jrXGpZ+Ss+N^mD|hq#pEoIItM+qJh=L2*iO zPv8!5$y}}8W4S$eJ14j%xRbb?T&~U|yvK4=@7tLkTac literal 0 HcmV?d00001 diff --git a/img/javaeett_dt_042.png b/img/javaeett_dt_042.png new file mode 100644 index 0000000000000000000000000000000000000000..3b74357bf2e51870284093475df8e0699eaefb55 GIT binary patch literal 6846 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 literal 0 HcmV?d00001 diff --git a/img/javaeett_dt_045.png b/img/javaeett_dt_045.png new file mode 100644 index 0000000000000000000000000000000000000000..57e97147df5da745370fbe555c34067fa956e4b5 GIT binary patch literal 11573 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