OVH Cloud OVH Cloud

[JDBC][JNDI] Pool de connexion

1 réponse
Avatar
cyrilv
Bonjour,

après plusieurs jours de vaines recherches , je tente ma chance ici :
Je dois faire un pool de connexion pour mon application et à chaque
fois que je tombe sur de l'info, sur Internet ou sur des livres,
j'apprends que c'est facile, mais je n'y arrive toujours pas.

J'ai pu voir qu'il existe une façon de faire qui consiste à faire une
liaison et une recherche d'objets grâce à JNDI (mon livre est O'Reilly
"JDBC & JAVA"). Voici l'exemple démontré lors de la liaison d'objet :

01 Properties props = new Properties();
02 props.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.fscontext.RefFSContextFactory");
03 Contexts ctx = new initialContext(props);
04 DataSource ds = new com.imaginary.sql.msql.MsqlDataSource();
05 ds.setServerName("carthage.imaginary.com");
06 ds.setDatabaseName("jnindex");
07 ctx.bind("/temp/jdbc/jnindex", ds);
08 ctx.close();
//Recherche d'objets
09 DataSource ds = (DataSource) ctx.lookup("temp/jdbc/jnindex");

1) à la ligne 02, mon système ignore cette classe
"com.sun.jndi.fscontext.RefFSContextFactory". J'ai bien com.sun.jndi
mais rien de plus. Que dois-je télécharger??
2) à la ligne 04, j'utilise un driver Microsoft pour MsSQLServer. Sa
méthode qui ressemble le plus à celle-ci est la suivante :
new com.microsoft.jdbcx.sqlserver.SQLServerDataSource(); Je ne crois
pas que c'est de celle-là qu'il s'agit sur mon livre.
3) Mon objet ds est de type javax.sql.DataSource et cette classe ne
connaît pas de méthode setServerName() ou setDatabaseName(), dans quel
espace de nom la classe DataSource se trouve-t-elle???
4) A la ligne 07, lorsqu'on utilise la méthode .bind ou .lookup, les
exemples donnent des choses du genre "temp/jdbc/jnindex" comme
paramètres. Je ne comprends pas vraiment ce que cela signifie. Est-ce
un chemin vers des répertoires? Peut-on arbitrairement les
appeler"Casimir/Julius/machin" ou quelque chose dans le syle?

Une autres solution consiste peut-être à utiliser les interfaces de
javax.sql mais il me faudrait là aussi de bons exemples sur lesquels
m'appuyer.

Quelqu'un peut-il m'aider ???

Merci d'avance, Cyril.

P.-S. Je précise que je suis là dessus depuis une semaine, alors les
remarques me conseillant d'aller me renseigner avant de poster une
question risquent de me laisser un peu amer...

1 réponse

Avatar
jerome moliere
vanncyri wrote:

Bonjour,

bonjour cyril,

après plusieurs jours de vaines recherches , je tente ma chance ici :
Je dois faire un pool de connexion pour mon application et à chaque
fois que je tombe sur de l'info, sur Internet ou sur des livres,
j'apprends que c'est facile, mais je n'y arrive toujours pas.

tou d'abord est il possible d'avoir un peu plus d'infos sur le contexte

de ton appli (standalone ? servlet hebergee par quel servlet engine ?)
J'ai pu voir qu'il existe une façon de faire qui consiste à faire une
liaison et une recherche d'objets grâce à JNDI (mon livre est O'Reilly
"JDBC & JAVA"). Voici l'exemple démontré lors de la liaison d'objet :

01 Properties props = new Properties();
02 props.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.fscontext.RefFSContextFactory");
03 Contexts ctx = new initialContext(props);
04 DataSource ds = new com.imaginary.sql.msql.MsqlDataSource();
05 ds.setServerName("carthage.imaginary.com");
06 ds.setDatabaseName("jnindex");
07 ctx.bind("/temp/jdbc/jnindex", ds);
08 ctx.close();
//Recherche d'objets
09 DataSource ds = (DataSource) ctx.lookup("temp/jdbc/jnindex");

1) à la ligne 02, mon système ignore cette classe
"com.sun.jndi.fscontext.RefFSContextFactory". J'ai bien com.sun.jndi
mais rien de plus. Que dois-je télécharger??
ce code doit etre fait pour etre exceute dans le serveur de reference

fourni par sun ...
2) à la ligne 04, j'utilise un driver Microsoft pour MsSQLServer. Sa
méthode qui ressemble le plus à celle-ci est la suivante :
new com.microsoft.jdbcx.sqlserver.SQLServerDataSource(); Je ne crois
pas que c'est de celle-là qu'il s'agit sur mon livre.
3) Mon objet ds est de type javax.sql.DataSource et cette classe ne
connaît pas de méthode setServerName() ou setDatabaseName(), dans quel
espace de nom la classe DataSource se trouve-t-elle???
t'as fait du C++ ? pour l'espace de noms.. :)

en fait si tu utilises un serveur JNDI , c'est là que tu dois faire ta
config (typiquemen tau sein de tomcat tu peux declarer une daatsource
vaec tous les parametres dans un tag XML), apres l'interet de JNDI est
bien de chercher un objet (quelqu'ilsoit)...
donc tu n'as pas besoin de ces accesseurs (setServerName etc..)
4) A la ligne 07, lorsqu'on utilise la méthode .bind ou .lookup, les
exemples donnent des choses du genre "temp/jdbc/jnindex" comme
paramètres. Je ne comprends pas vraiment ce que cela signifie. Est-ce
un chemin vers des répertoires? Peut-on arbitrairement les
appeler"Casimir/Julius/machin" ou quelque chose dans le syle?

non JNDI est une couche d'abstraction d'un naming service qui peut etre

CORBA/annauire LDAP, NIS ou autre....
c'est en gros un chemin dans l'arbre de stockage des objets (qui n'est
pas forcement un arbre :) )
Une autres solution consiste peut-être à utiliser les interfaces de
javax.sql mais il me faudrait là aussi de bons exemples sur lesquels
m'appuyer.

Quelqu'un peut-il m'aider ???

on va essayer..

tiens nous au courant :)
Merci d'avance, Cyril.

P.-S. Je précise que je suis là dessus depuis une semaine, alors les
remarques me conseillant d'aller me renseigner avant de poster une
question risquent de me laisser un peu amer...
pas de RTFM ici :)


--
Auteur cahier du programmeur Java tome 2 - Eyrolles 10/2003
http://www.editions-eyrolles.com/php.informatique/index.php3?xdÑ2eccd83077cb3683315026cd3b7586