我在GlassFish服务器上编写了一个EJB和一个动态Web项目Eclipse。我使用了DAO,Facade和JPA。通常我从我的服务中调用一个方法,它给出了这些错误;
kitapOduncVerme.xhtml]com.sun.faces.mgbean.ManagedBeanCreationException
PWC1406: Servlet.service() for servlet Faces Servlet threw exceptionjava.lang.NullPointerException
at com.mesutemre.kitapislemleri.KitapOduncVermeBean.initList(KitapOduncVermeBean.java:47)
at com.mesutemre.kitapislemleri.KitapOduncVermeBean.initialize(KitapOduncVermeBean.java:43)
我的代码如下;
@ManagedBean(name = "oduncKitapVerBean")
@ViewScoped
public class KitapOduncVermeBean implements Serializable{
private static final long serialVersionUID = 1L;
private List<Kitaplar> entityList = new ArrayList<Kitaplar>();
private Kitaplar selectedEntity;
private Kitaplar entity;
private String kullaniciadi;
private KitaplarFacade service;
public KitapOduncVermeBean() {
entity = new Kitaplar();
selectedEntity = new Kitaplar();
}
@PostConstruct
public void initialize(){
HttpSession session = Util.getSession();
kullaniciadi = Util.getUserName();
initList();
}
private void initList(){
entityList = service.findAllKitaplar();
}
DaoImpl
@SuppressWarnings("unchecked")
public List<Kitaplar> findAllKitaplar(){
return em.createNamedQuery("tumkitaplarigetir").getResultList();
}
道
@Stateless
@LocalBean
public class KitaplarDAO extends KitaplarDaoImpl<Kitaplar> implements Serializable{
private static final long serialVersionUID = 1L;
@Override
public List<Kitaplar> findAllKitaplar() {
return super.findAllKitaplar();
}
FacadeImpl
@Stateless
@LocalBean
public class KitaplarFacadeImpl implements KitaplarFacade,Serializable {
private static final long serialVersionUID = 1L;
@EJB
KitaplarDAO kitapDao;
@Override
public List<Kitaplar> findAllKitaplar() {
return kitapDao.findAllKitaplar();
}
}
门面
@Local
public interface KitaplarFacade {
public abstract List<Kitaplar> findAllKitaplar();
}
我在这段代码中看不到任何问题?但为什么我会收到这些错误?
答案 0 :(得分:1)
ManagedBeanCrearionException
只是包装并重新抛出NullPointerException
,这很容易调试:在堆栈跟踪中出现的确切行上有一个空变量。
在KitapOduncVermeBean
类中,您声明service
属性,但您没有对其进行初始化,因此在initList()
方法中调用时它为null。因为它是一个EJB,所以注释它,EJB容器将自动实例化它:
@EJB
private KitaplarFacade service;
与具体问题无关,您的代码太复杂了:使用EJB 3.x,在大多数Web应用程序中,您不需要EJB来实现或公开接口。