无法在我的托管bean中使用会话ejb,因为我得到一个空指针异常

时间:2016-06-20 19:15:24

标签: ejb

首先,我想说我在使用ejb和jsf进行编程时非常新,我正在尝试完成一个由我的朋友创建的项目。

我收到一个名为utenteSessionBean的会话bean对象的方法 utenteSessionBean.CheckUtentebyId (用户名)引起的 NullPointerException ,该对象在被调用的bean中声明Neo4jMBean。

我了解到,在托管bean中创建和初始化会话bean(正如你必须使用普通的java对象)并不是必需的,但它足以声明它。

以下是会话bean的代码,它从数据库中检索数据

@Stateless 
@LocalBean 
public class UtenteSessionBean {

EntityManagerFactory emf = Persistence.createEntityManagerFactory("EnterpriseApplication2-ejbPU");

public boolean CheckUtentebyId(String username){
    EntityManager em = emf.createEntityManager();
    Query query = em.createNamedQuery("Utente.findByUsername");
    query.setParameter("username", username);
    List<Utente> Res=query.getResultList();
    //completare funzione ctrl+spazio
    System.out.println("pre");
    System.out.println("pre"+Res.isEmpty());
    em.close();
    System.out.println("post");
    System.out.println("post"+Res.isEmpty());
    if(Res.size()>=1)
    {
        return true;
    }
    else
    {
        return false;
    }

}
}

以下是托管bean的代码:

@ManagedBean 
@ViewScoped
public class Neo4jMBean {   

@EJB
private UtenteSessionBean utenteSessionBean;

static String SERVER_ROOT_URI = "http://localhost:7474/db/data/";

public Neo4jMBean() {
}

public boolean getUser(String username) {

    return utenteSessionBean.CheckUtentebyId(username);
}
}

我多次在StackOverFlow上搜索解决这个问题的解决方案,但我还没找到适合我的东西。

2 个答案:

答案 0 :(得分:1)

我修复了它使用JNDI访问EJB组件。 简而言之,如果我在托管bean方法中使用EJB,我需要添加下一行代码:

        InitialContext ic = new InitialContext();
        SessionBeanName = (SessionBeanClass) ic.lookup("java:global/NameOfTheApplication/NameOfTheEJBpackage/NameOfTheSessionBean");

必须使用try-catch语句

答案 1 :(得分:-1)

beans.xml文件夹中创建空WEB-INF个文件以启用CDI