# EJB-Design Frage



## apparat (29. Jun 2006)

Ich habe eine EJB 3.0 Applikation bei der ich über eine SessionFacade auf meine EntityBeans zugreife.
Nun kommt es vor das ich mit meinem Client die Tabelle in der Datenbank komplett anzeigen möchte.

Nun ist die Frage wie man das am besten handelt? Nehme ich analog zur EntityBean eine einfache Javaklasse mit den selben Attributen und packe diese dann in eine Collection? Dann müsste ich nämlich für jede EntityBean eine dazugehörige JavaKlasse machen welche dann an den Client übergeben wird. 

-> SessionFacade sammelt EntityBeans und schreibt die Daten um in eine "normale" JavaKlasse und packt alle Klassen in eine Collection und gibt die Collection dem Client



Sollte man das so machen oder gibt es da andere, bessere Designpatterns?
Schließlich muss ich ja dann dem Client auch die JavaKlasse zur Collection geben sonst kann er ja nichts mit der Collection anfangen.


----------



## Guest (1. Jul 2006)

Ja, so ungefähr ist die übliche Vorgehensweise.

Schau dir das Pattern-Katalog von SUN an: Core J2EE Patterns -> Transfer Object bzw. Transfer Object Assembler

Man kann das ganze auch z.B. mit XDoclet automatisieren. (Using Value Objects)

Falls du es von Hand machen willst/musst, dann empfielt sich folgendes:

- für jede Entity einen Konverter erstellen (Bean2VO)


```
public static MyBeanVO bean2VO(MyBean bean)
{
  MyBeanVO vo = new MyBeanVO();
  vo.setId(bean.getId());
  ... usw.
  return vo;
}

public static Collection beanList2VOList(Collection beans)
{
  Collection result = new ArrayList(beans.size());
  for(Iterator i=beans.iterator(); i.hasNext();)
  {
    result.add(bean2VO((MyBean)i.next()));
  }
  return result;
}
```

- diesen Konverter dann in deinen Sessions verwenden


```
return Bean2VO.bean2VO(entity);

bzw. 

return Bean2VO.beanList2VOList(entityList);
```


----------



## apparat (4. Jul 2006)

ca 2 stunden vor deinem beitrag hatte ich die Lösung bei den CorePatterns bereits gefunden 

aber trotzdem danke für deine Bemühungen.
Mir erscheint das mit den TransferObjects auch um die sauberste Methode das ganze zu lösen.
Hat man halt mehr Klassen aber programmtechnisch ist es dann sehr viel besser.
Auch gerade was die Client-Anbindung angeht


----------

