java.lang.NullPointerException bei EJB-Projekt

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • java.lang.NullPointerException bei EJB-Projekt

    hi,

    ich bekomme folgenden fehler:
    HTTP Status 500 -

    --------------------------------------------------------------------------------

    type Exception report

    message

    description The server encountered an internal error () that prevented it from fulfilling this request.

    exception

    org.apache.jasper.JasperException: java.lang.NullPointerException
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:515)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:411)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:322)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:249)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)


    root cause

    java.lang.NullPointerException
    org.librarian.controller.loginBean.getLogin(loginBean.java:29)
    org.apache.jsp.index_jspx._jspService(index_jspx.java:73)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:369)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:322)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:249)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)



    beim ausführen des folgenden codes:

    Quellcode

    1. package org.librarian.controller;
    2. import javax.ejb.Stateless;
    3. import javax.persistence.*;
    4. import org.librarian.model.*;
    5. /**
    6. *
    7. * @author Martin
    8. */
    9. @Stateless
    10. public class loginBean implements loginLocal {
    11. private String username;
    12. private String password;
    13. @PersistenceContext
    14. protected EntityManager em;
    15. public Boolean getLogin() {
    16. Book test = new Book("Testbuch","Testautor","1111-1111-1111-1111");
    17. this.em.persist(test);
    18. return false;
    19. //return false;
    20. }
    Alles anzeigen


    zeile 29 (org.librarian.controller.loginBean.getLogin(loginBean.java:29)) ist dabei die, wo ich das persist aufrufe... keien Ahnung warum da ein fehler auftritt. die persistence-einheit ist konfiguriert (über netbeans) und sollte auf eine lokale mysql-db zugreifen. in der richtung kommt auch kein fehler... ob ich den mysql-server an- oder ausschalte ändert auch nichts am fehler (denke er kommt bevor er überhaupt auf die db zugreifen will).

    ich rufe die methode über folgendes jsp-dokument auf:

    Quellcode

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <!--
    3. Document : index
    4. Created on : 02.03.2009, 13:00:00
    5. Author : Martin
    6. -->
    7. <jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.0">
    8. <jsp:directive.page contentType="text/html" pageEncoding="UTF-8"/>
    9. <!-- any content can be specified here, e.g.: -->
    10. <jsp:element name="text">
    11. <jsp:attribute name="lang">EN</jsp:attribute>
    12. <jsp:body>
    13. <h1>Welcome to Librarian</h1>
    14. <form action="" method="post">
    15. <input type="text" name="username" />
    16. <input type="password" name="password" />
    17. <input type="submit" name="sbm" value="Send" />
    18. </form>
    19. </jsp:body>
    20. </jsp:element>
    21. <jsp:useBean class="org.librarian.controller.loginBean" id="loginBean" />
    22. <jsp:setProperty name="loginBean" property="*" />
    23. <jsp:getProperty name="loginBean" property="login" /> //hier erfolgt der aufruf
    24. </jsp:root>
    Alles anzeigen



    hat jemand eine idee?
  • kenn mich mit jsp jetzt nicht so aus aber ist das die komplette Klasse loginBean?
    wenn ja wird die Variable "em" nie auf irgendwas gesetzt, ist also immer "null". Und wenn du dann versuchst auf diesem Objekt ne Methode aufzurufen (em.persist()) geht das natürlich mit ner schönen NullPointerException schief. Du musst also irgendwann mal ein EntityManager Objekt erzeugen und dann em zuweisen.
  • Hi,

    wie sieht denn deine Persistance Unit aus?
    Wenn ich so google fällt mir auf, dass du keine Unit angegeben hast

    Quellcode

    1. <persistence ...>
    2. <persistence-unit name="FooUnit" transaction-type="JTA">

    Quellcode

    1. @PersistenceContext(unitName="FooUnit")
    2. protected EntityManager em;


    Interessante Quelle: forums.sun.com/thread.jspa?threadID=5368380&tstart=0
  • vielen dank, mit dem unit-name und der zeile

    Quellcode

    1. <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
    erstellt er jetzt zumindest mal die tabellen in der mysql-db. in der doku stand ja, dass das optional ist bzw nur benötigt wird, wenn man mehr als 1 persitence-unit benutzt...
    allerdings kommt die NullPointerExceprion immernoch und kA wie ich das debuggen soll weil das läuft ja dann in JBoss...


    //edit:
    ok, es liegt an jboss -.-
    jboss kann das mit der automatic injection in manchen fällen nicht.
    ich habe jetzt

    Quellcode

    1. emf = Persistence.createEntityManagerFactory("librarian-ejbPU");
    2. em = emf.createEntityManager();


    benutzt und siehe da - keine null pointer exceprion mehr. nach ein paar drehungen an der persistence.xml ("The chosen transaction strategy requires access to the JTA TransactionManager") bekomme ich jetzt keinerlei fehlermeldung merh. allerdings... em.persist(test); bleibt auch ohne wirkung :(

    Quellcode

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <persistence version="1.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_1_0.xsd">
    3. <persistence-unit name="librarian-ejbPU" transaction-type="RESOURCE_LOCAL">
    4. <provider>org.hibernate.ejb.HibernatePersistence</provider>
    5. <non-jta-data-source>java:/librarianDB</non-jta-data-source>
    6. <properties>
    7. <property name="hibernate.hbm2ddl.auto" value="update"/>
    8. <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
    9. </properties>
    10. </persistence-unit>
    11. </persistence>
    Alles anzeigen



    //edit2:
    so, nu gehts. man muss auch noch ne transaction anfordern, bevor es los gehn kann -.-
    also danke für eure hilfe, nun kann ich endlich mit proggen loslegen. das iss echt übel bei j2ee...

    so schauts aus:

    Quellcode

    1. this.emf = Persistence.createEntityManagerFactory("librarian-ejbPU");
    2. this.em = emf.createEntityManager();
    3. Book test = new Book("Testbuch","Testautor","2222-1111-1111-1111");
    4. System.out.println(test.toString());
    5. EntityTransaction tx = em.getTransaction();
    6. tx.begin();
    7. this.em.persist(test);
    8. tx.commit();

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von AmrasTaralom ()