Servletin autom. käynnistys: init-metodi

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!
4209
Äänestä

Muut lukivat myös

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.

Äänestä
  • 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ä.

    Äänestä

  • Vaikea juttu kirjoitti:

    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.

    Äänestä

  • jepssaak kirjoitti:

    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!

    Äänestä

Kommentoi aloitusta


Vaikea juttu kirjoitti:

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!

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu