# java Entities Problem



## sirius76 (20. Sep 2011)

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

```
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

```
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


----------



## SlaterB (20. Sep 2011)

Datenbank, Servlets, Entities,
da steckt ja viel drin, aber keine Java-Basics!, verschoben


----------



## truesoul (20. Sep 2011)

Habe auch grad erst damit angefangen aber die Annotations wie z.B @Id, müssen die nicht an über den getter stehen, also :

```
@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?


----------



## SlaterB (20. Sep 2011)

mit catch Exception abfangen,
wie steht es generell ums Logging im Servlet?


----------



## maki (20. Sep 2011)

truesoul hat gesagt.:


> 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.


----------



## nillehammer (20. Sep 2011)

[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.


----------



## truesoul (20. Sep 2011)

@maki

Jep, habs mittlerweile selber erlesen  Beides funktioniert. 
Danke


----------



## sirius76 (20. Sep 2011)

ungalublich habe es nochmals neu probiert und bin genau nach einem video von video2brain vorgegangen.

hier die customer.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

```
/*
 * 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

```
/*
 * 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>


----------



## SlaterB (20. Sep 2011)

> 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

```
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


----------



## sirius76 (20. Sep 2011)

nein ich weiss leider nicht wie das geht, könnt ihr mir dies kurz erklären.


----------



## SlaterB (20. Sep 2011)

ich persönlich erkläre ungern Standard-Dinge, auch wenn das vielleicht wenig höflich klingt
Galileo Computing :: Java ist auch eine Insel – 6 Exceptions
Code-Beispiele findet man auch dort sofort, 
besser aber das Kapitel gründlich lesen, noch besser von Anfang an, 
und das Monate bevor irgendwas mit Datenbanken oder Servlets drankommt


----------



## sirius76 (20. Sep 2011)

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.


----------



## SlaterB (20. Sep 2011)

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


----------



## sirius76 (20. Sep 2011)

dann waere ich von dir sehr sehr froh und würde es begrüssen wenn du mir schreiben könntest wie ich diesen try catch setzen kann. danke dir


----------



## SlaterB (20. Sep 2011)

grummel, 
na gut, im allgemeinen Interessen an zusätzlichen Informationen:

```
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


----------



## ARadauer (20. Sep 2011)

sirius76 hat gesagt.:


> dann waere ich von dir sehr sehr froh und würde es begrüssen wenn du mir schreiben könntest wie ich diesen try catch setzen kann. danke dir



komplexe Java Enterprise Technologien lernen wollen, aber sich weigern ein Kapitel über Exceptions zu lesen... naja das wird spannend...


----------



## maki (20. Sep 2011)

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.


----------



## sirius76 (20. Sep 2011)

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.


----------



## SlaterB (20. Sep 2011)

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..


----------



## maki (20. Sep 2011)

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.


----------

