0

I am using injections but I have some problems :

HTTP Status 500 - javax.ejb.EJBException: The bean encountered a non-application exception; nested exception is:

type Exception report

message javax.ejb.EJBException: The bean encountered a non-application exception; nested exception is:

description The server encountered an internal error that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: javax.ejb.EJBException: The bean encountered a non-application exception; nested exception is: 
    java.lang.NullPointerException
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:321)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
root cause

javax.faces.el.EvaluationException: javax.ejb.EJBException: The bean encountered a non-application exception; nested exception is: 
    java.lang.NullPointerException
    javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:98)
    com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:98)
    javax.faces.component.UICommand.broadcast(UICommand.java:311)
    javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:781)
    javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1246)
    com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:77)
    com.sun.faces.lifecycle.Phase.doPhase(Phase.java:97)
    com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:114)
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:308)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
root cause

javax.ejb.EJBException: The bean encountered a non-application exception; nested exception is: 
    java.lang.NullPointerException
    org.apache.openejb.core.ivm.BaseEjbProxyHandler.convertException(BaseEjbProxyHandler.java:408)
    org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:312)
    pl.konrad.daoTest.ServiceUzytkownik$$LocalBeanProxy.dodaj(pl/konrad/daoTest/ServiceUzytkownik.java)
    pl.konrad.beans.UzytkownikBean.dodajUzytkownika(UzytkownikBean.java:84)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    java.lang.reflect.Method.invoke(Unknown Source)
    org.apache.el.parser.AstValue.invoke(AstValue.java:278)
    org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:273)
    com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:102)
    javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:84)
    com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:98)
    javax.faces.component.UICommand.broadcast(UICommand.java:311)
    javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:781)
    javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1246)
    com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:77)
    com.sun.faces.lifecycle.Phase.doPhase(Phase.java:97)
    com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:114)
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:308)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
root cause

java.lang.NullPointerException
    pl.konrad.daoTest.ServiceUzytkownik.dodaj(ServiceUzytkownik.java:17)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    java.lang.reflect.Method.invoke(Unknown Source)
    org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext.java:192)
    org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:173)
    org.apache.openejb.monitoring.StatsInterceptor.record(StatsInterceptor.java:181)
    org.apache.openejb.monitoring.StatsInterceptor.invoke(StatsInterceptor.java:100)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    java.lang.reflect.Method.invoke(Unknown Source)
    org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext.java:192)
    org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:173)
    org.apache.openejb.core.interceptor.InterceptorStack.invoke(InterceptorStack.java:85)
    org.apache.openejb.core.stateless.StatelessContainer._invoke(StatelessContainer.java:227)
    org.apache.openejb.core.stateless.StatelessContainer.invoke(StatelessContainer.java:194)
    org.apache.openejb.core.ivm.EjbObjectProxyHandler.synchronizedBusinessMethod(EjbObjectProxyHandler.java:308)
    org.apache.openejb.core.ivm.EjbObjectProxyHandler.businessMethod(EjbObjectProxyHandler.java:303)
    org.apache.openejb.core.ivm.EjbObjectProxyHandler._invoke(EjbObjectProxyHandler.java:92)
    org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:308)
    pl.konrad.daoTest.ServiceUzytkownik$$LocalBeanProxy.dodaj(pl/konrad/daoTest/ServiceUzytkownik.java)
    pl.konrad.beans.UzytkownikBean.dodajUzytkownika(UzytkownikBean.java:84)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    java.lang.reflect.Method.invoke(Unknown Source)
    org.apache.el.parser.AstValue.invoke(AstValue.java:278)
    org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:273)
    com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:102)
    javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:84)
    com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:98)
    javax.faces.component.UICommand.broadcast(UICommand.java:311)
    javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:781)
    javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1246)
    com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:77)
    com.sun.faces.lifecycle.Phase.doPhase(Phase.java:97)
    com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:114)
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:308)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
note The full stack trace of the root cause is available in the Apache Tomcat (TomEE)/7.0.55 (1.7.1) logs.

And this is my Bean :

