Avatar billede aslan Nybegynder
07. marts 2004 - 19:21 Der er 18 kommentarer

Får en exception jeg ikke kan gennemskue?

Jeg får en ClassCastException jeg ikke lige kan gennemskue hvorfor. Jeg kalder denne metode i min BMP bean:

    public Enumeration ejbFindAll()
    {
        Vector l = new Vector();
        Connection con = null;
        ResultSet rs = null;
        try
        {
            con = getConnection();
            Statement s = con.createStatement();
            rs = s.executeQuery("SELECT * FROM file");
            while (rs.next())
            {
                File f = new File(rs.getInt("id"),
                rs.getString("title"),
                rs.getInt("length"),
                rs.getDate("startDate"),
                rs.getDate("endDate"),
                rs.getString("description"),
                rs.getDate("created"),
                rs.getString("userName"),
                rs.getInt("typeId"));
               
                l.add(f);
            }
        }
        catch (SQLException e)
        {
            e.printStackTrace();
        }     
        finally
        {
            try
            {
                if (rs != null)
                {
                    rs.close();
                }
                if (con != null)
                {
                    con.close();
                }
            }
            catch (SQLException e)
            {
            }
        }
        return l.elements();
    }

Når jeg så i min klient gerne have fat på listen med beans, gør jeg således:


    public void getDataBMP()
    {
        setRowCount(0);
        Iterator it=null;
        Enumeration col=null;
       
        try
        {
            Context ctx = new InitialContext();
            Object temp = ctx.lookup("ejb/entity/BMP/FileBMP");
            FileBMPRemoteHome fileRemoteHome = (FileBMPRemoteHome) PortableRemoteObject.narrow(temp,FileBMPRemoteHome.class);

            col = fileRemoteHome.findAll();
        }
        catch (ClassCastException e)
        {
            e.printStackTrace();
        }
        catch (NamingException e)
        {
            e.printStackTrace();
        }
        catch (FinderException e)
        {
            e.printStackTrace();
        }
        catch(RemoteException e)
        {
            e.printStackTrace();
        }       
        while(col.hasMoreElements())
        {
            File obj = (File) col.nextElement();//fejl opstår her
           
            addRow(obj.getVector());
        }
    }



Jeg får denne exception: 


java.lang.ClassCastException
        at org.openbroad.j2ee.client.user.view.model.FilelistModel.getDataBMP(FilelistModel.java:105)
        at org.openbroad.j2ee.client.user.view.model.FilelistModel.<init>(FilelistModel.java:42)
        at org.openbroad.j2ee.client.user.view.Filelist.initComponents(Filelist.java:210)
        at org.openbroad.j2ee.client.user.view.Filelist.<init>(Filelist.java:56)
        at org.openbroad.j2ee.client.user.view.OpenBroad.jButton3ActionPerformed(OpenBroad.java:354)
        at org.openbroad.j2ee.client.user.view.OpenBroad.access$200(OpenBroad.java:30)
        at org.openbroad.j2ee.client.user.view.OpenBroad$3.actionPerformed(OpenBroad.java:104)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1786)
        at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(AbstractButton.java:1839)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:245)
        at java.awt.Component.processMouseEvent(Component.java:5100)
        at java.awt.Component.processEvent(Component.java:4897)
        at java.awt.Container.processEvent(Container.java:1569)
        at java.awt.Component.dispatchEventImpl(Component.java:3615)
        at java.awt.Container.dispatchEventImpl(Container.java:1627)
        at java.awt.Component.dispatchEvent(Component.java:3477)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:3483)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3198)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3128)
        at java.awt.Container.dispatchEventImpl(Container.java:1613)
        at java.awt.Window.dispatchEventImpl(Window.java:1606)
        at java.awt.Component.dispatchEvent(Component.java:3477)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:456)
        at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:201)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:145)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:137)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:100)
Avatar billede arne_v Ekspert
07. marts 2004 - 20:11 #1
Hvis det er den her linie:

FileBMPRemoteHome fileRemoteHome = (FileBMPRemoteHome) PortableRemoteObject.narrow(temp,FileBMPRemoteHome.class);

der giver exception må det jo være en lookup name versus deployment
descriptor problem.
Avatar billede arne_v Ekspert
07. marts 2004 - 20:12 #2
Hvis det sker inden i denne her:

col = fileRemoteHome.findAll();

så skal der nok checkes lidt på om alt der sendes er serializable pæne beans etc..
Avatar billede arne_v Ekspert
07. marts 2004 - 20:12 #3
Hvorfor bruger i BMP ?
Avatar billede aslan Nybegynder
07. marts 2004 - 20:23 #4
Fejlen opstår faktisk her:

        while(col.hasMoreElements())
        {
            File obj = (File) col.nextElement();//fejl opstår her
           
            addRow(obj.getVector());
        }

