Verständnisfrage zu Beans

Status
Nicht offen für weitere Antworten.

Troilus

Mitglied
Huhu,
wie in nem anderen Post erwähnt arbeite ich mich in JSF ein. Dies ist mein erster Kontakt mit J2EE und somit setze ich zum ersten Mal Java Beans ein. Dazu habe ich nun ein paar Verständnisfragen:

1) Wann und wo wird das Bean erzeugt, also "Bean test = new Bean();" ? In meinem JSF Projekt möchte ich ein Bean nutzen, das meine Eingabedaten nach einem Submit eines JPSs in diesem Bean speichert.

Ich müsste wissen wann es initialisiert wird, da ich im Standardkonstruktor des Beans eine Cookieabfrage machen möchte, d.h. ich möchte überprüfen, ob ein Cookie mit den benutzerdefinierten Werten des Benutzers schon vorhanden ist. Wenn ja soll mein Bean diese Werte übernehmen und seine Variablen damit initialisieren. Falls nicht werden die Variablen des Beans mit Defaultwerten initialisiert, die danach in einem Cookie abgelegt werden sollen.

Dies soll vor dem Aufruf der "Benutzereinstellungs-JSP" erfolgen, da ich gerne die Eingabefelder des JSP mit den vorher gesetzten Werten aus der Bean "initialisieren" möchte.

Da ich nicht weiss, ob ein Bean wie eine normale Klasse erzeugt wird, und ich mit einem Beanobjekt arbeiten kann, weiss ich auch nicht wie ich dies realisieren kann. Mir kommt es so vor als ob in JSF die Beans immer nur dann erzeugt werden, wenn diese vom JSP erstmalig aufgerufen werden.


2) Was hat es mit dem Scope auf sich? Wenn ich den Scope "session" benutze, woher weiss dann JSF, wann diese Session vorbei ist? Speichert JSF eine Session ID über eine gewisse Zeit ab? (Wobei ich glaub zu scope werd ich ein bissl googlen. :))


3) Nochmal zu Beans. Darf ein Bean auch private Methoden enthalten? Oder ist dann das Bean kein Bean mehr? :)


4) Kann ich auch in meinen Bean Methoden mit komplexeren Berechnungen implementieren oder sollte man dazu lieber eine extra Klasse erzeugen, die ich dann im Bean aufrufe? (quasi durchreichen von Berechnungsklasse->Bean->View). Ist es generell sinnvoller Berechnungen auszulagern? Oder macht es keinen Unterschied, wenn ich dazu die Beans benutze?


Das wars erstmal
Bis dann :)
 

timomeinen

Aktives Mitglied
Troilus hat gesagt.:
1) Wann und wo wird das Bean erzeugt, also "Bean test = new Bean();" ?
Bei EJBs gibt es kein new Bean(), denn dies wird von dem Applikationsserver erledigt. Man kann EJBs nur "erzeugen" indem man nach ihnen beim Namensdienst sucht. Stichwort JNDI. Aber das ist ja der ganz grosse Vorteil der J2EE Technik: die EJBs müssen nicht erzeugt werden, sondern können dynamsich in einem Pool gehalten werden.

Am besten schaust du dir mal diese State- und Sequenzdiagramme an:

http://www.unix.org.ua/orelly/java-ent/ebeans/appb_01.htm

Sie beschreiben den Lebenszyklus der EJBs und erklären auch die Generierung. Hier wirst du auch sehen, an welcher Stelle man Initialisierungscode einsezten kann.

Troilus hat gesagt.:
2) Was hat es mit dem Scope auf sich? Wenn ich den Scope "session" benutze, woher weiss dann JSF, wann diese Session vorbei ist? Speichert JSF eine Session ID über eine gewisse Zeit ab? (Wobei ich glaub zu scope werd ich ein bissl googlen. :))
HTTP ist ein zustandsloses Protokoll, d.h. du hast keine Möglichkeit Informationen über die Session in dem Protokoll zu speichern. Daher verwendet man einige "Tricks", wie z.B. URL-Rewriting. Darutner versteht man, dass alle Informationen in den Links integriert werden. Das kennst du, wenn du oben in die Adressleiste schaust und dort Infos gespeichert werden in der Form ?key=value&key=value
Man kann auch eine SessionID in dem GET- oder POST-Aufruf verstecken und die Informationen auf dem Server speichern. Diese Arbeit nimmt dir aber zum Glück der WebContainer ab. Du kannst also im JSF einfach auf den Scope zugreifen.

Troilus hat gesagt.:
3) Nochmal zu Beans. Darf ein Bean auch private Methoden enthalten? Oder ist dann das Bean kein Bean mehr? :)
EJBs sind keine JavaBeans! Ich verstehe auch nicht, warum man die Namen so ähnlich gemacht hat. Natürlich kannst du private Methoden verwenden. Allerdings soltle dies nur in SessionBeans geschehen. Die Entity-Beans enthalten, wie JavaBeans, nur private Attribute mit öffentlich getter-/setter-Methoden.

