# EntityManager ist null. Warum?



## Fats (12. Aug 2008)

Hallo!

Folgendes Problem: Ich hab mir von Netbeans ein paar Klassen aus meiner vorhandenen MySQL Datenbank generieren lassen. Soweit so schick! Unter anderem gibt es dort zu jeder DatenKlasse eine Controller Klasse. Zum Beispiel Student und StudentController.

Wenn ich diesen Controller jetzt in einer anderen Klasse einbinden möchte:


```
public class Manager {

    private StudentController stctrl = new StudentController();

    ...

}
```

Dann gibt es eine NullPointer Exception, wenn ich etwa folgendes mache:

```
List list = stctrl.getStudents();
```

Hier bei fliegt mir alles um die Ohren!

Wenn ich mir die SRC ansehe, dann komm eich auf folgendes:


```
public List<Student> getStudents() {
        if (students == null) {
            students = getStudents(false);
        }
        return students;
    }
```

von hier geht es weiter zu 



```
public List<Student> getStudents(boolean all) {
        EntityManager em = getEntityManager();
        try {
            Query q = em.createQuery("select object(o) from Students as o");
            if (!all) {
                q.setMaxResults(batchSize);
                q.setFirstResult(getFirstItem());
            }
            return q.getResultList();
        } finally {
            em.close();
        }
    }
```

und dann zu

```
public EntityManager getEntityManager() {
        return emf.createEntityManager();
    }
```

und genau hier kommt die NullPointer Exception! emf ist null! Warum? Wie kann man es setzen??

Ich hab die ganze Klasse durchsucht, aber es gibt nur 2 Stellen, an denen das emf auftritt! Die erste ist genau diese jene Zeile und die zweite Stelle befindet sich zwei Zeilen höher:


```
@PersistenceUnit(unitName = "STUDENTS-PU")
    private EntityManagerFactory emf = null;
```


Aber nirgends steht, wo und wie es gesetzt wird! 

Was passiert hier? Hat da jemand einen Tipp für mich? Das wäre nett!

Viel Grüße
Fats


----------



## happy_robot (25. Aug 2008)

die antwort ist eigentlich recht einfach, wundere mich aber daß niemand antwortet:



grundsätzlich stellt sich die frage der umgebung:


wenn du 


```
@PersistenceUnit(unitName = "STUDENTS-PU")
```

angibst, erwartest du daß jemand dir den entitymanager zuweist. das geschieht nur in einer umgebung die dieses auch "kann", z.b. dem JBoss. die persistence-unit muss hier auch im application-server konfiguriert sein (als Data-Source).

in einem servlet-container (tomcat oder ähnliche) musst du du den entity-manager selber instanziieren (EntityManagerFactory).

Hab jetzt gerade keine Zeit das alles zu posten, google einfach mal danach. Ansonsten schau ich morgen noch mal rein.


----------



## Fats (26. Aug 2008)

Aaaah  Der Tipp war gut! 

Sieht dann in etwa so aus:

```
emf = javax.persistence.Persistence.createEntityManagerFactory("STUDENTS-PU");
stctrl.setEntityManagerFactory(emf);
```
Und dann gehts. Den Controler muß man dann natürlich um die set Methode für den EMF ergänzen.

Vielen Dank
Fats


----------

