Mein EntityManager oder EntityManagerFactory liefern ständig null zurück

Diskutiere Mein EntityManager oder EntityManagerFactory liefern ständig null zurück im Data Tier Forum; Meine persistence.xml <?xml version="1.0" encoding="UTF-8"?> <persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"...

  1. Rudolf
    Rudolf Mitglied
    Meine persistence.xml

    Code (Java):

    <?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="default" transaction-type="JTA">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
            <properties>
                <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />
                <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/isqe" />
                <property name="hibernate.connection.username" value="root" />
                <property name="hibernate.connection.password" value="" />
                <property name="hibernate.connection.pool_size" value="1"/>
                <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
                <property name="hibernate.show_sql" value="true"/>
    <!--            <property name="hibernate.hbm2ddl.auto" value="create-drop"/> -->
                <property name="hibernate.hbm2ddl.auto" value="update"/>
                <property name="hibernate.current_session_context_class" value="thread"/>
                <property name="hibernate.cache.provider_class" value="org.hibernate.cache.internal.NoCacheProvider"/>
            </properties>
        </persistence-unit>
    </persistence>
     
    Wenn ich in einer @ManagedBean eine Referenz benutze, die so aussieht:

    Code (Java):

        @PersistenceContext(unitName = "default")
        private EntityManager em;
     
    dann kriege ich ständig null. Woran liegt das? ist meine persistence.xml falsch konfiguriert, oder gehören die Angaben in die server.xml von tomcat?
     
  2. Vielleicht hilft dir dieser Java-Kurs hier weiter --> (hier klicken)
  3. nillehammer
    nillehammer Guest
    Nein, das passt schon so. Eine mögliche Ursache ist, dass die persistence.xml nicht am richtigen Ort liegt. Das hatte ich mal und hab dann diese Seite gefunden, wo das sehr gut aufgelistet ist: Java How To ...: Where to put persistence.xml in web app?

    Was auch zu beachten ist, dass die Injection erst nach dem Konstruktor daran kommt. Du kannst also den em von innerhalb des Konstruktors noch nicht nutzen. (Nur, falls Du das evtl. gemacht haben solltest.)
     
  4. Rudolf
    Rudolf Mitglied
    Danke für die Hinweise.

    Ich habe eine Mavenarchitektur. Das bedeutet ich habe einen Srcordner in src/main/java. Dort ist ein Ordner mit Namen META-INF und dort ist die persistence.xml. Ich nutze die persistence.xml mit Persistence.createEntityManagerFactory("unitName"); und mit der gewohnten Benutzung und es funzt. Ich gehe mal davon aus, dass die persistence.xml gefunden wird.

    em wird weder im Konstruktor noch in einem preRenderView oder PostConstruct aufgerufen. Das kanns also auch nicht sein. Sonst Ideen?
     
  5. JimPanse
    JimPanse Neues Mitglied
    Es fehlt die Angabe der JTA-Datasource d.h. wäre nicht schlecht noch zu Wissen was für einen Server du verwendest.
    [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="
    Oracle Technology Network for Java Developers
    http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
    <persistence-unit name="default" transaction-type="JTA">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <jta-data-source>java:deineDS</jta-data-source>
    <properties>
    ....
    </properties>
    </persistence-unit>
    </persistence>
    [/XML]
     
  6. Rudolf
    Rudolf Mitglied
    was fürn server? ich nutze mysql lokal.
     
  7. mvitz
    mvitz Aktives Mitglied
    Du nutzt also einen reinen Tomcat? Der kann afaik überhaupt kein DI über @PersistenceContext(unitName = "default") durchführen.
     
  8. Rudolf
    Rudolf Mitglied
    ich nutze einen reinen tomcat, überlege später evtl auf glassfish umzusteigen, wenn das projekt fertig ist und ich es auf einen richtigen host deploye.

    und was di und tomcat angeht. kann sein, habe aber einige tutorials im net gefunden, die etwas anderes behaupten. weiß jemand mehr?
     
  9. nillehammer
    nillehammer Guest
    Ich habe nochmal ein bischen rumgesurft. Lies Dir unter folgendem Link Accessing Databases from Web Applications - The Java EE 5 Tutorial mal den Abschnitt "Obtaining Access to an Entity Manager" durch. Dort ist es recht genau erklärt. Kurz zusammengefasst:
    Injection setzt voraus, dass das worin injiziert werden soll, irgendwie gemanaged ist, deswegen:
    - Injection eigentlich nur in fully blown JEE-Servern
    - Aber auch Webanwendungen gibt es Container-Managed Gedöns (Managed Beans bei JSF, Servlets, Listener)
    Grundsätzlich geht DI also auch im Tomcat.

    Aber in dieser Umgebung muss man aufpassen. Der EntityManager ist nicht Threadsafe und kann deswegen nur in RequestScoped Beans per @PersistenceContext injiziert werden. In allen anderen Fällen ist zwingend die EntityManagerFactory per @PersistenceUnit zu injizieren. Das ist dann in Deiner Managed Bean zwar eine Zeile mehr Code, aber es dürfte Dein Problem lösen.
     
  10. JimPanse
    JimPanse Neues Mitglied
    MySQL ist eine Datenbank und kein Server und Apache Tomcat ein Servlet-Container der wiederrum keinen EJB-Container implementiert d.h. entweder apache-tomee oder openejb mit Tomcat verwenden ansonsten einen AS wie JBoss oder Glassfish u.s.w.

    Soweit ich weiß gibt es noch keine EJB3.1 Lite impl. für den Tomcat obwohl es mal angedacht war New-Features-in-EJB-31:

     
    Zuletzt bearbeitet: 18. Jan. 2013
Die Seite wird geladen...

Mein EntityManager oder EntityManagerFactory liefern ständig null zurück - Ähnliche Themen

Warum funktioniert mein Programm nicht ?
Warum funktioniert mein Programm nicht ? im Forum Java Basics - Anfänger-Themen
Meine Ratemaschine
Meine Ratemaschine im Forum Java Basics - Anfänger-Themen
Ist mein Struktogram richtig erstellt worden?
Ist mein Struktogram richtig erstellt worden? im Forum Java Basics - Anfänger-Themen
10€ Spende an gemeinnützige Institution - Danke für die Unterstützung hier im Forum
10€ Spende an gemeinnützige Institution - Danke für die Unterstützung hier im Forum im Forum Plauderecke
Warum speichert meine String-Variable nummerische Werte?
Warum speichert meine String-Variable nummerische Werte? im Forum Java Basics - Anfänger-Themen
Thema: Mein EntityManager oder EntityManagerFactory liefern ständig null zurück