gpt4 book ai didi

java - @EJB 和 @Inject 不适用于我的 vaadin 类

转载 作者:行者123 更新时间:2023-12-01 11:42:18 26 4
gpt4 key购买 nike

我尝试将初始化 CustomerDataModel 的单例启动 bean 注入(inject)到 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

有人知道我做错了什么吗?

最佳答案

问题是您的 Workspace 对象(扩展 Vaadin UI)不能是无状态 EJB。其中一个实例由一个用户使用。相反,您应该开始使用 Vaadin CDI并用@CDIUI注释它。然后,您可以将 EJB 注入(inject)到您的 CDI 托管(〜 session 范围)Vaadin UI。

关于java - @EJB 和 @Inject 不适用于我的 vaadin 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29429128/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com