Terve
Haluaisin servletin käynnistyvän automaattisesti tomcatissa ikään kuin servicenä aina tomcatin uudelleen käynnistymisen yhteydessä.
No tämähän tehdään web.xml-tiedoston -paramterilla. Hyvä.
Mulla on servletissä longTask()-metodi, joka nimensä mukaisesti kestää kauan (on itse asiassa ikuinen luuppi, joka ei koskaan palauta mitään).
Miten saan tämän metodin käyntiin tomcatin ladattua servletin? Yritin laittaa init()-metodiin kutsua, mutta tällöin tomcat jumiutuu, koska init-metodi ei palauta. Koetin vielä tehdä niinkin, että muutin longTask()-metodin threadiksi, jonka käynnistin initissä. Sama lopputulos, serveri jumissa.
Siis kysymys kuuluu, miten pystyn kutsumaan init()-metodissa longTask()-metodia siten, että init() palauttaa ja tomcat pääsee jatkamaan eteenpäin?
Koko päivä on mennyt tapellessa tämän kanssa, olisin tiedosta hyvin, hyvin kiitollinen!
Haluaisin servletin käynnistyvän automaattisesti tomcatissa ikään kuin servicenä aina tomcatin uudelleen käynnistymisen yhteydessä.
No tämähän tehdään web.xml-tiedoston -paramterilla. Hyvä.
Mulla on servletissä longTask()-metodi, joka nimensä mukaisesti kestää kauan (on itse asiassa ikuinen luuppi, joka ei koskaan palauta mitään).
Miten saan tämän metodin käyntiin tomcatin ladattua servletin? Yritin laittaa init()-metodiin kutsua, mutta tällöin tomcat jumiutuu, koska init-metodi ei palauta. Koetin vielä tehdä niinkin, että muutin longTask()-metodin threadiksi, jonka käynnistin initissä. Sama lopputulos, serveri jumissa.
Siis kysymys kuuluu, miten pystyn kutsumaan init()-metodissa longTask()-metodia siten, että init() palauttaa ja tomcat pääsee jatkamaan eteenpäin?
Koko päivä on mennyt tapellessa tämän kanssa, olisin tiedosta hyvin, hyvin kiitollinen!
Vastaukset 4
Vanhimmat
ajat metodia, joka ei palauta mitään eikä lopu koskaan? Metodi kuitenkin vie prosessoriaikaa koko ajan.
Joko pistät Threadin välillä nukkumaan tai käytät sellaista Threadia, joka käynnistyy vaikka joka tasatunti.
Niin, totta kai mulla on Thread.sleep(aika) siellä luupissa. Prossutehoa ei mene juuri lainkaan.
Mutta kun nääs kun init() ei palauta, ei servlet engine päästä ohjelmaa deploytumaan loppuun asti. initin näet pitää speksin mukaan palauttaa ennen kuin servlet engine jatkaa.
Mutta miten ihmeessä saan longTaskin automaattisesti käyntiin jos en initin kautta? Tän luulis olevan perusasia, mutta nyt näyttää siltä, että servletti on pakko käynnistää käsin kutsumalla sen urlia selaimesta.
Vaan kun tarkoitus olisi, että jos loppukäyttäjä buuttaa koneen, käynnistyy palvelu automaattisesti ilman eri toimenpiteitä.
No laitat sen long taskin threadiin niin inittikin voi palauttaa heti kun longtask on vaan käynnistetty.
Näinhän se meni:
....
public void init(){
LongTask longtask = new LongTask();
longtask.start();
return;
}
... ja longtaskissa on sitten se ikuinen luuppi.
Mutta perskules, serveri oli jotenkin juntturassa ja piti käynnistää uudelleen. Tuo tomcat aiheuttaa kyllä harmaita hiuksia mulle kerta toisensa jälkeen.
Kiitoksia, juuri noinhan se meni!