EJB Entity Beans -> CMP

Status
Nicht offen für weitere Antworten.

Saladin

Mitglied
Da ich noch ein Blutiger Anfänger in JAVA (komme aus der C Welt) bin, hoffe ich das ihr mir die ein oder andere Frage verzeit und mich hier auf den richtigen weg bringt.

Es geht darum, das ich die Aufgabe habe einen Teil einer Session Bean in ein Entity Bean auszulagern (Weblogic Application Server). Der auszulagernde Teil liest sehr viele Daten aus einer Datenbank (bei jeder Session?!) und zieht die Performance so in den Keller. Hier kann man wohl ein Entity Bean ansetzen, um die Datenbankabfragen über einen Timer in größeren Abständen zu machen.
Aber trotz ausgiebigem lesen sind da einige Sachen, die mir unklar sind.

a) Eignet sich ein Entity Bean?
b) Was past besser ein CMP oder BMP? (Ich dachte ein CMP passt schon)
c) Brauche ich für das Entity Bean eine DB, um die Session Daten abzulegen (besonders unklar).
d) Ein simples Entity Beispiel, das ohne weiteres auf einem Bea Weblogic 8.1 laufen soll
e) Gute Tutorials in Deutsch


Gruß
Saladin
 

schalentier

Gesperrter Benutzer
Ich vermute mal wild in der Gegend rum, da du mit Infos doch ziemlich sparsam umgehst ;-)

Die SessionBean bildet serverseitig eine Session ab (...^^). D.h. wenn jemand daherkommt und eine Session eroeffnet (Nutzer meldet sich an oder so), werden fuer den Nutzer spezifische Daten geladen und in der Session abgelegt. Demnach handelt es sich um eine Stateful SessionBean. Hoffe ich mal ;-)

Jetzt sollen diese Nutzerspezifischen Daten in einer EntityBean abgelegt werden. Da stellt sich ja gleich mal die Frage, wie das genau ablaufen soll. Ueber Timer? Hmm... waere moeglich, eleganter waere es sicherlich, wenn die EB direkt bei relevanten Aenderung aktualisiert wird. Aber das haengt zusehr von der Anwendung ab.

a) geht so ^^
b) kommt auf die Daten drauf an. Wenn die alle in einer Tabelle liegen (eine EB-Instanz pro Zeile) ist CMP am besten, wenns komplexer wird, isses mgl.weise einfacher, das Datenholen selbst mit BMP zu regeln.
c) Was meinst du mit Sessiondaten? Die Daten, die das EB liefern soll? Ein EB braucht nicht zwingend eine Datenbank, wenn du Daten z.B. berechnet werden. Dann musst du aber sicherlich BMP nehmen und beim Erzeugen des EB die Daten manuell fuellen (und das braucht keine DB).

Rest lass ich mal offen, google hilft bei sowas.

mfg
 

Saladin

Mitglied
Wenn ich mal dein Beispiel aufgreife, dann würde die aus der Datenbank gelesenen Daten alle User betreffen z.B. eine Blacklist die bei jeder Registrierung/Anmeldung gültig wäre und nicht ständig erneut aus der Datenbank ausgelesen werden müßte. Hierzu reicht ein Timer um in definierten Abständen die Datenbank erneut auszulesen.

-> Es handelt sich wie du richtig vermutet hast um eine Statefull SessionBean

Was die Session Daten angeht, habe ich folgendes in einem Tutorial gelesen:

