我的DAO类有一个很大的问题,当我想要持久化一个新实体时,我从我的wildfly服务器得到一个NullPointerException。
我有一个名为VeranstaltungAnlegenMB
的ManagedBeanpackage de.mb;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import de.awk.veranstaltungsverwaltung.facade.IVeranstaltungsverwaltungFacade;
@ManagedBean(name="veranstaltungAnlegenMB")
@RequestScoped
public class VeranstaltungAnlegenMB {
@EJB
IVeranstaltungsverwaltungFacade veranstaltungsverwaltungFacade;
private String name;
private String bezeichnung;
private String semester;
private int maxTeilnehmer;
public void veranstaltungAnlegen() {
System.out.println("veranstaltungAnlegen() aufgerufen in VeranstaltungAnlegenMB");
this.veranstaltungsverwaltungFacade.getVeranstaltungAnlegen().veranstaltungAnlegen(this.name,
this.bezeichnung, this.maxTeilnehmer, this.semester);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getBezeichnung() {
return bezeichnung;
}
public void setBezeichnung(String bezeichnung) {
this.bezeichnung = bezeichnung;
}
public String getSemester() {
return semester;
}
public void setSemester(String semester) {
this.semester = semester;
}
public int getMaxTeilnehmer() {
return maxTeilnehmer;
}
public void setMaxTeilnehmer(int maxTeilnehmer) {
this.maxTeilnehmer = maxTeilnehmer;
}
}
ManagedBean有一个方法veranstaltungAnlegen(),在那里我调用我的类VeranstaltungsverwaltungFacade(一个无状态bean),它实现了一个本地bean接口。 VeranstaltungsverwaltungFacade班级持有我的用例。我的用例都是无状态bean,也实现了本地bean接口。
在这里,您可以看到我的一个用例类。
package de.awk.veranstaltungsverwaltung.usecase.impl;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import de.awk.veranstaltungsverwaltung.dao.VeranstaltungDAO;
import de.awk.veranstaltungsverwaltung.model.Veranstaltung;
import de.awk.veranstaltungsverwaltung.usecase.ILehrveranstaltungAnlegen;
@Stateless
public class LehrveranstaltungAnlegenImpl implements ILehrveranstaltungAnlegen {
@EJB
private VeranstaltungDAO veranstaltungDAO;
public LehrveranstaltungAnlegenImpl() {
}
@Override
public void veranstaltungAnlegen(String name, String bezeichnung, int maxTeilnehmer, String semester) {
System.out.println(toString() + " starte Methode veranstaltungAnlegen(...)");
Veranstaltung aVeranstaltung = new Veranstaltung(name, bezeichnung, maxTeilnehmer, semester);
System.out.println("Veranstaltung: " + aVeranstaltung.getV_name() + " erstellt");
veranstaltungDAO.save(aVeranstaltung);
System.out.println(toString() + " veranstaltungAnlegen(String name, String bezeichnung, "
+ "int maxTeilnehmer, String semester)");
}
@Override
public String toString() {
return "LehrveranstaltungAnlegenImpl";
}
}
我的用例有我的DAO课程。当我尝试保存/持久化我的新实体时,我得到一个NullPointerException。我调试了我的程序,发现我的变量veranstaltungDAO尚未初始化 - >空值。但我不知道为什么,因为我在我的控制台中看到VeranstaltungDAO已经部署。
' [org.jboss.as.ejb3.deployment](MSC服务主题1-4)WFLYEJB0473:名为' VeranstaltungDAO'的会话bean的JNDI绑定在部署中......'
在这里你可以看到我的DAO课程:
import javax.ejb.Stateless;
import de.awk.dao.GenericDAO;
import de.awk.veranstaltungsverwaltung.model.Veranstaltung;
@Stateless
public class VeranstaltungDAO extends GenericDAO<Veranstaltung>{
public VeranstaltungDAO() {
super(Veranstaltung.class);
}
}
在这里,您可以看到我的实体类:
import java.util.ArrayList;
import java.util.List;
import javax.persistence.Access;
import javax.persistence.AccessType;
import javax.persistence.ElementCollection;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import java.io.Serializable;
@Entity
@Access(AccessType.FIELD)
public class Veranstaltung implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="V_ID")
@SequenceGenerator(name="V_ID", sequenceName="SEQ_VERANSTALTUNG_ID", allocationSize=1)
private int v_id;
private String v_name;
private String v_bezeichnung;
private int max_Teilnehmer;
private String semester;
@ElementCollection
private List<String> studenten;
private String dozent;
@OneToMany
@JoinTable(name="Veranstaltung_Hausarbeit",
joinColumns=@JoinColumn(name="v_id", referencedColumnName="v_id"),
inverseJoinColumns=@JoinColumn(name="h_id", referencedColumnName="h_id"))
private List<Hausarbeit> hausarbeitenliste;
@OneToMany
@JoinTable(name="Veranstaltung_Dokument",
joinColumns=@JoinColumn(name="v_id", referencedColumnName="v_id"),
inverseJoinColumns=@JoinColumn(name="d_id", referencedColumnName="d_id"))
private List<VeranstaltungDokument> dokumentenliste;
public Veranstaltung() {
}
public Veranstaltung(String v_name, String v_bezeichnung, int max_Teilnehmer, String semester) {
this.v_name = v_name;
this.v_bezeichnung = v_bezeichnung;
this.max_Teilnehmer = max_Teilnehmer;
this.semester = semester;
this.dozent = "bla";
this.hausarbeitenliste = new ArrayList<Hausarbeit>();
this.dokumentenliste = new ArrayList<VeranstaltungDokument>();
this.studenten = new ArrayList<String>();
}
public List<Hausarbeit> getHausarbeitenliste() {
return hausarbeitenliste;
}
public void setHausarbeitenliste(List<Hausarbeit> hausarbeitenliste) {
this.hausarbeitenliste = hausarbeitenliste;
}
public List<VeranstaltungDokument> getDokumentenliste() {
return dokumentenliste;
}
public void setDokumentenliste(List<VeranstaltungDokument> dokumentenliste) {
this.dokumentenliste = dokumentenliste;
}
public List<String> getStudenten() {
return studenten;
}
public void setStudenten(List<String> studenten) {
this.studenten = studenten;
}
public void addStudent(String student) {
this.studenten.add(student);
}
public int getV_id() {
return v_id;
}
public void setV_id(int v_id) {
this.v_id = v_id;
}
public String getV_name() {
return v_name;
}
public void setV_name(String v_name) {
this.v_name = v_name;
}
public String getV_bezeichnung() {
return v_bezeichnung;
}
public void setV_bezeichnung(String v_bezeichnung) {
this.v_bezeichnung = v_bezeichnung;
}
public int getMax_Teilnehmer() {
return max_Teilnehmer;
}
public void setMax_Teilnehmer(int max_Teilnehmer) {
this.max_Teilnehmer = max_Teilnehmer;
}
public String getSemester() {
return semester;
}
public void setSemester(String semester) {
this.semester = semester;
}
public String getDozent() {
return dozent;
}
public void setDozent(String dozent) {
this.dozent = dozent;
}
public void addHausarbeit(Hausarbeit addHausarbeit) {
this.hausarbeitenliste.add(addHausarbeit);
}
}
我希望你们能帮帮我。
My GenericsDAO扩展了我的班级VeranstaltungDAO
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import javax.persistence.criteria.CriteriaQuery;
public abstract class GenericDAO<T> {
private final static String UNIT_NAME = "EJB_JPA_LearningPortal";
@PersistenceContext(unitName = UNIT_NAME)
private EntityManager em;
private Class<T> entityClass;
public GenericDAO(){}
public GenericDAO(Class<T> entityClass) {
this.entityClass = entityClass;
}
protected void delete(Object id, Class<T> classe) {
T entityToBeRemoved = em.getReference(classe, id);
em.remove(entityToBeRemoved);
}
public T update(T entity) {
return em.merge(entity);
}
public void save(T entity) {
this.em.persist(entity);
}
public T find(int entityID) {
return em.find(entityClass, entityID);
}
// Using the unchecked because JPA does not have a
// em.getCriteriaBuilder().createQuery()<T> method
@SuppressWarnings({ "unchecked", "rawtypes" })
public List<T> findAll() {
CriteriaQuery cq = em.getCriteriaBuilder().createQuery();
cq.select(cq.from(entityClass));
return em.createQuery(cq).getResultList();
}
// Using the unchecked because JPA does not have a
// ery.getSingleResult()<T> method
@SuppressWarnings("unchecked")
protected T findOneResult(String namedQuery, Map<String, Object> parameters) {
T result = null;
try {
Query query = em.createNamedQuery(namedQuery);
// Method that will populate parameters if they are passed not null and empty
if (parameters != null && !parameters.isEmpty()) {
populateQueryParameters(query, parameters);
}
result = (T) query.getSingleResult();
} catch (Exception e) {
System.out.println("Error while running query: " + e.getMessage());
e.printStackTrace();
}
return result;
}
private void populateQueryParameters(Query query, Map<String, Object> parameters) {
for (Entry<String, Object> entry : parameters.entrySet()) {
query.setParameter(entry.getKey(), entry.getValue());
}
}
public T findByString(String entityID) {
return em.find(entityClass, entityID);
}
}
在这里你可以看到我的堆栈跟踪,我不知道如何更好地格式化它......
15:15:59,433警告[javax.enterprise.resource.webcontainer.jsf.lifecycle](默认任务-11)java.lang.NullPointerException:javax.el.ELException:java.lang.NullPointerException at com.sun.el.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:187) 在com.sun.el.parser.AstValue.invoke(AstValue.java:289) at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:304) 在org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:40) 在org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:50) 在javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:149) 在javax.faces.event.ActionEvent.processListener(ActionEvent.java:88) 在javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:814) 在javax.faces.component.UICommand.broadcast(UICommand.java:300) 在javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790) 在javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282) at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81) 在com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 在com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198) 在javax.faces.webapp.FacesServlet.service(FacesServlet.java:658) at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85) 在io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62) at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36) at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78) at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131) at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57) at io.undertow.server.handlers.DisableCacheHandler.handleRequest(DisableCacheHandler.java:33) at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) at io.undertow.security.handlers.AuthenticationConstraintHandler.handleRequest(AuthenticationConstraintHandler.java:51) at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46) at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64) at io.undertow.servlet.handlers.security.ServletSecurityConstraintHandler.handleRequest(ServletSecurityConstraintHandler.java:56) at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60) at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77) at io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50) at io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43) at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) 在org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61) at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:284) at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:263) at io.undertow.servlet.handlers.ServletInitialHandler.access $ 000(ServletInitialHandler.java:81) at io.undertow.servlet.handlers.ServletInitialHandler $ 1.handleRequest(ServletInitialHandler.java:174) at io.undertow.server.Connectors.executeRootHandler(Connectors.java:202) at io.undertow.server.HttpServerExchange $ 1.run(HttpServerExchange.java:793) 在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:617) 在java.lang.Thread.run(Thread.java:745) 引起:java.lang.NullPointerException at de.awk.veranstaltungsverwaltung.usecase.impl.LehrveranstaltungAnlegenImpl.veranstaltungAnlegen(LehrveranstaltungAnlegenImpl.java:26) at de.mb.VeranstaltungAnlegenMB.veranstaltungAnlegen(VeranstaltungAnlegenMB.java:25) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在java.lang.reflect.Method.invoke(Method.java:497) at com.sun.el.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:181) ... 44更多
15:15:59,442 SEVERE [javax.enterprise.resource.webcontainer.jsf.context](默认任务-11)java.lang.NullPointerException at de.awk.veranstaltungsverwaltung.usecase.impl.LehrveranstaltungAnlegenImpl.veranstaltungAnlegen(LehrveranstaltungAnlegenImpl.java:26) at de.mb.VeranstaltungAnlegenMB.veranstaltungAnlegen(VeranstaltungAnlegenMB.java:25) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在java.lang.reflect.Method.invoke(Method.java:497) at com.sun.el.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:181) 在com.sun.el.parser.AstValue.invoke(AstValue.java:289) at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:304) 在org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:40) 在org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:50) 在javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:149) 在javax.faces.event.ActionEvent.processListener(ActionEvent.java:88) 在javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:814) 在javax.faces.component.UICommand.broadcast(UICommand.java:300) 在javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790) 在javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282) at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81) 在com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 在com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198) 在javax.faces.webapp.FacesServlet.service(FacesServlet.java:658) at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85) 在io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62) at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36) at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78) at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131) at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57) at io.undertow.server.handlers.DisableCacheHandler.handleRequest(DisableCacheHandler.java:33) at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) at io.undertow.security.handlers.AuthenticationConstraintHandler.handleRequest(AuthenticationConstraintHandler.java:51) at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46) at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64) at io.undertow.servlet.handlers.security.ServletSecurityConstraintHandler.handleRequest(ServletSecurityConstraintHandler.java:56) at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60) at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77) at io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50) at io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43) at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) 在org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61) at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:284) at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:263) at io.undertow.servlet.handlers.ServletInitialHandler.access $ 000(ServletInitialHandler.java:81) at io.undertow.servlet.handlers.ServletInitialHandler $ 1.handleRequest(ServletInitialHandler.java:174) at io.undertow.server.Connectors.executeRootHandler(Connectors.java:202) at io.undertow.server.HttpServerExchange $ 1.run(HttpServerExchange.java:793) 在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:617) 在java.lang.Thread.run(Thread.java:745)