Troilus hat gesagt.:
4) Kann ich auch in meinen Bean Methoden mit komplexeren Berechnungen implementieren oder sollte man dazu lieber eine extra Klasse erzeugen, die ich dann im Bean aufrufe? (quasi durchreichen von Berechnungsklasse->Bean->View). Ist es generell sinnvoller Berechnungen auszulagern? Oder macht es keinen Unterschied, wenn ich dazu die Beans benutze?
Klar kannst du komplexe Berechnungen machen. Dazu sind SessionBeans ja da. Die SessionBeans stellen die Geschäftslogik da und berechnen etwas mit Hilfe der Daten aus EntityBeans. Auslagern wäre nicht sinnvoll, da SessionBeans ja dazu da sind, Berechnungen zu abstrahieren, so dass du sie theoretisch in anderen Programmen wiederverwenden kannst.

Am Besten schaust du dir die Unterschiede und Aufgaben der versch. Bean-Typen (Session, Enttity, Messag-Driven) an.

Glück Auf
Timo
 

KSG9|sebastian

Top Contributor
Beans bestehen aus privaten Attributen mit zugehörigen gettern/settern

beans solltest du (wenn du schon jsf benutzt) in der faces-config.xml deklarieren
 

Troilus

Mitglied
KSG9|plak hat gesagt.:
Beans bestehen aus privaten Attributen mit zugehörigen gettern/settern

beans solltest du (wenn du schon jsf benutzt) in der faces-config.xml deklarieren

Das habe ich bereits verstanden gehabt, nur wie man die Beans benutzt ist/war mir unklar :)


Ich werd mir den Link oben gleich nachher einmal ansehen.
@Timo: D.h. das die managed-beans und referenced-beans bei JSF EJBs sind? Bzw. wenn in der J2EE von Beans die Rede ist, es sich automatisch im EJBs handelt?
Sind dann mit dem Begriff "Beans", nur die Beans gemeint, die Komponenten in Swing/AWT implementieren? Sowas habe ich nämlich gelesen als ich nach Beans gegooglet habe.

Fragen über Fragen,
bis dann :)
 

timomeinen

Aktives Mitglied
Troilus hat gesagt.:
das die managed-beans und referenced-beans bei JSF EJBs sind?

Hoooonk! Genau verkehrt. managed-beans im JSF sind auch nur JavaBeans. Die Attribute der managed-beans werden aber mit den passenden JSP-Tags verknüpft. Stichwort: Value Bindings

Troilus hat gesagt.:
Bzw. wenn in der J2EE von Beans die Rede ist, es sich automatisch im EJBs handelt?

Nein nicht automatisch. Also ich gebe mal eine kurze Übersicht:

JavaBeans - genannt: Beans, Javabeans
JavaBeans sind gewöhnliche Java-Klassen. Sie besitzen einen öffnetlichen, leeren Konstruktor. Sie haben private Attribute und für diese Attribute haben sie jeweils eine öffentliche getAttribut() und eine öffentliche setAttribut().

Bsp:
Code:
class KundeJavaBean {
private String name;
private int alter;

public KundeJavaBean() {}

public String getName() {
return this.name;
}

public void setName(String name) {
this.name = name;
}

usw. für alter...

Verwendung
Als Datentransferobjekt (DTO) oder für Swing-Anwendungen oder z.B. auch als managed-bean für JSF.


Enterprise JavaBeans - genannt: EJBs
EJBs sind nur in einer J2EE Umgebung mit einem Applikaitonsserver einsetzbar. Sie stellen Komponenten einer Software da und können wiederverwendet und beliebig skaliert werden.

Typen
  • Entity Beans - sind ähnlich JavaBeans und stellen Daten für ein Objekt z.B. Kunde dar - werden durch den App-Server mit einer Datenbank verknüft
  • Session Beans - realisieren die Geschäftslogik
  • Message Driven Beans - Bieten eine Möglichkeit für asynchrone Kommunikation

Glück Auf
Timo
 

Troilus

Mitglied
Danke für die Tipps :)
ich glaub ich muss mich da noch n bissl reindenken. Also es spricht ansich nichts dagegen wenn ich Methoden zur Berechnung oder Speicherungen von Daten in mein Managed bean packe?
Ich tu mich schwer irgendwie mich da reinzudenken :)

Also:
In meinem alten Servlet Projekt hatte ich eine Klasse "TreeView" die einen Baum gezeichnet hat und eine Klasse "Cookiemanager" die mir die Daten zum zeichnen an meine TreeView Klasse übergeben hat. Mit einer HTML Seite und einem Extra Servlet konnte ich die Cookies für die Benutzereinstellungen des "TreeView"s verwalten bzw. setzen. Auf die hat dann der "Cookiemanager" zugegriffen. Ich konnte in dem Projekt alle Objekte mit new erzeugen und damit arbeiten.

