Avatar billede gg Praktikant
05. marts 2002 - 16:30 Der er 20 kommentarer og
1 løsning

Collection

Jeg har fået En Collection , retur efter et databasekald. Hvordan itererer jeg igennem denne Collection så jeg kan se de fundne data fra databasen
Avatar billede kama Nybegynder
05. marts 2002 - 16:35 #1
Collection c = x.getMineObjekter();
Iterator i = c.iterator();
while (i.hasNext())
{
    MinKlasse mk = (MinKlasse)ic.next();
    //mk.get(........           
}
Avatar billede gg Praktikant
05. marts 2002 - 17:04 #2
kama hvad mangler jeg her ??

Collection c = client.findAll();
    Iterator i = c.iterator();
    {
      while(i.hasNext())
      {
       

      }
    }
Avatar billede kama Nybegynder
05. marts 2002 - 17:24 #3
Hvilken type objekter indeholder din Collection?
Er du i øvrigt sikker på, at du får en Collection?
Du nævner database-kald - er typen ikke ResultSet?
Husk: Collection og ResultSet er interfaces!
Avatar billede kama Nybegynder
05. marts 2002 - 17:24 #4
//Rettelse

Collection c = x.getMineObjekter();
Iterator i = c.iterator();
while (i.hasNext())
{
    MinKlasse mk = (MinKlasse)i.next();
    //mk.get(........           
}
Avatar billede cs_henrik Nybegynder
05. marts 2002 - 17:42 #5
har du husket at importere Iterator osv.?

Prøv at vedlægge fejlbeskeden... det gør det meget nemmere at debugge.
Avatar billede gg Praktikant
06. marts 2002 - 15:03 #6
problemet er at jeg bruger JBuilder ver 5, Når jeg forespørger på en EJB på serveren (bruger Container Managed Persistence)skal jeg kalde en metoder der returnerer en Collection. Hvorfor det ved jeg ikke. Jeg får så returnere en stub reference. Denne reference peger på et interface
Avatar billede kama Nybegynder
06. marts 2002 - 15:28 #7
Når du nu ikke vil vise din kode, så må jeg antage...

Eksempel: (Kunde, KundeHome, KundeBean)
1) du laver en lookup på KundeHome og får en Collection med kunder(Kunde)
2) du kan så iterere denne Collection og evt. kalde business-metoder på hvert Kunde-objekt.

Collection kunder = kundeHome.findAll();
Iterator i = kunder.iterator();
while (i.hasNext())
{
    Kunde kunde = (Kunde)i.next();
    System.out.println("Kundens navn: " + kunde.getNavn());
}

Husk: imports og try-catch!
Avatar billede gg Praktikant
06. marts 2002 - 16:46 #8
Ok kama her poster jeg så koden. Den er godt nok lang.: Håber du kan gennemskue den


package nytypetest;

import javax.naming.*;
import javax.rmi.PortableRemoteObject;
import java.util.Collection;
import java.util.Iterator;
import java.util.Enumeration;
import java.rmi.RemoteException;

public class NyTypeTestTestClient1
{
  private static final String ERROR_NULL_REMOTE = "Remote interface reference is null.  It must be created by calling one of the Home interface methods first.";
  private NyTypeTestHome nyTypeTestHome = null;
  private NyTypeTest nyTypeTest = null;

  /**Construct the EJB test client*/
  public NyTypeTestTestClient1()
  {
  try
    {
      //get naming context
      Context ctx = new InitialContext();

      //look up jndi name
      Object ref = ctx.lookup("NyTypeTest");

      //cast to Home interface
      nyTypeTestHome = (NyTypeTestHome) PortableRemoteObject.narrow(ref, NyTypeTestHome.class);

    }
    catch(Exception e)
    {
      e.printStackTrace();
    }
  }

  //----------------------------------------------------------------------------
  // Methods that use Home interface methods to generate a Remote interface reference
  //----------------------------------------------------------------------------

  public NyTypeTest create(Integer id, String title, String description, Integer active)
  {
    try
    {
      nyTypeTest = nyTypeTestHome.create(id, title, description, active);

    }
    catch(Exception e)
    {
      e.printStackTrace();
    }


    return nyTypeTest;
  }

