[Java lista] Nyári uborkaszezon idejére Transfer Object kérdés
Szomor Attila
aszomor at computertechnika.hu
2009. Júl. 8., Sze, 17:36:37 CEST
Db.ear
Entities.jar (csak Entity definiciók)
EntityClients.jar (csak a Local és Remote interface-ek)
EntityUnit.jar (Persistence.xml és az EJB-k, stb.)
DbClient.ear (használja a Entities.jar és EntityClients.jar-t)
TransferObjects.jar (csak TO definiciók)
TransferObjectAssemblers.jar (csak az Entity to TransferObject helperek)
TransferObjectClients.jar (csak a Local és Remote interface-ek)
TransferObjectUnit.jar (EJB-k, stb)
a szabály az hogy a Db-t csak a DbClient-en át lehet elérni, as további
szintek csak a TransferObjects.jar és a TransferObjectClients.jar
használják mindegy hogy webes vagy gui kliensek vagy akár az üzleti logika
EJB-k.
Ha nézzünk egy egyszerű példát:
Entities
--------
public class PlaceClass implements Serializable {
...
@OneToMany(cascade = CascadeType.ALL, mappedBy = "classClagroId")
private Collection<PlaceGroP> placeGroPCollection;
...
}
public class PlaceGroP implements Serializable {
...
@JoinColumn(name = "class_clagro_id", referencedColumnName = "id",
nullable = false)
@ManyToOne(optional = false)
private PlaceClass classClagroId;
...
}
Jól látszik PlaceClass-hoz tartoznak PlaceGroP-k (osztály és a részlegei
egyszerű master-detail kapcsolat), viszont az is látszik, hogy minden
detail elem tartalmazza a mastert, ami öröm ha a detail irányból megyek
mert mindig kéznel van a gazdi.
Na most ha ezt a PlaceClass-t TO-ra forditjuk amint leérünk
placeGroPCollection elemekbe és azoknak is a classClagroId-hez újból a
PlaceClass-ban találjuk magunkat mindaddig amíg el nem fogy a memória.
Íme a halált okozó sor:
transferObject.setClassClagroId(PlaceClassAssembler.getTransferObject(entity.getClassClagroId()));
és a környzete:
public class PlaceClassAssembler {
...
public static final PlaceClassTO getTransferObject(PlaceClass
entity) {
PlaceClassTO transferObject;
if (entity == null) {
transferObject = null;
} else {
transferObject = new PlaceClassTO();
setTransferObject(entity, transferObject);
}
return transferObject;
}
public static final PlaceClass getEntity(PlaceClassTO
transferObject) {
PlaceClass entity;
if (transferObject == null) {
entity = null;
} else {
entity = new PlaceClass();
setEntity(entity, transferObject);
}
return entity;
}
public static final void setTransferObject(PlaceClass entity,
PlaceClassTO transferObject) {
transferObject.setPlaceClassLetrehozva(entity.getCreated());
transferObject.setPlaceClassModositva(entity.getModified());
transferObject.setPlaceClassOsztalyKodja(entity.getClcod());
...
}
public static final void setEntity(PlaceClass entity, PlaceClassTO
transferObject) {
entity.setCreated(transferObject.getPlaceClassLetrehozva());
entity.setModified(transferObject.getPlaceClassModositva());
entity.setClcod(transferObject.getPlaceClassOsztalyKodja());
....
}
...
}
public class PlaceGroPAssembler {
...
public static final void setTransferObject(PlaceGroP entity,
PlaceGroPTO transferObject) {
....
transferObject.setClassClagroId(PlaceClassAssembler.getTransferObject(entity.getClassClagroId()));
...
}
...
}
További információk a(z) Javalist levelezőlistáról