Jetzt mit JSF habe ich ja meine JSP Seite die die Benutzereinstellungen der "TreeView" verwaltet. Schicke ich das Formular der JSP ab, werden die Werte in dem gelinkten managed-bean "TreeViewBean" abgelegt. Und jetzt hab ich das Problem das ich net weiss, wo und in welcher Art ich mein "Cookiemanager" unterbringen kann der dann die Werte aus dem managed-bean "TreeViewBean" ausliest und als Cookie ablegt.

Das ist mein ganz großes Problem zur Zeit. Java programmieren ist ja kein Ding, aber der Umstieg von herkömmlichen Servletprogrammierung auf J2EE bzw JSF geht irgendwie net an einem Tag :)


Ah ja noch ne "dumme" Frage: Wird in einem J2EE Projekt (hier JSF als Beispiel) alle Anforderungen mit EJBs gelöst oder hat man auch den Fall, dass man irgendwo ein Objekt einer Klasse explizit erzeugt und benutzt. (zb CookieManager cm = new CookieManager())


Ein etwas verwirrtes
Bis dann :)
 

timomeinen

Aktives Mitglied
Die managed-beans sind KEINE EJBs!!! Und daher solltest du in die managed-beans auch keine Logik packen.

Es lassen sich in einer J2EE Anwendung natürlich auch normale Klassen realisieren.

Für JSF alleine würde man aber nicht unbedingt EJBs benötigen. Da reicht ja ein WebContainer.
 

Troilus

Mitglied
Ah, so langsam blick ich durch :)
Ich werd das hier mal abhaken und falls ich net weiterkomme euch wieder "nerven" *g*

Danke für die hilfreichen Tips
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
OnDemand JSF - java File Verständnisfrage Allgemeines EE 5
R [EJB Injektion] Verständnisfrage Allgemeines EE 2
S JAAS Verständnisfrage Allgemeines EE 2
O Verständnisfrage zu Frameworks Allgemeines EE 6
A RMI Verständnisfrage: Interface doppelt? Allgemeines EE 8
D Kurze Verständnisfrage zur JEE Allgemeines EE 2
H Eine kurze Verständnisfrage zum Tomcat Allgemeines EE 2
G Verständnisfrage zu EJB vs. Servlets Allgemeines EE 3
D JSF CDI @Inject No eligible for injection beans are found Allgemeines EE 8
J CDI fähige Beans und @ Inject Allgemeines EE 3
I Session löschen in Bean (Session Beans) Allgemeines EE 1
V Java EE 7 CDI, annotations und beans Allgemeines EE 1
L JSP: Dynamischer Content mit Beans für einen Konfigurator? Allgemeines EE 0
G JSF Beans nicht angezeigt Allgemeines EE 2
D Beans vs. managed Beans vs. backing Beans Erklärung Allgemeines EE 6
Java.getSkill() Anwendung Beans für Formulare Allgemeines EE 5
Spin Ant - Java Beans umsetzen Allgemeines EE 4
V "null" durch NICHTS ersetzen jsp und java beans Allgemeines EE 3
D Frage zum Statefull Session Beans Lebenszyklus Allgemeines EE 3
K EJB Enterprise Java Beans Allgemeines EE 32
F Beans Allgemeines EE 6
A Warum werden die Managed Beans nicht erkannt? Allgemeines EE 3
M Müssen Backing Beans serialisierbar sein? Allgemeines EE 7
N JSF - Frage zu Managed Beans und DataTable Allgemeines EE 4
S In einer Bean-Methode an ndere Beans kommen Allgemeines EE 7
S EJB Entity Beans -> CMP Allgemeines EE 11
S JSP - Veständnisproblem mit Beans Allgemeines EE 9
N Verständnis Beans und Taglibs Allgemeines EE 4
G Struts beans Allgemeines EE 7
G DB Connection mit Java Beans Allgemeines EE 6
P Wie Log4J in JSP's, Beans und Servlets am besten einbinden Allgemeines EE 2
T GUI-Nachrichten mit Message Driven Beans? Allgemeines EE 6
T Grundlegendes Verständnis - Beans, JSP und Servlets Allgemeines EE 3
G Persistenz-Entscheidung (Entity Beans, Hibernate, JDBC) Allgemeines EE 12
T XML, Beans, Datenbank. Kann mir jemand helfen? Allgemeines EE 5
K Enterprise Java Beans Allgemeines EE 7
TRunKX Mein Tomcat findet die Beans nicht was nu? Allgemeines EE 2
G Listenfeld mit Struts und Beans realisieren Allgemeines EE 4
K JSF - Zugriff auf Managed Beans Allgemeines EE 2
S J2EE, Java - Beans, Datenbankzugriff, JSP Allgemeines EE 7
S [JSP Beans]Variable auslesen Allgemeines EE 3
J Java Beans Allgemeines EE 7
A Brauche ich J2EE für Beans? Allgemeines EE 9
M Entity Beans: Rückgabe von Collectionen an Client Allgemeines EE 2
P Session Beans importieren Allgemeines EE 2
T JSP: Wo liegen die Beans Allgemeines EE 5

Ähnliche Java Themen

Neue Themen


Oben