I am coming from a Seam 2 and ATG background, and working on re-writing an old Seam 2 application using
JSF 2 on
Tomcat 8. I've run into a snag:
I have an application scoped managed bean, let's call it EMail. It holds a collection of Email objects, and does some other stuff.
I have an IMAPClient, which is currently setup as an application scoped managed bean (mostly to simply configuration, etc...).
I need to call a method on the IMAPClient to go check email every X seconds (let's call it 60 seconds), and add any new email into the Email managed bean's collection of email. In Seam 2 this was easy with the @Asynchronous annotation. In JSF 2 I can't figure out how to do it. I've tried using Quartz, which will happily run my IMAPCheckJob every 60 seconds, but I am so far unable to figure out how the IMAPCheckJob can get access to either the IMAPClient or the EMail beans.. There's no dependency injection into the Quartz Job, and since it's not executing in a HTTP request flow, there's no Faces context available.
It seems like there has to be some way to allow for scheduling and still have access to the benefits of the Application scoped managed bean DI system...
Or do I need to give up and move to
JBoss with EJBs and CDI instead of JSF beans?
Would appreciate any guidance! Thanks!
Devon