[Workaround] JPA-t megjárt entitásosztályban levő Map nem megy át GWT-RPC-n

Fórumok

Hozzászólások

elso ranezesre az a baja, hogy konkret tipusokhoz van serialization policy, viszont a JPA-ba bevont map nem HashMap, hanem csak az interfesze latszodik, interfeszt szerializalni meg izgi ;)

ha igy akarod megoldani, akkor irj az interfeszhez policyt, szerintem mukodik.

GWT csak bizonyos alap java osztályokat tud átküldeni. Itt le vannak írva melyikeket. A baj az, hogy a java.util.Hashtable nincs közöttük a java.util.HashMap meg igen. Amikor HashMap-et használsz azt ismeri, viszont a Glassfish-es JPA implementáció (TopLink talán?) Hashtable-t rak be. A kézi átforgatáson kívül (amit csinálsz is) én nem sok egyéb esélyt látok a megoldásra. A JPA kezelt collection-ökkel szerialázáláskor (nem csak gwt hanem pl jaxb esetén is) elég sok baj van, főleg ha még lazy-ben is lennének kiszedve (nálad ez eager úgyhogy ez neked most nem okoz problémát).

Egy másik lehetőséged, hogy a TopLink helyett Hibernate-t használsz, az talán HashMap-et tesz be ilyen esetben.

Igen, én is erre jutottam. Valószínűleg minden entitásosztályom egy GwtRpcFixNeeded absztrakt interfészből fog származi, amely interfésznek public Típus fix(); függvényét kell implementálni. Az implementáció majd megcsinálja a Map-et, majd visszatér this-zel. Illetve az összes nested entitásosztály fix()-ét is meghívja.

Inkabb modositsd a gettert, hogy hozza letre elso hivaskor a HashMap-et es irja felul a Hashtable adattagot. Vagy annotalj @PostLoad-al egy metodust az entitasodban, ami elvegzi ezt betoltes utan!

----------------------
"ONE OF THESE DAYS I'M GOING TO CUT YOU INTO LITTLE PIECES!!!$E$%#$#%^*^"

Ezt találtam hirtelen:
http://www.java-forums.org/new-java/31396-obsolete-collection-import-ja…

Nem tudom, hogy ennek van-e köze a problémához - pl. hogy a Google csak a HashMap-et támogatja, mert csak. Az is lehet, hogy mivel néhol HashMap-et írsz, Hashtable-t - nem mindenhol ugyanaz van kódodban, és az egyik helye a Map mögé Hashtable-t raksz. Próbáld ki, ha teheted, hogy minden Hashtable használatot HashMappel váltasz ki!

Én azt próbálnám ki hogy nem Map-t adok meg hanem HashMap-et:
private HashMap testMap;

Illetve kipróbálnám Set-tel.

Köszönöm szépen mindenkinek az építő ötleteket, javaslatokat, linkeket, különösen persicsb-nek az IM-en keresztüli ötletelést.