我在NetBeans中创建了一个Java Web应用程序项目,并在其中创建了一个启动bean:
package malibu.util;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.ejb.LocalBean;
@Stateless
@LocalBean
@javax.ejb.Startup
public class Startup {
@EJB
private ProviderEJB providerEJB;
@PostConstruct
public void onStartup() {
System.err.println("Initialization success.");
}
}
但是在部署应用程序后没有调用代码。是什么导致这种情况?
答案 0 :(得分:11)
尝试以下一组注释:
@Singleton
@Startup
public class Startup {
@EJB
private ProviderEJB providerEJB;
@PostConstruct
public void onStartup() {
System.err.println("Initialization success.");
}
}
答案 1 :(得分:6)
Startup注释适用于Singleton bean,而不是无状态bean。请参阅javadoc。
此外,在这种情况下不需要@LocalBean。这声明您需要一个额外的无界面视图,但只有在bean实现远程或本地业务接口时才需要这样做。如果省略它,默认情况下会得到无界面视图。
答案 2 :(得分:1)
在我的情况下,JBoss 7EAP在战争中需要ejb-jar.xml配置文件来加载@Startup EJB。
<jboss:ejb-jar xmlns:jboss="http://www.jboss.com/xml/ns/javaee"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss-ejb3-2_0.xsd http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd"
version="3.1">
<enterprise-beans>...</enterprise-beans></jboss:ejb-jar>
答案 3 :(得分:-1)
http://docs.oracle.com/javaee/6/api/javax/ejb/Startup.html
在应用程序启动序列期间标记 singleton bean以进行急切初始化。