Transparentni reseni pro klienta je pomerne slozite, nezkousel jsem to, viz:

http://h3t.sourceforge.net/
http://community.jboss.org/wiki/RemoteLazyLoading
http://www.theserverside.com/news/1363571/Remote-Lazy-Loading-in-Hibernate

Ja to resim manualne - mam pro kazdou entitu statickou metodu, ktera
dotaha, co je potreba. Zbyvajici kod na klientovi pak jen zavola tuto
jednu metodu - tedy jen jeden radek kodu navic. Zaklad je toto:

public static <T extends BaseEntity> T initEntity(T entity, GenericDao<T> dao) {
                if (Hibernate.isInitialized(entity)) {
                        return entity; // already initialized
                }
                return dao.getById(getIdDirect(entity));
}

public static Integer getIdDirect(BaseEntity entity) {
        if (entity instanceof HibernateProxy) {
                LazyInitializer lazyInitializer = ((HibernateProxy)
entity).getHibernateLazyInitializer();
                if (lazyInitializer.isUninitialized()) {
                        return (Integer) lazyInitializer.getIdentifier();
                }
        }
        return entity.getId();
}

kde dao.getById(getIdDirect(entity)); je ziskani entity pres jeji ID.
Tedy neni to pro kolekce, to jsem zatim nepotreboval. Spise se snazim
klientovi vratit vse, co je potreba. Toto pouzivam zatim jen na
zobrazeni tooltipu a podobnych mene podstatnych informaci. Pokud se
entity meni, tak je myslim lepsi toho nacist vzdy co nejvice v jedne
transakci. Mezi ruznymi transakcemi nekdo jiny muze data zmenit a z
toho mohou byt problemy.

2010/9/17 Pavel Nemec <[email protected]>:
> No ano, problem je lazy loading. Rad bych klienty odstinil od zpusobu
> persistence (je to mimo jine i pozadavek) a nechci tedy aby si museli
> dotahovat nejake kusy na zaklade vyjimky "session is closed", nebo aby
> takovou vyjimku vubec museli chytat.
>
> O DTO a potazmo apache commons beanutils jsem nevedel, urcite na to
> mrknu. Mohlo by to pomoci pri reseni.
>
> Dik
> Pavel
>
> Dne 17. září 2010 13:10 Ondra Medek <[email protected]> napsal(a):
>> Ahoj,
>>
>> a kde je problem: lazy reference neni serializable nebo ti vadi, ze
>> klient si pak nedokaze ty lazy reference sam dotahat? Oba pripady jdou
>> resit. Pripadne pri prevadeni entit do DTO muze slouzit Apache commons
>> beanutils - pak se to lehce zautomatizuje.
>> --
>> Ondra Medek
>>
>>
>>
>>
>> 2010/9/17 Pavel Nemec <[email protected]>:
>>> Zdravim konferencei.
>>>
>>> Mam takovy pekny zapeklity problem. Na serveru pouzivame jako backend
>>> sql+hibernate. Data cestuji pomoci jboss+rmi na tlusteho klienta. Tech
>>> je radove stovky a tak neni ani zdaleka problem ve vykonosti databaze
>>> nebo jboss serveru. Vse to funguje pomerne pekne.
>>>
>>> V soucasne chvili pracujeme na dalsi verzi a reviduji soucasne postupy.
>>>
>>> Muj problem je ze pokud objekt nactu z hibernate obsahuje spoustu
>>> proxy a lazy loaded pod-objektu (kolekci).  Zkousel jsem dohledat
>>> nejake doporucene postupy jak s tlustym klientem pracovat s hibernate,
>>> ale nenalezl jsem nic uzitecneho.
>>>
>>> Nevidim cestu jak poslat objekty obsahujici lazy reference na klienta
>>> (pres rmi) a jedinou cestu jak z toho vidim prekladat do klientskych
>>> obrazu techto objektu. To sebou nese samozrejme preklad a dva typy
>>> objektu.
>>>
>>> Na druhou stranu to nenuti klienta resit cokoliv s hibernate.
>>> Premyslel jsem take osekat Ukladane objekty a vse nahravat pomoci
>>> EAGER. Ale bojim se ze ani to neni cesta, protoze to Ukladane objekty
>>> prilis svaze.
>>>
>>> Rad bych si usetril praci. A tak hledam reference na to jak to delaji
>>> ostatni, pripadne cemu se rovnou vyhnout.
>>>
>>> Dik,
>>> Pavel
>>>
>>
>



-- 
Ondra Medek

Odpovedet emailem