Commons DBCP è un progetto gestito da Jakarta introdotto per creare e gestire una collezione di oggetti Java riutilizzabili.
Database Connection, sotto progetto di Jakarta Commons DBCP, si propone di riutilizzare dei DataSource JDBC che possono aiutare la gestione di tutte le connessioni a database. Rappresenta un componente estremamente utile che può essere utilizzato sia stand-alone o come DataSource integrato nei progetti Jakarta, come Struts.
Integrazione di DBCP nelle applicazioni Struts
Dopo aver installato MYSQL, è necessario completare questi step per creare e configurare il database:
- Avviare MySQL client
- Creare il database stocks
- Impostare il contesto corrente
- Creare la tabella STOCKS
- Inserire i dati nella tabella stocks
- Testare il tutto
Listato 1. Creazione e configurazione del database
//Creazione del database Stocks
CREATE DATABASE STOCKS;
// Impostazione del contesto
USE STOCKS;
// Creazione della tabella
CREATE TABLE STOCKS (
SYMBOL VARCHAR(15) NOT NULL PRIMARY KEY,
PRICE DOUBLE NOT NULL
);
// Inserimento record nella tabella del database
INSERT INTO STOCKS VALUES ("SUNW", 78.00);
INSERT INTO STOCKS VALUES ("YHOO", 24.45);
INSERT INTO STOCKS VALUES ("MSFT", 3.24);
// Select sui record della tabella
SELECT * FROM stocks;
Utilizzo di DBCP nell'applicazione Struts
Per iniziare, aggiungiamo una voce al file di configurazione struts-config.xml. L'entry, <data-sources>, descrive una collezione di componenti DataSource che possono essere gestiti da ActionServlet.
L'elemento <data-sources>, che agisce come parent di tutti i <data-source>, deve essere il primo elemento nel file di configurazione struts-config.xml, quindi deve essere aggiunto prima degli elementi <form-beans> e <action-mappings>.
Listato 1. Esempio di struts-config.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
<struts-config>
<data-sources>
<data-source type="org.apache.commons.dbcp.BasicDataSource">
<set-property property="driverClassName" value="com.mysql.jdbc.Driver" />
<set-property property="url" value="jdbc:mysql://localhost/stocks" />
<set-property property="username" value="root" />
<set-property property="password" value="esempio" />
</data-source>
</data-sources>
<form-beans>
<form-bean name="lookupForm" type="esempio.LookupForm" />
</form-beans>
<action-mappings>
<action path="/Lookup" type="esempio.LookupAction" name="lookupForm" >
<forward name="success" path="/quote.jsp" />
<forward name="failure" path="/index.jsp" />
</action>
</action-mappings>
</struts-config>
Ora che abbiamo sistemato la configurazione del file struts-config.xml, modifichiamo la LookupAction per utilizzare il nuovo DataSource.
Listato 2. LookupAction per utilizzare il DataSource (Guarda il codice completo)
..//
public class LookupAction extends Action {
protected Double getQuote(HttpServletRequest request, String symbol) {
..//
try {
dataSource = getDataSource(request);
conn = dataSource.getConnection();
stmt = conn.createStatement();
rs = stmt.executeQuery("SELECT * FROM Stocks WHERE symbol='" + symbol + "'");
if (rs.next()) {
double tmp = rs.getDouble("price");
price = new Double(tmp);
System.err.println("price: " + price);
} else {
..//
}
} catch (SQLException sqle) {
..//
}
return price;
}
public ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException {
..//
if (form!=null) {
LookupForm lookupForm = (LookupForm) form;
String symbol = lookupForm.getSymbol();
price = getQuote(request, symbol);
}
..//
return (mapping.findForward(target));
}
}
Ora testiamo le modifiche seguendo gli step:
- Download dell'archivio Commons DBCP
- Estrazione del file commons-dbcp.jar e copia nella directory lib (+ struts-legacy.jar)
- Copia del driver MySQL JDBC mysql-connector-java-3.0.17-ga-bin.jar nella directory lib
- Riavvio di Tomcat
- Verifica dell'URL http://localhost:8080/chapter11/indexes.jsp