首先,我想说,我在使用ejb和jsf编程方面非常新,我正在尝试完成一个由我的一个朋友启动的项目。
我得到了一个NullPointerException,它是由调用名为utenteSessionBean的会话bean对象的方法utenteSessionBean.CheckUtentebyId(username)引起的,该方法在名为Neo4jMBean的托管bean中声明。
我了解到,没有必要在托管bean中创建和初始化会话bean (您必须使用普通的java对象),但是声明它就足够了。
下面是会话bean的代码,它从DB检索数据
@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上搜索了很多次解决这个问题的方法,但是我还没有找到适合我的解决方案。
发布于 2016-10-04 23:02:28
我修正了使用JNDI访问EJB组件的问题。简而言之,如果我在托管bean方法中使用EJB,我需要添加下面的代码行:
InitialContext ic = new InitialContext();
SessionBeanName = (SessionBeanClass) ic.lookup("java:global/NameOfTheApplication/NameOfTheEJBpackage/NameOfTheSessionBean");
它必须由一条try-catch语句代替。
发布于 2016-06-30 17:35:17
在您的beans.xml
文件夹中创建空WEB-INF
文件以启用CDI
https://stackoverflow.com/questions/37930151
复制相似问题