Newsgroup: it.comp.java
Titolo: Datasource JNDI e tomcat

Ho configurato un un datasource nel conf/server.xml nel seguente modo:
<Server port="8005" shutdown="SHUTDOWN" debug="0">
....
<GlobalNamingResources>
....
<Resource name="jdbc/BackupDB" auth="SERVLET"
           type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/BackupDB">
    <parameter>
       <name>factory</name>
       <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
    </parameter>
    ...
</ResourceParams>
....
</GlobalNamingResources>
...
</Server>
Adesso come faccio a farlo vedere alle mie applicazioni?
Finora ci sono riuscito solo mettendo la definizione della risorsa 
direttamente nel context dell'applicazione, ma in questo modo mi obbliga 
a installarla direttamente dentro il server.xml
Andrea Polci

 Adesso come faccio a farlo vedere alle mie applicazioni?
Hai letto questo?
http://jakarta.apache.org/tomcat/tomcat-4.1-doc/jndi-datasource-examples-howto.html
Ciao.
\mirko


Si, ma se faccio quello che dice non funziona.
Mi da il seguente errore:
----------------------
java.sql.SQLException: Cannot load JDBC driver class 'null'
	at 
org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:529)
	at 
org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:312)
.....
----------------------
Se entro nell'administration tool e cerco di vedere i data-source della 
mia applicazione ottengo questa eccezione:
----------------------
org.apache.jasper.JasperException: Exception retrieving attribute 
'driverClassName'
	at 
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:254)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295)
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
.....
root cause
javax.servlet.ServletException: Exception retrieving attribute 
'driverClassName'
	at 
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:533)
	at 
org.apache.jsp.listDataSources_jsp._jspService(listDataSources_jsp.java:498)
	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:137)
----------------------
Sinceramente non capisco.
Andrea Polci

 java.sql.SQLException: Cannot load JDBC driver class 'null'
Hai copiato mysql.jar (il driver JDBC per MySQL) dentro 
$TOMCAT_HOME/common/lib ?
Ciao.
\mirko


Si.
Se metto la definizione della risorsa (<Resource 
...>...</Resource><ResourceParams ...>...</ResourceParams>) direttamente 
nel contesto della mia applicazione all'interno del file conf/server.xml 
tutto funziona. Pero' questo mi obbliga, tra l'altro, a riavviare tomcat 
ogni volta che voglio modificare la mia applicazione.
Nel modo indicato dall'how-to vedo che il datasource viene creato 
correttamente (Administration tool, Resource->DataSources) ma la mia 
applicazione non riesce ad accedervi, ovvero andando in: Tomcat Server 
-> Service (Tomcat-Standalone) -> Host (localhost) -> Context (/miapp) 
-> Resources -> Data Sources
ottengo l'eccezzioni che ho riportato nell'altro post (Exception 
retrieving attribute 'driverClassName').
Ciao,
Andrea

 
Uh??? Nell'howto la risorsa viene dichiarata dentro il Context della tua 
applicazione, proprio come dicevi sopra.
Ciao.
\mirko

 applicazione, proprio come dicevi sopra.
Si, scusa. Ho fatto un po' di confusione fra le tante prove.
Facendo come dice nell'how-to funziona, ma io vorrei evitare di dover 
inserire il Context dell'applicazione nel server.xml.
Insomma quello che vorrei sapere e': come faccio a far vedere alla mia 
applicazione una risorsa definita nel <GlobalNamingResources>?
Andrea Polci

 
Non so come definire risorse globali, ma conosco un altro modo per 
tenere tutta la configurazione di una webapp fuori dal server.xml globale.
Apri il server.xml che ti funziona, seleziona tutto il Context della tua 
webapp "pippo"
<Context path="/pippo" ...>
...
</Context>
taglialo, incollalo in un nuovo file chiamato 
"$TOMCAT_HOME/webapps/pippo.xml" e riavvia tomcat.
Ecco tutto! ;-)
Ciao.
\mirko