One of the most common forum questions is How do I make Seam call an action method at startup?
.
The easiest way is to observe the org.jboss.seam.postInitialization event (which occurs right after Seam finishes initializing):
@Name("observeInitialization")
public class ObserveInitialization {
@In EntityManager entityManager;
@Observer("org.jboss.seam.postInitialization")
public void observe() {
// Do your initialization here
}
}
However, as this event occurs /before/ JSF finishes initializing, if you want to use Seam Mail at startup, you should schedule it to happen a short time after initialization:
@Name("asynchronousMailProcessor")
public class AsynchronousMailProcessor {
@Asynchronous
public void sendMail(@Duration long duration) {
Renderer.instance().render("/mail.xhtml");
}
}
@Name("observeInitialization")
public class ObserveInitialization {
@In AsynchronousMailProcessor asynchronousMailProcessor;
@Observer("org.jboss.seam.postInitialization")
public void observe() {
// Schedule a send for 30s time, by which time JSF will be initialized
asynchronousMailProcessor.sendMail(30 * 1000l);
}
}