Vaadin 7 CDI, inject EJB in View

 @Local
public interface MediaManagerService {

@Stateless
public class MediaManagerServiceImpl implements MediaManagerService, Serializable {
    
        private static final long serialVersionUID = -3484115607954217804L;
    
        @PersistenceContext(name="MediaManagerPersistenceUnit", 
                            unitName="MediaManagerPersistenceUnit")
        private EntityManager _em;

I can inject service successful in UI by this code:
[code]
@CDIUI
public class MainUI extends ManagedUI {
private Navigator _navigator;

    @Inject
    private CDIViewProvider _viewProvider;

    @Inject
    private MediaManagerService _service;

[/code]
But in the view, it always throws null.
[code]
@CDIView(“MovieView”)
public class MovieView extends ManagedComponent implements View {
public static final String NAME = “MovieView”;

    @Inject
    private MediaManagerService _service;

[/code]
The _service always throws null in the View.
This is from the console:

Bean Managed Bean [class com.tien113.ui.MovieView]
 with qualifiers [@Any @Default]
 with viewName "MovieView" is one alternative
SEVERE [com.vaadin.server.DefaultErrorHandler]
 (default task-18) : java.lang.NullPointerException

Can anyone help me, please…

@Inject private MediaManagerService _service;

i’m not 100% sure, but you should use @EJB annotation. In the JEE world there are two DI containers, EJB and CDI.

Hi,

I tried both, @EJB and @Injtect worked perfectly in UI but they didn’t work on view.

For me, @EJB and @Inject are the same.

They are not same. Can you put full stack trace from error? This two lines don’t tell too much about cause.

10:17:25,052 INFO  [com.vaadin.cdi.CDIViewProvider]
 (default task-5) Attempting to retrieve view name from string ""
10:17:25,052 INFO  [com.vaadin.cdi.CDIViewProvider]
 (default task-5) Looking for view with name ""
10:17:25,053 INFO  [com.vaadin.cdi.CDIViewProvider]
 (default task-5) com.tien113.ui.MovieView is annotated, the viewName is "MovieView"
10:17:25,053 INFO  [com.vaadin.cdi.CDIViewProvider]
 (default task-5) com.tien113.ui.LoginView is annotated, the viewName is ""
10:17:25,053 INFO  [com.vaadin.cdi.CDIViewProvider]
 (default task-5) Bean Managed Bean [class com.tien113.ui.LoginView]
 with qualifiers [@Any @Default]
 with viewName "" is one alternative
10:17:25,054 INFO  [com.vaadin.cdi.CDIViewProvider]
 (default task-5) Attempting to retrieve view with name ""
10:17:25,054 INFO  [com.vaadin.cdi.CDIViewProvider]
 (default task-5) Looking for view with name ""
10:17:25,054 INFO  [com.vaadin.cdi.CDIViewProvider]
 (default task-5) com.tien113.ui.MovieView is annotated, the viewName is "MovieView"
10:17:25,055 INFO  [com.vaadin.cdi.CDIViewProvider]
 (default task-5) com.tien113.ui.LoginView is annotated, the viewName is ""
10:17:25,055 INFO  [com.vaadin.cdi.CDIViewProvider]
 (default task-5) Bean Managed Bean [class com.tien113.ui.LoginView]
 with qualifiers [@Any @Default]
 with viewName "" is one alternative
10:17:25,055 INFO  [com.vaadin.cdi.CDIViewProvider]
 (default task-5) Created new creational context for current view org.jboss.weld.context.CreationalContextImpl@5182605a
10:17:25,071 INFO  [com.vaadin.cdi.CDIViewProvider]
 (default task-5) Returning view instance com.tien113.ui.LoginView@6713e65a
10:17:27,104 INFO  [com.vaadin.cdi.CDIViewProvider]
 (default task-9) Attempting to retrieve view name from string "MovieView"
10:17:27,104 INFO  [com.vaadin.cdi.CDIViewProvider]
 (default task-9) Looking for view with name "MovieView"
10:17:27,104 INFO  [com.vaadin.cdi.CDIViewProvider]
 (default task-9) com.tien113.ui.MovieView is annotated, the viewName is "MovieView"
10:17:27,104 INFO  [com.vaadin.cdi.CDIViewProvider]
 (default task-9) Bean Managed Bean [class com.tien113.ui.MovieView]
 with qualifiers [@Any @Default]
 with viewName "MovieView" is one alternative
10:17:27,105 INFO  [com.vaadin.cdi.CDIViewProvider]
 (default task-9) com.tien113.ui.LoginView is annotated, the viewName is ""
10:17:27,105 INFO  [com.vaadin.cdi.CDIViewProvider]
 (default task-9) Attempting to retrieve view with name "MovieView"
10:17:27,105 INFO  [com.vaadin.cdi.CDIViewProvider]
 (default task-9) Looking for view with name "MovieView"
10:17:27,105 INFO  [com.vaadin.cdi.CDIViewProvider]
 (default task-9) com.tien113.ui.MovieView is annotated, the viewName is "MovieView"
10:17:27,105 INFO  [com.vaadin.cdi.CDIViewProvider]
 (default task-9) Bean Managed Bean [class com.tien113.ui.MovieView]
 with qualifiers [@Any @Default]
 with viewName "MovieView" is one alternative
10:17:27,105 INFO  [com.vaadin.cdi.CDIViewProvider]
 (default task-9) com.tien113.ui.LoginView is annotated, the viewName is ""
10:17:27,106 INFO  [com.vaadin.cdi.CDIViewProvider]
 (default task-9) Releasing creational context for current view org.jboss.weld.context.CreationalContextImpl@5182605a
10:17:27,106 INFO  [com.vaadin.cdi.CDIViewProvider]
 (default task-9) Created new creational context for current view org.jboss.weld.context.CreationalContextImpl@5bfe6e21
10:17:27,164 SEVERE [com.vaadin.server.DefaultErrorHandler]
 (default task-9) : java.lang.NullPointerException
    at com.tien113.ui.MovieView.genreFilterComboBox(MovieView.java:180) [classes:]

