Zdravim, ve swingu to reším tak, že načítám vazby podle potřeby konkrétního zbrazení, pro každý dialog mám pomocnou třídu, která načte požadované věty a inicializuje potřebné asociace, pokud potřebuju zobrazit detail nebo vstoupit do editace, vyvolám metodu obslužné třídy, která mi vrátí nový záznam s jinak načtenými asociacemi.
Jan Moravec napsal(a): > Zdravim, > > Mam obecny problem s pouzivanim ORM frameworku u webovych aplikaci, ktery se > mi nedari uspokojive vyresit. Kdyz jsem si ted precetl clanek Dagiho o DTO na > java.cz a o tom, jak je to opomijeny vzor, pripomelo mi to muj boj s DTO. > > Pouzivam Hibernate a puvodne jsem si (naivne) myslel, ze zivot bude sladky, > ze Hibernate domenove objekty budu vracet do view a to mi z nich bude cist a > zbavim se nutnosti psat DTO tridy. To jsem si myslel do doby, nez jsem poprve > uvidel vyjimky s hlaskou "Session is closed". Duvod vyjimky je zcela > pochopitelny, protoze Hibernate session (dale jen HS) mi managuje JTA, takze > ve view je session jiz uzavrena a kdyz se view pokousi dotahnout nejakou lazy > asociaci, vyhodi zminovanou vyjimku. > > Managovat HS v nejakem filtru ve view vrstve mi prijde nepouzitelne pro vetsi > aplikace s ohledem na to, ze view muze provadet dost dlouhe akce, napriklad > volat web-service, provadet nejaky casove slozitejsi vypocet apod. Mangovani > HS ve filtru (tzv. open-session-in-view pattern) by tedy znamenalo: > > 1) HS a potazmo db spojeni budou alokovany na dlouhou dobu (sekundy az > desitky sekund) -> vycerpani spojeni pri vetsi zatezi aplikace, nektere > stranky/akce view treba s db vubec nepracuji, tak proc vytvaret HS a alokovat > db spojeni > > 2) Pri otevreni HS bude db spojeni dlouho viset v necommitnutem stavu > (vlastne po celou dobu renderovani view) -> vyskyt locku/deadlocku v db. > > Jak z toho ven? > > Momentalne resim tak, ze pro domenove objekty Hibernate pisu DTO objekty a > skripu zubama (dvakrat pisu to same, zmeny v domenovych objektech se musi > propagovat do DTO, nutnost rucne "presypavat" data mezi domenovymi objekty a > DTO). Zkratka z DTO patternu nejsem nijak zvlast unesen, alespon ne v tomto > kontextu. Napadlo me pouzivat 2 session, ale to jsem nikde nevidel v akci a > taky to nemam jeste uplne promyslene: > > 1) lazy alokovana session, ktere je striktne read-only a je managovana ve view > 2) standardni "vykona" session managovana pres JTA > > Pak je potreba jen nejak automaticky zajistit (napr. pres nejaky JTA > interceptor), ze domenove objekty Hibernate predavane do view se sami > asociuji s tou read-only session a bude tedy mozne se vyhnout DTO patternu > pro praci s domenovymi daty a pomoci te read-only session dotahovat i lazy > asociace dle potreb view. > > Nepouzivate toto nekdo? > > Diky, > Honza > >