Når vi forsøger at parse til File.


Grunden til at vi skal lave en BMP bean er fordi vi også skal skrive en studie rapport hvor vi skal have testet og skrevet om de forskellige beans. Heldigvis skal vi kun lave en BMP bean for der er meget arbejde i dem:-)
Avatar billede arne_v Ekspert
07. marts 2004 - 20:27 #5
Check om File er serializable og følger bean specifikationen (constructor
uden argumenter, public get og set).

Check om client og server har samme version af File.
Avatar billede arne_v Ekspert
07. marts 2004 - 20:27 #6
OK

Jeg var bekymret om i var hoppet på BMP må være hurtigere end CMP vognen.
Avatar billede aslan Nybegynder
07. marts 2004 - 22:43 #7
Jeg tror ikke der er noget galt med File klassen for den samme bruger med CMP bean uden problemer...
Avatar billede arne_v Ekspert
07. marts 2004 - 22:45 #8
Vildt gæt: I er ikke kommet til at importere java.io.File i.s.f. jeres File ?
Avatar billede aslan Nybegynder
07. marts 2004 - 22:53 #9
Ja den var vild :-) men nej vi har slet ikke importeret io mappen.

Det sjove er at jeg sagtens kan udskrive objekterne i Enumeration fordi File har en toString metode og de er som de skal være. DVS den indeholder File objekterne men vi kan bare ikke parse fra element til File...
Avatar billede arne_v Ekspert
07. marts 2004 - 22:56 #10
Prøv følgende:

        while(col.hasMoreElements())
        {
            System.out.println(col.nextElement().getClass().getName());

            File obj = (File) col.nextElement();//fejl opstår her
         
            addRow(obj.getVector());
        }
Avatar billede arne_v Ekspert
07. marts 2004 - 22:56 #11
Så får vi jo se hvad det er for "en" !
Avatar billede arne_v Ekspert
07. marts 2004 - 22:57 #12
I har verificeret at det ikke er 2 forskellige versioner af jeres File klasse ?
Avatar billede aslan Nybegynder
07. marts 2004 - 23:05 #13
Jeg får denne fejl :

java.lang.ClassCastException
        at org.openbroad.j2ee.client.user.view.model.FilelistModel.getDataBMP(FilelistModel.java:103)
        at org.openbroad.j2ee.client.user.view.model.FilelistModel.<init>(FilelistModel.java:42)
        at org.openbroad.j2ee.client.user.view.Filelist.initComponents(Filelist.java:210)
        at org.openbroad.j2ee.client.user.view.Filelist.<init>(Filelist.java:56)
****Type**** : $Proxy7
        at org.openbroad.j2ee.client.user.view.OpenBroad.jButton3ActionPerformed(OpenBroad.java:354)
        at org.openbroad.j2ee.client.user.view.OpenBroad.access$200(OpenBroad.java:30)
        at org.openbroad.j2ee.client.user.view.OpenBroad$3.actionPerformed(OpenBroad.java:104)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1786)
        at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(AbstractButton.java:1839)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:245)
        at java.awt.Component.processMouseEvent(Component.java:5100)
        at java.awt.Component.processEvent(Component.java:4897)
        at java.awt.Container.processEvent(Container.java:1569)
        at java.awt.Component.dispatchEventImpl(Component.java:3615)
        at java.awt.Container.dispatchEventImpl(Container.java:1627)
        at java.awt.Component.dispatchEvent(Component.java:3477)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:3483)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3198)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3128)
        at java.awt.Container.dispatchEventImpl(Container.java:1613)
        at java.awt.Window.dispatchEventImpl(Window.java:1606)
        at java.awt.Component.dispatchEvent(Component.java:3477)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:456)
        at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:201)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:145)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:137)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:100)


Når jeg forsøger således:

        while(col.hasMoreElements())
        {
            System.out.println("****Type**** : "+col.nextElement().getClass().getName());

            File obj = (File) col.nextElement();
         
            addRow(obj.getVector());
        }
Avatar billede aslan Nybegynder
07. marts 2004 - 23:08 #14
Ja vi har kun en fil der hedder File..
Avatar billede arne_v Ekspert
07. marts 2004 - 23:09 #15
Ja. Men hvis I:
  - builder
  - gemmer class i serverside.jar
  - tilføjer en metode
  - builder
  - gemmer class i clientside.jar
kan man få problemer også med en fil.
Avatar billede arne_v Ekspert
07. marts 2004 - 23:10 #16
Men er er klart at en $Proxy7 ikke kan type castes til en File.
Avatar billede arne_v Ekspert
07. marts 2004 - 23:12 #17
Hm - hvis den extender File kan man faktisk godt ...
Avatar billede aslan Nybegynder
07. marts 2004 - 23:15 #18
Det er bare underligt at samme fremgangsmåde virker med CMP beans men ikke med denne...
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