@ManagedBean(name = "uzytkownikBean")
@ViewScoped
public class UzytkownikBean implements Serializable {

    private static final long serialVersionUID = 1L;
    private Uzytkownik uzytkownik;
    private DataModel<Uzytkownik> modelUzytkownicy;

    @EJB
    private ServiceUzytkownik serviceUzytkownik;

    public Uzytkownik getUzytkownik() {
        return uzytkownik;
    }

    public void setUzytkownik(Uzytkownik uzytkownik) {
        this.uzytkownik = uzytkownik;
    }

    public DataModel<Uzytkownik> getModelUzytkownicy() {
        return modelUzytkownicy;
    }

    public void setModelUzytkownicy(ArrayDataModel<Uzytkownik> modelUzytkownicy) {
        this.modelUzytkownicy = modelUzytkownicy;
    }

    @PostConstruct
    public void init() {
        uzytkownik = new Uzytkownik();
    }

    public void dodajUzytkownika() {
        serviceUzytkownik.dodaj(uzytkownik);
    }
}

And my EJB class :

@Stateless
public class ServiceUzytkownik {

    @PersistenceContext
    private EntityManager em;

    public void dodaj(Uzytkownik uzytkownik) {
        em.persist(uzytkownik);
    }
}

Whats wrong now? and if I should add it to persistence.xml. This is my config for Hibernate. When creating a dynamic web project, would add connection so maybe it is unnecessary. But for now, I have to get rid of this error. Error connecting to the database probably looks different.

<properties>
    <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
    <property name="javax.persistence.jdbc.user" value="konrad" />
    <property name="javax.persistence.jdbc.password" value="konrad" />
    <property name="javax.persistence.jdbc.url"
              value="jdbc:mysql://localhost:3306/bazahealthhelper" />
    <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" />
    <property name="hibernate.hbm2ddl.auto" value="create" />
</properties>
Tiny
  • 27,221
  • 105
  • 339
  • 599
davyd
  • 13
  • 6
  • Nope. Consider isolating EJBs and JSF managed beans and put them on their own separate places. `PersistenceContextType.EXTENDED` is only applicable to stateful session beans as a side note. – Tiny Apr 17 '15 at 17:54
  • I mean I can not have a single class and Stateless ManagedBean ? I should break down into two different and later inject EntityManager to classBean ? and remove PersistenceContextType.EXTENDED – davyd Apr 17 '15 at 18:11
  • "Generally, [JSF managed beans and EJBs] are not intended to be interchangeable. Each have their own clear responsibility. You use JSF bean management annotations to manage beans for front-end (JSF pages). You use EJB bean management annotations to manage beans for business services (BOs/DAOs)." ~ BalusC – DavidS Apr 17 '15 at 18:24
  • Separate the beans (JSF ViewScoped and EJB Stateless) and inject the PersistenceContext into your Stateless EJB. This is the conventional configuration, though others are possible. See also http://stackoverflow.com/questions/4727920/injecting-entity-manager-into-managed-bean – DavidS Apr 17 '15 at 18:25
  • Do I need to create in this class also EntityManagerFactory . Whether to operate the database is enough for me just entitymanager with PersistenceContext annotation .? – davyd Apr 17 '15 at 18:39
  • You can combine those annotations (CDI, I did not explicitly try combining pure JSF managed beans and EJBs but it should work) but it does not make much sense in sane Java EE applications after all. You had better choose separate layers for them. The container provides many things out of the box on the service layer like security, container managed transactions (declarative) in addition to bean managed transactions (programmatic), if needed at all and many more. A container managed extended persistence context can only be instantiated within the scope of a stateful session bean as said earlier – Tiny Apr 17 '15 at 18:42
  • ok i add my two new class. Show me please how inject my entity to my beanClass. – davyd Apr 17 '15 at 18:57
  • You can just inject EJBs into JSF managed beans using the `@EJB` annotation (from `javax.ejb`). You do not need anything from `javax.persistence.*` in JSF managed beans. Put any business logic in EJBs and just inject required EJBs into JSF managed beans and invoke required methods defined in EJBs as and when required. – Tiny Apr 17 '15 at 19:05

0 Answers0