【发布时间】:2015-06-08 08:42:41
【问题描述】:
我尝试将初始化 CustomerDataModel 的单例启动 bean 注入到 vaadin 类中。
@Startup
@Singleton
public class StartupBean {
@Resource(lookup = "java:global/customerDatabase")
private String customerDatabasePath;
@Resource(lookup = "java:global/addressDatabase")
private String addressDatabasePath;
private CustomerDataModel dataModel = null;
public StartupBean() {
}
@PostConstruct
private void startup() {
File customerDatabase = new File(customerDatabasePath);
File addressDatabase = new File(addressDatabasePath);
dataModel = new DataModelImpl(customerDatabase, addressDatabase);
}
@PreDestroy
private void shutdown() {
}
public CustomerDataModel getDataModel() {
return dataModel;
}
}
这是我的 vaadin 类,它需要一个完全初始化的启动 bean
@DependsOn("StartupBean")
@Stateless
public class Workspace extends UI {
@EJB
private StartupBean startupBean;
@WebServlet(value = "/*", asyncSupported = true)
@VaadinServletConfiguration(productionMode = false, ui = Workspace.class)
public static class Servlet extends VaadinServlet {
}
@Override
protected void init(VaadinRequest request) {
if(startupBean == null) {
System.out.println("error");
}
我用@EJB 和@Inject 试过了,都不管用。我总是在 startupBean 处得到一个空指针。我在 WEB-INF 也有一个 bean.xml
我按照http://java.dzone.com/articles/cdi-di-p1和http://docs.oracle.com/javaee/6/tutorial/doc/gipvi.html试了一下
有谁知道我做错了什么?
【问题讨论】:
-
请显示错误堆栈跟踪
-
没有堆栈跟踪,因为 EJB 没有错误。它根本不注入startupbean,那么它就是空的。
-
你能说明如何检查 null 吗?
-
很抱歉缺少源代码。
-
这只是暂时的调试。但困扰我的是注射似乎不起作用。我在 wildfly 和 tomcat 下运行它。