Μια multi-user εφαρμογή που χρησημοποιεί κάποια database δεν μπορεί να είναι αξιόπιστη αν δεν χρησημοποιεί connection pooling. Ο Tomcat 7 αντικατέστησε την απο προεπιλογή common-dbcp βιβλιοθήκη του με το Tomcat JDBC. Μπορειτε να δειτε εδώ http://www.tomcatexpert.com/blog/2012/01/24/using-tomcat-7-jdbc-connection-pool-production και εδώ http://www.tomcatexpert.com/blog/2010/04/01/configuring-jdbc-pool-high-concurrency μερικά άρθρα γι αυτό το ζήτημα.
Έστωσαν οτι θέλουμε να φτιάξουμε ενα τέτοιο pool σε εναν Tomcat 7 για μια MySQL βάση δεδομένων. Ισοδύναμα βήματα γίνονται για ολες τις αλλες βάσεις. Τα βήματα που κάνουμε είναι τα εξής.
- Κατεβάσουμε τον JDBC Driver της MySQL απο εδω http://dev.mysql.com/downloads/connector/j/ και αντιγράφουμε το jar στο [tomcat-installation-path]\lib
- Ανοίγουμε το αρχείο [tomcat-installation-path]\conf\context.xml και προσθέτουμε στο τέλος[code lang=”xml”]
<Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
username="javauser" password="javadude" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/javatest"/>
[/code]Παραπάνω έχουμε τα εξής
- name=”jdbc/TestDB” Το jdbc ειναι το προθεμα που θα μας κανει να γνωριζουμε οτι το συγκεκριμένο resource pool αφορά jdbc. TestDB είναι το όνομα του pool (συνήθως το όνομα της βάσης).
- maxActive, maxIdle Ο μέγιστος και ο ελάχιστος αριθμός των συνδέσεων στη βάση
- maxWait μέγιστος χρόνος αναμονής σε ms για να αποκτηθεί ένα connection
- username, password όνομα χρήστη και κωδικός της βάσης
- driverClassName Το classname του driver
- url Το JDCB url
- Δεν έχει νουμερο 3… :p Με μια επανεκκίνηση του Tomcat το pool είναι έτοιμο.
Για να τεσταρουμε το παραπάνω αν χρησημοποιούμε Spring γράφουμε τα
[code lang=”xml”]
<bean id="mainDatasource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:/TestDB"/>
</bean>
[/code]
Αν πάλι έχουμε μια τυπική web εφαρμογή στο web.xml βάζουμε τα
[code lang=”xml”]
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/TestDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
[/code]
Και μέσα στην jsp την καλούμε ώς
[code lang=”xml”]
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<sql:query var="rs" dataSource="jdbc/TestDB">
select * from test_table
</sql:query>
<html>
<head>
<title>Datasource Test Page</title>
</head>
<body>
<h2>Results</h2>
<c:forEach var="row" items="${rs.rows}">
Foo ${row.foo}<br/>
Bar ${row.bar}<br/>
</c:forEach>
</body>
</html>
[/code]