Dobry den
1) JSP generuje svuj vystup do bufferu. Pokud je buffer plny odesle ho
na klienta. Pokud jiz jiz byl obsah bufferu odeslan neni mozne dat
vedet, ze se neco v dalsi casti vystupu pokazilo. Pokud obsah bufferu
odeslan nebyl posle se chybova stranka.
2) Vytisknout nekolik set retezcu samozrejme mozne je, pouze pri jejich
generovani nesmi dojit k chybe, jinak samozrejme nastane bod 1)
3) Pokud generuji nejaky vetsi vystup je vhodne pouzit nejakou formu
strankovani.
4) Nez to zacnu renderovat je vhodne mit data, ze kterych to generuji v
pameti. Bez strankovani je to sice narocnejsi na pamet, ale aspon mam
jistotu, ze nebude dochazet k vyjimkam pri ziskavani dat.
(Nepredpokladam, ze timto zpusobem generujete 50ti strankove reporty)
Vyse uvedene jsou pouze takove obecne poznamky. Ve Vasem pripade bych
vubec neresil jsp, ale venoval bych usili hledani problemu kolem te
tree2 komponenty, problem s JSP je pouze druhotny.
Soustredil bych se na nasledujici:
1) Kde mate ulozen model toho stromu
(application,session,request,t:saveState). Mohl by byt problem pri
obnove stavu komponenty, pokud by jiz nejaka cast neexistovala a model
byl v request scope.
2) Pokud se dotahuji data dynamicky pri renderovani nemuze dojit k
nejake vyjimce tam?
3) Pokud je ten strom nejaky zivejsi (casto se meni) zkusil bych mezi
dvema requesty jako jiny uzivatel ten strom zmenit, jestli to prezije
nasledujici request.
Preji pekny den
Karel Zacek
Jakub Příkazský wrote:
Dobrý den,
zkusili jsme experimentovat z různou velikostí bufferu a chyba se
projevuje stejně. Bohužel se projevuje pouze u zákazníka, takže se nám
ji nedaří nasimulovat ve vývojovém prostředí.
Mám jen jednu otázku: Přijde mi hodně zvláštní, že není možné
vytisknout do stránky "několik stovek řetězců". Toto chování JSP je
běžné, nebo se jedná o nějakou chybu nebo jsem něco nepochopil? Přeci
nebudu nastavovat velikost bufferu podle počtu záznamu v databázi,
například pokud bych dělal nějaký report apod.
děkuji Jakub
Jakub Příkazský napsal(a):
Dobrý den,
děkuji za vyčerpávající odpověď. JSF používají pro zobrazení JSP viz
http://en.wikipedia.org/wiki/JavaServer_Faces, takže by nám mohla být
vaše rada být hodně užitečná.
Zdravím
Jakub Příkazský
Peter Stibrany napsal(a):
Dobry den,
priznam sa, ze neviem ktore z nastaveni v konfiguracii tomcatu toto
ovplyvnuju. Ja ked som dany problem pozoroval, tak som menil velkost
bufferu priamo v JSP stranke pouzitim direktivy <[EMAIL PROTECTED] buffer="..."
%>.
Nasledujuca JSP stranka demonstruje problem:
<[EMAIL PROTECTED] buffer="9kb" %>
<%
for (int i = 0; i < 1000; i++) {
out.println("" + i + " Bez domu Ivane, ceka te Natasa<br />");
if (i == 350) {
out.println("" + i + " Ooops<br />");
throw new IllegalStateException("fail: " + i);
}
}
%>
Uvedena velkost buffera 9kb sposobi, ze klient dostane riadky 0 az
221, hoci JSP stranka padne az pri iteracii 350. Detailnejsi pohlad na
odpoved zo servera ukaze, ze odpoved (okrem hlaviciek a po odstraneni
chunkovania) ma skutocne presne 9216 bajtov, teda 9kb.
Tento priklad ukazuje:
* klient dostane odpoved, ale nie kompletnu (riadky 222 az 350 sa mu
uz nikdy neposlu)
* klient nedostane ziadnu informaciu o chybe
* chyba (vynimka) je zalogovana v logoch aplikacie
Ked sme raz na tento problem narazili, a zvacsili sme velkost buffera
dostatocne na to, aby sa nestihlo klientovi nic poslat, tak pri
zlyhani JSP stranky a vyhodeni vynimky poslal Tomcat namiesto kusku
odpovede radsej chybovu stranku s vynimkou. To nam pomohlo zistit, co
sa vlastne stalo.
Zial neviem Vam poradit, ako tieto znalosti aplikovat na prostredie
JSF :-(
-ps
2008/8/21 Jakub Příkazský <[EMAIL PROTECTED]>:
Peter Stibrany napsal(a):
Děkuji za odpověď,
zkusil jsem změnit nastavení komponenty tree2, na otevírání uzlů na
serveru na clientSideToggle=false a už se mi alespoň stromek zobrazí.
Pokud ale zkusím rozbalit několik dalších uzlů (při prvním otevření
jsou
zbalené), tak se problém opět objeví. Pouze jsem se chtěl zeptat,
které
hodnoty konfigurace Tomcatu měníte viz
(http://tomcat.apache.org/tomcat-5.5-doc/config/http.html) nebo si
myslíte, že mohou mít vliv? Zkusil jsem změnit bufferSize v
konfiguraci
http konektoru, ale nezpozoroval jsem žádný vliv. Zjistil jsem, že se
maximální velikost vykreslené stránky pohybuje okolo 52KB. Používám
Tomcat 5.5.25.
S pozdravem
Jakub Příkazský
Prajem pekny den,
Neviem o JSF dost nato, aby som vedel, ci nas problem suvisi s Vasim,
ale ved posudte... my pouzivame Tomcat, Servlety a JSP stranky.
Pri naozaj velkych vystupoch z JSP stranky sa nam obcas stane, ze
pocas vykonavania stranky sa cast vystupu stihne poslat na klienta
(ked sa zaplni buffer), a az potom vykonavanie JSP stranky spadne.
Problem je, ze klient uz vidi tu cast, co dostal -- ale viac nikdy
nedostane, lebo JSP stranka zlyhala. Vynimku vidiet v logoch
aplikacie
(ak nie je niekde odchytena a zabudnuta), pohlad klienta je vsak
taky,
ze dostane len prvu cast stranky a nic viac, ziadnu chybu.
Pozrite sa na vystup, ktory klient dostane ... ci nahodou nema
velkost
nasobku velkosti buffera. To by mohlo indikovat podobny problem. Ak
vsak nevidite ziadne problemy v logoch, tak bude tazke to najst (a
mozno to ani nesuvisi).
S pozdravom,
-Peter Stibrany
2008/8/20 Jakub Příkazský <[EMAIL PROTECTED]>:
Zdravím konferenci,
v aplikaci se mi objevuje naprosto záhadná chyba. Některé záznamy
nelze
úplně zobrazit, vykreslí se pouze část stránky (několik uzlů a
pak už jen
kousek nějakého html). Pro zobrazení záznamu používáme stromek,
komponenta
tree2 MyFaces viz. (http://wiki.apache.org/myfaces/Tree2). Díval
jsem se do
logu a nevidím nikde žádné chybu - renderovací cyklus JSF projde
celý, data
jsou také načtená. V dokumentaci stromku jsem našel zmínku pouze
o vysoké
paměťové náročnosti pokud je uzlů hodně a je zapnuté rozbalování na
klientovi - clientSideToggle=true, ale to není náš případ (cca 40
uzlů).
Zkoušel jsem na serveru přístup přes lokální alias (jestli se
neděje něco po
cestě), ale chyba se projevuje stejně. Napadá někoho, jak problém
řešit?
díky Jakub