home *** CD-ROM | disk | FTP | other *** search
/ PC World 2003 December / PCWorld_2003-12_cd.bin / Novinky / Interval / clanek04.htm < prev    next >
Encoding:
Extensible Markup Language  |  2003-11-04  |  17.6 KB  |  232 lines

  1. <?xml version='1.0' encoding='windows-1250'?>
  2. <!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>
  3. <html xmlns='http://www.w3.org/1999/xhtml' xml:lang='cs' lang='cs'>
  4. <head>
  5. <meta http-equiv='Content-Type' content='text/html; charset=windows-1250' />
  6. <meta http-equiv='Content-language' content='cs' />
  7. <meta http-equiv='Cache-control' content='no-cache' />
  8. <meta http-equiv='Pragma' content='no-cache' />
  9. <meta http-equiv='Expires' content='0' />
  10. <meta name='robots' content='index, follow' />
  11. <meta name='description' content='Interval.cz - Internetov² magazφn o webdesignu, v²voji webov²ch aplikacφ a e-komerci. VÜe podstatnΘ o technologiφch XHTML, HTML, CSS, DHTML, JavaScript, XML, .NET, ASP, PHP, Java, J2ME, SQL, WAP...' />
  12. <meta name='keywords' content='Interval' />
  13. <meta http-equiv='imagetoolbar' content='no' />
  14. <meta http-equiv='MSThemeCompatible' content='no' />
  15. <meta name='MSSmartTagsPreventParsing' content='true' />
  16. <title>Interval.cz - denn∞ o tvorb∞ webu a e-komerci</title>
  17. <style media='all' type='text/css'>
  18. @import '__services/styles/interval_articles.css';
  19. </style>
  20. </head>
  21. <body class='interval interval-articles'>
  22. <div id='page-header'><div id='interval-logo'><h1 title='Interval.cz - denn∞ o tvorb∞ webu a e-komerci (logo & index link)'><a href='http://interval.cz/redirect/redirect.asp?what=interval_offline&url=http://interval.cz'>Interval.cz<span></span></a></h1></div><div id='advertising-page-header'></div><div class='page-maker'> </div></div>
  23. <div id='page-topmenu'><h2 class='textversion'>Navigace</h2><div id='page-mainmenu'><h3 class='textversion'>Hlavnφ menu</h3><ul><li class='first selected'><a href='http://interval.cz/redirect/redirect.asp?what=interval_offline&url=http://interval.cz'>Titulnφ strana</a></li><li><a href='http://interval.cz/redirect/redirect.asp?what=interval_offline&url=http://interval.cz?idcategory=14'>Webdesign</a></li><li><a href='http://interval.cz/redirect/redirect.asp?what=interval_offline&url=http://interval.cz?idcategory=15'>V²voj aplikacφ</a></li><li><a href='http://interval.cz/redirect/redirect.asp?what=interval_offline&url=http://interval.cz?idcategory=18'>E-komerce</a></li><li><a href='http://interval.cz/redirect/redirect.asp?what=interval_offline&url=http://interval.cz?idcategory=17'>Nßstroje</a></li><li><a href='http://interval.cz/redirect/redirect.asp?what=interval_offline&url=http://interval.cz?idcategory=16'>Magazφn</a></li><li><a href='http://interval.cz/redirect/redirect.asp?what=interval_offline&url=http://diskuse.interval.cz'>Diskusnφ f≤rum</a></li><li class='right'><a href='http://interval.cz/redirect/redirect.asp?what=interval_offline&url=http://interval.inshop.cz'>Knihkupectvφ</a></li></ul></div><div id='page-mainmenu-maker'> </div></div>
  24. <div id='page-body'><div id='page-left'><div id='article'>
  25.  
  26.  
  27.  
  28. <h2>Java Servlets - JDBC, JNDI a dßtovΘ zdroje II</h2>
  29. <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>
  30.  
  31.  
  32. <h3>DßtovΘ zdroje a Tomcat = DBCP</h3>
  33. <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>
  34. <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>
  35. <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>
  36.  
  37. <div class='list'>
  38. <ol>
  39. <li>Definova¥ JNDI zdroj v deskriptore webovej aplikßcie - wwb.xml.</li>
  40. <li>Namapova¥ tento zdroj na skutoΦn² dßtov² zdroj, resp. databßzovΘ spojenie.</li>
  41. <li>V aplikßcii vyh╛ada¥ referenciu na JNDI zdroj a zaΦa¥ vyu₧φva¥ zdie╛anΘ pripojenie.</li>
  42. </ol>
  43. </div>
  44.  
  45. <h3>Definovanie JNDI zdroja</h3>
  46. <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>
  47.  
  48. <div class='sample'>
  49. <resource-ref>
  50. <br />    <res-ref-name>jdbc/CustomersDB</res-ref-name>
  51. <br />    <res-type>javax.sql.DataSource</res-type>
  52. <br />    <res-auth>Container</res-auth>
  53. <br /></resource-ref>
  54. </div>
  55.  
  56. <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>
  57.  
  58. <h3>Definovanie dßtovΘho zdroja</h3>
  59. <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>
  60.  
  61. <div class='sample'>
  62. <Context path="/dbapplication" docBase="dbapplication"
  63. <br />        debug="0" reloadable="true">
  64. <br />  <ResourceParams name="jdbc/CustomersDB">
  65. <br />    <parameter>
  66. <br />      <name>user</name>
  67. <br />      <value>sa</value>
  68. <br />    </parameter>
  69. <br />    <parameter>
  70. <br />      <name>password</name>
  71. <br />      <value>passwd</value>
  72. <br />    </parameter>
  73. <br />    <parameter>
  74. <br />      <name>driverClassName</name>
  75. <br />      <value>com.informix.jdbc.IfxDriver</value>
  76. <br />    </parameter>
  77. <br />    <parameter>
  78. <br />      <name>url</name>
  79. <br />      <value>jdbc:informix-sqli://IP:port/database:INFORMIXSERVER=ol1</value>
  80. <br />    </parameter>
  81. <br />  </ResourceParams>
  82. <br /></Context>
  83. </div>
  84.  
  85. <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>
  86.  
  87. <h3>Zφskanie a vyu₧φvanie zdie╛anΘho pripojenia na dßtov² zdroj</h3>
  88. <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>
  89.  
  90. <div class='sample'>
  91. Context init_con = new InitialContext();
  92. <br />Context cntx = (Context) init_con.lookup("java:comp/env");
  93. <br />DataSource ds = (DataSource) cntx.lookup("jdbc/CustomersDB");
  94. <br />Connection con = ds.getConnection();
  95. </div>
  96.  
  97. <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>
  98.  
  99. <div class='sample'>
  100. package interval;
  101. <br />
  102. <br />import javax.servlet.*;
  103. <br />import javax.servlet.http.*;
  104. <br />import java.sql.*;
  105. <br /><strong>import javax.sql.*;</strong>
  106. <br /><strong>import javax.naming.*;</strong>
  107. <br />
  108. <br />public class DBServlet extends HttpServlet {
  109. <br />
  110. <br />  private Connection con;
  111. <br />  private DataSource ds;
  112. <br />
  113. <br />  public void init(ServletConfig conf)
  114. <br />        throws ServletException {
  115. <br />    try {
  116. <br />      Context init_con = new InitialContext();
  117. <br />      Context cntx = (Context) init_con.lookup("java:comp/env");
  118. <br />      ds = (DataSource) cntx.lookup("jdbc/CustomersDB");
  119. <br />    }
  120. <br />    catch (NamingException ex) {
  121. <br />      throw new ServletException ("java:comp/env/jdbc/CustomersDB", ex);
  122. <br />    }
  123. <br />  }
  124. <br />
  125. <br />  public void doGet(HttpServletRequest request, HttpServletResponse response)
  126. <br />        throws ServletException, IOException {
  127. <br />    try {
  128. <br />      synchronized(ds) {
  129. <br />        con = ds.getConnection();
  130. <br />      }
  131. <br />      Statement stm = con.createStatement();
  132. <br />      String sql = "SELECT * FROM TABLE";
  133. <br />      ResultSet rs = stm.executeQuery(sql);
  134. <br />      stm.close();
  135. <br />    }
  136. <br />    catch (SQLException e) {}
  137. <br />    finally {
  138. <br />      try { con.close(); } catch (Exception e) {}
  139. <br />    }
  140. <br />  }
  141. <br />}
  142. </div>
  143.  
  144. <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>
  145. <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>
  146. <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>
  147.  
  148. <div class='refer'>
  149. <h3>P°edchozφ Φlßnky</h3>
  150. <ul>
  151. <li><a href='http://interval.cz/clanek.asp?article=2640'>Java Servlets - JDBC, JNDI a dßtovΘ zdroje I</a></li>
  152. <li><a href='http://interval.cz/clanek.asp?article=2571'>Java Servlets - servlet filtering</a></li>
  153. <li><a href='http://interval.cz/clanek.asp?article=2559'>Java Servlets - session tracking II</a></li>
  154. <li><a href='http://interval.cz/clanek.asp?article=2466'>Java Servlets - session tracking</a></li>
  155. <li><a href='http://interval.cz/clanek.asp?article=2445'>Java Servlets - state tracking</a></li>
  156. <li><a href='http://interval.cz/clanek.asp?article=2444'>Java Servlets - perzistencia a serializßcia objektov</a></li>
  157. <li><a href='http://interval.cz/clanek.asp?article=2416'>Java Servlets - spracovanie formulßra II</a></li>
  158. <li><a href='http://interval.cz/clanek.asp?article=2395'>Java Servlets - spracovanie formulßra</a></li>
  159. <li><a href='http://interval.cz/clanek.asp?article=2384'>Java Servlets - web.xml - pokraΦovanie</a></li>
  160. <li><a href='http://interval.cz/clanek.asp?article=2352'>Java Servlets - web.xml</a></li>
  161. <li><a href='http://interval.cz/clanek.asp?article=2342'>Java Servlets - vytvorenie jednoduchΘho servletu</a></li>
  162. <li><a href='http://interval.cz/clanek.asp?article=2319'>Java Servlets - ₧ivotn² cyklus servletu</a></li>
  163. <li><a href='http://interval.cz/clanek.asp?article=2262'>Java Servlets - predstavenie technol≤gie</a></li>
  164. </ul>
  165. </div>
  166.  
  167.  
  168.  
  169. <div id='article-author'>
  170. <a href='http://interval.cz/redirect/redirect.asp?what=interval_offline&url=http://interval.cz/autor.asp?author=134'>Branick², Marek</a> (15.10. 2003)
  171.  
  172. </div>
  173.  
  174.  
  175.  
  176. </div></div>
  177. <div id='page-right'><h2 class='textversion'>Prav² sloupek</h2>
  178. <div id='search'><h3 class='textversion'>Vyhledßvßnφ</h3><form method='get' action='http://interval.cz/search.asp'><div><input type='text' name='hledej' class='text' /><input type='submit' class='submit' value='Najdi!' /></div></form><div><a href='http://interval.cz/search_ex.asp'>RozÜφ°enΘ vyhledßvßnφ</a></div></div>
  179.  
  180.  
  181.  
  182. <div class='page-right-box book'>
  183.     <h3>Kni₧nφ novinka</h3>
  184.     <div class='page-right-box-in'>
  185.         <div class='book-top'>
  186.             <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>
  187.         </div>
  188.     </div>
  189.     <div class='image'>
  190.         <a href='http://interval.cz/redirect/redirect.asp?what=interval_booknews&url=http://interval.inshop.cz/inshop/scripts/detail.asp?ItemID=226'><img src='podklady/knihy/image.jpg' alt='obßlka' title='obßlka' /></a>
  191.     </div>
  192.     <div class='book-bottom'>Cena: <span class='book-price-old'>490 KΦ</span> <span class='book-price-new'>411 KΦ</span></div>
  193. </div>
  194.  
  195.  
  196.  
  197. <div class='page-right-box reading'>
  198.     <h3>NejΦten∞jÜφ</h3>
  199.     <div class='page-right-box-in'>
  200.         <ul>
  201. <li><a href='http://interval.cz/redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=2751'>NovΘ p°echody - p°ehled IV</a></li>
  202. <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>
  203. <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>
  204. <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>
  205. <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>
  206.         </ul>
  207.     </div>
  208. </div>
  209.  
  210.  
  211.  
  212. <div class='page-right-box cauldron'>
  213.     <h3>Diskuznφ kotel</h3>
  214.     <div class='page-right-box-in'>
  215.         <ul>
  216. <li><a href='http://interval.cz/redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=2541'>dreamface.net</a><div>184 komentß°∙ </div></li>
  217. <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>
  218. <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>
  219. <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>
  220. <li><a href='http://interval.cz/redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=2763'>bone-ju</a><div>72 komentß°∙ </div></li>
  221.         </ul>
  222.     </div>
  223. </div>
  224.  
  225.  
  226.  
  227. <div class='page-right-box emailserv'><h3>Email servis</h3><div class='page-right-box-in'><form action='prihlaseni.asp' method='post'><div class='shell'><input class='text' type='text' name='adresa' /></div><div class='shell'><input class='radio' type='radio' value='1' name='co' checked='checked' />T²dennφ p°ehled Φlßnk∙</div><div class='shell'><input class='radio' type='radio' value='2' name='co' />HELP konference</div><div class='shell'><input class='submit' type='submit' value='P°ihlßsit' /></div></form></div></div>
  228. </div>
  229. <div class='page-maker'> </div><div class='page-maker-white'> </div></div>
  230. <div id='page-foot'><div id='page-foot-menu'><a href='http://interval.cz/reklama.asp'>Inzerce na Interval.cz</a> | <a href='http://interval.cz/redakce.asp'>Redakce Interval.cz</a> | <a href='http://interval.cz/autori.asp'>Hledßme novΘ autory</a></div><div id='issn'>ISSN 1212-8651</div><div id='page-foot-zoner'>© Zoner software, s.r.o., vÜechna prßva vyhrazena, tento server dodr₧uje <a href='http://interval.cz/privacy.asp'>prßvnφ p°edpisy</a>o ochran∞ osobnφch ·daj∙.</div></div>
  231. </body>
  232. </html>