Die Hauptaufgabe der Entity Beans als 'Persistence Components' ist die Persistenz, also das dauerhafte Speichern über mehrere Sitzungen hinweg (meistens in relationalen Datenbanken).
Entity Beans repräsentieren oft ein Objekt aus der realen Welt (in objektorientierter Darstellung).
Die Daten einer Entity Bean entsprechen einer Zeile einer Datenbanktabelle (oder mehrerer Tabellen). Normalerweise können auch nur Operationen an genau einem Datensatz (also einer Tabellenzeile) durchgeführt werden (anders als bei SQL, wo über eine 'where'-Bedingung viele Tabellenzeilen auf einmal manipuliert werden können).
Anders als eine Session Bean kann eine Entity Bean mehrere Clients gleichzeitig bedienen (dabei sind Clients in der Regel Session Beans).
Es wird unterschieden zwischen:
BMP (Bean Managed Persistence)
Bei Bean Managed Persistence muss der Programmierer die Persistenz realisieren, zum Beispiel über direkte SQL-Kommandos per JDBC-Zugriff oder über Java-Objekte über ein O/R Mapping Framework (z.B. JDO oder Hibernate).
CMP (Container Managed Persistence)
Der Container bewerkstelligt die Persistenz. Das Laden und Speichern (z.B. von und zur Datenbank) erfolgen automatisch.

Nun weiss ich nichts damit anzufangen. Für mich klingt das so, als ob der Applicationserver die Entity Beans (CMP) in der Datenbank ablegt bis zum nächsten Aufruf.
 

schalentier

Gesperrter Benutzer
Saladin hat gesagt.:
Nun weiss ich nichts damit anzufangen. Für mich klingt das so, als ob der Applicationserver die Entity Beans (CMP) in der Datenbank ablegt bis zum nächsten Aufruf.

Eine EntityBean ist einfach ein Objekt im OO-Sinne, mit dem tollen Effekt, dass sich der Applicationserver um den Lebenszyklus kuemmern. D.h. ist z.b. der Speicher im Server voll, wird die EB aus dem Speicher gehauen und abgespeichert (irgendwo). Bei einem Zugriff auf eine EB, die nicht mehr im Speicher ist, wird diese zunaechst geladen, usw.

Wie das Speichern/Laden ablaeuft, haengt nun von deiner EB Implementierung ab. Eine CMP-EB wird in einer DB abgespeichert, mit dem Nebeneffekt, dass man sich als Entwickler darum ueberhaupt nicht zu kuemmern braucht. Man sagt nur, welche Eigenschaft des EB in welcher Spalte welcher Tabelle abgelegt wird.

Willst du das nicht, weil die Daten z.b. berechnet werden oder sonstwas, dann kommt eine BMP-EB in Frage. Hier musst du implementieren, was beim Speichern/Laden passieren soll.

Achso, und verwirr mal nicht so mit deinem Begriff "Sessiondaten". Sessiondaten sind Daten, die fuer eine Session relevant sind (und nur fuer diese) und werden mit SessionBeans abgebildet. Du meinst aber Daten, die nichts mit einer Session zu tun haben, sondern die fest sind ueber alle Sessions und per Timer aktualisiert werden.
 

Saladin

Mitglied
Bin wie gesagt
...Blutiger Anfänger...
in Java daher SORRY wenn ich den einen oder anderen Begriff in einem falschen Zusammenhang verwende, ist keine Böswilligkeit.


In unserem Beispiel enthält das EB(BMP) ein Object das die DB öffnet und mit einer SQL Anweisung nach einem Schwarzen Schaf sucht und einfach einen Boolschen Wert zurück liefert bei einem Treffer. Wie sähe hier das Speichern/Laden aus? Ich will keinen fertigen Code von dir, ich kann mir nur leider noch nicht vorstellen, wie das ganze aussehen soll. Auf was muss ich achten.
Wie bringe ich WebLogic bei wie und wo er in solch einem Fall das EB ablegen soll?
Wenn Speichermangel der Grund für die Auslagerung/Speicherung des EB wäre es vieleicht auch besser, das EB zu löschen, um beim nächsten Zugriff halt neues zu erzeugen.

Gruß
Saladin
 

bronks