    at com.tien113.ui.MovieView.movieLayout(MovieView.java:80) [classes:]

    at com.tien113.ui.MovieView.<init>(MovieView.java:70) [classes:]

    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) [rt.jar:1.8.0_20-ea]

    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) [rt.jar:1.8.0_20-ea]

    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) [rt.jar:1.8.0_20-ea]

    at java.lang.reflect.Constructor.newInstance(Constructor.java:408) [rt.jar:1.8.0_20-ea]

    at org.jboss.weld.injection.ConstructorInjectionPoint.newInstance(ConstructorInjectionPoint.java:110) [weld-core-impl-2.1.2.Final.jar:2014-01-09 09:23]

    at org.jboss.weld.injection.ConstructorInjectionPoint.invokeAroundConstructCallbacks(ConstructorInjectionPoint.java:84) [weld-core-impl-2.1.2.Final.jar:2014-01-09 09:23]

    at org.jboss.weld.injection.ConstructorInjectionPoint.newInstance(ConstructorInjectionPoint.java:71) [weld-core-impl-2.1.2.Final.jar:2014-01-09 09:23]

    at org.jboss.weld.injection.producer.AbstractInstantiator.newInstance(AbstractInstantiator.java:28) [weld-core-impl-2.1.2.Final.jar:2014-01-09 09:23]

    at org.jboss.weld.injection.producer.BasicInjectionTarget.produce(BasicInjectionTarget.java:85) [weld-core-impl-2.1.2.Final.jar:2014-01-09 09:23]

    at org.jboss.weld.injection.producer.BeanInjectionTarget.produce(BeanInjectionTarget.java:183) [weld-core-impl-2.1.2.Final.jar:2014-01-09 09:23]

    at org.jboss.weld.bean.ManagedBean.create(ManagedBean.java:149) [weld-core-impl-2.1.2.Final.jar:2014-01-09 09:23]

    at com.vaadin.cdi.internal.UIBeanStore.getBeanInstance(UIBeanStore.java:57) [vaadin-cdi-1.0.0.alpha2.jar:1.0.0.alpha2]

    at com.vaadin.cdi.internal.UIScopedContext.get(UIScopedContext.java:105) [vaadin-cdi-1.0.0.alpha2.jar:1.0.0.alpha2]

