我在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.");
}
}
但是在部署应用程序后未调用代码。是什么原因造成的?
Startup注释仅适用于Singleton Bean,不适用于无状态Bean。参见javadoc。
此外,在这种情况下,不需要@LocalBean。这声明您需要附加的无接口视图,但这仅在Bean实现远程或本地业务接口时才需要。如果忽略它,则默认情况下会显示无接口视图。
就我而言,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>
http://docs.oracle.com/javaee/6/api/javax/ejb/Startup.html
标记一个singleton bean以在应用程序启动过程中进行急切的初始化。