quality@glassfish.java.net

Re: PWC1420: Error invoking ServletContainerInitializer org.apache.jasper.runtime.TldScanner

From: Jan Luehe <Jan.Luehe_at_Sun.COM>
Date: Wed, 30 Sep 2009 21:24:47 -0700

On 09/30/09 20:43, Cay Horstmann wrote:
>>
>> TldScanner is an implementation of
>> javax.servlet.ServletContainerInitializer
>> provided by the GlassFish JSP container.
>>
>> javax.servlet.ServletContainerInitializer is a new Servlet 3.0 feature.
>>
>> TldScanner is notified of a webapp's deployment and passed the
>> webapp's ServletContext to its onStartup method. Based on the
>> ServletContext, it searches for any Tag Library Descriptor (TLD)
>> resources, scan them for listener declarations, and registers the
>> declared listeners programmatically with the ServletContext.
>>
>> Can you include the stacktrace?
>>
>> Kin-man (cc'ed) is going to help you debug this further, and will
>> make any
>> improvements to the error reporting.
>>
>> Thanks,
>>
>> Jan
>
> Sure, here is the stack trace.
>
> [#|2009-09-30T20:31:07.973-0700|WARNING|glassfish|javax.enterprise.system.container.web.com.sun.enterprise.web|_ThreadID=25;_ThreadName=admin-listener-(6);|java.lang.IllegalStateException:
> ContainerBase.addChild: start: org.apache.catalina.LifecycleException:
> org.apache.catalina.LifecycleException: PWC1420: Error invoking
> ServletContainerInitializer org.apache.jasper.runtime.TldScanner
> java.lang.IllegalStateException: ContainerBase.addChild: start:
> org.apache.catalina.LifecycleException:
> org.apache.catalina.LifecycleException: PWC1420: Error invoking
> ServletContainerInitializer org.apache.jasper.runtime.TldScanner
> at
> org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:932)
>
> at
> org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:912)
> at
> org.apache.catalina.core.StandardHost.addChild(StandardHost.java:694)
> at
> com.sun.enterprise.web.WebContainer.loadWebModule(WebContainer.java:1816)
> at
> com.sun.enterprise.web.WebContainer.loadWebModule(WebContainer.java:1520)
> at
> com.sun.enterprise.web.WebApplication.start(WebApplication.java:93)
> at org.glassfish.internal.data.EngineRef.start(EngineRef.java:126)
> at org.glassfish.internal.data.ModuleInfo.start(ModuleInfo.java:229)
> at
> org.glassfish.internal.data.ApplicationInfo.start(ApplicationInfo.java:214)
>
> at
> com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:307)
>
> at
> com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:172)
>
> at
> org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:270)
>
> at
> com.sun.enterprise.v3.admin.CommandRunnerImpl$4.execute(CommandRunnerImpl.java:403)
>
> at
> com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:418)
>
> at
> com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:505)
>
> at
> com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:138)
>
> at
> com.sun.enterprise.v3.admin.AdminAdapter.doCommand(AdminAdapter.java:355)
> at
> com.sun.enterprise.v3.admin.AdminAdapter.service(AdminAdapter.java:195)
> at
> com.sun.grizzly.tcp.http11.GrizzlyAdapter.service(GrizzlyAdapter.java:166)
>
> at
> com.sun.enterprise.v3.server.HK2Dispatcher.dispath(HK2Dispatcher.java:100)
>
> at
> com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:217)
>
> at
> com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:753)
> at
> com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:661)
> at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:914)
> at
> com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:166)
>
> at
> com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
>
> at
> com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
>
> at
> com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
>
> at
> com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
> at
> com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
>
> at
> com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
>
> at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
> at
> com.sun.grizzly.util.FixedThreadPool$BasicWorker.dowork(FixedThreadPool.java:379)
>
> at
> com.sun.grizzly.util.FixedThreadPool$BasicWorker.run(FixedThreadPool.java:360)
>
> at java.lang.Thread.run(Thread.java:619)
> |#]
>
> I looked for TLD files and found none in the app but four in JAR files
> used by it:
>
> appbase.jar
> 852 Mon Nov 10 00:35:40 PST 2008 META-INF/taglib.tld
> jsfcl.jar
> 2084 Mon Nov 10 00:34:18 PST 2008 META-INF/jsfcl.tld
> jsf-extensions-dynamic-faces-0.1.jar
> 16427 Wed Feb 20 15:23:06 PST 2008 META-INF/jsf-ext-dynafaces.tld
> webui-jsf.jar
> 428913 Thu Mar 20 18:09:44 PDT 2008 META-INF/webui-jsf.tld
>
> As far as I can tell, these are all from Project Woodstock, which we
> are in the process of eliminating.
>
> I have no problem believing that one or more of those TLDs might have
> issues, but really--tell me what the problem is. This stack trace is
> just like what I get from my two year old twins--wah, wah, I am
> unhappy, I am sooooo unhappy, wah, wah, wah.
>
> Glassfish should be more mature than that.

I found that the Throwable raised by the TldScanner (and nested inside a
LifecycleException by the web container) is not being chained!

If I create a LifecycleException like this (i.e., without any message):

    throw new LifecycleException(new Exception("ABC"));

the nested Exception is chained correctly:

  java.lang.Exception: java.lang.IllegalStateException:
  ContainerBase.addChild: start: org.apache.catalina.LifecycleException:
  org.apache.catalina.LifecycleException: java.lang.Exception: ABC

However, if i create it like this (this is how the container wraps the
Throwable raised by the TldScanner):

    throw new LifecycleException("XYZ", new Exception("ABC"));

that is, including an exception message, it is not:

  java.lang.Exception: java.lang.IllegalStateException:
  ContainerBase.addChild: start: org.apache.catalina.LifecycleException:
  org.apache.catalina.LifecycleException: XYZ

I'll changed the container code to just log the message string at SEVERE
level
and wrap the Throwable inside a LifecycleException without any exception
message, so that the Throwable will get chained correctly.

I can send you a patch if you want.

Thanks!


Jan



>
> Thanks,
>
> Cay
>
>