Newsgroup: it.comp.java
Titolo: Startup Tomcat.

E' possibile, su Tomcat 4, far si che quando lo si avvia parta anche un mio
thread?
Insomma vorrei scrivere una classe che estende la Thread, con un main, e mi
servirebbe che il mio thread partisse assieme al tomcat.


Se vuoi far partire qualcosa insieme al Server, ho paura che devi andare
"sullo specifico", ossia utilizzare qualcosa di non portatile e
strettamente legato a Tomcat. In questo caso non credo che i Valves
possano aiutarti, magari dovresti guardare il codice e trovare un punto di
ancoraggio. Personalmente lo sconsiglio.
Se vuoi invece qualcosa che sia portatile attraverso differenti Servlet
Container, puoi scrivere una tua servlet all'interno di una qualsiasi web
application. Questa servlet la fai partire automaticamente al load della
web application attraverso il tag <load-on-starup> della definizione della
servlet all'interno del web application descriptor (web.xml) della tua web
application.
Regards,
Kazuma
-- 
Those who don't understand unix are condemned to reinvent it. Poorly.
(H.Spencer)
Alex "Kazuma" Garbagnati, 
http://www.kazuma.net
EJB & Tomcat jGuru FAQ Manager, 
http://www.jGuru.com
Tutor "Progetto Scuole", 
http://www.JIA.it
Java Italian Association - SUN - MIUR
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 ancoraggio. Personalmente lo sconsiglio.
Scusami, ma in server.xml, non si può far nulla??? Ci si può legare alla
partenza in automatico delle WebApp, e mappare una servlet nel loro avvio.
Che ne pensi??? E' troppo contorta??
.....

 .....
Sicuramente lo puoi fare... stiamo parlando di Tomcat software standard
aperto, mica di Weblogic.
Scherzi a parte. Si può fare, in vari modi. Il più semplice che mi viene
al volo da pensare è di estendere la classe si occupa implementazione del
server (se ricordo bene è org.apache.catalina.core.StandardServer, che
implementa org.apache.catalina.Server).
In questa classe non fai altro che aggiungere quello di cui tu hai
bisogno, dai tuoi thread a quello che vuoi. 
Premetto: non l'ho mai fatto, ma al volo farei così...
Il problema non è nel fatto che questa è una soluzione contorta, ma quanto
nella totale perdita di portabilità del tuo lavoro. Se devi passare ad
altri Servlet Container, ecco che devi riscrivere il tuo lavoro.
Se utilizzi la soluzione <load-on-startup>, invece, all'interno di una web
application hai la completa e totale portabilità, oltre che il rispetto
degli standard, oltre ad eventuali vantaggi (che, però, possono essere
svantaggi) dell'essere eseguito all'interno di un singolo context, con il
suo classloader.
regards,



Se ti va bene che il tuo thread parta quando viene caricara e 
inizializzata una certa applicazione (cosa che puo' avvenire o quando si 
fa il deploy o quando viene avviato tomcat, se non sbaglio) puoi 
utilizzare il ServletContextListener (introdotto con la versione 2.4 
delle Servlet).
Andrea Polci

 Se utilizzi la soluzione <load-on-startup>, invece, ...
Mi ripeto, ma piuttosto che utilizzare l'opzione <load-on-startup> non 
e' meglio utilizzare un ServletContextListener?
Mi sembra che lo scopo di questa interfaccia sia proprio quello di 
eseguire determinate operazioni all'avvio dell'applicazione.
Andrea Polci

delle Servlet).
Oppsss.... vero.
Il discorso era iniziato partendo da Tomcat e non ho considerato il
ServletContextListener...
(ps: versione 2.3. La 2.4 non è ancora stata rilasciata...)
	regards
		Kazuma
---
I've got nothing against God. It's his fan club I can't stand.


e' meglio utilizzare un ServletContextListener?
Si, come ti ho già scritto... è vero. Per qualche motivo mi era
passato per la mente...
Grazie, ottimo intervento.
	regards,
		Kazuma
---
I've got nothing against God. It's his fan club I can't stand.
Alex "Kazuma" Garbagnati, 
http://www.kazuma.net


...


 (ps: versione 2.3. La 2.4 non è ancora stata rilasciata...)
Vero, ho fatto un po' di confusione fra le versioni, susate.
Andrea Polci

 inoltre dedotto che sono creati sette oggetti istanze della servlet.
La causa di tutto questo è perchè (scusa se te lo dico, non offenderti)
sembra che tu non abbia letto la documentazione di Tomcat e tantomeno le
specifiche delle Servlet/JSP.
Se vuoi creare una servlet devi inserirla all'interno di una "web
application". La definizione di Web Application la trovi o all'interno delle
specifiche SUN
(
http://jcp.org/aboutJava/communityprocess/first/jsr053/index.html
), oppure
puoi trovare una ottima semplice definizione su jGuru, scritta dal mitico
Alex Chafee: 
http://www.jguru.com/faq/view.jsp?EID=129328
 oppure sullo
stesso sito di Tomcat:
http://jakarta.apache.org/tomcat/tomcat-4.1-doc/appdev/index.html
Per informazioni specifiche su Tomcat, la pagina di documentazione è:
http://jakarta.apache.org/tomcat/tomcat-4.1-doc/index.html
. Per capire
quello che ti è successo, ti consiglio la lettura di questa pagina, anche
per avere informazioni ulteriori su dove mettere i tuoi lavori.
Quello che è successo è che la tua servlet è stata inizializzata una volta
per ogni web application presente all'interno del servlet container. Questo
perchè il web application descriptor di default (che si trova in
$TOMCAT_HOME/conf) viene letto insieme a quello specifico delle web
application.
Vuoi fare una prova?
Crea una dir in $TOMCAT_HOME/webapps e chiamala "MiaProva". Lì dentro crea
una directory "WEB-INF" contenente un web.xml con la tua servlet definita e
"mappata" (<servlet-mapping>). All'interno della directory "WEB-INF" creane
una chiamara "classes" contenente la tua servlet.
Poi esegui Tomcat e accedi alla tua servlet tramite
http://dominio:porta/MiaProva/<con il mapping della tua servlet>.
    Regards,
        Kazuma
--
I've got nothing against God. It's his fan club I can't stand.
Alex "Kazuma" Garbagnati, 
http://www.kazuma.net


> Vero, ho fatto un po' di confusione fra le versioni, susate.
Capita.
hai comunque fatto bene ad intervenire per farmi notare la mia
dimenticanza...
(anche perchè l'ho usato credo una volta sola... hehehe)
    regards,
        Kazuma