  public NyTypeTest create(Integer id)
  {
    try
    {
      nyTypeTest = nyTypeTestHome.create(id);

    }
    catch(Exception e)
    {

      e.printStackTrace();
    }
    return nyTypeTest;
  }

  public NyTypeTest findByPrimaryKey(Integer primaryKey)
  {

    try
    {
      nyTypeTest = nyTypeTestHome.findByPrimaryKey(primaryKey);

    }
    catch(Exception e)
    {

      e.printStackTrace();
    }
  return nyTypeTest;
  }

  public Collection findAll()
  {

    Collection returnValue = null;

    try
    {

      returnValue = nyTypeTestHome.findAll();
      Iterator i = returnValue.iterator();
      while (i.hasNext())
      {
          test = (nyTypeTest)i.next();
          //Kunde kunde = (Kunde)i.next();
          System.out.println("test: " + test.getTitle());
    }


    }
    catch(Exception e)
    {
      e.printStackTrace();
    }
    System.out.println(returnValue.toString());
    return returnValue;
  }

  //----------------------------------------------------------------------------
  // Methods that use Remote interface methods to access data through the bean
  //----------------------------------------------------------------------------

  public Integer getId()
  {
    Integer returnValue = null;
    if (nyTypeTest == null)
    {
      System.out.println("Error in getId(): " + ERROR_NULL_REMOTE);
      return returnValue;
    }

    try
    {
      returnValue = nyTypeTest.getId();

    }
    catch(Exception e)
    {

      e.printStackTrace();
    }


    return returnValue;
  }

  public String getTitle()
  {
    String returnValue = "";
    if (nyTypeTest == null)
    {
      System.out.println("Error in getTitle(): " + ERROR_NULL_REMOTE);
      return returnValue;
    }

    try
    {
      returnValue = nyTypeTest.getTitle();

    }
    catch(Exception e)
    {

      e.printStackTrace();
    }


    return returnValue;
  }

  public void setTitle(String title)
  {
    if (nyTypeTest == null)
    {
      System.out.println("Error in setTitle(): " + ERROR_NULL_REMOTE);
      return ;
    }
    try
    {
      nyTypeTest.setTitle(title);

    }
    catch(Exception e)
    {

      e.printStackTrace();
    }
  }

  public String getDescription()
  {
    String returnValue = "";
    if (nyTypeTest == null)
    {
      System.out.println("Error in getDescription(): " + ERROR_NULL_REMOTE);
      return returnValue;
    }

    try
    {
      returnValue = nyTypeTest.getDescription();

    }
    catch(Exception e)
    {

      e.printStackTrace();
    }
  return returnValue;
  }

  public void setDescription(String description)
  {
    if (nyTypeTest == null)
    {
      System.out.println("Error in setDescription(): " + ERROR_NULL_REMOTE);
      return ;
    }

    try
    {
      nyTypeTest.setDescription(description);

    }
    catch(Exception e)
    {

      e.printStackTrace();
    }
  }

  public Integer getActive()
  {
    Integer returnValue = null;
    if (nyTypeTest == null)
    {
      System.out.println("Error in getActive(): " + ERROR_NULL_REMOTE);
      return returnValue;
    }

    try
    {
      returnValue = nyTypeTest.getActive();
    }
    catch(Exception e)
    {

      e.printStackTrace();
    }
    return returnValue;
  }

  public void setActive(Integer active)
  {
    if (nyTypeTest == null)
    {
      System.out.println("Error in setActive(): " + ERROR_NULL_REMOTE);
      return ;
    }

    try
    {
      nyTypeTest.setActive(active);
    }
    catch(Exception e)
    {

      e.printStackTrace();
    }
  }

  public void testRemoteCallsWithDefaultArguments()
  {
    if (nyTypeTest == null)
    {
      System.out.println("Error in testRemoteCallsWithDefaultArguments(): " + ERROR_NULL_REMOTE);
      return ;
    }
    getId();
    getTitle();
    setTitle("");
    getDescription();
    setDescription("");
    getActive();
    setActive(null);
  }

  //----------------------------------------------------------------------------
  // Utility Methods
  //----------------------------------------------------------------------------


  public void executeFindAll()
  {
    // sender en collection med ind som parametre til metoden
    executeCollectionFinder(findAll());
  }

