dev@glassfish.java.net

Re: WEB0600: failed to deploy and has been disabled: java.lang.NullPointerException

From: Scott Oaks <Scott.Oaks_at_Sun.COM>
Date: Fri, 03 Aug 2007 10:34:21 -0400

On Fri, 2007-08-03 at 10:30, Lloyd L Chambers wrote:
> You mean the key or the value? A null value should be fine. Since
> when does HashTable prohibit a null value?

I mean the value, which is ejb.getType(). Hashtable has always
prohibited null values and keys. HashMap allows them.

-Scott

>
> On Aug 3, 2007, at 7:24 AM, Scott Oaks wrote:
>
> > Actually, the problem is in java.util.Hashtable, which is the class
> > that's throwing the exception. A quick look at that code shows it's
> > throwning an exception because the value is null -- so the question is
> > why ejb.getType() returns null in this deployment.
> >
> > -Scott
> >
> > On Fri, 2007-08-03 at 10:09, Lloyd L Chambers wrote:
> >> The problem seems to be the line in NamingResources that reads:
> >>
> >> entries.put( ejb.getName(), ejb.getType() );
> >>
> >> Reading back up the stack, it appears that 'ejb' cannot be null,
> >> implying that 'entries' must be null.
> >>
> >> My reading of NamingResources shows that it is subtly not thread
> >> safe; none of its instance variables are 'final', which is a problem
> >> if it is created by one thread, and (ever) used by another. Try
> >> making them 'final' and see if the issue goes away. See Java
> >> Concurrency 16.2.
> >>
> >>
> >> Lloyd
> >>
> >> On Aug 3, 2007, at 12:24 AM, Cheng Fang wrote:
> >>
> >>> Thanks to Hong and Jan for the offer to help. With Jan's patch, I
> >>> got this in server.log [1]
> >>>
> >>> As I said earlier, despite this error, deployment *did succeed* and
> >>> the app *was* put into service. But the servlet filter is not
> >>> invoked at all, and may be other random behaviors.
> >>>
> >>> From the stacktrace, it's a ejb-ref that has caused this NPE. This
> >>> is how I declare it in web.xml:
> >>> <ejb-ref>
> >>> <ejb-ref-name>helloBean2</ejb-ref-name>
> >>>
> >>> <remote>com.sun.ts.tests.ejb30.common.helloejbjar.HelloRemoteIF</
> >>> remote>
> >>> </ejb-ref>
> >>>
> >>> If I add a <ejb-ref-type>Session</ejb-ref-type>, everything works
> >>> fine. <ejb-ref-type> is optional in JavaEE 5 and all my modules
> >>> are JavaEE 5 versions.
> >>>
> >>> The similar <ejb-ref> declarations work in appclient and ejb. It
> >>> failed with web container, probably there is legacy tomcat code
> >>> involved here?
> >>>
> >>> This is somewhat related to issue 1265, which I filed in 10/2006
> >>> https://glassfish.dev.java.net/issues/show_bug.cgi?id=1265 (Fail to
> >>> deploy apps when ejb-ref element does not have ejb-ref-type)
> >>>
> >>> I have created a simple ejb module and web module to reproduce this
> >>> problem. Attached are a ejb-jar (foo-ejb.jar) and a NetBeans
> >>> projects for the web module.
> >>>
> >>> Thanks,
> >>> -cheng
> >>>
> >>>
> >>> [1]
> >>> [#|2007-08-02T20:47:29.875-0400|SEVERE|sun-appserver9.1|
> >>> javax.enterprise.system.container.web|_ThreadID=14;_Th
> >>> readName=pool-1-thread-6;_RequestID=0243bda4-216d-42fe-a7c7-
> >>> b07ef010d5ec;|WEB0600: WebModule [/ejb3_assembly_m
> >>> etainfandlibdir] failed to deploy and has been disabled^M
> >>> java.lang.NullPointerException^M
> >>> at java.util.Hashtable.put(Hashtable.java:396)^M
> >>> at org.apache.catalina.deploy.NamingResources.addEjb
> >>> (NamingResources.java:175)^M
> >>> at org.apache.catalina.core.StandardContext.addEjb
> >>> (StandardContext.java:2334)^M
> >>> at
> >>> com.sun.enterprise.web.TomcatDeploymentConfig.configureContextEjb
> >>> (TomcatDeploymentConfig.java:298)^
> >>> M
> >>> at
> >>> com.sun.enterprise.web.TomcatDeploymentConfig.configureEjbReference
> >>> (TomcatDeploymentConfig.java:243
> >>> )^M
> >>> at
> >>> com.sun.enterprise.web.TomcatDeploymentConfig.configureWebModule
> >>> (TomcatDeploymentConfig.java:195)^M
> >>> at com.sun.enterprise.web.WebModuleContextConfig.start
> >>> (WebModuleContextConfig.java:240)^M
> >>> at
> >>> com.sun.enterprise.web.WebModuleContextConfig.lifecycleEvent
> >>> (WebModuleContextConfig.java:156)^M
> >>> at
> >>> org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent
> >>> (LifecycleSupport.java:143)^M
> >>> at org.apache.catalina.core.StandardContext.start
> >>> (StandardContext.java:5086)^M
> >>> at com.sun.enterprise.web.WebModule.start(WebModule.java:
> >>> 327)^M
> >>> at com.sun.enterprise.web.LifecycleStarter.doRun
> >>> (LifecycleStarter.java:58)^M
> >>> at com.sun.appserv.management.util.misc.RunnableBase.runSync
> >>> (RunnableBase.java:296)^M
> >>> at com.sun.appserv.management.util.misc.RunnableBase.run
> >>> (RunnableBase.java:330)^M
> >>> at java.util.concurrent.Executors$RunnableAdapter.call
> >>> (Executors.java:417)^M
> >>> at java.util.concurrent.FutureTask$Sync.innerRun
> >>> (FutureTask.java:269)^M
> >>> at java.util.concurrent.FutureTask.run(FutureTask.java:123)^M
> >>> at java.util.concurrent.ThreadPoolExecutor$Worker.runTask
> >>> (ThreadPoolExecutor.java:650)^M
> >>> at java.util.concurrent.ThreadPoolExecutor$Worker.run
> >>> (ThreadPoolExecutor.java:675)^M
> >>> at java.lang.Thread.run(Thread.java:595)^M
> >>> |#]^M
> >>>
> >>> Jan.Luehe_at_Sun.COM wrote:
> >>>> Hi Cheng,
> >>>>
> >>>> Cheng Fang wrote:
> >>>>
> >>>>> Hi,
> >>>>>
> >>>>> I'm seeing the following exception when deploying my app to a
> >>>>> recent nightly build. I couldn't figure out what could've caused
> >>>>> the NPE. Turning on logging FINE in web-container didn't give
> >>>>> more details. Verifier also reported success on my app.
> >>>>>
> >>>>> I searched a few modules in my glassfish workspace but couldn't
> >>>>> find where this NPE is from (I don't have all modules in my
> >>>>> workspace). Although the error message says the web module has
> >>>>> been disabled, I can still access this webapp, except a servlet
> >>>>> filter is not invoked.
> >>>>>
> >>>>> Could someone shed light on this?
> >>>>>
> >>>>> Thanks,
> >>>>> -cheng
> >>>>>
> >>>>> [#|2007-08-02T04:18:34.078-0400|INFO|sun-appserver9.1|
> >>>>> javax.enterprise.system.core.classloading|_ThreadID=15;_
> >>>>> ThreadName=httpWorkerThread-4848-0;ejb3_assembly_metainfandlibdir;
> >>>>> |L
> >>>>> DR5010: All ejb(s) of [ejb3_assembly_metai
> >>>>> nfandlibdir] loaded successfully!|#]^M
> >>>>> ^M
> >>>>> [#|2007-08-02T04:18:34.093-0400|SEVERE|sun-appserver9.1|
> >>>>> javax.enterprise.system.container.web|_ThreadID=15;_Th
> >>>>> readName=httpWorkerThread-4848-0;/
> >>>>> ejb3_assembly_metainfandlibdir;java.lang.NullPointerException;_Req
> >>>>> ue
> >>>>> stID=63c
> >>>>> 9ee02-0fcd-45c8-a681-e8b600cc0f03;|WEB0600: WebModule [/
> >>>>> ejb3_assembly_metainfandlibdir] failed to deploy and h
> >>>>> as been disabled: [java.lang.NullPointerException].|#]^M
> >>>>
> >>>>
> >>>> It is unfortunate that the exception is swallowed like that,
> >>>> without giving any stacktrace.
> >>>>
> >>>> Can you please try out the attached patch, which will log the
> >>>> exception's stacktrace?
> >>>> Hopefully, that will give you and Hong the information you are
> >>>> looking for.
> >>>>
> >>>> Thanks!
> >>>>
> >>>>
> >>>> Jan
> >>>>
> >>>>
> >>>>> ^M
> >>>>> [#|2007-08-02T04:18:34.937-0400|INFO|sun-appserver9.1|
> >>>>> javax.enterprise.system.tools.admin|_ThreadID=15;_Thread
> >>>>> Name=httpWorkerThread-4848-0;C:/ws/sjsas90/publish/glassfish/
> >>>>> domains/domain1\generated\xml\j2ee-apps\ejb3_asse
> >>>>> mbly_metainfandlibdir\ejb3_assembly_metainfandlibdirClient.jar;|
> >>>>> ADM1040:Client-jar location:[C:/ws/sjsas90/pub
> >>>>> lish/glassfish/domains/domain1\generated\xml\j2ee-apps
> >>>>> \ejb3_assembly_metainfandlibdir\ejb3_assembly_metainfand
> >>>>> libdirClient.jar]|#]^M
> >>>>>
> >>>>> ------------------------------------------------------------------
> >>>>> --
> >>>>> -
> >>>>> To unsubscribe, e-mail: dev-unsubscribe_at_glassfish.dev.java.net
> >>>>> For additional commands, e-mail: dev-help_at_glassfish.dev.java.net
> >>>>>
> >>>>
> >>>> -------------------------------------------------------------------
> >>>> --
> >>>> ---
> >>>>
> >>>> Index: WebModuleContextConfig.java
> >>>> ===================================================================
> >>>> RCS file: /cvs/glassfish/appserv-core/src/java/com/sun/enterprise/
> >>>> web/WebModuleContextConfig.java,v
> >>>> retrieving revision 1.12
> >>>> diff -u -r1.12 WebModuleContextConfig.java
> >>>> --- WebModuleContextConfig.java 5 May 2007 05:36:02 -0000
> >>>> 1.12
> >>>> +++ WebModuleContextConfig.java 2 Aug 2007 17:50:54 -0000
> >>>> @@ -241,9 +241,11 @@
> >>>>
> >>>> webBundleDescriptor);
> >>>> } catch (Throwable t){
> >>>> context.setAvailable(false);
> >>>> - Object[] objs = {context.getName(), t};
> >>>> - logger.log(Level.SEVERE,
> >>>> -
> >>>> "webModuleContextConfig.webModuleDisabled", objs);
> >>>> + String msg = _rb.getString(
> >>>> + "webModuleContextConfig.webModuleDisabled");
> >>>> + msg = MessageFormat.format(msg,
> >>>> + new Object[]
> >>>> { context.getName() });
> >>>> + logger.log(Level.SEVERE, msg, t);
> >>>> }
> >>>>
> >>>> context.setConfigured(false);
> >>>>
> >>>> Index: LogStrings.properties
> >>>> ===================================================================
> >>>> RCS file: /cvs/glassfish/appserv-commons/src/java/com/sun/logging/
> >>>> enterprise/system/container/web/LogStrings.properties,v
> >>>> retrieving revision 1.39
> >>>> diff -u -r1.39 LogStrings.properties
> >>>> --- LogStrings.properties 10 Jul 2007 19:44:19 -0000
> >>>> 1.39
> >>>> +++ LogStrings.properties 2 Aug 2007 17:51:47 -0000
> >>>> @@ -216,7 +216,7 @@
> >>>> webmodule.alternateDocBase.illegalUrlPattern=WEB0504: URL pattern
> >>>> {0} for alternate docbase is invalid
> >>>> webmodule.alternateDocBase.crlfInUrlPattern=WEB0505: URL pattern
> >>>> {0} for alternate docbase contains CR or LF or both
> >>>>
> >>>> -webModuleContextConfig.webModuleDisabled=WEB0600: WebModule [{0}]
> >>>> failed to deploy and has been disabled: [{1}].
> >>>> +webModuleContextConfig.webModuleDisabled=WEB0600: WebModule [{0}]
> >>>> failed to deploy and has been disabled
> >>>> webModuleContextConfig.missingDefaultWeb.xml=WEB0601: Missing
> >>>> default web.xml, using application web.xml only
> >>>> webModuleContextConfig.defaultMissing=WEB0602: Missing default-
> >>>> web.xml, using application web.xml only
> >>>> webModuleContextConfig.defaultParse=WEB0603: Parse error in
> >>>> default-web.xml
> >>>>
> >>>>
> >>>> -------------------------------------------------------------------
> >>>> --
> >>>> ---
> >>>>
> >>>> -------------------------------------------------------------------
> >>>> --
> >>>> To unsubscribe, e-mail: dev-unsubscribe_at_glassfish.dev.java.net
> >>>> For additional commands, e-mail: dev-help_at_glassfish.dev.java.net
> >>>>
> >>>> <foo-ejb.jar>
> >>>> <simple-web-project.jar>
> >>> --------------------------------------------------------------------
> >>> -
> >>> To unsubscribe, e-mail: dev-unsubscribe_at_glassfish.dev.java.net
> >>> For additional commands, e-mail: dev-help_at_glassfish.dev.java.net
> >>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: dev-unsubscribe_at_glassfish.dev.java.net
> >> For additional commands, e-mail: dev-help_at_glassfish.dev.java.net
> >>
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: dev-unsubscribe_at_glassfish.dev.java.net
> > For additional commands, e-mail: dev-help_at_glassfish.dev.java.net
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe_at_glassfish.dev.java.net
> For additional commands, e-mail: dev-help_at_glassfish.dev.java.net
>