Newsgroup: it.comp.java
Titolo: struts, tomcat e datasources

Ho visto che ci sono stati un po' di post in passato sull'argomento ma
l'errore che ottengo io sembra diverso da quelli che ho letto:
Volevo chiedere una informazione, relativamente a quella cosa (noiosissima
dal mio punto di vista) che
e' struts. Sto cercando di capirci qualcosa (diciamo pure che attualmente
non ne so una mazza) e sto
seguendo un tutorial su struts 1.1 che ho trovato in rete come freebook in
pdf (jakarta struts live ). Sto usando Tomcat 5.0.28.
Ora, seguendo il tutorial di struts , capitolo 1, tutto bene fino a quando
non sono arrivato ad utilizzare 
quelli che
lui chiama "struts datasources". In tale sezione dice che per utilizzare
tali struts datasources
c'e' bisogno in inserire nella directory WEB-INF/lib della web application
che sto creando, il file
 struts-legacy.jar che viene scaricato insiema a struts 1.1.
Il problema e' che prima di utilizzare tale struts-legacy.jar la web
application funzionava
(non utilizzavo accessi al db, per cui non usavo nemmeno gli "struts
datasources"), mentre dopo
che ho inserito tale file nella web application, ottengo l'errore
-----------------------------------------------------
HTTP Status 404 - Servlet action is not available
type Status report
message Servlet action is not available
description The requested resource (Servlet action is not available) is
not available.
Apache Tomcat/5.0.28
---------------------------------------------------------------
Che sembra voler dire che per qualche motivo la inizializzazione della
action servlet sia fallita.
D'altra parte se non inserisco il file struts-legacy.jar nella
WEB-INF/lib, sembra che l'action servlet funzioni ma ottengo il seguente
errore
------------------------------------------------------------------
type Exception report
message
description The server encountered an internal error () that prevented it
from fulfilling this request.
exception
javax.servlet.ServletException: Servlet.init() for servlet action threw
exception
	org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
	org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
	org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
	org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
	org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
	org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
	java.lang.Thread.run(Thread.java:534)
root cause
java.lang.NoClassDefFoundError: org/apache/struts/legacy/GenericDataSource
	java.lang.ClassLoader.defineClass0(Native Method)
	java.lang.ClassLoader.defineClass(ClassLoader.java:539)
	java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)
	org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1634)
	org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:860)
	org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1307)
	org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1189)
	java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)
	org.apache.struts.action.ActionServlet.initModuleDataSources(ActionServlet.java:1084)
	org.apache.struts.action.ActionServlet.init(ActionServlet.java:472)
	javax.servlet.GenericServlet.init(GenericServlet.java:211)
	org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
	org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
	org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
	org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
	org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
	org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
	java.lang.Thread.run(Thread.java:534)
note The full stack trace of the root cause is available in the Apache
Tomcat/5.0.28 logs.
Apache Tomcat/5.0.28
-------------------------------------------------------------------
Quindi la domanda e': e' possibile utilizzare gli struts datasources con
struts 1.1. e Tomcat 5.0 (al limite
potrei provare anche con Tomcat 4.0)  ?
Se si' come si fa ?
Se invece non e' possibile ma voglio comunque accedere ad un db cosa devo 
fare ? Accedo al db direttamente dal codice della Action? 
Ciao,
Marco.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

  struts-legacy.jar che viene scaricato insiema a struts 1.1.
<cut>
non so se il link
http://www.roseindia.net/struts/strutsdatasourcemanagerontomcat5.shtml
ti puņ essere di aiuto... cmq ti sconsiglio di usare i datasource di struts,
non sono standard
meglio usare un datasource preso da JNDI
ciao

 fare ? Accedo al db direttamente dal codice della Action?
di solito no, la cosa corretta da fare è isolare l'accesso al database
in dei DAO. questo a prescindere dal tipo di datasource che utilizzi,
che secondo me va configurato nel JNDI e non su struts.

 che secondo me va configurato nel JNDI e non su struts.
Ok sto provando a farlo, come aveva segnalato anche l'altro che ha
risposto, pero', usando anche qui una applicazione
idiota, ottengo quest'altro errore:
---------------------------------------------------
org.apache.commons.dbcp.SQLNestedException: Cannot create JDBC driver of
class '' for connect URL 'null'
        at
org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:780)
        at
org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:540)
        at foo.DBTest.init(Unknown Source)
        at org.apache.jsp.test_jsp._jspService(test_jsp.java:51)
        at
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
        at
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
        at
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
        at
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
        at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
        at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
        at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
        at
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
        at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
        at
org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
        at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
        at
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
        at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
        at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
        at
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
        at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
        at
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
        at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
        at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
        at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
        at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
        at
org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
        at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
        at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
        at
org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
        at
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
        at java.lang.Thread.run(Thread.java:534)
Caused by: java.sql.SQLException: No suitable driver
        at java.sql.DriverManager.getDriver(DriverManager.java:243)
        at
org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:773)
        ... 33 more
--------------------------
Ora vedo di capire qual'e' l'url che lui vede come null, poi
magari richiedo aiuto...
Ciao,
 Marco


> Cannot create JDBC driver of class '' for connect URL 'null'
errore maledetto, troverai migliaia di post che parlano di questo.
Due cose da guardare subito:
1) avere i jar del driver jdbc in /common/lib del tomcat
2) occhio a come definisci il datasource, tra Tomcat 4 e tomcat 5 (almeno
per la 5.5 di sicuro) cambia il formato

ab ha scritto:



ok ora funge... (almeno l'accesso al db tramite jndi. Poi devo provare
ad integrarlo con struts)
pare che il problema fosse che c'erano due copie dello stesso driver, una
in common/lib e una in shared/lib
Ciao,
Marco.


 Marco.
ciao Nicola
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 Per il resto buon lavoro, al limite occhio ai checkbox ;-)
In che senso ?
Ciao,
Marco


 Marco


 ecologico :-)
boh, li avrò usati una milionata di volte.
che c'avranno mai di difficile?
-- 
Fino all'anno scorso avevo un solo difetto. Ero presuntuoso.
http://softvalley.blogspot.com