# Performance von EJBs vs. normalen Pojos/Seam-Komponenten



## JanHH (4. Feb 2012)

Hallo,

ich habe gelernt, dass man bei Verwendung von EJBs bestimmte Sachen nicht tun darf bzw. sollte, um die Dinger so wie gedacht nutzen zu können. Konkret gehts dabei um Zugriff auf Dateien und eigene synchronized-Methoden.

Ich hab jetzt aber eine Webanwendung (seam 2), wo es pro User eine Session Scope Komponente gibt, die genau das tun muss. Ich tendiere also dazu, diese nicht als EJB sondern als normales Pojo-Objekt zu implementieren (die ja von seam genauso per DI usw. benutzt werden kann). Habe allerdings auch gelernt, dass die Performance von EJBs gegenüber normalen Pojos oder JSF-managed-Beans deutlich bessser sein soll (Faktor 10, hiess es).

Bei der Anwendung sollen bei maximaler Auslastung ca. 100-200 User gleichzeitig angemeldet sein und kontinuierlich damit arbeiten.

Kann man das dann mit Seam-Pojos machen, oder ist da die Performance von EJBs zwingend notwendig, oder ist das was ich geschrieben hab eh alles Unisnn? Mir fehlen da die eigenen Erfahrungen, kann mich also nur darauf stützen, was ich selber erzählt bekommen hab.

Wäre also gut zu wissen wenn ich die Anwendung wie geplant implementieren kann oder mir doch noch ein ganz anderes Konzept überlegen muss.

Gruß+Danke
Jan


----------



## Sym (4. Feb 2012)

Bei Seam 2.x ist das Problem, dass die DI bei jedem Aufruf getätigt wird. Dh Du hast zwar eine Bean im Sessionscope oder ähnliches, aber bei jedem Methodenaufruf kostet die DI viel Zeit. Das Problem hast Du bei EJB 3.1 (bei 3.0 bin ich nicht sicher) nicht mehr.

Ich verstehe aber Deinen Anwendungsfall nicht korrekt. Du hast Dateien irgendwo im Filesystem und möchtest diese Laden. Das sollen dann mehrere Benutzer gleichzeitig tun?


----------



## JanHH (4. Feb 2012)

Ja, hin und wieder Zugriffe auf Dateien.

Ich denke, der DI-Overhead wird bei EJB 3.0 genauso sein, weil das ja auch da alles vom Seam-Komponenten-Container gemanaged wird, soweit ich weiss.

Dachte halt nur, wenn ich EJBs nutzen will, kommen so Sachen wie Dateizugriffe und Synchronized ganz kategorisch nicht in Frage.


----------



## Sym (4. Feb 2012)

EJB wird nicht vom Seam-Komponenten-Container gemanaged (wenn ich Dich jetzt richtig verstanden habe).

Ich verstehe auch noch nicht ganz, wofür der Synchronized Block nun sein soll. Zugriff auf Dateien erhältst Du in EJBs.


----------



## JimPanse (5. Feb 2012)

Hi,

du kannst auch in EJB auf das Datei-System zu greifen. Der Zugriff muss aber in einer Transaktion erfolgen. Dazu kannst du entweder 
Transaction - Overview 
oder JCA einsetzen
A Simple Transactional File JCA 1.5 Connector (4 Classes / 2 Reusable) : Adam Bien's Weblog

Greetz


----------

