L'exception ArrayIndexOutOfBoundException est levée sur le traitement d'une liste graphique lors de l'utilisation d'une même instance de classe dans 2 pages différentes (et de niveau de popup différent).

Explication :
Lors de l'affichage d'une page jsp, le bean qui lui est associé est instancié et cette instance est stockée sur la session HTTP.
Tant que cette instance est "utile"; c'est à dire que la page est encore affichée (ou peut l'être en retour d'appel (*RETOUR/ TERMINER)) elle est conservée sur la session.
De fait, un nouvel appel (TRAITER_PGM) à un programme Adélia déjà chargé va faire référence à la même instance de bean et conséquemment aux mêmes membres/variables du bean.

Il faut absolument avoir conscience de cette implémentation pour éviter tout effet de bord.

Le cas peut sommairement s'illustrer ainsi :

  1. PGM_1 fait un TRAITER_PGM *POPUP du PGM_2      // (PGM_1 reste sur la session car toujours affiché)
  2. PGM_2 fait un TRAITER_PGM du PGM_1                     // désormais 2 pages affichent et utilisent la même instance de classe de PGM_1


Si une des pages supprime des éléments de sa liste graphique : l'affichage de l'autre page est déphasé par rapport aux éléments réellement stockés dans la liste ce qui provoque des erreurs d'accès pour certains index.

Il faut absolument éviter ce schéma de fonctionnement : le plus simple est de créer/dupliquer des programmes.

Remarque : on peut avoir aussi ce même type d'erreur dans le cas d'une application travaillant en mode non protégé (SESSION_MODE=0 dans cfgConfiguration.properties) et que l'utilisateur travaille sur la même application web dans 2 onglets ou fenêtres du même navigateur. Pour plus d'information sur ce sujet voir l'aide Adélia sur les "pseudo-sessions HTTP".

Articles connexes