In Seam 3 (or better: weld), this annotation is not supported. If you want a bean to be started up when the application starts up, you could write a method which observes an event:
public class BeanToBeInitializedAtStartup { public void onStartup(@Observes @Initialized WebApplication webApplication){ //do nothing, bean will be initialized when application is started }
}However, this means you will need such a method for every bean, which is a lot more of overhead than the simple @Startup annotation.
A solution for this is to use a simple helper class, which initializes all beans which implement some interface you define yourself:
First, you will need an interface. This interface does not require any methods.
public interface Startup { }Next, all of the beans you want to be initialized should implement this interface
public class BeanToBeInitializedAtStartup implements Startup { }That looks a lot better! Now of course you need some helper class, which initializes all beans which implement the Startup annotation:
public class BeanStartupHelper {
public void onStartup(@Observes @Initialized WebApplication webApplication, BeanManager beanManager) { for(Bean bean : beanManager.getBeans(Startup.class)){ CreationalContext context = beanManager.createCreationalContext(bean); beanManager.getReference(bean, Startup.class, context); } } }The BeanStartupHelper is actually also a bean, and as you can see, this bean contains a method which observes the initialization of the webapplication. A reference to the BeanManager object is injected as a parameter of this method. We use the BeanManager object to create the beans we need, which are all beans which implement the Startup annotation.
Result
There is a clear separation between the beans themselves and the implementation of the startup method. The only thing needed for your beans is the fact that they need to implement a Startup interface. You only need one method which observes the initialization of your application, in which all 'startup' beans will be initialized!