Top Contributor
Saladin hat gesagt.:
... Wie sähe hier das Speichern/Laden aus? Ich will keinen fertigen Code von dir, ich kann mir nur leider noch nicht vorstellen, wie das ganze aussehen soll. Auf was muss ich achten.
Wie bringe ich WebLogic bei wie und wo er in solch einem Fall das EB ablegen soll?
Wenn Speichermangel der Grund für die Auslagerung/Speicherung des EB wäre es vieleicht auch besser, das EB zu löschen, um beim nächsten Zugriff halt neues zu erzeugen ...
Da muß man garnichts machen, denn das läuft alles automatisch und das ist m.E. das, was das verwirrendste für einen EE-Anfänger ist.

Gute Tuts: www.laliluna.de

Sind zwar zum Großteil für JBoss, funktionieren nach ein paar Denkminuten auf Weblogic ebenfalls.
 

Saladin

Mitglied
Hmmm Automatisch sagst du? :bahnhof:
Aber warum liest sich in jedem Tutorial das ganze so, als ob man bei einer bmp EB sich selber darum kümmern muss.

Hat den keiner ein kleines Beispiel für mich, wie das ganze umgesetzt werden könnte. :roll:

Die von dir genannte Seite ist leider ein Bezahl Service!:bloed:


Gruß
Saladin :
 
G

Guest

Gast
Egal ob BMP oder CMP, der Zugriff auf die Datenbank bleibt dir nicht erspart. Selbst wenn die Entity-Beans
gecached werden, laufen Suchabfragen (finder-Methoden) über die Datenbank. Die einfachste Lösung ist
wirklich eine simple JDBC-Query, die prüft, ob ein gegebener User gesprerrt ist oder nicht. Das sind paar
Millisekunden, die eine solche Abfrage dauert.
Meiner Meinung nach, ist dies kein Thema für Entity Beans, wenn sie nur dazu benutzt werden sollen.
 

Saladin

Mitglied
Na ja nach langer Recherche sind mir nun einige Sachen klarer:
Hier ein kurzes Resümee:


Ob man BMP oder CMP verwenden möchte, hängt davon ab, ob man die vorhandenen Daten (Klassen, Membervariablen, etc) im
EB automatisch oder manuell in einer Datenbank abspeichern lassen möchte.
Die Datenbankverbindung wird vom Application Sever aufgebaut und verwaltet.
Möchte man z.B. eine Membervariable x einer CMP automatisch abspeichern lassen (abspeichern da das
EJB Persistent ist und immer wieder vom Application Server(AS) verwendet wird), gibt man
im Deployment Descriptor (ejb-jar.xml) die Anweisung an den Application Server über einen Tag
Code:
<cmp-field><field-name>x</field-name></cmp-field>
Sollte nun das EJB nicht verwendet werden, legt der AS die gewünschten Daten in der
Datenbank ab (was passiert mit den restlichen Daten (Klassen, Membervariablen, etc) die
nicht explizit erwähnt sind ??)

Ein BMP EB unterstützt diese Automatische Containerverwaltung nicht. Wenn man seine Daten (Klassen, Membervariablen, etc) von einem Aufruf zum nächsten Sichern möchte, oder die daten vor dem ablegen noch
ändern möchte, muss das Manuell passieren, was eine höhere Fehleranfälligkeit hat.

Ich hoffe das das soweit richtig ist.

Habe aber daher noch zwei Fragen:
a) Was passiert bei einem BMP EB, wenn man die Daten nicht manuell absichert (was passiert mit diesen?). Nach obigem Beispiel, wenn man ein Objekt im Constructor instanziert und damit arbeitet, ohne die oben erwähnten Sicherungsmassnahmen zu tätigen.

b) Kann man in CMPs auch Objekte zum Sichern in einer Datenbank angeben?


Gruß
Saladin
 

bronks

Top Contributor
Saladin hat gesagt.:
Hmmm Automatisch sagst du? :bahnhof:
Aber warum liest sich in jedem Tutorial das ganze so, als ob man bei einer bmp EB sich selber darum kümmern muss.
Getter und Setter werden sowieso generiert. Das einzige wo man ein bissl was extra reinschreiben muss ist ejbCreate(), ejbLoad(), ejbStore() und ejbRemove(). Finder machen so oder so Arbeit. Speichern, Laden, Caching und Transaktionen sind automatisch.

