mercredi 4 septembre 2019

Why do i get @WebServlet annotation but does not implement the javax.servlet.http.HttpServlet interface. as error when using vaadinCDI Servlet

I'm using Vaadin framework and I have to implement VaadinCDIServlet to make use of @EJb annotations in my frontend. When using the VaadinCDIServlet my application give me this error:

[ERROR ] SRVE9990E: The class be.iris.navigator.MynavigatorUI$Servlet has a @WebServlet annotation but does not implement the javax.servlet.http.HttpServlet interface.

I tried to replace VaadinCDIServlet with VaadinServlet, the frontend works and I got no error but I was unable to get my EJB injections and I got a nullpointer exceptions instead.

package be.iris.navigator;
import javax.ejb.EJB;
import javax.inject.Inject;
//http://kushalbaldev.blogspot.com/2017/01/navigation-in-vaadin.html
import javax.servlet.annotation.WebServlet;

import com.vaadin.annotations.VaadinServletConfiguration;
import com.vaadin.cdi.CDIUI;
import com.vaadin.cdi.CDIViewProvider;
import com.vaadin.cdi.server.VaadinCDIServlet;
import com.vaadin.navigator.Navigator;
import com.vaadin.navigator.Navigator.ComponentContainerViewDisplay;
import com.vaadin.server.VaadinRequest;
import com.vaadin.ui.UI;
import com.vaadin.ui.VerticalLayout;

import be.iris.controllers.PersonInroRetrieveRemote;
import be.iris.views.ActivityView;
import be.iris.views.EmployeeManagementView;
import be.iris.views.Login;
import be.iris.views.MainView;

// This class is used as navigator, i'm making a one page application.
@SuppressWarnings("serial")
@CDIUI("")
public class MynavigatorUI extends UI{

    @EJB
    private PersonInroRetrieveRemote pr;
    @Inject
    CDIViewProvider viewProvider;
    public Navigator navigator;
    public static final String MAINVIEW = "main";
    public static final String EMPMAN = "help";
    public static final String Activity = "act";

    @Override
    protected void init(VaadinRequest request) {

        final VerticalLayout layout = new VerticalLayout();
        layout.setMargin(true);
        setContent(layout);
        ComponentContainerViewDisplay viewDisplay = new ComponentContainerViewDisplay(layout);
        navigator = new Navigator(UI.getCurrent(), viewDisplay);
        navigator.addProvider(viewProvider);
        navigator.addView("", new Login());
        navigator.addView(MAINVIEW, new MainView());
        navigator.addView(EMPMAN, new EmployeeManagementView());
        navigator.addView(Activity, new ActivityView());

    }
    @WebServlet(value = "/*", asyncSupported = false)
    @VaadinServletConfiguration(productionMode = false, ui = MynavigatorUI.class)
    public static class Servlet extends VaadinCDIServlet {
    }


}

package be.iris.views;

import javax.ejb.EJB;
import javax.inject.Inject;

import com.vaadin.cdi.CDIUI;
import com.vaadin.cdi.CDIView;
import com.vaadin.navigator.View;
import com.vaadin.navigator.ViewChangeListener.ViewChangeEvent;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Label;
import com.vaadin.ui.TextField;
import com.vaadin.ui.VerticalLayout;

import be.iris.controllers.LoginControllerRemote;
import be.iris.controllers.PersonInroRetrieveRemote;
import be.iris.eventhandling.LoginControllerEvent;
import be.iris.eventhandling.NotifEvent;
import be.iris.navigator.MynavigatorUI;

// this pafe is the login view that i'm using for MyNavigatorUI.java
@CDIView("")
public class Login extends VerticalLayout implements View, LoginControllerEvent {

    @EJB
    private PersonInroRetrieveRemote pr;
    @EJB
    private LoginControllerRemote lcr;
    private TextField username;

    @Inject
    public Login() {
        setSizeFull();
        setSpacing(true);
        Label label = new Label("Enter your information below to log in.");
        username = new TextField("username");
        TextField password = new TextField("password");
        addComponent(label);
        addComponent(username);
        addComponent(password);
        addComponent(loginButton());
        addComponent(actBt());

    }

    @Override
    public void enter(ViewChangeEvent event) {

    }

    private Button loginButton() {
        Button button = new Button("Log In", new Button.ClickListener() {
            @Override
            public void buttonClick(ClickEvent event) {
                getUI().getNavigator().navigateTo(MynavigatorUI.MAINVIEW);

            }
        });
        return button;

    }

    private Button actBt() {
        Button button = new Button("ActivTESTTEST", new Button.ClickListener() {
            @Override
            public void buttonClick(ClickEvent event) {
                getUI().getNavigator().navigateTo(MynavigatorUI.Activity);

            }
        });
        return button;

    }

    @Override
    public void loginFailedTooOften(NotifEvent ne) {
        // TODO Auto-generated method stub

    }

}

I expect the login to work with the CDI and what I'm doing wrong. I am new on VAADIN, please help me.




Aucun commentaire:

Enregistrer un commentaire