    at org.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:733) [weld-core-impl-2.1.2.Final.jar:2014-01-09 09:23]

    at org.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:753) [weld-core-impl-2.1.2.Final.jar:2014-01-09 09:23]

    at org.jboss.weld.util.ForwardingBeanManager.getReference(ForwardingBeanManager.java:61) [weld-core-impl-2.1.2.Final.jar:2014-01-09 09:23]

    at org.jboss.weld.bean.builtin.BeanManagerProxy.getReference(BeanManagerProxy.java:80) [weld-core-impl-2.1.2.Final.jar:2014-01-09 09:23]

    at com.vaadin.cdi.CDIViewProvider.getView(CDIViewProvider.java:213) [vaadin-cdi-1.0.0.alpha2.jar:1.0.0.alpha2]

    at com.vaadin.navigator.Navigator.navigateTo(Navigator.java:512) [vaadin-server-7.3.0.beta1.jar:7.3.0.beta1]

    at com.tien113.ui.LoginView.lambda$0(LoginView.java:80) [classes:]

    at com.tien113.ui.LoginView$$Lambda$2/843139639.buttonClick(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.8.0_20-ea]

    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) [rt.jar:1.8.0_20-ea]

    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.8.0_20-ea]

    at java.lang.reflect.Method.invoke(Method.java:483) [rt.jar:1.8.0_20-ea]

    at com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:508) [vaadin-server-7.3.0.beta1.jar:7.3.0.beta1]

    at com.vaadin.event.EventRouter.fireEvent(EventRouter.java:198) [vaadin-server-7.3.0.beta1.jar:7.3.0.beta1]

    at com.vaadin.event.EventRouter.fireEvent(EventRouter.java:161) [vaadin-server-7.3.0.beta1.jar:7.3.0.beta1]

    at com.vaadin.server.AbstractClientConnector.fireEvent(AbstractClientConnector.java:978) [vaadin-server-7.3.0.beta1.jar:7.3.0.beta1]

    at com.vaadin.ui.Button.fireClick(Button.java:393) [vaadin-server-7.3.0.beta1.jar:7.3.0.beta1]

    at com.vaadin.ui.Button$1.click(Button.java:57) [vaadin-server-7.3.0.beta1.jar:7.3.0.beta1]

    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.8.0_20-ea]

    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) [rt.jar:1.8.0_20-ea]

    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.8.0_20-ea]

    at java.lang.reflect.Method.invoke(Method.java:483) [rt.jar:1.8.0_20-ea]

    at com.vaadin.server.ServerRpcManager.applyInvocation(ServerRpcManager.java:168) [vaadin-server-7.3.0.beta1.jar:7.3.0.beta1]

    at com.vaadin.server.ServerRpcManager.applyInvocation(ServerRpcManager.java:118) [vaadin-server-7.3.0.beta1.jar:7.3.0.beta1]

    at com.vaadin.server.communication.ServerRpcHandler.handleInvocations(ServerRpcHandler.java:281) [vaadin-server-7.3.0.beta1.jar:7.3.0.beta1]

    at com.vaadin.server.communication.ServerRpcHandler.handleRpc(ServerRpcHandler.java:174) [vaadin-server-7.3.0.beta1.jar:7.3.0.beta1]

    at com.vaadin.server.communication.UidlRequestHandler.synchronizedHandleRequest(UidlRequestHandler.java:93) [vaadin-server-7.3.0.beta1.jar:7.3.0.beta1]

    at com.vaadin.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:41) [vaadin-server-7.3.0.beta1.jar:7.3.0.beta1]

    at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1406) [vaadin-server-7.3.0.beta1.jar:7.3.0.beta1]

    at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:237) [vaadin-server-7.3.0.beta1.jar:7.3.0.beta1]

    at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) [jboss-servlet-api_3.1_spec-1.0.0.Final.jar:1.0.0.Final]

    at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85) [undertow-servlet-1.0.15.Final.jar:1.0.15.Final]

    at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:130) [undertow-servlet-1.0.15.Final.jar:1.0.15.Final]

    at io.undertow.websockets.jsr.JsrWebSocketFilter.doFilter(JsrWebSocketFilter.java:123) [undertow-websockets-jsr-1.0.15.Final.jar:1.0.15.Final]

    at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:60) [undertow-servlet-1.0.15.Final.jar:1.0.15.Final]

    at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:132) [undertow-servlet-1.0.15.Final.jar:1.0.15.Final]

    at io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:85) [undertow-servlet-1.0.15.Final.jar:1.0.15.Final]

    at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:61) [undertow-servlet-1.0.15.Final.jar:1.0.15.Final]

    at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36) [undertow-servlet-1.0.15.Final.jar:1.0.15.Final]

    at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:25) [undertow-core-1.0.15.Final.jar:1.0.15.Final]

    at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:113) [undertow-servlet-1.0.15.Final.jar:1.0.15.Final]

    at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:56) [undertow-servlet-1.0.15.Final.jar:1.0.15.Final]

    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:25) [undertow-core-1.0.15.Final.jar:1.0.15.Final]

    at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:45) [undertow-core-1.0.15.Final.jar:1.0.15.Final]

    at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:61) [undertow-servlet-1.0.15.Final.jar:1.0.15.Final]

    at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:58) [undertow-core-1.0.15.Final.jar:1.0.15.Final]

    at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:70) [undertow-servlet-1.0.15.Final.jar:1.0.15.Final]

    at io.undertow.security.handlers.SecurityInitialHandler.handleRequest(SecurityInitialHandler.java:76) [undertow-core-1.0.15.Final.jar:1.0.15.Final]

    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:25) [undertow-core-1.0.15.Final.jar:1.0.15.Final]

    at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:25) [undertow-core-1.0.15.Final.jar:1.0.15.Final]

    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:25) [undertow-core-1.0.15.Final.jar:1.0.15.Final]

    at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:240) [undertow-servlet-1.0.15.Final.jar:1.0.15.Final]

    at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:227) [undertow-servlet-1.0.15.Final.jar:1.0.15.Final]

    at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:73) [undertow-servlet-1.0.15.Final.jar:1.0.15.Final]

    at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:146) [undertow-servlet-1.0.15.Final.jar:1.0.15.Final]

    at io.undertow.server.Connectors.executeRootHandler(Connectors.java:177) [undertow-core-1.0.15.Final.jar:1.0.15.Final]

    at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:727) [undertow-core-1.0.15.Final.jar:1.0.15.Final]

    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [rt.jar:1.8.0_20-ea]

    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [rt.jar:1.8.0_20-ea]

    at java.lang.Thread.run(Thread.java:745) [rt.jar:1.8.0_20-ea]

