我想强制在容器启动时急切地创建一个单独的bean。我将它与@PostContruct(用于某些初始化逻辑)和@PreDestroy(用于一些清理)相结合。但无论我尝试过什么,它都无法在我的JBOSS 7 EAP(JEE 7)中使用。
import javax.ejb.Singleton;
import javax.ejb.Startup;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
@Startup
@Singleton
@ConcurrencyManagement(ConcurrencyManagementType.BEAN)
public class ProvisioningDataForApplicationLifecycle {
@PostConstruct
private void init() {
// when app is deployed
LOG.info("called init")
}
@PreDestroy
private void cleanUp() {
// when app is undeployed
LOG.info("called destroy")
}
}
public void someOtherClass(){
@Inject
@EJB
private ProvisioningDataForApplicationLifecycle pdal;
...
}
我搜索了很多1,2,3 ......但没有任何帮助。我唯一能做的就是使用
public void initEnvironment(@Observes @Initialized(@ApplicationScoped.class))
然而@Startup应该正常工作。所以不知道为什么不呢?
更新
我想我意识到了这个问题:该类是(eclipse)实用程序项目(facet)的一部分,它作为lib
文件夹下的jar文件添加到最终的EAR中。所以它不是一个EJB。因此,@Startup
和@Singleton
注释可能无效。或者是否有可能使其适用于非EJB类?