tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
6
ZUGRIFFE
1291
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von Basti Spyra
    Basti Spyra Basti Spyra ist offline Rookie
    Registriert seit
    Mar 2011
    Ort
    Berlin
    Beiträge
    9
    Hallo.
    Ich bin am verzweifeln.
    Ich muss fürs Studium eine Webanwendung Mit EJB und JSF unter Glassfish entwickeln. Als Datenbank tut MySQL dienst.

    Jetzt habe ich bekomme ich aus der Datenbank zwei IDs:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    <h:dataTable value="#{bookingBean.cardByUser}" var="crd">
                        <h:column>
                            <f:facet name="header">
                                <h:outputText value="Von/Nach"/>
                            </f:facet>
                            <h:outputText value="#{crd.von}" />
                            <br />
                            <h:outputText value="#{crd.nach}" />
                        </h:column>
    ...

    crd.von als auch crd.nach repräsentieren Städte. Nun möchte ich die IDs in die Stadtnamen konvertieren.
    Gesagt getan:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    <h:dataTable value="#{bookingBean.cardByUser}" var="crd">
                        <h:column>
                            <f:facet name="header">
                                <h:outputText value="Von/Nach"/>
                            </f:facet>
                            <h:outputText value="#{crd.von}" converter="convertcityid" />
                            <br />
                            <h:outputText value="#{crd.nach}" converter="convertcityid" />
                        </h:column>


    Der CityConverter bekommt die ID und soll eine bestehende Funktion in der SessionBean aufrufen, die dazu den Stadtnamen liefert:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    
    public class CityConverter implements Converter, Serializable
    { 
        @Override
        public Object getAsObject(FacesContext context, UIComponent component, String value)
        {
            return value;
        }
     
        @Override
        public String getAsString(FacesContext context, UIComponent component, Object value)
        {
            int city_id = (Integer)value;
            String output = new journeySession().getCityById(city_id);
            return output;
        }
    }


    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    
    public class journeySession implements journeySessionRemote
    {
        @PersistenceContext
        protected EntityManager em;
    ...
    @Override
        public String getCityById(int city_id)
        {
            try
            {
                Query query = em.createNamedQuery("Cities.findByCityId").setParameter("cityId", city_id);
                return query.getSingleResult().toString();
            }
            catch(NoResultException nrex)
            {
                return "Es konnten keine Einträge gefunden werden.";
            }
        }
    ...
    }



    Jedoch bekomme ich eine java.lang.NullPointerException beim Aufruf.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    
    Stack Trace
     
    java.lang.NullPointerException
        at sessions.journeySession.getCityById(journeySession.java:152)  //Aufruf des EntityManagers
        at katipo.CityConverter.getAsString(CityConverter.java:25) //Aufruf der journeySession
        at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getFormattedValue(HtmlBasicRenderer.java:502)
        at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getFormattedValue(HtmlBasicRenderer.java:521)
        at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getCurrentValue(HtmlBasicRenderer.java:340)
        at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeEnd(HtmlBasicRenderer.java:164)
        at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:878)
        at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:295)
        at com.sun.faces.renderkit.html_basic.TableRenderer.renderRow(TableRenderer.java:380)
        at com.sun.faces.renderkit.html_basic.TableRenderer.encodeChildren(TableRenderer.java:161)
        at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:848)
        at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1613)
        at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1616)
        at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1616)
        at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:380)
        at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:126)
        at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:127)
        at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
        at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
        at javax.faces.webapp.FacesServlet.service(FacesServlet.java:313)
        at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1523)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641)
        at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97)
        at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185)
        at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:325)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:226)
        at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165)
        at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)
        at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)
        at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
        at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
        at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
        at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
        at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
        at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
        at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
        at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
        at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
        at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
        at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
        at java.lang.Thread.run(Thread.java:619)


    Bin ein ziemlicher Java****, hoffe aber auf eure Hilfe
     

  2. #2
    Avatar von Basti Spyra
    Basti Spyra Basti Spyra ist offline Rookie
    Registriert seit
    Mar 2011
    Ort
    Berlin
    Beiträge
    9
    Hat keiner eine Idee?
    Oder, ist es unklar, was ich meine?
     

  3. #3
    Avatar von vfl_freak
    vfl_freak vfl_freak ist offline Mitglied Diamant
    Registriert seit
    Aug 2007
    Ort
    Niedersachsen
    Beiträge
    2.161
    Moin,

    die spannende Frage ist, in welcher Zeile das genau auftritt (Zeile 155 sehe ich nicht :-D ).
    Ich würde aber mal vermuten, das die "city_id" null ist ......

    Warum genau, wird Dir wohl nur der Debugger sagen

    Gruß
    Klaus
     
    Es ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!

    Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
    -------------------------------------------------------------------------------------------------
    Ich beantworte keine Fragen per PN !!
    Stellt Eure Fragen im Forum - dann haben alle etwas davon !!

  4. #4
    Avatar von Basti Spyra
    Basti Spyra Basti Spyra ist offline Rookie
    Registriert seit
    Mar 2011
    Ort
    Berlin
    Beiträge
    9
    Die city_id ist nicht Null.
    Die NullPointerException tritt beim Aufruf des EntityManagers auf.
    [at sessions.journeySession.getCityById(journeySession.java:152) //Aufruf des EntityManagers]

    Habe zur Sicherheit nochmal alle Werte mit System.out.print in die Konsole schreiben lassen. Alles da. Nur wenn ich über den EntityManager die Query absetzen will kann er diesen (offenbar) nicht mehr finden. Bei anderen Methoden, die nicht über einen Konverter aufgerufen werden funktioniert er aber.
     

  5. #5
    Avatar von vfl_freak
    vfl_freak vfl_freak ist offline Mitglied Diamant
    Registriert seit
    Aug 2007
    Ort
    Niedersachsen
    Beiträge
    2.161
    Moin,

    schön und gut, nur sehe ich diesen Aufruf noch immer nicht
    Code java:
    1
    
    sessions.journeySession.getCityById(journeySession.java:152)  //Aufruf des EntityManagers

    Wenn Du sicher bist, dass die "city_id" nicht NULL ist, dass wird es an der Stelle halt entweder "journeySession" oder halt "sessions" sein ....

    Ohne den Code wird da keiner was zu sagen können !

    Gruß
    Klaus
     
    Es ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!

    Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
    -------------------------------------------------------------------------------------------------
    Ich beantworte keine Fragen per PN !!
    Stellt Eure Fragen im Forum - dann haben alle etwas davon !!

  6. #6
    Avatar von Basti Spyra
    Basti Spyra Basti Spyra ist offline Rookie
    Registriert seit
    Mar 2011
    Ort
    Berlin
    Beiträge
    9
    Der Aufruf steht doch im Start-Beitrag:
    vgl: public class journeySession im vierten Codeblock im Start-Beitrag
    Was dort Zeile 11 ist ist in "Wirklichkeit" Zeile 152
    Mit protected EntityManager em; wird er initialisiert und über
    Query query = em.createNamedQuery("Cities.findByCityId").setParameter("cityId", city_id);
    aufgerufen.

    Um sicher zugehen, dass auch alles ankommt was er braucht, habe ich mit System.out.print("JNY ctyID: " + city_id); die übergebene "city_id" übergeben - mit Erfolg. In der Konsole steht JNY ctyID: 1.

    Wenn ich jedoch System.out.print("Entity: " + em); schreibe wirft er die NullPointer. Eigentlich sollte ja die Objektreferenz ausgeben.

    Wenn ich die Funktion von einem anderen Ort (bspw. einer ManagedBean) als dem Converter anspreche funktioniert sie auch tadellos - also die Logik stimmt
     

  7. #7
    Avatar von Basti Spyra
    Basti Spyra Basti Spyra ist offline Rookie
    Registriert seit
    Mar 2011
    Ort
    Berlin
    Beiträge
    9
    Habs raus bekommen!

    Wenn die Methode über einen Konverter aufgerufen wird, muss der EntityManager in der Methode selbst initialisiert werden.

    Mit
    Code :
    1
    2
    3
    
    String jndiEntityManagerFactory = "<Persistence Name>";
    EntityManagerFactory factory = Persistence.createEntityManagerFactory(jndiEntityManagerFactory);
    EntityManager entityManager = factory.createEntityManager();
    hat's schließlich funktioniert.

    Java, ick liebe dir!
     

Ähnliche Themen

  1. EntityManager aus externem Projekt
    Von Orthak im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 0
    Letzter Beitrag: 20.03.11, 16:30
  2. EntityManager immer Null
    Von Lucifer002 im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 1
    Letzter Beitrag: 04.03.09, 09:26
  3. EntityManager immer null
    Von fsmarine im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 3
    Letzter Beitrag: 12.12.08, 01:46
  4. JPA kein EntityManager
    Von dadom110 im Forum Java
    Antworten: 32
    Letzter Beitrag: 12.03.08, 16:19
  5. entityManager persist merge
    Von inspector_71 im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 1
    Letzter Beitrag: 22.02.08, 11:31

Stichworte