Avatar billede markymarc Nybegynder
16. august 2004 - 10:29 Der er 18 kommentarer og
1 løsning

Hvorfor vil det her ikke?

Jeg har en lille test klient til min sessionbeans. Men det lort vil ikke, nok mine evner, men.

Men det hele gå godt indtil jeg skal til at tage infomation i de objecter i min arraylist. Kan se at der ligger noget i den. Men selv om jeg typecaster og det hele så er den da ligeglad.


Men det her er min kode:

  LocalAfd local;
        AdminHome  home;
        Admin ad;
        InitialContext ctx = new InitialContext();
        ArrayList list;

        Object obj = ctx.lookup("ejb/AdminEJB");



        home =(AdminHome) PortableRemoteObject.narrow(obj,AdminHome.class);

        ad = home.create();

        //ad.afdEJBAdd(new Integer(333),"grptest");

        list = ad.afdEJBAll();
        System.out.println(list.size());
        System.out.println(list.get(0).toString());

        local = (LocalAfd)list.get(1);

        System.out.println(local.getAfdID());


Og det her mit output:

2
ejb/local/AfdEJB:222
Exception in thread "main" java.lang.NullPointerException
    at org.jboss.ejb.plugins.local.EntityProxy.invoke(EntityProxy.java:44)
    at $Proxy2.getAfdID(Unknown Source)
    at TestAfd.main(TestAfd.java:53)
    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 com.intellij.rt.execution.application.AppMain.main(Unknown Source)
Avatar billede arne_v Ekspert
16. august 2004 - 10:38 #1
Det er ikke list som er null men noget inde i dit LocalAfd objekt.
Avatar billede markymarc Nybegynder
16. august 2004 - 10:52 #2
Det vil sige det er min LocalAfd jeg skal kigge på?? For hvis jeg skal oprette noget med ejbCreate så virker det.

Sådan her ser min LocalAfd ud(er den ikke rigtig?):
import javax.ejb.EJBLocalObject;

public interface LocalAfd extends EJBLocalObject {
    Integer getAfdID();

    void setAfdID(Integer afdID);

    String getNavn();

    void setNavn(String navn);
}
Avatar billede arne_v Ekspert
16. august 2004 - 10:57 #3
Det er jo næppe i interfacet at exception sker.

Check din bean klasse på server.
Avatar billede markymarc Nybegynder
16. august 2004 - 11:00 #4
Kigger som en sindsyg.

Så er kommer den også lige;-) :

import javax.ejb.*;

public abstract class AfdBean implements EntityBean {

    private EntityContext etx;

    public AfdBean() {
    }

    public void setEntityContext(EntityContext entityContext) throws EJBException {
        this.etx = entityContext;
    }

    public void unsetEntityContext() throws EJBException {
        etx = null;
    }

    public void ejbRemove() throws RemoveException, EJBException {
    }

    public void ejbActivate() throws EJBException {
    }

    public void ejbPassivate() throws EJBException {
    }

    public void ejbLoad() throws EJBException {
    }

    public void ejbStore() throws EJBException {
    }

    public Integer ejbCreate(Integer afdid, String navn) throws CreateException{
        setAfdID(afdid);
        setNavn(navn);

        return afdid;
    }

    public void ejbPostCreate(Integer afdid, String navn) throws CreateException{
       
    }

    public abstract Integer getAfdID();

    public abstract void setAfdID(Integer afdID);

    public abstract String getNavn();

    public abstract void setNavn(String navn);
}
Avatar billede arne_v Ekspert
16. august 2004 - 11:02 #5
Ah - det er en CMP - ja så er der jo ikke meget at se på.
Avatar billede arne_v Ekspert
16. august 2004 - 11:03 #6
Hvordan ser defineringen af afdEJBAll finderen ud i deployment descriptor.
Avatar billede markymarc Nybegynder
16. august 2004 - 11:09 #7
I min EJB-jar:

<query>
              <query-method>
                  <method-name>findByAll</method-name>
                  <method-params>                     
                  </method-params>
              </query-method>
              <ejb-ql></ejb-ql>
          </query>
      </entity>

I min jbosscmp-jdbc:

<query>
              <query-method>
                  <method-name>findByAll</method-name>
                  <method-params>
                  </method-params>
              </query-method>
              <jboss-ql>
                  <![CDATA[
                              SELECT OBJECT(G)
                              FROM AfdEJB g
                              WHERE g.afdID IS NOT NULL
                              ORDER BY g.navn DESC
                            ]]>
              </jboss-ql>
          </query>
        </entity>
Avatar billede arne_v Ekspert
16. august 2004 - 11:11 #8
Nu er jeg forvirret !

afdEJBAll er da vel ikek det samme som findByAll ?
Avatar billede markymarc Nybegynder
16. august 2004 - 11:19 #9
Kan jeg godt forstå. Lad mig forklare, det er fordi jeg har lavet en admin session bean til at tage sig af at kalde entitybens.
ad.afdEJBAll er en session bean der så kalder den entitybean, du ser ovenover. Den laver så også det der kommer fra min entitybean om til en arraylist.
Så min entitybean, AfdBean, har kun et lokalt interface. Det ikke derfor vel?

Og håber du kan forstå det.
Avatar billede arne_v Ekspert
16. august 2004 - 11:21 #10
Jeg håber meget at den session bean metode ikke bare gemmer local CMP interfaces
i array listen men transformerer om i et data transfer objekt (normal bean).
Avatar billede markymarc Nybegynder
16. august 2004 - 11:35 #11
Det gør den da (fløjter og kigger op). Nej det gør den vist ikke.
Det vil sige jeg skal lave en alminelig bean til at pakke min localAfd ind i. I min admin sessionbean??
Avatar billede arne_v Ekspert
16. august 2004 - 12:12 #12
Jep

Det kaldes DTO (Data Transfer Object)
Avatar billede markymarc Nybegynder
16. august 2004 - 12:33 #13
Findes der en nem måde at gøre det på eller skal jeg bare side og transformere det hele om??
Avatar billede markymarc Nybegynder
16. august 2004 - 12:44 #14
Og hvorfor gør man det??
Avatar billede arne_v Ekspert
16. august 2004 - 12:46 #15
Du laver en bean klasse med ca. de samme felter som din CMP dog simple data typer
hvor muligt. Du lader din IDE genererer get og set metoder. Så laver du en tom
constructor og en constructor med alle argumenterne.

Så erstatter du:

list.add(entbean);

med:

list.add(new X(entbean.getX(), entbean.getY());
Avatar billede markymarc Nybegynder
16. august 2004 - 15:06 #16
Har lige et generalt spørgsmål om beans. Nu har jeg lavet det her med transer beans og alt det her. Og det virker umeldbart lækkert. Men hvad nu med alle de her beans jeg laver frem og tilbage. Hvordan sletter jeg mine beans, eller klare java det for mig?
Og lægger du et svar?
Avatar billede arne_v Ekspert
16. august 2004 - 15:09 #17
Når der ikke længere er referemcer til de objekter kommer garbage collectoren
og sletter dem.

Det er en af de ting man ikke skal bekymre sig over i Java.
Avatar billede arne_v Ekspert
16. august 2004 - 15:09 #18
svar
Avatar billede arne_v Ekspert
16. august 2004 - 15:11 #19
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