1

I am using JSF to create a web app.

I have an application scoped bean that has a infinite loop so that it periodically performs an action.

My problem is that this bean (due to the infinite loop) is blocking the whole application. I thought that the bean would run on its own thread. Isnt that the case with JSF, that each managed bean is running on own thread by default?

Should I create a thread and let the infinite loop run in that thread instead?

thank you

panipsilos
  • 2,219
  • 11
  • 37
  • 53

1 Answers1

6

Does application scoped beans run on seperate thread in JSF?

No, it definitely doesn't.

Should I create a thread and let the infinite loop run in that thread instead?

No, you shouldn't. You should just create a scheduled task. Best way to that is to use a @Singleton @Schedule EJB.

@Singleton
public class SomeDailyJob {

    @Schedule(hour="0", minute="0", second="0", persistent=false)
    public void run() {
        // Do your job here which should run daily at midnight.
    }

} 

That's all. No additional configuration of manually messing with threads necessary. If you want to access its state -if any- from in a JSF managed bean, just inject with @EJB the usual way.

See also:

Community
  • 1
  • 1
BalusC
  • 1,082,665
  • 372
  • 3,610
  • 3,555