It threw error on the line I use _service.

@Inject is fine. You can use it to inject EJBs.

How do you create your navigator in the UI Instance?
It has to be something like this:

  Navigator navigator = new Navigator(this, layout.getContent());
  navigator.addProvider(_viewProvider);
  setNavigator(navigator);

For me, @Inject and @EJB are the same. But I used @EJB for stateless bean and @Inject for the rest.

I solved this problem.

I used the navigator like you said. I put everything in the constructor, that why _service was null because the @Inject initiates after the constructor.

Hello,

I’m having the exact same problem. I have a stateless bean in my backend and a button within my frontend view. The button calls a method from the EJB using a click listener. The bean itself simply doesn’t seem to be constructed by the container. An injection directly into the UI works.

The view is annotated correctly (@CDIView(“ADD”))

VaadinUI:

 protected void init(VaadinRequest request) {

        

        

        navi = new Navigator(this, this);

        this.setNavigator(navi);

        

        navi.addView("ADD", Add.class);

        navi.navigateTo("ADD");

        

        

        this.setContent(main);

        

    }
[/code]Stateless bean:

[code]
 @Override

    public void register(String name, String password) {

        

        Role role = new Role();

        role.setName("ADMIN");

        

        

        User neu = new User();

        neu.setPassword(password);

        neu.setName(name);

        

        neu.setUserRole(role);

        

        userDaoBean.create(neu);

        

    }
[/code]
View:
[code]
private TextField userName;

    private PasswordField password;

    private com.vaadin.ui.Button registerButton;

    

@EJB

    private fhdortmund.seelab.studimanager.user.AddLocal add;




    public Add() {

        setSizeFull();

        userName = new TextField();

        password = new PasswordField();

        registerButton = new com.vaadin.ui.Button("Speichern");

        

        this.addComponent(userName);

        this.addComponent(password);

        this.addComponent(registerButton);

        

        registerButton.addClickListener(this);

        

    }


    

    

    public void registerUser() {

        

        add.register(userName.getValue(), password.getValue());

        

    }

    

@Override

    public void enter(ViewChangeEvent event) {

        // TODO Auto-generated method stub

        

    }




@Override

    public void buttonClick(ClickEvent event) {

        // TODO Auto-generated method stub

        registerUser();

    }[code]
dfsfds
[/code]

You should use CDIViewProvider:

@Inject
CDIViewProvider navigatorViewProvider;
...
navigator = new Navigator(this, viewContainer);
        navigator.addProvider(navigatorViewProvider);

Thanks to the man with the hood :slight_smile:

Can some one help me and show me how to inject EJB into View. cause every time i want to access it, it throws null pointer exception. I want to have a list of menu from DB to be loaded in view when someone access it. can someone help me

where did you call EJB after injecting ?

Previously i was doing that in the contructor but i was giving an error. I moved it out in the different method that return the component after the menus are loaded and again it is still giving me the same error. I come from JSF 2.2 and may be i’m making some errors somewhere, if some one can guide i will really appreciate.

Dear Nguyen Ho Vo, I have seen that i some discussion you were able to do that. can you describe a little bit what you did in order to accomplish that.

I have difficulty with injecting ejb in to the view in vaadin 14 flow. Can someone guide me to right direction?
I get null. I used @Inject too but no difference.

This is my view:

@Route(value = "first", layout = MainLayout.class)
public class FirstView extends VerticalLayout implements RouterLayout, BeforeEnterObserver, AfterNavigationObserver {
    @EJB
    AflRemote aflRemote;
	public FirstView() {
        init();
    }

    @Override
    public void afterNavigation(AfterNavigationEvent afterNavigationEvent) {
		if (aflRemote == null) {
			aflgrid.setItems(aflRemote.findAll());
		}
		else
		  Notification.show("Aflremote is null", 5000, Notification.Position.BOTTOM_END);
		
	}
}