Problem mit Eintragen von Daten in eine Datenbank mittels DAO

a-Ali-YaH

Mitglied
Hallo, ich habe folgendes Problem, ich kann einfach nicht informationen in die Datenbank schreiben oder rauslesen es kommt immer nur java.lang.NullPointerException zurück.

Aber hier nochmal alles etwas genauer:

Es ist eine JavaEE anwendung, und es wird auf eine JavaDB zugegriffen, das der zugriff funktioniert sehe ich daran das wenn ich die Einstellung in der persistence.xml bei Strategie bei der Tabellenerzeugung auf "Drop and Create" gestellt hab und es immer eine neue Tabelle erstellt.
Der Fehler tritt auf wenn ich versuche mittels eines DAO etwas in die Datenbank zu schreiben oder rauslesen. Der fehler ist nochmal im quelltext markiert.

sieht jemand etwas, vieleicht habe ich auch einfach nur eine Annotation irgendwo vergessen.

Vielen Dank schon mal im Vorraus

Hier mein Quellcode:

SingleUploadResult.java - Servlet
Java:
package com;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ejb.EJB;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * zeigt das ergebnis des downloads an - Servlet
 */
@WebServlet("/singleUpload")
public class SingleUploadResult extends HttpServlet {
    
    @EJB
    private MedienBilderDAO medienBilderDAO;
    
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        
        response.setContentType("text/html;charset=UTF-8");
        
        PrintWriter out = response.getWriter();
 
        // hier wird die datei in die datenbank eingetragen
        
           MedienBilder medienBilder = new MedienBilder("name1", 152, 352, "jpg", "ort1", "ort2");
           // genau hier tritt der fehler auf
           // er geht auch gar nicht in die funtion create rein sondern bringt die fehlermeldung beim funktionsaufruf schon
           medienBilderDAO.create(medienBilder);
           
        try {  // #### HTML Ausgabe

            out.println("<html>");  
            out.println("<head>");
            out.println("<title>Dateiupload</title>");
            out.println("</head>");
            out.println("<body>");
            out.println("<br/>");
            out.println("<table border=\"2\">");
            out.println("<tr>");
            out.println("<td>");
            out.println("<b>Die Datei mit dem Namen: </b><br/>");
            //out.println(saveFile);
            out.println("<br/><b>und der Dateiendung:</b>");
            // out.println(typ);
            out.println("<br/><b>wurde erfolgreich Hochgeladen!</b>");
            out.println("</td>");
            out.println("</tr>");
            out.println("</table>");
            
            out.println("<br/><br/>");
            //  out.println("Bildbreite: " + newImgVerwalter.getWidth());
            out.println("<br/><br/>");
            //  out.println("Bildhoehe: " + newImgVerwalter.getHeight());
            out.println("<br/><br/>");
            
            out.println("</body>");
            out.println("</html>");
        } finally {
            out.close();
        }
    }

   // ... die restlichen methoden die automatisch erstellt wurden
}

MedienBilderDAO.java - DAO
Java:
package com;

import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery;

@Stateless
public class MedienBilderDAO {

    @PersistenceContext
    private EntityManager em;

    public void create(MedienBilder medienBilder) { 
        em.persist(medienBilder);
    }

    public List<MedienBilder> getAll() {
        TypedQuery<MedienBilder> query = em.createQuery("select c from MedienBilder c", MedienBilder.class);
        return query.getResultList();
    }
}

MedienBilder.java - Ententitätsklasse
Java:
package com;

import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

/**
 * Entitätsklasse
 */
@Entity
public class MedienBilder implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "BILDER_ID")
    private Long id;
    @Column(name = "BILDER_NAME")
    private String name;
    @Column(name = "BILDER_WIDTH")
    private int width;
    @Column(name = "BILDER_HEIGHT")
    private int height;
    @Column(name = "BILDER_TYP")
    private String typ;
    @Column(name = "BILDER_LOCATION")
    private String location;
    @Column(name = "BILDER_LOCATION_MINIBILD")
    private String locationMinibild;

    public MedienBilder() {
    }

    public MedienBilder(String name, int width, int height, String typ, String location, String locationMinibild) {
        this.name = name;
        this.width = width;
        this.height = height;
        this.typ = typ;
        this.location = location;
        this.locationMinibild = locationMinibild;
    }

    public int getHeight() {
        return height;
    }

    public void setHeight(int height) {
        this.height = height;
    }

    public String getLocation() {
        return location;
    }

    public void setLocation(String location) {
        this.location = location;
    }

    public String getLocationMinibild() {
        return locationMinibild;
    }

    public void setLocationMinibild(String locationMinibild) {
        this.locationMinibild = locationMinibild;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getTyp() {
        return typ;
    }

    public void setTyp(String typ) {
        this.typ = typ;
    }

    public int getWidth() {
        return width;
    }

    public void setWidth(int width) {
        this.width = width;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    // andere automatisch generierte funktionen
}
 
Zuletzt bearbeitet:
Dein Dao wird nicht injected ... woran das genau liegt ist als Ferndiagnose schwer zu sagen.

Welchen App-Server benutzt Du denn?
Läuft das Deployment sauber durch?
 
hmm kann es sein, dass die Klasse SingleUploadResult nicht managed ist?

Annotier die mal mit @Model

[EDIT] ja sieht so aus wenn ich das im java-doc grade richtig gesehen habe, sorgt @WebServlet nciht dafür, dass die Bean managed ist ... Du brauchst also wohl zusätzlich die @Model bzw. @Named + entsprechenden Scope[/EDIT]
 
Zuletzt bearbeitet von einem Moderator:
danke für die antwort,

hm das ist jetzt echt merkwürdig, ich hab mal alle anderen datasources und datenbanken runtergeschmissen und dann noch netbeans/glassfish komplett neugestartet und dann gings, echt strange

aber das mit @Model merk ich mir mal für später falls wieder nicht geht
 

Zurück
Oben