Frage

Wie ich JSF2 lerne, erkannte ich, ich bin nicht sicher, was die Trägerkomponenten sein sollte. Aus Sicht des Designs, was ist der Unterschied zwischen EJBs und @ManagedBeans?

Am Ende wird mich JPA verwenden, so EJB eine natürliche Wahl für Business-Schicht ist. Ist es eine gute Praxis zu verwenden EJB direkt von JSF (wie erklärt hier )?

Im Moment bin ich Neigung zu verwenden @ManagedBeans für Komponenten, die mit Anforderungs- / Sitzungsdaten keinen Zugriff auf Business-Ebene benötigen (z View Helfer) oder damit handeln. Für andere Zwecke, beispielsweise etwas in einem Raster Listing, würde ich direkt Zugriff EJB.

Ist das ein gutes Design? Soll ich @ManagedBeans für alle Träger Bohnen aus Gründen der sauberen Schichttrennung verwenden, auch wenn sie in einigen Fällen nur zu EJB delegieren?

War es hilfreich?

Lösung

Sehr berechtigte Frage, aber ich denke, die Antwort hängt von der „Strenge“ des Ansatzes für Ihr Projekt. Es ist in der Tat ein wenig Redundanz zwischen JSF Backing Bean und EJB sowohl als einige Business-Logik implementieren.

a ideal Verwendung von JSF-Funktionen mit converters, rendered, validator usw. dem Backing Bean könnte in der Tat sauber Business-Logik-Code sein. Aber in der Praxis einige Präsentation bezogene Logik Lecks häufig darin.

Diese Präsentation bezogene Logik sollte idealerweise nicht in einer EJB sein. Diese Präsentation bezogene Logik kann auf die Flächen Paket abhängen, aber nicht notwendig. Es ist, was es hat , die es Präsentation bezogene oder nicht machen.

Ein einheitliches Komponentenmodell hat jedoch einige Vorteile. Und es ist der Ansatz von Seam und Frühling . In beiden Fällen Business-Komponente mit deklarative Transaktion usw. können direkt in JSF verwendet werden (Frühjahr nicht EJB verwenden, aber ein ähnliches Modell zur Verfügung stellen). EJB Purist würde jedoch sagen, dass man die beiden trennen sollte.

Also für mich ist es letztlich eine Frage des Geschmacks und der Größe des Projekts. Ich kann für ein kleines / mittleres Projekt vorstellen, dass EJB in JSF mit funktioniert. Für größere Projekt, bei dem Strikt kritisch ist, stellen Sie sicher, Sie Schraube nicht die Schichten.

Andere Tipps

In Java EE 6 gibt es einige Überschneidungen zwischen den verschiedenen Managed Beans: JSF Managed Beans (@ManagedBean) gelang CDI Bohnen (@Named) und EJB Bohnen (@Stateless, @Statefull, @Singleton)

.

In der Ansicht Schicht Ich sehe keinen besonderen Vorteil für mit @ManagedBean kleben. Die CDI-Variante @Named scheint in der Lage zu sein, das Gleiche zu tun und mehr, z.B. bieten Ihnen den Zugriff auf die Umwandlung Umfang.

Die derzeitigen Überlegungen scheinen, dass schließlich die EJB-Komponenten-Modell zu sein, wird auch als ein Satz von CDI Anmerkungen nachgerüstet werden. Besonders Mitglied Expertengruppe Reza Rahman deutet häufig auf diese. Siehe z.B. Dependency Injection in Java EE 6 - Teil 1

Zur Zeit ist dies nicht geschehen ist, so EJB Bohnen den einfachste Ort bleiben Business-Logik zu setzen, vor allem, wenn JPA für Persistenz verwendet wird.

Dennoch, auch nicht CDI wird die Fähigkeiten von EJB erhalten, IMHO ist es noch ein Best Practice eine separate Bohne für die „Backing Bean“ -Konzept und eine separate Bohne für die „Business-Logik“ zu verwenden.

Die Backing Bean kann wirklich schlank, nur einige Verweise auf Modellobjekte und Dienstleistungen (EJBs) enthält. Aktionsmethoden der Träger Bean kann fast direkt auf die Dienste delegieren, aber ihr Mehrwert ist in dem Anwender Rückmeldung (Hinzufügen FacesMessages auf Erfolg oder Misserfolg) und dabei kleine UI Modifikationen (zB eine boolean auf false gesetzt, die etwas Dialog angezeigt) .

Die Service (Business-Logik) sollen nichts über eine bestimmte Präsentation kennen. Sie sollten von JSF Trägern Bohnen, JAX-RS, Servlets, Standalone-Java SE Remote-Clients oder was auch immer gleich gut verwendbar sein.

Auch wenn alle Bohnen CDI Bohnen werden würden, dann bedeutet dies nicht diese grundlegende Aufteilung der Verantwortung ändern.

Interessanter Artikel, nicht wussten darüber. ich jedoch riecht dieser Artikel eher wie eine Tirade auf JSF Bohnen verwaltet. Es ist auch eng Paare EJB mit JSF. Es ist vielleicht interessant in kleinen (persönlichen) -Anwendungen, aber wahrscheinlich nicht in der realen Welt SOA Anwendungen, bei denen Sie die volle Kontrolle haben möchten über die EJB serviciert.

In Bezug auf eine, die für verwenden, was möchte ich @ManagedBean bleiben nur ein JSF-Modell zu bezeichnen --which auf eine oder mehrere spezifische JSF Ansichten gebunden ist. Sie können perfekt @EJBs für Nicht-JSF spezifische Geschäftslogik und / oder Datenmodellen verwendet werden. Sie können @EJBs in einem JSF-Modell injizieren und sie in Aktion Methoden delegieren und vielleicht auch Getter / Setter, aber man sollte andersherum nicht tun, also nicht das JSF-Modell in einem @EJB definieren, dies führt zu einem engen Kopplung und würden @EJBs unuseable außerhalb des JSF-Kontext. Was, Ihr Design klingt gut, so lange, wie Sie sehen, nicht importierte alles von javax.faces Paket in der @EJB Klasse.

Mit dem EJB von Ihrem XHTML Aufruf, Sie sind die Einführung enge Kopplung zwischen der Wahl der Implementierung in der Ansicht und Business-Tiere.

Wenn Sie eine verwaltete Bean verwenden, um eine EJB zu nennen, [oder sogar in einem Business-Delegierten setzen], können Sie Ihr Business-Tier Spring ändert vollständig aus, ohne die Sicht Schicht zu beeinflussen (XHTML).

Ist technisch möglich ist und sehr einfach für Sie zu (JSR 299) in der Lage zu verwenden EJB als Managed Bean, und das ist wahrscheinlich das, was diese Anbieter Sie tun wollen - get geklebten zu Besonderheiten. Aber ob das eine richtige Sache zu tun? -. Nein

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top