<?xml 
version="1.0" encoding="utf-8"?>
<rss version="2.0" 
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
>

<channel xml:lang="fr">
	<title>6tech, la solution webcreation</title>
	<link>http://6tech.net/</link>
	
	<language>fr</language>
	<generator>SPIP - www.spip.net</generator>




<item xml:lang="fr">
		<title>Pool de connexion</title>
		<link>http://6tech.net/Pool-de-connexion.html</link>
		<guid isPermaLink="true">http://6tech.net/Pool-de-connexion.html</guid>
		<dc:date>2008-04-08T22:14:57Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Yannick Domenjoud</dc:creator>


		<dc:subject>J2EE</dc:subject>
		<dc:subject>Struts</dc:subject>

		<description>La gestion des base de donn&#233;es sous Struts est un vrai probl&#232;me. Les tags du framework ( tel &lt;sql:setDataSource&gt; ) commence &#224; perturber l'id&#233;e originelle de Struts. Struts n'est qu'un framework de pr&#233;sentation, et le fait de lui permettre de g&#233;rer les bases de donn&#233;es revient &#224; m&#233;langer les diff&#233;rentes couches d'une application MVC2 . Il est donc conseill&#233; de ne pas utiliser cette librairie de tag ( qui devrait dispara&#238;tre dans les versions futures ) Une meilleur approche serait de configurer la (...)

-
&lt;a href="http://6tech.net/-Tutoriaux-.html" rel="directory"&gt;Tutoriaux&lt;/a&gt;

