On 1/17/2013 10:49 AM, Mark Struberg wrote:
Hi Mike!

That should work, as this will be set by the EJB container. What die you use to 
start your unit tests?
TomEE-Arquillian? or DeltaSpike CdiControl-tomee ? Stock CDI is not enough in 
that case, this really needs an EJB container for handling JMS ...

Hi Mark,

I am using stock CDI for my unit tests. I don't actually send messages over JMS during unit tests, I just invoke the the onMessage to test the handling. The broken tests where minor and easily resolved.


So now I am trying to get openwebbeans-jms working and having a bugger of a time. I am just trying to get the JMS sample program to run and am getting

SEVERE: Api type [javax.jms.QueueSession] is not found with the qualifiers
Qualifiers: [@test.JmsBinding()]

So I am missing something yet...



If you use OpenEJB, then you will get OpenWebBeans transitively (OpenEJB uses 
OWB for handling all the CDI parts).
I tried using openEJB and tomee but it did not work (1.5.1 I think was the version). tomcat (and/or tomee) would not even start up. No webapps installed. Just download, install and try and run and it was broken.

There was a known bug with Windows installation. It was supposed to be fixed so I downloaded and built a snapshot...and got different errors. CDI and JMS where my main concerns so I started down the path of just adding them separately.




Regarding the @Singleton question in the other post:

* how many instances do you get if you have this Singleton in a JVM?

* how many instances do you get if you have this Singleton in multiple JVMs?
*  how many instances do you get if you have this Singleton in multple WARs?

The term 'Singleton' is really completely useless without knowing the exact 
scope of it.
E.g. a @SessionScoped bean could be thought of as a 'session-singleton', got it?
Yes, it makes sense now.

Thanks for your help
Mike




LieGrue,
strub



----- Original Message -----
From: Mike Olson <[email protected]>
To: [email protected]
Cc:
Sent: Thursday, January 17, 2013 6:28 PM
Subject: Re: WebBeans context with scope type annotation @Singleton does not 
exist within current thread

On 1/17/2013 2:54 AM, Mark Struberg wrote:


Hi Mark,

    I made the change so I no longer use the Singleton scope.

    Now I get a very similar error saying "WebBeans context with scope
type annotation @ApplicationScoped does not exist within current thread".

    This is occurring in my onMessage callback on a JMS MessageListener.

    Based on what I have read, ApplicatonScoped beans should be available
"during any message delivery to a MessageListener for a JMS topic or
queue obtained from the Java EE component environment".

    Am I missing something?  Do I need to have openwebeans-jms included
in my project?  I have not found too much documentation on what that
project provides.  Looking at the sample it seems to deal with binding
Queues/Topics to specific names defined in the beans.xml file, but maybe
it adds support for more.

    If not the jms project, then do I need to use the ContextControl
class in every single one of my message handlers?

Thanks
Mike

  Hi Mike, that's an easy one :)

  You tried to access a @javax.inject.Singleton scoped bean in a Thread where
this context didn't get activated.
  I generally recommend against using the atinject @Singleton! Contrary to
the javax.ejb.Singleton it has an undefined lifecycle, so it's barely
useful. Please use a simple @ApplicationScoped instead.
  LieGrue,
  strub



  PS: if you start new Threads manually yourself, then please look at
DeltaSpike-CdiCtrl ContextControl.


  ----- Original Message -----
  From: Mike Olson <[email protected]>
  To: [email protected]
  Cc:
  Sent: Thursday, January 17, 2013 9:52 AM
  Subject: WebBeans context with scope type annotation @Singleton does
not exist within current thread
  Hello,


     I am trying to figure out exactly what this exception is trying to
tell me.  I
  have multiple web applications that are communicating with JMS and this
is
  occurring during a MessageListener call back so my assumption is that
it has
  something to do with being multi-threaded.  However, I am also using
the
  "Provider" again so it could be another issue with that.

     I am doing something similar to:

  @Inject
  Provider<Foo> fooProvider;

     public void onMessage(Message m) {
       fooProvider.get();
     }


  In the ".get()" call is where the exception occurs.  I have
been
  through the code and inspected all of the Inject fields in the class
hierarchy
  of "Foo".  There are some that are scoped as @Singleton. I
have
  removed that scope from all of them, but I still get the same
exception.

  Anyone have any ideas?  Here is the traceback.
  Thanks
  Mike


  javax.enterprise.context.ContextNotActiveException: WebBeans context
with scope
  type annotation @Singleton does not exist within current thread
       at

org.apache.webbeans.container.BeanManagerImpl.getContext(BeanManagerImpl.java:351)
       at

org.apache.webbeans.container.BeanManagerImpl.getReference(BeanManagerImpl.java:861)
       at

org.apache.webbeans.container.BeanManagerImpl.getInjectableReference(BeanManagerImpl.java:759)
       at

org.apache.webbeans.inject.AbstractInjectable.inject(AbstractInjectable.java:136)
       at

org.apache.webbeans.inject.InjectableField.doInjection(InjectableField.java:59)
       at

org.apache.webbeans.component.AbstractInjectionTargetBean.injectField(AbstractInjectionTargetBean.java:387)
       at

org.apache.webbeans.component.AbstractInjectionTargetBean.injectFields(AbstractInjectionTargetBean.java:324)
       at

org.apache.webbeans.portable.creation.InjectionTargetProducer.inject(InjectionTargetProducer.java:95)
       at

org.apache.webbeans.component.InjectionTargetWrapper.inject(InjectionTargetWrapper.java:76)
       at

org.apache.webbeans.component.AbstractOwbBean.create(AbstractOwbBean.java:181)
       at

org.apache.webbeans.context.DependentContext.getInstance(DependentContext.java:70)
       at
org.apache.webbeans.context.AbstractContext.get(AbstractContext.java:132)
       at

org.apache.webbeans.container.BeanManagerImpl.getReference(BeanManagerImpl.java:872)
       at

org.apache.webbeans.container.BeanManagerImpl.getInjectableReference(BeanManagerImpl.java:753)
       at

org.apache.webbeans.inject.AbstractInjectable.inject(AbstractInjectable.java:136)
       at

org.apache.webbeans.inject.InjectableField.doInjection(InjectableField.java:59)
       at

org.apache.webbeans.component.AbstractInjectionTargetBean.injectField(AbstractInjectionTargetBean.java:387)
       at

org.apache.webbeans.component.AbstractInjectionTargetBean.injectSuperFields(AbstractInjectionTargetBean.java:368)
       at

org.apache.webbeans.portable.creation.InjectionTargetProducer.inject(InjectionTargetProducer.java:93)
       at

org.apache.webbeans.component.InjectionTargetWrapper.inject(InjectionTargetWrapper.java:76)
       at

org.apache.webbeans.component.AbstractOwbBean.create(AbstractOwbBean.java:181)
       at

org.apache.webbeans.context.DependentContext.getInstance(DependentContext.java:70)
       at
org.apache.webbeans.context.AbstractContext.get(AbstractContext.java:132)
       at

org.apache.webbeans.container.BeanManagerImpl.getReference(BeanManagerImpl.java:872)
       at

org.apache.webbeans.inject.instance.InstanceImpl.get(InstanceImpl.java:126)
  -- Mike Olson


--
Mike Olson



--
Mike Olson

Reply via email to