Det er f.eks. ret almindeligt at lave get og set der bruger DTO.
Synes godt om
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.
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
Synes godt om
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".
Synes godt om
Slettet bruger
02. oktober 2003 - 13:13#7
date = data
Synes godt om
Slettet bruger
02. oktober 2003 - 13:14#8
Kan du ikke lige smide et svar arne_v? så vil jeg lukke.
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?
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.
Synes godt om
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.
Synes godt om
Slettet bruger
02. oktober 2003 - 16:44#17
STO = DTO
Synes godt om
Ny brugerNybegynder
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.