Voor een webapplicatie moet een gebruiker een x - aantal vragen beantwoorden. Dit gebeurt door middel van een simpel formulier. Er wordt een vraag getoond met een aantal antwoorden, de gebruiker klikt het juiste antwoord en en klikt vervolgens op volgende.
Het formulier wordt door middel van een POST naar een Struts Action gedirrigeerd. Deze actie verwerkt de input van de gebruiker, maakt de volgende vraag klaar en forward vervolgens naar dezelfde JSP pagina waar de vraag weer wordt getoond.
Het probleem
Om de applicatie te testen moet soms door deze hele serie vragen heen gelopen worden. Een van de testers houd hierbij de enter knop ingedrukt en klikt vervolgens de vragen aan. Op een gegeven ogenblik klapt de EJB Session bean eruit met de volgende error:
Na nader onderzoek bleek dat de struts actie meerdere keren dezelfde formulier binnenkreeg. In de logging zag ik een aantal keer achter elkaar dat dezelfde vraagnummer gebruikt werd om te verwerken. Volgens mij wordt er bij elke POST request een nieuwe thread aangemaakt en gaat het daar mis.
De vraag
Hoe zorg ik ervoor dat IE precies een keer een formulier submit en dat de 'bug' met het inhouden van de entertoets niet meer werkt?
Wat heb ik zelf geprobeerd
Het formulier wordt door middel van een POST naar een Struts Action gedirrigeerd. Deze actie verwerkt de input van de gebruiker, maakt de volgende vraag klaar en forward vervolgens naar dezelfde JSP pagina waar de vraag weer wordt getoond.
Het probleem
Om de applicatie te testen moet soms door deze hele serie vragen heen gelopen worden. Een van de testers houd hierbij de enter knop ingedrukt en klikt vervolgens de vragen aan. Op een gegeven ogenblik klapt de EJB Session bean eruit met de volgende error:
code:
1
2
3
| javax.ejb.EJBException: Application Error: tried to enter Stateful bean with different tx context, contextTx: TransactionImpl:XidImpl[FormatId=257, GlobalId=steven/497, BranchQual=, localId=497], methodTx: TransactionImpl:XidImpl[FormatId=257, GlobalId=steven/493, BranchQual=, localId=493] |
Na nader onderzoek bleek dat de struts actie meerdere keren dezelfde formulier binnenkreeg. In de logging zag ik een aantal keer achter elkaar dat dezelfde vraagnummer gebruikt werd om te verwerken. Volgens mij wordt er bij elke POST request een nieuwe thread aangemaakt en gaat het daar mis.
De vraag
Hoe zorg ik ervoor dat IE precies een keer een formulier submit en dat de 'bug' met het inhouden van de entertoets niet meer werkt?
Wat heb ik zelf geprobeerd
- De thread even laten wachten met het verwerken van de vraag ( werkt niet; probleem ligt aan de client side )
- Een boolean in de sessie plaatsen indien een Struts Action bezig is. ( werkt niet; er komen alsnog requests door )
- De tester Firefox laten gebruiker
( daar doet het probleem zich niet voor )