Jakarta ee 用于注射EJB的Vaadin CDI不';t工作(空点异常或禁止)

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

首先,我在这里看到了关于瓦丁CDI的所有类似问题,但没有一个能解决我的问题。我这里有一个非常标准的场景:尝试使用分离的模块创建EAR应用程序,在本例中,这些模块仅为EJB(jar)和Web应用程序(war)

我完全基于Maven,构建和部署工作都很好,所以我不会发布(那些长的)pom文件。WildFly 8.1.0 FINAL用作应用程序服务器

EJB模块只包含一个无状态bean:

@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
(可以为空)中必须存在

就这样。现在它就像一个符咒。 这里有更准确的信息