java Entities Problem

sirius76

Mitglied
Hallo zusammen
Ich habe eine externe mysql Datenbank erstellt mit Namen
udryw_java

dortdrin habe ich eine Tabelle angelegt mit Namen adressen
und drei Felder ID, Vorname, Nachname.

Nun habe ich auf youtube ein Video gefunden und wollte dies nachmachen aber es geht einfach nicht und ich finde den fehler einfach nicht. waere froh wenn ihr mir weiterhelfen könntet.
dazu habe ich folgende persistence xml
[XML]<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="HelloWorldPU" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<class>model.Adressen</class>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://mysql11.webland.ch:3306/udryw_java"/>
<property name="javax.persistence.jdbc.password" value="jean"/>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="javax.persistence.jdbc.user" value="udryw_java"/>
</properties>
</persistence-unit>
</persistence>
[/XML]


Das Servlet HelloServlet.java
Java:
package server;

import java.io.IOException;
import java.io.PrintWriter;
import javax.persistence.EntityManagerFactory;
import javax.persistence.PersistenceUnit;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import model.Adressen;

/**
 *
 * @author pudr
 */
public class HelloServlet extends HttpServlet {
    
    @PersistenceUnit
    EntityManagerFactory emf;

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {

            out.println("<html>");
            out.println("<head>");
            out.println("<title>Servlet HelloServlet</title>");  
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>Servlet HelloServlet at " + request.getContextPath () + "</h1>");
           // Adressen adressen = (Adressen)emf.createEntityManager().createNamedQuery("Adressen.findAll").getResultList().get(6);
            //out.println("<h1>Servlet HelloServlet at " + adressen.getVorname() + "</h1>");
        
            Adressen I = (Adressen)emf.createEntityManager().createNamedQuery("Adressen.findAll").getResultList();
out.println("<h1>Servlet HelloServlet at " + I.getVorname() + "</h1>");
            out.println("<h1>Servlet HelloServlet at " + I.getVorname() + "</h1>");
            out.println("</body>");
            out.println("</html>");

        } finally {            
            out.close();
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /** 
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Returns a short description of the servlet.
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}

und meine Adressen.java
Java:
package model;

import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Lob;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.xml.bind.annotation.XmlRootElement;


@Entity
@Table(name = "adressen")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Adressen.findAll", query = "SELECT a FROM Adressen a"),
    @NamedQuery(name = "Adressen.findById", query = "SELECT a FROM Adressen a WHERE a.id = :id"),
    @NamedQuery(name = "Adressen.findByName", query = "SELECT a FROM Adressen a WHERE a.nachname = :udry")})
public class Adressen implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "ID")
    private Integer id;
    @Basic(optional = false)
    @Lob
    @Column(name = "Vorname")
    private String Vorname;
    @Basic(optional = false)
    @Lob
    @Column(name = "Nachname")
    private String Nachname;

    public Adressen() {
    }

    public Adressen(Integer id) {
        this.id = id;
    }

    public Adressen(Integer id, String vorname, String nachname) {
        this.id = id;
        this.Vorname = vorname;
        this.Nachname = nachname;
    }

    public Integer getId() {
        return id;
    }

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

    public String getVorname() {
        return Vorname;
    }

    public void setVorname(String vorname) {
        this.Vorname = vorname;
    }

    public String getNachname() {
        return Nachname;
    }

    public void setNachname(String nachname) {
        this.Nachname = nachname;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Adressen)) {
            return false;
        }
        Adressen other = (Adressen) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "model.Adressen[ id=" + id + " ]";
    }
    
}


wenn ich auf erstellen klicke gibts keine Fehlermeldung. aber wenn ich es im Browser http://localhost:8080/HelloWorld/HelloServlet eingebe
erscheint einfach eine leere weisse Seite ohne Fehlermeldung.

Seltsam ist aber wenn ich den Quelltext ansehe der WebSite steht nur
<html>
<head>
<title>Servlet HelloServlet</title>
</head>
<body>


der Quelltext ist wie abgeschnitten.

Ich weiss dass ihr wahrscheinlich keine zeit habt meinen Code zu studieren.
Dennoch danke ich euch
 
Habe auch grad erst damit angefangen aber die Annotations wie z.B @Id, müssen die nicht an über den getter stehen, also :
Java:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "ID")
public Integer getId() {
        return id;
}

// usw.

Wie gesagt, bin auch erst seit ein paar Tagen dabei.

Bekommst du überhaupt ne Verbindung zur Datenbank?
Bist du dir sicher das du keine Fehlermeldung erhälst?
 
Zuletzt bearbeitet:
Habe auch grad erst damit angefangen aber die Direktiven wie z.B @Id, müssen die nicht an über den getter stehen, also :
...
Nein müssen sie nicht.

@sirius76
Du versuchst EJBs, JPA und Servlets über ein Video zu erlernen?
Sehr mutig.. diplomatisch ausgedrückt.

Würde dir da die Doku und Bücher lesen empfehlen, ist viel zu komplex für ein Video, zumindest wenn man keine Erfahrung damit hat.
 
[Java]
Adressen I = (Adressen)emf.createEntityManager().createNamedQuery("Adressen.findAll").getResultList();
out.println("<h1>Servlet HelloServlet at " + I.getVorname() + "</h1>");
[/Java]
Hier dürfte eine ClassCastException fliegen. getResultList gibt eine List zurück, die möglicherweise Instanzen von Adressen enthält (wenn sie nicht leer ist). Die kannst Du nicht einfach auf Adressen casten.
 
Zuletzt bearbeitet von einem Moderator:
ungalublich habe es nochmals neu probiert und bin genau nach einem video von video2brain vorgegangen.

hier die customer.java
Java:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package demo;

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

/**
 *
 * @author pudr
 */
@Entity
public class Customer implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private String name;

    public Customer(String name) {
        this.name = name;
    }
    
     public Customer() {
        
    }
    

    public Long getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

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

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Customer)) {
            return false;
        }
        Customer other = (Customer) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "demo.Customer[ id=" + id + " ]";
    }
    
}

