# Datenbankanbindung JSP



## Br4ve (3. Sep 2012)

Hallo,
Ich habe eine Frage zur Datenbankanbindung, bzw. zur Datenbanverbindung. Ich erstelle derzeit eine Webanwendung mit JSP und Servlets. Aktueller Schwachpunkt meiner Webanwendung sind die vielen Verbindungen die ich im Laufe der Runtime öffne und schließe. Wie bekomme ich es am besten hin, so wenig wie möglich, im Idealfall nur eine Verbindung für die Webanwendung bereitzustellen? Ich habe mir dazu bereits Gedanken gemacht und meine erste Idee war es die Connection in der Session zu speichern, aber dann hätte jeder User ja eine eigene Connection und das geht vermutlich nicht lange gut. Meine zweite Idee war der Servletkontext. Muss ich dann zwanbgsläufig einen ServletContextListener, die Datenbanverbindungsklasse, sowie ein Servlet benutzen? ???:L
Oder gibt es da vielleicht besser Methoden ohne jetzt völlig von den JSPs wegzugehn?


----------



## maki (3. Sep 2012)

> Aktueller Schwachpunkt meiner Webanwendung sind die vielen Verbindungen die ich im Laufe der Runtime öffne und schließe.


Wie äussert sich das denn?

Schon mal einen ConnectionPool in betracht gezogen?


----------



## turtle (3. Sep 2012)

Vorweg:
Ich mag JSPs nicht und zwar genau aus dem Grund, weil es dazu verführt Business-Logik mit in die View einzubauen. Diese Dinge gehören strikt getrennt.

Genauso solltest Du die Verwaltung von DB-Verbindungen nicht selber lösen. Hierfür stellt Dir jeder ordentliche Server (z.B. Tomcat) etwas bereit mit dem Verbindungen "gepooled" werden. Stichwort hierzu ist JNDI und ist, wenn es denn JSP sein muss, kurz hier beschrieben. Natürlich findest Du eine Menge wenn Du danach googlest.


----------



## Br4ve (3. Sep 2012)

Also Connection Pools sagte mir bis eben nichts.
Ich benutze JSPs jetzt nicht weil ich so mega überzeugt von der Technologie bin, allerdings ist das das Einzige was ich berherrsche bisher und ich selber hatte auch auf die Entscheidung leider keinen Einfluss, mit welchen Technologien die Webanwendung erstellt wird. :bahnhof:
Zu der JNDI-Technik habe ich nachdem ich mir den Link kurz angeschaut habe eine Frage, die sich mir sofort gestellt hat... Und zwar wenn ich das richtig verstanden habe, liegen die Datenbankparameter ( url, user, password) in einer XML-Datei auf dem Tomcatserver. Dadurch ist das Ganze ja sehr statisch und wenig skalierbar? Also ich benutze derweil 2 Datenbankverbindungen zu 2 verschiedenen Datenbanken. Ursprünglich wollte ich es prinzipiell auch möglich machen weitere Datenbankenverbindungen problemlos hinzuzufügen. Gehe ich recht in der Annahme, dass das mit JNDI nicht ohne Weiteres möglich ist?


----------



## turtle (3. Sep 2012)

2 Datenbanken = 2 JNDI-Einträge
Skaliert sehr schön. 

>>Zur Laufzeit eine weitere DB hinzufügen?

In der Tat geht das nicht ohne Weiteres. 
Müsste mit einem bind auf dem InitialContext gemacht werden.  Ob's geht weiss ich aber nicht.

Connection Pool sind sehr wichtig und hier mehr Infos dazu.


----------



## Br4ve (3. Sep 2012)

Ok ich probiere das mal aus. Wo genau füge ich denn in der server.xml von tomcat den context ein? Das ist in den Tutorials ein bißchen schwammig formuliert. Oder liegt es vll daran, dass Tomcat 6 und Tomcat 7 inzwischen context.xml files besitzen in denen man das einfügt? ???:L


----------



## turtle (3. Sep 2012)

Das kannst Du halten wie die Dachdecker ;-)

Übersichtlicher finde ich, wenn es in einer webapplikations-eigenen Datei steht. Diese muss in CATALINA_HOME/webapps/<Webapplikation>/META-INF/context.xml stehen.

Eine Context-Definition kann aber auch in server.xml stehen. Da muss es innerhalb des Host-Elementes stehen. Ich trage die einzelnen Definition ans Ende vor dem abschliessenden Tag </host> ein. Genaue Definition in der Doku.


----------



## Br4ve (3. Sep 2012)

Eine Frage habe ich dann doch noch, weil ich derzeit immer eine javax.naming.NameNotFoundException bekomme. In dem ersten Link steht auch nichts von web.xml anpassen oder ähnliches. In anderen Tutorials jedoch schon. Es scheint ja aber zwingend notwendig zu sein, weil die Exception für mich stark darauf hindeutet, dass er den Kontext nicht mit dem Code in Verbindung bringen kann.... Wie und wo muss ich also genau noch was ändern damit es funktioniert? Mit der web.xml hat es iwie bei mir nicht richtig geklappt...


----------

