Avatar billede Slettet bruger
02. oktober 2003 - 12:21 Der er 16 kommentarer og
1 løsning

CMP Entety bens metoder

Kan jeg i en EBJ CMP Entety bean definere mine egne metoder?

Det er i særdeleshed toString metoden jeg er interesseret i at override.
Avatar billede Slettet bruger
02. oktober 2003 - 12:22 #1
EJB.... ikke "EBJ" selvfølgelig.
Avatar billede arne_v Ekspert
02. oktober 2003 - 12:24 #2
Ja - du kan godt definere dine egne metoder.

Umiddelbart synes jeg det lyder lidt usædvaneligt at lave en
toString for en entity bean.
Avatar billede arne_v Ekspert
02. oktober 2003 - 12:45 #3
Det er f.eks. ret almindeligt at lave get og set der bruger DTO.
Avatar billede Slettet bruger
02. oktober 2003 - 12:48 #4
Jeg skal vise data fra min database i en JTable.

Dette gør jeg på følgende måde:

En session bean returnerer en collection med entety beans til klienten, og derefter itereres denne collection ned i en TableModel til GUI komponenten. Her kan jeg på entety bean'en så spørge på de forskellige attributter under denne iteration, attibutter kan så placeres i de rigtige kolonner i JTablen.

Problemet er, når brugeren vælger en række i denne JTable. Her kunne det være rart, hvis man kunne "fange" den konkrete entety bean, som brugeren har valgt.

Dette kunne man så gøre ved, at lade entety beanen's toString metode returnere en definerende egenskab ved det objekt, der repræsenteres (for eksempel en persons navn). Dermed kan man smide entety beanen direkte i en JTable, og så ville der stå et navn, og man kunne med JTable.getElementAt(x, y) så få fat i lige præcis den entety bean, der er valgt.

Snakker jeg "pølsesnak" nu?

Og gør jeg det på en helt forkert måde?
Avatar billede arne_v Ekspert
02. oktober 2003 - 13:06 #5
Jeg tror at du skal have noget imellem din GUI og dine entity bean !

Lav et DTO (Data Transfer Object) som er en en simpel bean klasse
(med tOString).

Lav en session bean facade.

client kalder metode i session bean via remote interface

den metode henter alle entity beans via deres local interface og
returnerer en ArrayList af DTO'er til client

client bruger så den til at vise data
Avatar billede Slettet bruger
02. oktober 2003 - 13:12 #6
Jeg er overbevist om, at du har ret. Jeg forstår bare ikke hvorfor du har ret. Derfor:

Hvorfor skabe nye objekter i session bean'en? Det virker som dobbelarbejde, at skabe entety beans komponenter, og så skabe DTO objekter til alle disse entety beans.

Performer det ikke også en smule dåeligere, hvis den skal til at skabe nye objekter ud fra entety beasne, hver gang klioenten skal bruge date?

Jeg er godt klar over, at jeg har meget at lære om EJB endnu, så jeg er også godt klar over, at det er mig, der ikke kan se "the big picture".
Avatar billede Slettet bruger
02. oktober 2003 - 13:13 #7
date = data
Avatar billede Slettet bruger
02. oktober 2003 - 13:14 #8
Kan du ikke lige smide et svar arne_v? så vil jeg lukke.
Avatar billede arne_v Ekspert
02. oktober 2003 - 13:19 #9
svar
Avatar billede Slettet bruger
02. oktober 2003 - 13:20 #10
Har det noget at gøre med, at hvis man bruger en entety bean i lang tid oppe på klienten, så har man lukket af for at andre klienter kan tilgå disse entety beans pga. af forhindring af transaktion konfikter?
Avatar billede arne_v Ekspert
02. oktober 2003 - 13:22 #11
Det bør performe bedre på den måde fordi:

- der er kun en remote interaktion
- DTO'er fylder meget mindre end entity beans
Avatar billede Slettet bruger
02. oktober 2003 - 13:44 #12
Hvorddan laver jeg et DTO? Er det blot et simpelt objekt der indeholder alle attributter og som implementer serializeable?
Avatar billede arne_v Ekspert
02. oktober 2003 - 13:53 #13
Ja.
Avatar billede arne_v Ekspert
02. oktober 2003 - 13:54 #14
Hvis man skal editere data i lang tid bruger man normalt versioning i.s.f.
transaktioner til at styre det med netop af den årsag.
Avatar billede arne_v Ekspert
02. oktober 2003 - 13:56 #15
Hvis man skal editere data i lang tid bruger man normalt versioning i.s.f.
transaktioner til at styre det med netop af den årsag.
Avatar billede Slettet bruger
02. oktober 2003 - 16:44 #16
Okay....

Jeg implementerede en simpel DTO og lod klienten modtage denne STO fra min session bean.

Jeg kørte nogle tests før og efter:

Før: datasættet foråsagede ca. 30 kb netværkstrafik.
Efter: datasæettet forårsagede ca. 2 kb netværkstrafik.

Desuden er der mærkbart bedre performance (hvilket nok ikke overraker).

Så lærte jeg hvorfor man ikke bare smider sine entety beans op til klienten.
Avatar billede Slettet bruger
02. oktober 2003 - 16:44 #17
STO = DTO
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