Avatar billede markymarc Nybegynder
06. oktober 2003 - 16:49 Der er 21 kommentarer og
1 løsning

Fejl når jeg prøver at bruge en sessionbean

Jeg få denne her sjove fejl når jeg prøver at tilgå min sessionbean fra en remoteclient(den deployer uden problemmer):

16:32:25,354 INFO  [STDOUT] javax.naming.NameNotFoundException: ejb not bound
16:32:25,375 ERROR [LogInterceptor] RuntimeException:
java.lang.NullPointerException
        at tstukey.SimplWrapBean.lavNyAftale(Unknown Source)
Avatar billede markymarc Nybegynder
06. oktober 2003 - 16:54 #1
Jeg vil selvfølgelig gerne vide hvorfor jeg få den fejl. Eller hvad det kan være?
Avatar billede arne_v Ekspert
06. oktober 2003 - 17:03 #2
Hvis den er deployet uden fejl, så kan det vel næsten kun være
fordi den er deployet under et andet JNDI navn end det du laver
lookup på.
Avatar billede arne_v Ekspert
06. oktober 2003 - 17:04 #3
Bruger du JBoss ?
Avatar billede arne_v Ekspert
06. oktober 2003 - 17:08 #4
Gæt:

Du slår navnet ejb/Xxxx op men fordi du ikk ehar angivet noget JNDI navn
i jboss.xml, så er navnet faktik kun Xxxx.

Hvis gættet er rigtigt, så skal du enten slå Xxxx på eller definere
JNDI navnet til ejb/Xxxx i jboss.xml !
Avatar billede markymarc Nybegynder
10. oktober 2003 - 13:46 #5
Sorry jeg har været så langt tid om at svare tilbage men lage mig sku lige syg.
Men et svar til dit gæt, jeg lavet et JNDI navn ejb/XXXX i min jboss.xml.
Jeg få sku stadig samme fejl(godt nok på en anden sessionbean). Nu  ser den sådan her ud(se til sidst). Troede det var fordi jeg ikke havde en EJB references, men det har jeg nu og stadig samme fejl. Er lidt kørt fast.

2003-10-10 13:35:54,190 ERROR [org.jboss.ejb.plugins.LogInterceptor] RuntimeException:
java.lang.NullPointerException
    at tur.session.RuteSesBean.nyRute(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:324)
    at org.jboss.ejb.StatelessSessionContainer$ContainerInterceptor.invoke(StatelessSessionContainer.java:683)
    at org.jboss.resource.connectionmanager.CachedConnectionInterceptor.invoke(CachedConnectionInterceptor.java:186)
    at org.jboss.ejb.plugins.StatelessSessionInstanceInterceptor.invoke(StatelessSessionInstanceInterceptor.java:72)
    at org.jboss.ejb.plugins.AbstractTxInterceptor.invokeNext(AbstractTxInterceptor.java:84)
    at org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxInterceptorCMT.java:267)
    at org.jboss.ejb.plugins.TxInterceptorCMT.invoke(TxInterceptorCMT.java:128)
    at org.jboss.ejb.plugins.SecurityInterceptor.invoke(SecurityInterceptor.java:118)
    at org.jboss.ejb.plugins.LogInterceptor.invoke(LogInterceptor.java:191)
    at org.jboss.ejb.plugins.ProxyFactoryFinderInterceptor.invoke(ProxyFactoryFinderInterceptor.java:122)
    at org.jboss.ejb.StatelessSessionContainer.internalInvoke(StatelessSessionContainer.java:331)
    at org.jboss.ejb.Container.invoke(Container.java:700)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:324)
    at org.jboss.mx.capability.ReflectedMBeanDispatcher.invoke(ReflectedMBeanDispatcher.java:284)
    at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:546)
    at org.jboss.invocation.jrmp.server.JRMPInvoker.invoke(JRMPInvoker.java:362)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:324)
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:261)
    at sun.rmi.transport.Transport$1.run(Transport.java:148)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.Transport.serviceCall(Transport.java:144)
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:460)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:701)
    at java.lang.Thread.run(Thread.java:534)
Avatar billede arne_v Ekspert
10. oktober 2003 - 13:52 #6
Lig nogle debug statements ind i din nyRute og find uf af hvor det
går galt.
Avatar billede markymarc Nybegynder
10. oktober 2003 - 13:56 #7
hvordan præcist gør jeg det??

Min source ser sådan her ud:
public class RuteSesBean implements SessionBean
{
    private LocalRute rute;
    private LocalRuteHome lrutehome;
    private Integer ruteid;

    public void ejbCreate() throws javax.ejb.CreateException
    {
        try{
            InitialContext ctx = new InitialContext();
            Object obj = ctx.lookup("java:ejb/RuteEJB");
            lrutehome = (LocalRuteHome)PortableRemoteObject.narrow(obj,LocalRuteHome.class);
        }catch(Exception e){}

        rute = null;
    }

    public Integer nyRute(String navn,String text) throws CreateException
    {
        ruteid = new Integer(findId()+1);

        lrutehome.create(ruteid,navn,text,new Date());
        return ruteid;
    }

  /* private Date idag()
    {
        return new SimpleDateFormat("dd.MM.yy").format(new Date()) ;
    }*/

    /* Finde næste ledige ID */