/ 
&lt;a href="http://6tech.net/+-J2EE-+.html" rel="tag"&gt;J2EE&lt;/a&gt;, 
&lt;a href="http://6tech.net/+-Struts-+.html" rel="tag"&gt;Struts&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;span class='csfoo somm'&gt;&lt;/span&gt;&lt;div class=&quot;cs_sommaire cs_sommaire_avec_fond&quot; id=&quot;outil_sommaire&quot;&gt; &lt;div class=&quot;cs_sommaire_inner&quot;&gt; &lt;div class=&quot;cs_sommaire_titre_avec_fond&quot;&gt; Sommaire &lt;/div&gt; &lt;ul&gt; &lt;li&gt;&lt;a title=&quot;Configuration du pool&quot; href=&quot;http://6tech.net/spip.php?page=backend&amp;id_auteur[]=3#outil_sommaire_0&quot;&gt;Configuration du pool&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a title=&quot;Lier le pool &#224; l&amp;#39;application&quot; href=&quot;http://6tech.net/spip.php?page=backend&amp;id_auteur[]=3#outil_sommaire_1&quot;&gt;Lier le pool &#224; l'application&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a title=&quot;L&amp;#39;utilisation dans vos servlets&quot; href=&quot;http://6tech.net/spip.php?page=backend&amp;id_auteur[]=3#outil_sommaire_2&quot;&gt;L'utilisation dans vos (&#8230;)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a title=&quot;Erreurs fr&#233;quentes&quot; href=&quot;http://6tech.net/spip.php?page=backend&amp;id_auteur[]=3#outil_sommaire_3&quot;&gt;Erreurs fr&#233;quentes&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a title=&quot;Derni&#232;res pr&#233;cisions&quot; href=&quot;http://6tech.net/spip.php?page=backend&amp;id_auteur[]=3#outil_sommaire_4&quot;&gt;Derni&#232;res pr&#233;cisions&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt; &lt;/div&gt; &lt;/div&gt;&lt;span class='csfoo somm'&gt;&lt;/span&gt;&lt;p&gt;La gestion des base de donn&#233;es sous Struts est un vrai probl&#232;me. Les tags du framework ( tel &lt;span class='csfoo htmla'&gt;&lt;/span&gt;&lt;sql:setDataSource&gt;&lt;span class='csfoo htmlb'&gt;&lt;/span&gt; ) commence &#224; perturber l'id&#233;e originelle de Struts. Struts n'est qu'un framework de pr&#233;sentation, et le fait de lui permettre de g&#233;rer les bases de donn&#233;es revient &#224; m&#233;langer les diff&#233;rentes couches d'une application MVC2 .
Il est donc conseill&#233; de ne pas utiliser cette librairie de tag ( qui devrait dispara&#238;tre dans les versions futures )&lt;/p&gt; &lt;p&gt;Une meilleur approche serait de configurer la gestion de ses bases de donn&#233;es par tomcat lui m&#234;me gr&#226;ce encore une fois au fameux fichier de context : &lt;strong&gt;/META-INF/context.xml&lt;/strong&gt; . Quelques lignes permettront de peaufiner toute une gestion tel que le nombre de connexion maximale, le nombre minimal &#224; pr&#233;voir, le timeout, etc. Ce que l'on appel un pool de connexion !&lt;/p&gt; &lt;h3 class=&quot;spip&quot; id=&quot;outil_sommaire_0&quot;&gt;&lt;a title=&quot;Sommaire&quot; href=&quot;http://6tech.net/spip.php?page=backend&amp;id_auteur[]=3#outil_sommaire&quot; class=&quot;sommaire_ancre&quot;&gt; &lt;/a&gt;Configuration du pool&lt;/h3&gt; &lt;p&gt;La configuration commence donc par ces quelques lignes dans un fichier context.xml :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&lt;Context reloadable=&quot;true&quot;&gt;&lt;br /&gt; &lt;Resource name=&quot;jdbc/myProject&quot; auth=&quot;Container&quot;&lt;br /&gt; type=&quot;javax.sql.DataSource&quot;&lt;br /&gt; username=&quot;database_user&quot; password=&quot;database_passwd&quot;&lt;br /&gt; driverClassName=&quot;com.mysql.jdbc.Driver&quot;&lt;br /&gt; url=&quot;jdbc:mysql://localhost:3306/database_base&quot; maxActive=&quot;8&quot; maxIdle=&quot;8&quot;&lt;br /&gt; removeAbandoned=&quot;true&quot; removeAbandonedTimeout=&quot;30&quot; logAbandoned=&quot;true&quot; /&gt;&lt;br /&gt; &lt;/Context&gt;&lt;/code&gt;&lt;/div&gt; &lt;p&gt;Pour la signification des attributs je vous sugg&#232;re d'aller voir : &lt;a href='http://commons.apache.org/dbcp/configuration.html' class='spip_out'&gt;common apache&lt;/a&gt;&lt;/p&gt; &lt;h3 class=&quot;spip&quot; id=&quot;outil_sommaire_1&quot;&gt;&lt;a title=&quot;Sommaire&quot; href=&quot;http://6tech.net/spip.php?page=backend&amp;id_auteur[]=3#outil_sommaire&quot; class=&quot;sommaire_ancre&quot;&gt; &lt;/a&gt;Lier le pool &#224; l'application&lt;/h3&gt; &lt;p&gt;Une fois ce pool cr&#233;&#233;, il peut &#234;tre int&#233;ressant de le lier &#224; l'application dans son fichier web.xml par la balise resource-ref :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt; &lt;resource-ref&gt;&lt;br /&gt; &lt;description&gt;&lt;br /&gt; Pool de connexion &#224; la base de donn&#233;es&lt;br /&gt; &lt;/description&gt;&lt;br /&gt; &lt;res-ref-name&gt;jdbc/myProject&lt;/res-ref-name&gt;&lt;br /&gt; &lt;res-type&gt;javax.sql.DataSource&lt;/res-type&gt;&lt;br /&gt; &lt;res-auth&gt;Container&lt;/res-auth&gt;&lt;br /&gt; &lt;/resource-ref&gt;&lt;/code&gt;&lt;/div&gt;
&lt;h3 class=&quot;spip&quot; id=&quot;outil_sommaire_2&quot;&gt;&lt;a title=&quot;Sommaire&quot; href=&quot;http://6tech.net/spip.php?page=backend&amp;id_auteur[]=3#outil_sommaire&quot; class=&quot;sommaire_ancre&quot;&gt; &lt;/a&gt;L'utilisation dans vos servlets&lt;/h3&gt; &lt;p&gt;Ensuite pour l'utiliser, il vous suffira de r&#233;cup&#233;rer une connexion du context par ces quelques lignes :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt; try {&lt;br /&gt; Context initCtx = new InitialContext(); // r&#233;cup&#233;ration du context&lt;br /&gt; DataSource ds = (DataSource) initCtx.lookup(&quot;java:comp/env/jdbc/myProject&quot;); // r&#233;cup&#233;ration de la source&lt;br /&gt; Connection con = ds.getConnection(); // r&#233;cup&#233;ration de la connexion&lt;br /&gt; .....&lt;br /&gt; } catch (Exception e) {&lt;br /&gt; Logger.getLogger(this.CLASS).error(&quot;DATABASE : &quot;+e.getMessage());&lt;br /&gt; }&lt;/code&gt;&lt;/div&gt; &lt;p&gt;Il pourra &#234;tre subtil de cr&#233;er une classe s'occupant de r&#233;cup&#233;rer cette connexion et d'effectuer une requ&#234;te dessus.&lt;/p&gt; &lt;h3 class=&quot;spip&quot; id=&quot;outil_sommaire_3&quot;&gt;&lt;a title=&quot;Sommaire&quot; href=&quot;http://6tech.net/spip.php?page=backend&amp;id_auteur[]=3#outil_sommaire&quot; class=&quot;sommaire_ancre&quot;&gt; &lt;/a&gt;Erreurs fr&#233;quentes&lt;/h3&gt; &lt;p&gt;Attention toute fois &#224; bien comprendre ce que vous faites. La cr&#233;ation d'un pool de connexion et sa limitation implique de fermer correctement toute demande de connexion une fois la requ&#234;te achev&#233;e. Un appel &#224; con.close() terminera la connexion courrante, mais prenez garde &#224; bien fermer vos ResultSet et PreparedStatement dans le bon ordre et avant la fermeture de la connexion principale.&lt;/p&gt; &lt;p&gt;Si votre script se bloque ou se met en pause ; cela est g&#233;n&#233;ralement du &#224; l'oubli de fermeture de connexion. Le pool de connexion voyant son capital de connexions s'amenuiser, ne distribuera plus de nouvelles connexions tant que les pr&#233;c&#233;dentes n'auront pas &#233;t&#233; lib&#233;r&#233;es ..&lt;/p&gt; &lt;h3 class=&quot;spip&quot; id=&quot;outil_sommaire_4&quot;&gt;&lt;a title=&quot;Sommaire&quot; href=&quot;http://6tech.net/spip.php?page=backend&amp;id_auteur[]=3#outil_sommaire&quot; class=&quot;sommaire_ancre&quot;&gt; &lt;/a&gt;Derni&#232;res pr&#233;cisions&lt;/h3&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; Si vraiment, vraiment, vraiment vous pr&#233;f&#233;rez quand m&#234;me, contre toute opposition sens&#233;e et argument&#233;e, utiliser la taglib 'sql' de struts, vous pouvez en haut de vos pages renseigner la source pr&#233;c&#233;demment configur&#233;e dans le web.xml et dans le context.xml par &lt;span class='csfoo htmla'&gt;&lt;/span&gt;&lt;code class='spip_code' dir='ltr'&gt;&lt;sql:setDataSource dataSource=&quot;jdbc/myProject&quot; /&gt;&lt;/code&gt;&lt;span class='csfoo htmlb'&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; Vous pouvez &#233;galement vouloir configurer un pool de connexion au niveau du serveur tomcat directement, et partager ce pool avec plusieurs applications en cr&#233;ant une section ressource dans le server.xml (plus facilement faisable par l'administration de tomcat ) ; ensuite il conviendra de sp&#233;cifier dans chaque contexte le pool &#224; utiliser par :
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&lt;ResourceLink&lt;br /&gt; name=&quot;jdbc/myProject&quot;&lt;br /&gt; global=&quot;jdbc/myProject&quot;&lt;br /&gt; type=&quot;javax.sql.DataSource&quot;/&gt;&lt;/code&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Cette solution &#233;carte l'&#233;tape de configuration du web.xml&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>



</channel>

</rss>
