Le jeudi 19 janvier 2006 à 14:52 +0100, Martin Blaizot a écrit :

Bonjour,

> Il semble donc que j'essaie d'ouvrir une connexion avant que la
> précédente ne soit fermée; existe-t-il un moyen de tester l'état de ma
> connection afin de remplacer mon wait par quelque qui voudrait dire :
> "wait while omaConnexion is not closed"
>  

Au lieu de te déconnecter de la base chaque fois, tu pourrais instancier
le pooling des connexions, ou passer par le RowSet existant.
Traduction de l'API (ma cuvée) :


Regroupement des Connexions
Dans une implémentation de base, il existe une relation de 1:1 entre
l'objet com.sun.star.sdb.Connection  utilisé par l'application cliente
et la connexion physique à la base de données. Lorsque l'objet
Connection est fermé la connexion physique est abandonnée, et ainsi la
charge mémoire de la réouverture, réinitialisation, et fermeture pour la
connexion physique se présente pour chaque nouvelle session cliente. Un
pool ou regroupement de connexions résoud de problème en maintenant dans
un cache une liste de connexions physiques de bdd qui peuvent être
réutiliséesà travers plusieurs sessions clientes. Le regroupement de
connexions améliore la performance et la mise à l'échelle, en
particulier dans un environnement à trois étages où de clients multiples
peuvent partager un plus petit nombre de connexions physiques aux bdd.
Dans l'API OpenOffice.org, le regroupement de connexions fait partie
d'un service spécial appelé ConnectionPool. Ce service gère les
connexions physiques nouvellement créées et réutilise celles qui
existent déjà même lorsqu'elles ne sont plus en utilisation actuelle. 

L'algorithme utilisé pour gérer le regroupement de connexions est
spécifique à une implémentation donnée et donc varie entre les
différents serveurs d'applications. Le serveur d'applications fournit
ses clients avec une implémentation de l'interface
com.sun.star.sdbc.XPooledConnection , rendant le regroupement
transparent au client. Il en résulte que le client ne subit pas les
impacts négatifs sur la performance et la mise à l'échelle. Lorsqu'une
application a terminé son utilisation d'une connexion, elle ferme la
connexion logique par le biais de close() au niveau de l'interface de
connexion com.sun.star.sdbc.XConnection. Cette opération ferme la
connexion logique, mais garde ouverte la connexion physique. La
connexion physique est ainsi remise dans le regroupement de manière à
pouvoir être réutilisée. Le regroupement de connexions est complètement
transparent pour le client: un client obtient une connexion regroupée
depuis le service  com.sun.star.sdbc.ConnectionPool après appel de
getConnectionWithInfo() au niveau de l'interface
com.sun.star.sdbc.XDriverManager et l'utilise exactement de la même
manière qu'une connexion non-regroupée.

Les étapes suivantes souligne ce qui se passe lorsqu'un client SDBC
demande une connexion à l'objet  ConnectionPool :

     1. Le client obtient une instance de
        com.sun.star.sdbc.ConnectionPool depuis le gestionnaire de
        service global et fait appel aux mêmes méthodes à l'objet
        ConnectionPool que pour le gestionnaire de pilotes
        DriverManager. 
        
     2. Le serveur d'applications qui fournit l'implémentation
        ConnectionPool vérifie son regroupement de connexions pour
        l'existence d'un objet  PooledConnection approprié, c'est-à-dire
        une connexion physque à une bdd, et qui est disponible. La
        détermination de la disponibilité d'un tel objet
        PooledConnection implique de comparer les informations de
        l'authentification utilisateur ou type d'application, ainsi que
        d'autres critères spécifiques à l'implémentation choisie. La
        méthode de recherche et d'autres méthodes associées à la gestion
        du regroupement de connexion sont spécifiques au serveur
        d'applications.
        
     3. S'il n'existe aucun objet  PooledConnection approprié
        disponible, le serveur d'applications génère une nouvelle
        connexion physique et renvoie un objet PooledConnection. Le
        ConnectionPool n'est pas dépendant d'un quelconque pilote, mais
        est implémenté par un service appelé
        com.sun.star.sdbc.ConnectionPool.
        
     4. Indépendamment du fait que le PooledConnection ait été ou non
        récupéré du regroupement ou généré, le serveur d'application
        effectue un enregistrement interne afin d'indiquer que la
        connexion est désormais en utilisation.
        
     5. Le serveur d'application appelle la méthode
        PooledConnection.getConnection() afin d'obtenir un objet de
        Connection logique. Cet objet de Connection logique est un
        pointeur vers un objet  PooledConnection physique. Ce pointeur
        est renvoyé par la méthode getConnectionWithInfo() du
        XDriverManager lorsque le regroupement des connexions est
        activé.
        
     6. L'objet de Connection logique est renvoyé au client SDBC qui
        utilise le même API Connection que dans le cas où le
        regroupement n'est pas utilisé. A noter toutefois que la
        connexion physique sous-jacente ne peut être réutilisée avant
        que le client n'appelle la méthode close() de  XConnection. 
        

Dans l'API de OpenOffice.org, le regroupement de connexions est activé
par défaut et peut être contrôlé à travers le menu  Outils – Options –
OpenOffice.org Database . Si une connexion d'une source de données
définie dans l'API de OpenOffice.org API est renvoyée, le paramètre
activé par cette option (le regroupement des connexions) s'appliquera
également à votre connexion. Afin de profiter du regroupement
indépendamment des sources de données définies dans l'API
OpenOffice.org, il faut plutôt passer par
com.sun.star.sdbc.ConnectionPool au lieu du DriverManager.


Connexions superposées
Parfois, il se peut qu'il existe déjà un  row set de sources de données
connecté et que vous souhaitez réutiliser sa connexion, par exemple,
dans le cas où un utilisateur a ouvert un formulaire de bdd. Afin
d'accéder à la même base de données et le même row set que le
formulaire, on peut utiliser la connexion qui est déjà utilisée par le
formulaire, et ainsi éviter d'ouvrir une deuxième connexion. Tout ceci
est possible à travers  com.sun.star.sdb.RowSet qui dispose d'une
propriété ActiveConnection qui renvoie la connexion.


Espérant avoir aidé,

Alex



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Répondre à