Saladin hat gesagt.:
... Die von dir genannte Seite ist leider ein Bezahl Service!:bloed: ...
Weiß nicht warum der Daumen nach unten zeigt, denn so eine Dichte an kostenlosen, ausführlichen und funktionierenden Tuts findest Du kaum wo anders.
 
G

Guest

Gast
Saladin hat gesagt.:
Ich hoffe das das soweit richtig ist.
Fast. ;) Sowohl bei BMP, wie auch bei CMP werden die Entities automatisch gespeichert, wenn die Transaktion
beendet wird. Unterschied besteht darin, dass du bei BMP selbst dafür sorgen muss, dass diese auch erstellt/
gespeichert/geladen (ejbCreate, ejbLoad, ejbStore) werden.
Die Unterschiede im Deployment-Descriptor sind auch umfassender als nur die CMP-Field Angaben. Es sind
sehr viele Sachen, die berücksichtigt werden müssen, so dass es schwierig ist, das ganze hier in einem Thread
zu beschreiben. Da gibt es 1000 Seiten lange Bücher, die sich damit beschäftigen.
Ein richtig gutes ist das hier: http://www.theserverside.com/tt/books/wiley/masteringEJB/index.tss

Ein grosse Hilfe bei dem ganzen EJB Zeugs sind Ant und XDoclet. Damit kann man zumindest die Erstellung
von Deployment-Descriptoren, das Packaging und Deployment automatisieren.

Saladin hat gesagt.:
Habe aber daher noch zwei Fragen:
a) Was passiert bei einem BMP EB, wenn man die Daten nicht manuell absichert (was passiert mit diesen?). Nach obigem Beispiel, wenn man ein Objekt im Constructor instanziert und damit arbeitet, ohne die oben erwähnten Sicherungsmassnahmen zu tätigen.
Dann passieren merkwürdige Sachen auf dem Server. ;)
Implementierst du die Store-Methode nicht, wird auch nichts gespeichert.
Saladin hat gesagt.:
b) Kann man in CMPs auch Objekte zum Sichern in einer Datenbank angeben?
Ja, diese werden dann als BLOB serialisiert, wenn sie java.io.Serializable implementieren. Ist dies nicht der Fall, dann knallt's.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Persistenz-Entscheidung (Entity Beans, Hibernate, JDBC) Allgemeines EE 12
M Entity Beans: Rückgabe von Collectionen an Client Allgemeines EE 2
H Hibernate - OneToMany - mappedBy reference an unknown target entity property Allgemeines EE 1
T Anfängerfrage: h:selectOneMenu (JSF 2.0), @ManyToOne Annotation in Entity (JPA 2.0) Allgemeines EE 2
P detached entity passed to persist Allgemeines EE 5
H Bezug Entity<=>DB Allgemeines EE 5
I Entity wirft Nullpointer Allgemeines EE 2
J Datenbankmanipulation, methoden des Entity-Managers ? Allgemeines EE 3
F mappedBy reference an unknown target entity property Allgemeines EE 5
ichbindiegute Performance von Entity Bean create vs. JDBC insert Allgemeines EE 11
A Selbstreferenzierter Entity-Bean Allgemeines EE 3
S Löschen einer Entity kaskadiert nicht auf Collection (1:n) Allgemeines EE 2
G Entity Bean ignoriert Datenbank Allgemeines EE 16
G JBoss - Session / Entity Allgemeines EE 8
M Session Bean vers. Entity Bean 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 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
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
T Verständnisfrage zu Beans Allgemeines EE 8
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
P Session Beans importieren Allgemeines EE 2
T JSP: Wo liegen die Beans Allgemeines EE 5

Ähnliche Java Themen

Neue Themen


Oben