<h2>Java Servlets - JDBC, JNDI a dßtovΘ zdroje II</h2>
<p id='prepend'>V ostatnej Φasti naÜej sΘrie som predstavil mo₧nosti vyu₧itia technol≤gie JDBC v spojenφ so servletmi. Ukßzali sme si ako nastavi¥ potrebnΘ parametre, ako sa pripoji¥ k DB a ako polo₧i¥ dotaz. V zßvere Φlßnku som naznaΦil, ₧e pri pou₧itφ JDBC m⌠₧u vznikn·¥ urΦitΘ v²konnostnΘ problΘmy a ₧e existuje rieÜenie. Tak sa po∩me na to pozrie¥.</p>
<h3>DßtovΘ zdroje a Tomcat = DBCP</h3>
<p>Implementßcia <em>connection poolingu</em> m⌠₧e silne zßvisie¥ na konkrΘtnom aplikaΦnom prostredφ. Ke∩₧e pri pφsanφ tohto serißlu vyu₧φvame Tomcat, chcem vßm predostrie¥ rieÜenie problΘmu s JDBC na tejto platforme. Pri prßci s databßzami a Tomcatom sa odpor·Φa pou₧φva¥ nßstroj <strong>Database Connection Pool (DBCP)</strong>, Φo je tzv. <em>connection broker</em>. Ide o Φas¥ projektu Apache Jakarta, ktor² nßjdete na adrese <a href='http://jakarta.apache.org/commons/dbcp/'>http://jakarta.apache.org/commons/dbcp/</a>. Momentßlne je vo verzii 1.0 a mal by by¥ s·Φas¥ou vaÜej k≤pie Tomcata. Nachßdza sa v <em>/common/lib/commons-dbcp.jar</em>. Prφpadne si ho m⌠₧ete z horeuvedenej adresy stiahnu¥. V tom istom adresßry sa musφ nachßdza¥ aj s·bor <em>commons-pool.jar</em>. Ak nie treba ho stiahnu¥ tie₧.</p>
<p>AkΘ s· vlastne v²hody DBCP? Prvß a najd⌠le₧itejÜia je, ₧e zabezpeΦuje samotnΘ zdie╛anie a mana₧ovanie databßzov²ch pripojenφ. O to nßm samozrejme iÜlo. ╧alej DBCP je schopnΘ spolupracova¥ s ak²mko╛vek JDBC driverom a plne vyu₧φva¥ jeho mo₧nosti. DBCP spσ≥a nariadenia normy J2EE a v neposlednom rade je integrovanou s·Φas¥ou Tomcata. Samozrejme ho m⌠₧ete vyu₧i¥ aj v in²ch prostrediach.</p>
<p>UrΦitou Φrtou DBCP je, ₧e vyu₧φva Java Naming and Directory Interface (JNDI) technol≤giu a preto je nutnΘ najprv vytvori¥ JNDI zdroj. Aby ste teda mohli vyu₧φva¥ connection pooling a Tomcat musφte urobi¥ tieto tri kroky:</p>
<div class='list'>
<ol>
<li>Definova¥ JNDI zdroj v deskriptore webovej aplikßcie - wwb.xml.</li>
<li>Namapova¥ tento zdroj na skutoΦn² dßtov² zdroj, resp. databßzovΘ spojenie.</li>
<li>V aplikßcii vyh╛ada¥ referenciu na JNDI zdroj a zaΦa¥ vyu₧φva¥ zdie╛anΘ pripojenie.</li>
</ol>
</div>
<h3>Definovanie JNDI zdroja</h3>
<p>V prvom rade potrebujete referenΦnΘ meno a malo by zaΦφna¥ na <em>jdbc/</em>. Nßsledne treba do <em>web.xml</em> vlo₧i¥ znaΦku <resource-ref>. Postupujte pod╛a uvedenΘho prφkladu:</p>
<p>ZnaΦka <res-ref-name> obsahuje referenΦnΘ meno zdroja, <res-type> definuje ₧e ide o JDBC dßtov² zdroj a <res-auth> Üpecifikuje, ₧e autentifikßcia je zabezpeΦovanß servlet kontajnerom.</p>
<h3>Definovanie dßtovΘho zdroja</h3>
<p>Teraz je nutnΘ editova¥ s·bor <em>server.xml</em> z d⌠vodu vlo₧enia informßciφ t²kaj·cich sa databßzovΘho pripojenia, ktor² sa nachßdza v adresßry <em>conf/</em>. Tieto informßcie je mo₧nΘ vlo₧i¥ bu∩ do Φasti <DefaultContext> alebo pod vlastn² <Context>. V prvom prφpade bud· informßcie dostupnΘ pre vÜetky web aplikßcie na vaÜom servery a v druhom prφpade len pre vami urΦen· aplikßciu. Ukß₧eme si na prφklade pou₧itie druhej mo₧nosti:</p>
<p>Nadefinovali sme teda Ütyri parametre: <em>user, password, driver</em> a <em>url</em>. Zßrove≥ sme prostrednφctvom atrib·tu <em>name</em> namapovali JNDI zdroj na skutoΦn² databßzov² zdroj uveden² v parametry <em>url</em>. Myslφm ₧e je samozrejmΘ, ₧e referenΦn² nßzov JNDI zdroja <res-ref-name> musφ presne odpoveda¥ hodnote atrib·tu <em>name</em> uvedenΘho v elemente <ResourceParams>.</p>
<h3>Zφskanie a vyu₧φvanie zdie╛anΘho pripojenia na dßtov² zdroj</h3>
<p>Po vytvorenφ JNDI zdroja a jeho namapovanφ na skutoΦn² zdroj nßm u₧ niΦ nebrßni zaΦa¥ vyu₧φva¥ v²hody connection poolingu. Ke∩₧e vyu₧φvame JNDI na vyh╛adanie zdroja a prφstup k dßtam, musφme importova¥ balφΦek <em>javax.naming</em>. ReferenΦn² nßzov zdroja, ktor² ste uviedli v <res-ref-name> musφte uvies¥ vo vaÜom k≤de. Aby ste mohli zaΦa¥ vyu₧φva¥ dßtov² zdroj asociovan² s referenΦn²m nßzvom, musφte najprv zφska¥ tzv. JNDI kontext pre web aplikßciu. Postupujte pod╛a nasledovnΘho prφkladu:</p>
<p>Ak u₧ mßte objekt <em>Connection</em> m⌠₧ete ho zaΦa¥ vyu₧φva¥ presne t²m ist²m sp⌠sobom ako ste boli zvyknut². Nasledovn² prφklad je upraven²m prφkladom z predchßdzaj·cej Φasti serißlu.</p>
<div class='sample'>
package interval;
<br />
<br />import javax.servlet.*;
<br />import javax.servlet.http.*;
<br />import java.sql.*;
<br /><strong>import javax.sql.*;</strong>
<br /><strong>import javax.naming.*;</strong>
<br />
<br />public class DBServlet extends HttpServlet {
<p>Rovnako ako v predoÜlej Φasti aj tento prφklad ilustruje len pou₧itie nieko╛k²ch zßkladn²ch objektov a ich met≤d. Prφklad konΦφ v okamihu naplnenie objektu <em>ResultSet</em> v²sledkami dotazu.</p>
<p>╚asovo nßroΦnΘ operßcie vyh╛adania databßzovΘho pripojenia prostrednφctvom JNDI s· umiestnenΘ v Φasti <em>init()</em>, tak₧e bud· vykonanΘ len raz. Ke∩₧e premennß <em>ds</em> m⌠₧e by¥ potencißlne zdie╛anß medzi jednotliv²mi vlßknami, prφstup k nej je synchronizovan².</p>
<p>T²m by som dneÜn· Φas¥ uzavrel. D·fam, ₧e u₧ nebude pre vßs problΘm vyu₧φva¥ vo vaÜich aplikßcißch connection pooling a t²m zdvihn·¥ ich v²kon.</p>
<div class='refer'>
<h3>P°edchozφ Φlßnky</h3>
<ul>
<li><a href='http://interval.cz/clanek.asp?article=2640'>Java Servlets - JDBC, JNDI a dßtovΘ zdroje I</a></li>
<h4><a href='http://interval.cz/redirect/redirect.asp?what=interval_booknews&url=http://interval.inshop.cz/inshop/scripts/detail.asp?ItemID=226'>Hacking bez tajemstvφ: Java a J2EE</a></h4>
<li><a href='http://interval.cz/redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=2752'>Java a 3D grafika</a></li>
<li><a href='http://interval.cz/redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=2694'>Czech.NET Forum - diskusnφ f≤rum v ASP.NET</a></li>
<li><a href='http://interval.cz/redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=2767'>Zprßvy z Proffesional Developers Conference (PDC 2003)</a></li>
<li><a href='http://interval.cz/redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=2702'>KonfiguraΦnφ soubor v PHP, tentokrßt ve formßtu .ini</a></li>
<li><a href='http://interval.cz/redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=2561'>Internet Explorer 7 se jmenuje MyIE2</a><div>143 komentß°∙ </div></li>
<li><a href='http://interval.cz/redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=1328'>XHTML v praxi</a><div>124 komentß°∙ </div></li>
<li><a href='http://interval.cz/redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=2714'>Prvnφ Dobr² web v ╚echßch</a><div>87 komentß°∙ </div></li>