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 <[email protected]> > 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 >