die CustomerService.java
Java:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package demo;

import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

@Stateless
public class CustomerService {
    
    @PersistenceContext
    
    private EntityManager em;
    public void create(Customer customer){
        em.persist(customer);
    
    }
    
    public List<Customer> getAll(){
        //TypedQuery<Customer> query = em.createQuery("Select c from Customer c",Customer.class);
        //return query.getResultList();
Query q = em.createNativeQuery("Select c from Customer c",Customer.class);
return q.getResultList();




           
    }
}

und die CustomerServlet.java
Java:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package demo;

import java.io.IOException;
import java.io.PrintWriter;
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;

/**
 *
 * @author pudr
 */
@WebServlet("/allCustomers")
public class CustomerServlet extends HttpServlet {
    @EJB
    private CustomerService service;

    /** 
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        
        service.create(new Customer("Philippe"));
        service.create(new Customer("Fredy"));
        service.create(new Customer("Heidi"));
        try {
            
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Servlet CustomerServlet</title>");  
            out.println("</head>");
            out.println("<body>");
            
            out.println("<h1>Kundenliste</h1>");
           for(Customer customer:service.getAll()){
              out.println(customer.getName()+ "</br>");
           }
            out.println("</body>");
            out.println("</html>"); 
    
        } finally {            
            out.close();
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /** 
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Returns a short description of the servlet.
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}

persistence.xml
[XML]<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="HelloJPAPU" transaction-type="JTA">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<jta-data-source>jdbc/customers</jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="eclipselink.ddl-generation" value="create-tables"/>
</properties>
</persistence-unit>
</persistence>
[/XML]

es funzt alles einwandfrei und die drei namen werden auch in der
Datenbank eingefügt, keine Errormeldung nichts
service.create(new Customer("Philippe"));
service.create(new Customer("Fredy"));
service.create(new Customer("Heidi"));


aber im Browser erscheint wieder nur nichts
nur die Überschrift und der quelltext ist wieder abgeschnitten
<html>
<head>
<title>Servlet CustomerServlet</title>
</head>
<body>
<h1>Kundenliste</h1>
 
> keine Errormeldung nichts
wenn du kein catch einbaust bzw. kein Grundverständnis zum Logging entwickelst, wird du auch nie was sehen,

lerne erstmal Servlets, die nur Hello World ausgehen,
dann schreibe darin
Java:
if (Math.random() < 5) {
   throw new RuntimeException("test");
}
und prüfe, ob du von dieser Exception ausreichend viel mitbekommst

in dein Programm kannst du immer noch catch einbauen, fallst du weißt was das ist
 
werde ich durchlesen. danke für den Link.

Nichts desto trotz würde ich gerne wissen warum dass bei beiden Projekten welche ich eins zu eins übernommen habe, keine Fehlermeldung erscheint die Datensätze angelegt werden und
alles gestartet wird. nur dass im Browser nicht die datensätze erscheinen und der quellcode der html datei abgeschnitten ist.

Es muss doch sehr wahrscheinlich irgendetwas an meiner Konfiguration nicht stimmen.
 
falls noch nicht deutlich geworden:
das catch mit Ausgabe der Fehlermeldung könnte exakt diese Informationen liefern,
von außen sowas abzulesen kann schwer sein
 
grummel,
na gut, im allgemeinen Interessen an zusätzlichen Informationen:
Java:
try { // hast du schon
 ... // hast du schon
    

    }
    catch ( Exception e )
    {
      System.err.println( "Exception" );
      e.printStackTrace();



   
    } finally { // hast du schon
         ...  // hast du schon

das sind jetzt natürlich nur System.out + System.err-Ausgaben, die je nach Einstellungen + deinen Fähigkeiten gar nichts bringen,
wie du allgemein loggen bzw. sonst wie Informationen gewinnen kannst ist eine Frage für sich und das kann und will ich dir nun wirklich nicht hier beibringen
 
Na gut, dann schreibe ich doch noch etwas... obwohl ich das eigentlich nicht mehr wollte.

sirius76, was sauch immer du vorhast, es wird schiefgehen.
Dir fehlen einfach die Grundlagen für normales Java, was du da machst reicht weder um selber eine JEE App zu schreiben, noch um sich durch ein Vorstellungsgespräch/Einstellungstest zu "manövrieren".

Lerne erst gehen, dann rennen,sonst wird das nix.
 
ok jungs ich gebe mich geschlagen und sehe es ein dass dies wohl zu hoch für mich ist.
es nahm mich einfach in erster Linie Wunder warum beide Beispiele welche ich eins zu eins übernommen habe bei mir nicht funktionieren. ob es wohl an einer falschen Einstellung wo auch immer lag. ich muss mich also weiter gedulden um dies mal zum laufen zu bringen.

könnt ihr mir aber Bücher vorschlagen wo die Grundlagen von Java EE sind, oder mir angeben welche Bücher ihr habt wo ihr euch eures Wissen erlernt hat. es gibt soviel bücher und als neuling bin ich da echt etwas überfordert welhes ich kaufen / bestellen soll. danke für eure Vorschläge

schönen abend an alle.
 
ein Tipp ist auf jeden Fall nicht zu mischen, J2EE Beispiele sind für sich ein Mega-Thema, dann solltest du nicht auch noch gleichzeitig Datenbanken konfigurieren und weitere Fehlerquellen reinbringen,
lieber zunächst nur statische oder zufällige Daten anzeigen, bzw. das was im Verlauf des Servers alles vom User eingetippt wird,
in normalen Objekten speichern..
 
Ehrlich gesagt würde ich die erstmal Java SE empfehlen, schon allein wegen deiner Frage zu Exceptions, und da gibt es einiges (Java ist auch eine Insel zB., umsonst im Netz).

Viel später dann, soltest du dich entweder in EJBs, JPA oder JSF einlesen, sind für sich genommen schon sehr komplex, selsbtr erfahrene Javaentwickler brauchen sehr lange um alle 3 zu meistern, schon gar nicht gleichzeitig.
 

Neue Themen


Zurück
Oben