In questa guida verrà illustrato come configurare un Datasource Oracle su Tomcat tramite JNDI ed usarlo in Spring MVC. La guida spiega dunque come poter connettere una web application, basata su Spring MVC e deployata su server Tomcat, ad un database Oracle mediante JNDI.
Prima di iniziare la configurazione verificare che il server Tomcat sia spento, in caso contrario effettuarne lo shutdown.
Driver Oracle JDBC
A questo punto occorre scaricare il driver Oracle JDBC (ojdbc) dal sito ufficiale: http://www.oracle.com/technetwork/database/features/jdbc
JDBC (Java DataBase Connectivity), è un connettore (driver) per database che consente l’accesso e la gestione della persistenza dei dati sulle basi di dati da qualsiasi programma scritto con il linguaggio di programmazione Java, indipendentemente dal tipo di DBMS utilizzato.

Una volta scaricato il driver occorre estrarre dall’archivio il file ojdbc8.jar (nel mio caso la versione 8) e copiarlo all’interno della folder [TOMCAT_HOME]/lib, dove per [TOMCAT_HOME] si intende la home di Tomcat su FileSystem.
Definire la risorsa JNDI in Tomcat
Il passo successivo è quello di definire una risorsa JNDI. Ricordo che JNDI (Java Naming and Directory Interface) è una API Java per servizi di directory che permette ai client java di scoprire e ottenere dati e oggetti attraverso un nome.
Ecco i passi per definire la risorsa JNDI in Tomcat:
All’interno del file “server.xml” di Tomcat (situato nella folder [TOMCAT_HOME]/conf), va dichiarata la Resource JNDI come segue:
<GlobalNamingResources> <Resource name="jdbc/DatabaseName" auth="Container" type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver" url="jdbc:oracle:thin:@//dbhost:1521/dbservicename" username="username" password="password" connectionProperties="SetBigStringTryClob=true" accessToUnderlyingConnectionAllowed="true" maxTotal="60" maxIdle="20" maxWaitMillis="10000" /> </GlobalNamingResources>
La nuova resource va dichiarata all’interno del tag GlobalNamingResources del file “server.xml”.
In questo esempio è stata dichiarata una risorsa con nome “jdbc/DatabaseName” ed i relativi parametri di connessione la database Oracle.
A questo punto occorre editare anche il file “context.xml” di Tomcat (situato nella folder [TOMCAT_HOME]/conf), inserendo il ResoruceLink alla Resource dichiarata in precedenza.
<ResourceLink name="jdbc/DatabaseName" global="jdbc/DatabaseName" type="javax.sql.DataSource"/>
A questo punto è sufficiente riavviare Tomcat per rendere effettive le modifiche.
Utilizzo del data source in Spring MVC
Per utilizzare il Datasource, ad esempio in Spring MVC, è possibile effettuare la “lookup” della risorsa JNDI in questo modo.
<jee:jndi-lookup id="ds" jndi-name="jdbc/DatabaseName" expected-type="javax.sql.DataSource" />
O alternativamente utilizzare il JndiObjectFactoryBean:
<bean id="ds" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName" value="java:comp/env/jdbc/DatabaseName"/> </bean>
Una volta recuperato il datasource è possibile “iniettarlo” ad esempio all’interno di un bean DAO (Data Access Object) come segue:
<bean id="testDAO" class="testwebapp.dao.impl.TestDAOImpl"> <property name="dataSource" ref="ds" /> </bean>
Environment utilizzato per la guida
La guida è stata realizzata e testata con successo sul seguente ambiente di sviluppo:
- Apache Tomcat 7
- Driver Oracle ojdbc8.jar
- Spring MVC 4.3.6