Rıdvan Ağar wrote:
> Ich würde diese Erklärung von Markus mit einem Beispiel bestätigen:
> <resource-ref>
>     <description>Creator generated DataSource Reference</description>
>     <res-ref-name>jdbc/meine_db_verbindung</res-ref-name>
>     <res-type>javax.sql.DataSource</res-type>
>     <res-auth>Container</res-auth>
> </resource-ref>
>
> Referenz jdbc/meine_db_verbindung wird vom Container
> -in o.g. Fall SJSAS 8.2 verwaltet. Ich habe diese Verbindung im Server
> eingerichtet (host,db,user,pwd usw) und meine Applikation sucht sich
> diese Verbindung über den Namen jdbc/meine_db_verbindung:
>
> <code_schnipp>
>       InitialContext ctx=null;
>         DataSource ds=null;
>
>         try{
>             ctx = new InitialContext();
>             ds = (DataSource) ctx.lookup(dsn);
>         } catch(NamingException nw) {
>             try{
>                 ds = (DataSource)
> ctx.lookup("java:comp/env/jdbc_meine_db_verbindung");
>             } catch (NamingException e){
>                 e.printStackTrace();
>             }
>         }
> </code-schnapp>

Hm, mir fällt gerade auf, daß wir beide es geschickt vermieden haben, den für 
die Praxis vielleicht interessantesten Aspekt zu erwähnen, nämlich welchen 
Einfluß der Wert von <res-auth> konkret auf den zu schreibenden Code hat.

Damit man tatsächlich mit der Datenbank arbeiten kann, benötigt es ja noch 
eine java.sql.Connection. In Deinem Beispiel (<res-auth>Container</res-auth>, 
Host, DB, User, Paßwort im Container konfiguriert) würde also noch etwas wie
java.sql.Connection conn = ds.getConnection();
gebraucht.
Im Falle von <res-auth>Application</res-auth> wäre stattdessen etwa
java.sql.Connection conn = ds.getConnection("<username>", "<password>");
erforderlich.

Mein langes Geschreibsel und Dein Beispielcode lassen sich im Prinzip so 
zusammenfassen:
Der Wert von <res-auth> legt fest, wo sich Benutzername und Paßwort für die 
Datenbank befinden - in der Konfiguration des Containers oder direkt im Code 
der WebApp (also mehr oder weniger direkt im Aufruf von 
javax.sql.DataSource#getConnection) selbst.

Sehr interessante Frage übrigens, Patrick! Wieder was gelernt.

Gruß
  mks
-- 
----------------------------------------------------------------------------
PUG - Penguin User Group Wiesbaden - http://www.pug.org

Antwort per Email an