ArrayIndexOutOfBoundsException arrête le serveur géré WLS_REPORTS dans 11g
S'APPLIQUE À :
Oracle Reports Developer - Version 11.1.1.6.0 à 11.1.2.2.0 [Release 11g]
Les informations de ce document s'appliquent à toutes les plateformes.
SYMPTÔMES
Lors de l'exécution de rapports avec la commande RWSERVLET dans Reports 11gR2, certaines requêtes de rapport renvoient aux utilisateurs l'erreur : ArrayIndexOutOfBoundsException, qui fait tomber le serveur géré WLS_REPORTS.
http://hostname:port/reports/rwservlet?server=reportservername&userid=name/password&report=abc.rdf&desformat=PDF&destype=cache¶mform=YES
Erreur
Les fichiers WLS_REPORTS.log & WLS_REPORTS-diagnostic.log affichent des erreurs semblables à celles ci-dessous
####<Jul 7, 2014 6:03:00 PM IST> <Error> <HTTP> <INWPAPAPP60> <WLS_REPORTS> <[ACTIVE] ExecuteThread: '1' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <00iN2zpJDuiFw00Fzzw0w00000pO003DRG> <1404736380718> <BEA-101020> <[ServletContext@1313012353[app:reports module:/reports path:/reports spec-version:2.5 version:11.1.2]] Servlet failed with Exception
java.lang.ArrayIndexOutOfBoundsException: 0
at oracle.reports.utility.TraceHandler.writeln(TraceHandler.java:150)
at oracle.reports.rwclient.RWClient.runReport(RWClient.java:2197)
at oracle.reports.rwclient.RWClient.processRequest(RWClient.java:1988)
at oracle.reports.rwclient.RWClient.doGet(RWClient.java:512)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:301)
at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at oracle.security.jps.ee.http.JpsAbsFilter$1.run(JpsAbsFilter.java:119)
at java.security.AccessController.doPrivileged(Native Method)
at oracle.security.jps.util.JpsSubject.doAsPrivileged(JpsSubject.java:324)
at oracle.security.jps.ee.util.JpsPlatformUtil.runJaasMode(JpsPlatformUtil.java:460)
at oracle.security.jps.ee.http.JpsAbsFilter.runJaasMode(JpsAbsFilter.java:103)
at oracle.security.jps.ee.http.JpsAbsFilter.doFilter(JpsAbsFilter.java:171)
at oracle.security.jps.ee.http.JpsFilter.doFilter(JpsFilter.java:71)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at oracle.dms.servlet.DMSServletFilter.doFilter(DMSServletFilter.java:163)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3730)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3696)
CAUSE
La valeur de StuckThreadMaxTime était trop basse, ce qui a causé l'erreur/le problème.
SOLUTION
1. Connectez-vous à l'Administration Console de FMW 11g.
2. Dans la section Domain Structure, allez à ClassicDomain > Environment > Servers
3. Sélectionnez le serveur géré WLS_REPORTS et cliquez sur l'onglet Tuning.
4. Augmentez la valeur 'Stuck Thread Max Time'.
5. Redémarrez le serveur pour que les modifications prennent effet.
Stuck Thread Max Time : nombre de secondes pendant lesquelles un thread doit travailler sans interruption avant que ce serveur le considère comme bloqué.
Par exemple, si vous réglez cette valeur à 600 secondes, WebLogic Server considère qu'un thread est "bloqué" (stuck) après 600 secondes d'utilisation continue.
Dans Web Logic Server 9.x et ultérieur, il est recommandé d'utiliser le ServerFailureTriggerMBean dans l'OverloadProtectionMBean. Le ServerFailureTriggerMBean fait passer le serveur à l'état FAILED après la détection du nombre indiqué de threads bloqués. L'OverloadProtectionMBean offre des options pour suspendre ou arrêter un serveur en échec.
Attribut MBean : ServerMBean.StuckThreadMaxTime
Valeur minimale : 0
Valeur maximale : 2147483647