# Datenbank Abfragen mit EJB



## hunter1977 (15. Dez 2004)

Hallo,

ich habe folgendes Problem, ich möchte eine Anwendung entwickeln die mit SQL-Statements Daten aus einer Datenbank abfragt, diese verarbeitet und die Daten entweder als PDF oder Excel Datei ausgibt.

Ich weiß leider nicht welche Bean eignet sich am Besten für meine Anwendung? Kann mir da jemand weiter helfen?

1) JSP Seite nimmt Kriterien für die Abfrage entgegen
2) EJB setzt SQL-Statement mit Kriterien ab und bekommt das Ergebnis zurück
3) Verarbeitung der Daten in PDF oder Excel.


Danke Hunter


----------



## foobar (15. Dez 2004)

Für die Persistenzschicht werden in der J2ee entweder CMP Entity Beans oder BMP Entity Beans verwendet. Der Unterschied ist der, daß du dich bei BMP's selbst um die Kommunikation mit der DB kümmern mußt. Im Gegensatz dazu wird die Persistierung mit CMP's komplett über die Deployment Descriptoren gesteuert und dann vom EJB Container implementiert. Dadurch ist man mit CMP's nicht an ein bestimmtes DBMS gebunden, da die eigentlichen Queries vom EJB Container generiert werden.


----------



## Bleiglanz (15. Dez 2004)

vergiss EJBs in diesem Kontext (es sei denn, deine Query hat tatsächlich sinnvolle "Entitäten" als Rückgabe-Items)
Für

+ reine SELECTS mit komplexer Klausel und Spaltenliste
+ solche, die nur einmal gebraucht werden (typisch für Webanwendungen)
+ solche, die viele Tabellen joinen

macht man Hit and Run, d.h. die reicht man am besten direkt an die DB durch ("Fast Lane Reader"),. der Overhead durch den Einsatz von Enterprise Java Beans steht dann in keinem Verhältnis zum Nutzen....

kann gut in einem Servlet oder einer Hilfsklasse geschehen


----------



## hunter1977 (15. Dez 2004)

Naja, das sind schon sehr mächtige Abfragen und ich möchte nicht das Kennwort und Username einer Datenbank in
eine JSP Seite schreiben.

Ich denke ich werde das ganze über eine EJB lösen.

Danke für die Hilfe
Hunter


----------



## Bleiglanz (16. Dez 2004)

schon mal was von Servlets gehört?

schon mal gehört, dass kein Code in jsp's sein soll?

wenn ein einzelner HTTP Request deine Abfrage auslösen soll und es keine Seiteneffekte gibt UND du unbedingt EJB verwendel willst, dann nimm eine stateless Session Bean (local wenn möglich) und gib eine Liste von "Ergebnisobjekten" zurück


----------



## Bleiglanz (16. Dez 2004)

ach ja, schon mal was von DataSource und Connection Pooling gehört

normalerweise brauch man benutzer/kennwort NIE in irgendeiner jsp


----------



## hunter1977 (19. Dez 2004)

Okay, das mit dem Connection Pooling ist wirklich die bessere Lösung.

Ich werde das mal testen.

Danke Hunter


----------



## bellmann29 (9. Jan 2005)

Stateless Session Beans sind meiner Meinung nach der beste Weg, wenn Du es unbedingt über einen AppServer machen willst/mußt. Wie es ja schon Bleiglanz empfohlen hat.

@Bleiglanz:
Warum sollten die Beans nur "local" und nicht auch remote die Ergebnismenge zurückgeben? Was ist, wenn der WebServer auf einer anderen Maschine installiert worden ist.


----------



## Bleiglanz (10. Jan 2005)

@bellmann29

ich hab ja geschrieben "wenn möglich"!

remote wärs IMHO totaler Unsinn (ginge aber bei verschiedenen JVMs nicht anders), weil dann das zu sendende Excel oder PDF als byte[]  Array durch den ganzen Remote (RMI oder CORBA oder Appserverprotokoll) Marshalling Stack druchgeschwurbelt werden müsste

völlig sinnloser Overhead, ausserdem ist die Erstellung von PDFs oder Excels als Binärdaten keine Aufgabe der Business Logik


----------



## bellmann29 (11. Jan 2005)

@Bleiglanz
Meine Frage (local vs. remote) galt nicht dem PDF-Dokument. Ich dachte an die Liste (Collection, Set) mit den Ergebnissobjekten, die  benötigt werden. War wohl ein kleines Mißverständnis.


----------

