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!
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
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()); }
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 //----------------------------------------------------------------------------
//---------------------------------------------------------------------------- // 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; }
public class NyTypeTestBean implements EntityBean { EntityContext entityContext; public Integer id; public String title; public String description; public Integer active;
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 ?
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).
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
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?
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.
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.