8 komentářů k článku Java na webovém serveru: Vlastní JSP značky a servlety:

  1. Ladislav Thon

    Re: Java na webovém serveru: Vlastní JSP značky a servlety

    Jen drobnost, load-on-startup neznamená počet instancí servletu (ta je vždycky jedna), ale pořadí, v jakém se servlety inicializují.

    1. František KučeraAutor příspěvku

      Re: Java na webovém serveru: Vlastní JSP značky a servlety

      Díky za opravu, je to tak.

      BTW: někdy může existovat více instancí jednoho serveru – záleží na implementaci AS a použití rozhraní SingleThreaded­Model.

      1. František KučeraAutor příspěvku

        Re: Java na webovém serveru: Vlastní JSP značky a servlety

        sorry :-)
        serveru → servletu
        (to je tak, když člověk už myslí na druhou část věty)

      2. Ladislav Thon

        Re: Java na webovém serveru: Vlastní JSP značky a servlety

        To je pravda, ale SingleThreadModel je deprecated a uživatel by v každém případě měl předpokládat, že servlet je jen jeden = musí být thread-safe (ideálně bezestavový – ač je to možná s podivem, obvykle to vůbec není problém –, jiná řešení velmi rychle vedou k výkonnostním problémům).

      3. Guido

        Re: Java na webovém serveru: Vlastní JSP značky a servlety

        To je samozřejmě nesmysl – instance servletu je vždy jen jedna a pro každý request vytváří konejner nový thred. Viz specifikace.

        Jedinou výjimkou, kdy existuje více instancí servletu, je, pokud je aplikace nasazená v distribuovaném prostředí – na více JVM. Ale i tak, v každém JVM je pouze jedna instance každého servletu. Opět viz specifikace.

        BTW, kdybyste dělal SCWCD, tak byste to věděl. Rovněž mohu doporučit skvělou knížku z edice Head First, kde je toto několikrát, s odkazem na specifikaci, zdůrazňováno.

        1. František KučeraAutor příspěvku

          Re: Java na webovém serveru: Vlastní JSP značky a servlety

          Doporučuji příslušnou specifikaci dostudovat. Sice se tam píše, že:

          For a servlet not hosted in a distributed environment (the default), the servlet container must use only one instance per servlet declaration.

          ale zároveň:

          However, for a servlet implementing the SingleThreadModel interface, the servlet container may instantiate multiple instances to handle a heavy request load

          Nicméně asi nemá cenu se o tom přít – užitečnost vícenásobných instancí téhož servletu je sporná (asi taky proto je SingleThreadModel zavržený) a navíc mi přijde celkem přirozené psát servlety tak, aby byly vláknově bezpečné – co jde, tak bezstavově a pokud jsou potřeba nějaké proměnné (třeba kolekce) na úrovni třídy, tak počítat s tím, že k nim může přistupovat víc vláken současně.

          1. Guido

            Re: Java na webovém serveru: Vlastní JSP značky a servlety

            Specifikace jest dostudována. Neříká se v ní, jakým způsobem se má SingleThreadModel implementovat – je to vendor specific. Navíc je STM od verze 2.4 deprecated a ani předtím nebylo doporučeno ho používat.

Napsat komentář

Tato diskuse je již příliš stará, pravděpodobně již vám nikdo neodpoví. Pokud se chcete na něco zeptat, použijte diskusní server Devel.cz

Zdroj: https://www.zdrojak.cz/?p=3195