Hi!

Please note that javax.inject.Singleton is completely underspecified!
I suggest to not use it at all ;)

LieGrue,
strub

--- On Fri, 7/8/11, Gerhard Petracek <gerhard.petra...@gmail.com> wrote:

> From: Gerhard Petracek <gerhard.petra...@gmail.com>
> Subject: Re: @Disposes and webapp shutdown and @Singleton/@ApplicationScope
> To: "MyFaces Discussion" <users@myfaces.apache.org>
> Date: Friday, July 8, 2011, 7:31 AM
> hi pieter,
> 
> in the end you have to shutdown one of both scopes first.
> if you change the
> behaviour, you would have a problem the other way round.
> please always use @ApplicationScoped instead of @Singleton
> (in terms of cdi
> @Singleton isn't specified very clearly - it's part of jsr
> 330 which doesn't
> say a lot about it).
> 
> regards,
> gerhard
> 
> http://www.irian.at
> 
> Your JSF powerhouse -
> JSF Consulting, Development and
> Courses in English and German
> 
> Professional Support for Apache MyFaces
> 
> 
> 
> 2011/7/8 Pieter Martin <pieter.mar...@gmail.com>
> 
> > Hi,
> >
> > I have an application scoped producer method together
> with a disposer which
> > sits in a @javax.inject.Singleton scoped class.
> >
> > @Singleton
> > public class DbProducer implements Serializable {
> >    @ApplicationScopedDb
> >    @Produces
> >    @ApplicationScoped
> >    public NakedGraph
> getApplicationScopedNakedGraph**() {
> >        logger.info("produce
> Application scoped db");
> >        NakedGraph db =
> createNakedGraph();
> >        return db;
> >    }
> >
> >    public void
> closeApplicationScoped(@**Disposes @ApplicationScopedDb
> > NakedGraph db) {
> >        logger.info("shutdown
> Application scoped db");
> >        if (db != null) {
> >           
> db.shutdown();
> >        }
> >    }
> > }
> >
> > On shutting down jetty I get the following exception.
> >
> > SEVERE: Exception thrown while destroying bean
> instance :
> > [Name:null,WebBeans Type:PRODUCERMETHOD,API
> Types:[com.tinkerpop.**
> >
> blueprints.pgm.Graph,java.io.**Serializable,org.nakeduml.**
> >
> tinker.runtime.NakedGraph,com.**tinkerpop.blueprints.pgm.**
> >
> IndexableGraph,java.lang.**Object,com.tinkerpop.**blueprints.pgm.**
> > TransactionalGraph],**Qualifiers:[javax.enterprise.**
> >
> inject.Any,org.nakeduml.**tinker.runtime.**ApplicationScopedDb]]
> > java.lang.NullPointerException
> >    at
> org.apache.webbeans.component.**ProducerMethodBean.**disposeDefault(
> > **ProducerMethodBean.java:346)
> >    at
> org.apache.webbeans.component.**ProducerMethodBean.dispose(**
> > ProducerMethodBean.java:306)
> >    at
> org.apache.webbeans.component.**ProducerMethodBean.**
> > destroyInstance(**ProducerMethodBean.java:298)
> >    at
> org.apache.webbeans.component.**AbstractOwbBean.**
> > destroyCreatedInstance(**AbstractOwbBean.java:277)
> >    at
> org.apache.webbeans.portable.**creation.AbstractProducer.**
> > dispose(AbstractProducer.java:**91)
> >    at
> org.apache.webbeans.component.**InjectionTargetWrapper.**dispose(**
> > InjectionTargetWrapper.java:**116)
> >    at
> org.apache.webbeans.component.**AbstractOwbBean.destroy(**
> > AbstractOwbBean.java:242)
> >    at
> org.apache.webbeans.context.**AbstractContext.**destroyInstance(**
> > AbstractContext.java:257)
> >    at
> org.apache.webbeans.context.**AbstractContext.destroy(**
> > AbstractContext.java:279)
> >    at
> org.apache.webbeans.web.**context.WebContextsService.**
> >
> destroyApplicationContext(**WebContextsService.java:485)
> >    at
> org.apache.webbeans.web.**context.WebContextsService.**
> > endContext(WebContextsService.**java:200)
> >    at
> org.apache.webbeans.web.**context.WebContextsService.**
> > destroy(WebContextsService.**java:155)
> >    at
> org.apache.webbeans.lifecycle.**AbstractLifeCycle.**stopApplication(
> > **AbstractLifeCycle.java:149)
> >    at
> org.apache.webbeans.web.**lifecycle.**WebContainerLifecycle.**
> > stopApplication(**WebContainerLifecycle.java:87)
> >    at
> org.apache.webbeans.servlet.**WebBeansConfigurationListener.**
> >
> contextDestroyed(**WebBeansConfigurationListener.**java:96)
> >    at
> org.eclipse.jetty.server.**handler.ContextHandler.doStop(**
> > ContextHandler.java:679)
> >    at
> org.eclipse.jetty.servlet.**ServletContextHandler.doStop(**
> > ServletContextHandler.java:**143)
> >    at
> org.eclipse.jetty.webapp.**WebAppContext.doStop(**
> > WebAppContext.java:473)
> >    at
> org.eclipse.jetty.util.**component.AbstractLifeCycle.**
> > stop(AbstractLifeCycle.java:**83)
> >    at
> org.eclipse.jetty.server.**handler.HandlerCollection.**
> > doStop(HandlerCollection.java:**245)
> >    at
> org.eclipse.jetty.util.**component.AbstractLifeCycle.**
> > stop(AbstractLifeCycle.java:**83)
> >    at
> org.eclipse.jetty.server.**handler.HandlerWrapper.doStop(**
> > HandlerWrapper.java:101)
> >    at
> org.eclipse.jetty.server.**Server.doStop(Server.java:319)
> >    at
> org.eclipse.jetty.util.**component.AbstractLifeCycle.**
> > stop(AbstractLifeCycle.java:**83)
> >    at
> org.nakeduml.jetty.StartJetty$**MonitorThread.run(StartJetty.**
> > java:92)
> >
> >
> > Some investigation shows that the base exception is a
> >
> > "new ContextNotActiveException("**WebBeans context
> with scope type
> > annotation @" + scopeType.getSimpleName() + " does not
> exist within current
> > thread");"
> >
> > This exception however gets swallowed by the above
> exception that is thrown
> > in the finally part of
> ProducerMethodBean.**disposeDefault.
> > The scope that is not active is
> javax.inject.Singleton
> >
> > I subsequently replaced @Singleton with
> @ApplicationScope and then
> > everything works.
> >
> > Should @Singleton also have worked and when should one
> use which
> > annotation?
> >
> > Thanks
> > Pieter
> >
>

Reply via email to