Jakarta ee 用于注射EJB的Vaadin CDI不';t工作(空点异常或禁止)
首先,我在这里看到了关于瓦丁CDI的所有类似问题,但没有一个能解决我的问题。我这里有一个非常标准的场景:尝试使用分离的模块创建EAR应用程序,在本例中,这些模块仅为EJB(jar)和Web应用程序(war) 我完全基于Maven,构建和部署工作都很好,所以我不会发布(那些长的)pom文件。WildFly 8.1.0 FINAL用作应用程序服务器 EJB模块只包含一个无状态bean:Jakarta ee 用于注射EJB的Vaadin CDI不';t工作(空点异常或禁止),jakarta-ee,ejb,vaadin,wildfly-8,Jakarta Ee,Ejb,Vaadin,Wildfly 8,首先,我在这里看到了关于瓦丁CDI的所有类似问题,但没有一个能解决我的问题。我这里有一个非常标准的场景:尝试使用分离的模块创建EAR应用程序,在本例中,这些模块仅为EJB(jar)和Web应用程序(war) 我完全基于Maven,构建和部署工作都很好,所以我不会发布(那些长的)pom文件。WildFly 8.1.0 FINAL用作应用程序服务器 EJB模块只包含一个无状态bean: @Stateless public class Greeter implements GreetinInterfa
@Stateless
public class Greeter implements GreetinInterface {
private final String[] greets = new String[]{"Hi", "Ho", "Hey", "Hello"};
@Override
public String greet() {
return greets[new Random().nextInt(greets.length)];
}
}
@Local
public interface GreetinInterface {
String greet();
}
Bean成功部署,这由WildFly管理控制台和以下输出确认:
21:50:20,275 INFO [org.jboss.as.ejb3.deployment.processors.EjbJndiBindingsDeploymentUnitProcessor] (MSC service thread 1-6) JNDI bindings for session bean named Greeter in deployment unit subdeployment "WEBModule.war" of deployment "EARModule.ear" are as follows:
java:global/EARModule/WEBModule/Greeter!cz.kousalik.GreetingInterface
java:app/WEBModule/Greeter!cz.kousalik.GreetingInterface
java:module/Greeter!cz.kousalik.GreetingInterface
java:global/EARModule/WEBModule/Greeter
java:app/WEBModule/Greeter
java:module/Greeter
WEB模块包含由netbeans中的Vaadin插件生成的简单Vaadin应用程序。仅包含一个UI,带有一个按钮:
@CDIUI
@Theme("mytheme")
@Widgetset("cz.kousalik.pernik.web.MyAppWidgetset")
public class MyUI extends UI {
@Inject
private GreetinInterface greeter;
@Override
protected void init(VaadinRequest vaadinRequest) {
final VerticalLayout layout = new VerticalLayout();
layout.setMargin(true);
setContent(layout);
Button button = new Button("Click Me");
button.addClickListener(e -> layout.addComponent(new Label("Thank you for clicking, " + greeter.greet())));
layout.addComponent(button);
}
@WebServlet(urlPatterns = "/*", name = "MyUIServlet", asyncSupported = true)
@VaadinServletConfiguration(ui = MyUI.class, productionMode = false)
public static class MyUIServlet extends VaadinServlet {
}
}
在这种情况下,应用程序将运行,但单击该按钮会导致Nullpointer异常,因为在greeter
字段中没有注入任何内容
在阅读了几篇教程之后,我相信问题出在我的UI类的servlet部分。Vaadin CDI教程说删除这个部分应该可以做到这一点。然而,如果我这样做,我就根本无法访问webapp,而我只是被禁止了
有人能帮忙吗?还有什么能更好地解释这是如何协同工作的?不幸的是,所有的教程都缺少更多的背景信息。所以我解决了我的问题 servlet部分确实必须离开我的代码,通过这样做,
VaadinCDIServlet
可以自动部署
同样重要的是,WEBModules WEB-INF文件夹beans.xml
(可以为空)中必须存在
就这样。现在它就像一个符咒。
这里有更准确的信息,所以我解决了我的问题 servlet部分确实必须离开我的代码,通过这样做,
VaadinCDIServlet
可以自动部署
同样重要的是,WEBModules WEB-INF文件夹beans.xml
(可以为空)中必须存在
就这样。现在它就像一个符咒。
这里有更准确的信息