  public void executeCollectionFinder(Collection all)
  {
    System.out.println("i executeCollectionFinder");
    try
    {

      Iterator iterator = all.iterator();
      while (iterator.hasNext())
      {


        Object object = iterator.next();


        NyTypeTest nyTypeTest = (NyTypeTest) PortableRemoteObject.narrow(object, NyTypeTest.class);
        System.out.println(nyTypeTest.toString());


      }
    }
    catch(Exception e)
    {
      e.printStackTrace();
    }
  }

  public void executeEnumerationFinder(Enumeration all)
  {
    try
    {
      while (all.hasMoreElements())
      {
        Object object = all.nextElement();
        NyTypeTest nyTypeTest = (NyTypeTest) PortableRemoteObject.narrow(object, NyTypeTest.class);

      }
    }
    catch(Exception e)
    {
      e.printStackTrace();
    }
  }
  public static void main(String[] args)
  {

    Integer a = new Integer(8);
    NyTypeTestTestClient1 client = new NyTypeTestTestClient1();
    client.findByPrimaryKey(a);

    //String title = client.getTitle();
    //System.out.print(title);
    //client.getId();
    //client.getDescription();
    //client.getActive();

    System.out.println("videre");
    client.executeFindAll();
    //Integer i = client.getId();
    //System.out.println(i);
  }
}
Avatar billede gg Praktikant
06. marts 2002 - 16:47 #9
mit home interface:

package nytypetest;

import java.rmi.*;
import javax.ejb.*;
import java.util.Collection;
import java.util.Enumeration;
/**
* Title:
* Description:
* Copyright:    Copyright (c) 2002
* Company:
* @author Thomas Winterberg
* @version 1.0
*/

public interface NyTypeTestHome extends EJBHome
{
  public NyTypeTest create(Integer id, String title, String description, Integer active) throws CreateException, RemoteException;
  public NyTypeTest create(Integer id) throws RemoteException, CreateException;
  public NyTypeTest findByPrimaryKey(Integer primaryKey) throws RemoteException, FinderException;
  public Collection findAll() throws RemoteException, FinderException;
  //public Enumeration findAll() throws FinderException, RemoteException;
}
Avatar billede gg Praktikant
06. marts 2002 - 16:47 #10
mit remote interface

package nytypetest;

import java.rmi.*;
import javax.ejb.*;

/**
* Title:
* Description:
* Copyright:    Copyright (c) 2002
* Company:
* @author Thomas Winterberg
* @version 1.0
*/

public interface NyTypeTest extends EJBObject
{
  public Integer getId() throws RemoteException;
  public String getTitle() throws RemoteException;
  public void setTitle(String title) throws RemoteException;
  public String getDescription() throws RemoteException;
  public void setDescription(String description) throws RemoteException;
  public Integer getActive() throws RemoteException;
  public void setActive(Integer active) throws RemoteException;


}
Avatar billede gg Praktikant
06. marts 2002 - 16:48 #11
og til allersides selve bønnen

package nytypetest;

import java.rmi.*;
import javax.ejb.*;



public class NyTypeTestBean implements EntityBean
{
  EntityContext entityContext;
  public Integer id;
  public String title;
  public String description;
  public Integer active;

  public Integer ejbCreate(Integer id, String title, String description, Integer active) throws CreateException, RemoteException
  {
    this.id = id;
    this.title = title;
    this.description = description;
    this.active = active;
    return null;
  }
  public Integer ejbCreate(Integer id) throws RemoteException, CreateException, RemoteException
  {
    return ejbCreate(id, null, null, null);
  }
  public void ejbPostCreate(Integer id, String title, String description, Integer active) throws CreateException, RemoteException
  {
  }
  public void ejbPostCreate(Integer id) throws CreateException, RemoteException
  {
    ejbPostCreate(id, null, null, null);
  }
  public void ejbLoad() throws RemoteException
  {
  }
  public void ejbStore() throws RemoteException
  {
  }
  public void ejbRemove() throws RemoveException, RemoteException
  {
  }
  public void ejbActivate() throws RemoteException
  {
  }
  public void ejbPassivate() throws RemoteException
  {
  }
  public void setEntityContext(EntityContext entityContext) throws RemoteException
  {
    this.entityContext = entityContext;
  }
  public void unsetEntityContext() throws RemoteException
  {
    entityContext = null;
  }
  public Integer getId()
  {
    return id;
  }
  public String getTitle()
  {
    return title;
  }
  public void setTitle(String title)
  {
    this.title = title;
  }
  public String getDescription()
  {
    return description;
  }
  public void setDescription(String description)
  {
    this.description = description;
  }