    private int findId()
    {
        int id = -1;
        Connection con;
        String sql = "SELECT * FROM rute ORDER BY r_id DESC LIMIT 1;";
        ResultSet rs;
        PreparedStatement prep;
        try{
            InitialContext ic = new InitialContext();
            DataSource ds = (DataSource) ic.lookup("java:TstDB");
            con = ds.getConnection();

            prep = con.prepareStatement(sql);
            rs = prep.executeQuery(sql);
            rs.next();
            id = rs.getInt(1);

            rs.close();
            prep.close();
            con.close();
        }catch(Exception e) {
            System.out.println(e);
;
        }


        return id;
    }

    /*****************************************************'*/
Avatar billede arne_v Ekspert
10. oktober 2003 - 15:33 #8
Umiddelbart ser det vel ud som om lrutehome er null.

Men det kan du da verificere med en System.out.println (eller
log4, hvis du bruger det).

Mne hvis det er det så skal du jo have checket den lookup.

Om JNDI navnet er rigtigt etc.

(hvorfor bruger du iøvrigt narrow på et local interface ?)
Avatar billede markymarc Nybegynder
10. oktober 2003 - 15:40 #9
Hvad bruger jeg på min loval interface? og hvor ser du det??
Og hvordan finder jeg ud af om den er null??
Avatar billede arne_v Ekspert
10. oktober 2003 - 15:55 #10
F.eks.

System.out.println("lrutehome=" + lrutehome);
Avatar billede arne_v Ekspert
10. oktober 2003 - 15:57 #11
Jeg gik ud fra at LocalRuteHome var et local interface !

:-)
Avatar billede arne_v Ekspert
10. oktober 2003 - 16:01 #12
Med local interfaces kan man bare caste i.s.f. at narrowe.
Avatar billede markymarc Nybegynder
10. oktober 2003 - 16:11 #13
lrutehome = (LocalRuteHome)PortableRemoteObject.narrow(obj,LocalRuteHome.class);
Her det her du mener?? så er det fordi at jeg caster objectet til et LocalRuteHome jo, skal man ikke det??

Men du havde ret med det andet. Min lrutehome er null (et stort NULL) Og det fatter jeg ikke. For copy paste jeg, det her ud:
try{
            InitialContext ctx = new InitialContext();
            Object obj = ctx.lookup("java:ejb/RuteEJB");
            lrutehome = (LocalRuteHome)PortableRemoteObject.narrow(obj,LocalRuteHome.class);
        }catch(Exception e){}

Og sætter det ind i en anden test client der kalder min CMP direkte så virker det. Er det ikke underligt??
Avatar billede markymarc Nybegynder
10. oktober 2003 - 19:12 #14
Har fanget den med at caste og ikke narrow.
Men det er også i min ejbCreate den er gal. Den Kan ikke finde min ejb. Få den samme fejl igen. Med at ejb not bound.
public void ejbCreate() //throws javax.ejb.CreateException
    {

        System.out.println("Ny Session bean create");

        try{

            InitialContext ctx = new InitialContext();
            System.out.println("Kommer det her ud??");

            lrutehome = (LocalRuteHome) ctx.lookup("java:ejb/RuteEJB");
          //    Object obj = ctx.lookup("java:ejb/RuteEJB");
            //lrutehome = (LocalRuteHome)PortableRemoteObject.narrow(obj,LocalRuteHome.class);
        }catch(Exception e){
            e.printStackTrace();
        }
        System.out.println("TUR:"+lrutehome);
        rute = null;
    }
Avatar billede markymarc Nybegynder
10. oktober 2003 - 19:14 #15
HOV
Kan se i min jmx-console at ejb/RuteEJB er bound til den. Og slå jeg den op i en remote client så virker det også.
Har jeg misforstået noget når man skal slå locale interfaces op??
Avatar billede arne_v Ekspert
10. oktober 2003 - 19:16 #16
Umiddelbart vil jeg tro at det er dit remote home object der er bundet
som ejb/RuteEJB men at dit local home object er bundet som local/RuteEJB !

Prøv lige og check ...
Avatar billede markymarc Nybegynder
10. oktober 2003 - 19:54 #17
Jeg har nu bundet alle mine local til ejb/ local i min jboss.xml. Som du kan se her.

<entity>
            <ejb-name>RuteEJB</ejb-name>
            <jndi-name>ejb/RuteEJB</jndi-name>
            <local-jndi-name>ejb/local/RuteEJB</local-jndi-name>
        </entity>
        <entity>
            <ejb-name>CommentsEJB</ejb-name>
            <jndi-name>ejb/CommentsEJB</jndi-name>
            <local-jndi-name>ejb/local/CommentsEJB</local-jndi-name>
        </entity>

Og har så selvfølgelig rettet i min sessionBean, sådan her:

lrutehome = (LocalRuteHome) ctx.lookup("java:ejb/local/RuteEJB");

Men så få jeg denne her fejl:

javax.naming.NameNotFoundException: ejb not bound

Nu er jeg rundtosset.
Avatar billede markymarc Nybegynder
10. oktober 2003 - 19:56 #18
Dumme mig der skal selvfølgelig ikke "java:"  foran.
Avatar billede arne_v Ekspert
10. oktober 2003 - 21:44 #19
Virker det så ?
Avatar billede markymarc Nybegynder
14. oktober 2003 - 23:24 #20
ja helt fint nu. Du skal jo havde din point. Skal du ikke????
Avatar billede arne_v Ekspert
15. oktober 2003 - 07:43 #21
Tak
Avatar billede arne_v Ekspert
25. oktober 2003 - 14:34 #22
Lukke tid ?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester