Hi Mark,

i would slightly disagree to that.

i think it should at least be possible to use Request and SessionScope
during an AsyncContext of servlet api 3. This AsyncContext is somehow
associated to a specific servlet request and so IMHO Request- and
Session-Scopes could be provided.

Greetings,
    Manuel.


> In fact, asynchronous tasks should not even rely on @SessionScoped or 
> @RequestScoped because they do not exist outside a servlet request ;)
>
> LieGrue,
> strub
>
>
>
> ----- Original Message -----
>> From: Gerhard Petracek <gerhard.petra...@gmail.com>
>> To: MyFaces Discussion <users@myfaces.apache.org>
>> Cc: 
>> Sent: Friday, February 17, 2012 10:58 AM
>> Subject: Re: CODI+OWB+Scheduler, ContextNotActiveException
>>
>> hi erwin,
>>
>> first of all: welcome @ myfaces!
>>
>> for a conversation a window is needed. therefore, the current conversation
>> can't be resolved outside of a faces request.
>> since it's possible to destroy the window-context at any time, it isn't
>> suggested to use such scopes in an asynchronous task at all.
>>
>> regards,
>> gerhard
>>
>> http://www.irian.at
>>
>> Your JSF/JavaEE powerhouse -
>> JavaEE Consulting, Development and
>> Courses in English and German
>>
>> Professional Support for Apache MyFaces
>>
>>
>>
>> 2012/2/17 Bonhold, Erwin <erwin.bonh...@atos.net>
>>
>>>  Hi all,
>>>
>>>  at first, CDI + CODI is really cool stuff for building a webapp.
>>>
>>>  1) Our Environment:
>>>  We are using OWB 1.1.3, CODI 1.0.2 on a Tomcat 7 environment with CODI
>>>  @Transactional.
>>>
>>>  Database Producer:
>>>   @PersistenceContext(unitName = "myunit")
>>>   private EntityManager extendedEntityManager;
>>>
>>>   @Produces
>>>   @ConversationScoped
>>>   @MyQualifier
>>>   public ExtendedEntityManager createExtendedEntityManager() {
>>>   return new ExtendedEntityManager(this.extendedEntityManager);
>>>   }
>>>
>>>   public void dispose(@Disposes @Siemens ExtendedEntityManager
>>>  extendedEntityManager) {
>>>   if (extendedEntityManager.isOpen()) {
>>>    extendedEntityManager.close();
>>>   }
>>>   }
>>>
>>>  -DatabaseService which gets above EntityManager injected
>>>  -OtherServices which getting the database Service injected
>>>
>>>
>>>  2) The Problem:
>>>  Using Quartz, Seam Cron or the following class, which creates a thread,
>>>  leads into the same problem.
>>>
>>>  @ApplicationScoped
>>>  public class ApplicationTimer {
>>>
>>>   @Inject
>>>   private Log log;
>>>
>>>   @Inject
>>>   private OtherService otherService; // gets databaseService injected,
>>>  databaseService gets EntityManager injected
>>>
>>>   public void init() {
>>>   log.info("initialize timer thread");
>>>   try {
>>>    otherService.doSomething(); // WORKS in Context of this
>>>  ApplicationScoped bean
>>>   } catch (Exception e) {
>>>    log.error(e);
>>>   }
>>>
>>>   Thread timer = new Thread() {
>>>    public void run() {
>>>     while (true) {
>>>      log.info("That's the thread");
>>>      try {
>>>       otherService.doSomething(); // EXCEPTION occurs in Child Thread
>>>       Thread.sleep(5000);
>>>      } catch (Exception e) {
>>>       log.error(e);
>>>      }
>>>     }
>>>    }
>>>   };
>>>   timer.start();
>>>   }
>>>  }
>>>
>>>  An exception
>>>  javax.enterprise.context.ContextNotActiveException: WebBeans context with
>>>  scope type annotation @ConversationScoped does not exist within current
>>>  thread
>>>  occurs
>>>
>>>  We also tried to start a (javax) Conversation. Leads into the same
>>>  Excpetion with ... a @RequestScoped does not exist.
>>>
>>>  The child thread is not in context of a web request, we guess the
>>>  EntityManager have to (as descriped in CODI doc).
>>>
>>>  But how to solve this problem?
>>>  Is there a possibility to create/provide an appropriate context to the
>>>  child thread or to start scheduled services in another way?
>>>
>>>
>>>  Best Regards
>>>  Erwin
>>>


-- 
Dipl. Inform. Manuel Hartl
Software Architect

FlexSecure-Logo    KobilGroup-Logo

FlexSecure GmbH
Industriestr. 12
D - 64297 Darmstadt
Tel: +49 (0) 6151 501 23-18
Fax: +49 (0) 6151 501 23-19

E-Mail: ha...@flexsecure.de
Internet: www.flexsecure.de

Geschäftsführer:
Erwin Stallenberger, Markus Ruppert

Amtsgericht Darmstadt HRB 8036
Umsatzsteuernummer: DE 214745269

Reply via email to