  public Integer getActive()
  {
    return active;
  }
  public void setActive(Integer active)
  {
    this.active = active;
  }
}
Avatar billede kama Nybegynder
06. marts 2002 - 17:44 #12
returnValue = nyTypeTestHome.findAll();
Iterator i = returnValue.iterator();
while (i.hasNext())
{
    NyTypeTest test = (NyTypeTest)i.next();
    System.out.println("test: " + test.getTitle());
}
Avatar billede gg Praktikant
06. marts 2002 - 17:47 #13
kama det VIRKER :-) sådan. Tusinde tak, har bøvlet med det i 1 dag.
Avatar billede gg Praktikant
06. marts 2002 - 17:49 #14
Koden skal se sådan her ud, for ellers får man en class cast exception

while (iterator.hasNext())
      {
          Object object = iterator.next();
          //NyTypeTest test = (NyTypeTest)i.next();
          NyTypeTest nyTypeTest = (NyTypeTest) PortableRemoteObject.narrow(object, NyTypeTest.class);
          System.out.println("test: " + nyTypeTest.getTitle());
          System.out.println("test: " + nyTypeTest.getId());
      }
Avatar billede kama Nybegynder
06. marts 2002 - 17:58 #15
Korrekt! Hvis det var en 2.0-bønne med et lokalt lookup, så var det ikke nødvendigt. Se dette geniale eksempel:
http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/CMP.html
Avatar billede gg Praktikant
06. marts 2002 - 18:02 #16
kama vi er desvære tvunget til at bruge 1.1 pga JBuilder 5.0 kun understøtter 1.1. Må jeg spørge om et tillægs spørgsmål. Da vi bruger CMP. kan vi bruge setTitle() til at opdatere i databasen, men min kollega bruge create() til at indsætter i databasen. Hvad er bedst at gøre ?
Avatar billede kama Nybegynder
06. marts 2002 - 18:15 #17
Når du bruger CMP, så lad være med at tænke på en database!
Tænk at du har en mængde af persistente objekter. Updates, delete osv. styres af containeren. Så brug dine set-metoder til at opdatere. Transaktioner styres jo også af containeren!
CMP og EJB 2.0 er vejen frem.
Skrot JBuilder og lav det selv. Som app-server brug Suns Reference Implementering 1.3.1 eller JBoss 3.0 (kommer snart).
Avatar billede gg Praktikant
06. marts 2002 - 18:31 #18
Har programmeret J2EE fra hånden og jeg må godt nok indrømme at Sun Deploytool er det værste jeg nogen sinde har arbejdet med. Det er håbløst, ofte får man ikke engang deployet sine Bønner. Til tider så forsvinder det du har deployet og så må man redeploye.Desuden er det håbløst svært at opsætte sine JNDI referencer i deploytool. Brugte ca. 7 dage på at få connection til mySQL.Enyway hvorfor kan jeg ikke bare bruge create() til at opdatere mine persistente objekter
Avatar billede kama Nybegynder
06. marts 2002 - 18:52 #19
Jeg har selv haft store problemer med Suns Deploytool, men den nyeste version har STORE forbedringer. Dog opstår der stadig ensartede fejl-meddelelser ved vidt forskellige fejl. Hvis man laver det rigtigt, så går det fint ;-) Brug 'Verify' - den er også KRAFTIG forbedret!

Hvis du bruger create(), så laver du jo en ny instans!
Skal du ikke opdatere? Hvad er der galt med at bruge en set-metode?
Avatar billede gg Praktikant
06. marts 2002 - 18:56 #20
ok vil da lige kigge på det nye deploytool. Lyder lovende. Og ja jeg vil bruge set()'er. Min min kollega har en anden menning. Men det er da også hul i hovedet at lave en ny instans af bønne hver gang man opretter. Det er da meget bedre at få en instans fra poolen.
Avatar billede kama Nybegynder
06. marts 2002 - 19:03 #21
Din kollega er mærkelig! :-)
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