首先,我想说我在使用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上搜索解决这个问题的解决方案,但我还没找到适合我的东西。
答案 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