0

Je travaille actuellement sur un problème où j'ai une application Java 6 qui, au premier démarrage, crée un BasicDataSource qui, lors de sa création, stocke toutes les informations nécessaires pour créer des connexions à la base de données:Comment Java BasicDataSource crée-t-il de nouvelles connexions à une base de données lorsque le mot de passe de la base de données est modifié?

DS.setUserName(username); 
DS.setPassword(password); 
DS.setUrl(url); 
DS.setMinIdle(minIdle); 
. 
. 
. 

Il crée ensuite un pool de connexions à la base de données à l'aide des propriétés de l'ensemble. Le BasicDataSource est ensuite stocké dans un Map qui est ensuite retourné à la méthode d'appel à chaque fois qu'il est nécessaire comme ceci:

if (dataSources.contains(databaseDS)) { 
    return dataSources.get(databaseDS.getConnection()); 
} 

Je crois comprendre que la BasicDataSource « pool de connexion s a des connexions en direct à la base de données qui n » t nécessitent l'utilisation du mot de passe pour se connecter à la base de données mais cette connexion a déjà une session établie avec la base de données. Ces connexions seront renvoyées à la méthode appelante qui n'a pas besoin de s'authentifier de nouveau avec la base de données.

Toutefois, lorsque le mot de passe de la base de données est mis à jour et qu'une nouvelle connexion est nécessaire/générée, comment le BasicDataSource crée-t-il cette connexion? Est-ce qu'il essaie d'authentifier avec la base de données avec le mot de passe qui est stocké dans le BasicDataSource pour obtenir une nouvelle connexion?

Merci

+0

Vous avez stocké les informations d'identification de votre base de données quelque part et les avez transmises à BasicDataSource. Si les informations d'identification ont changé du côté du serveur de base de données, vous devez les modifier dans votre application cliente. Au minimum, vous devrez redémarrer votre application avec les nouvelles informations d'identification. –

+0

@RobertMoskal merci pour la réponse rapide. Cela signifie-t-il que BasicDataSource, lorsqu'il tente de générer une nouvelle connexion à la base de données, essaie d'envoyer l'ancien mot de passe et provoque une exception d'exécution, car la base de données renvoie un échec de connexion? – Mark

+0

J'ai modifié mon message original et ajouté quelques détails supplémentaires. J'ai oublié de mentionner précédemment que le mot de passe est stocké dans l'objet 'BasicDataSource' lui-même – Mark

Répondre

0

Donc à la fin, j'ai fini de décider sur la synchronisation de tirer des connexions de la piscine. Lorsque nous sommes à court de connexions et que le BasicDataSource doit s'authentifier à nouveau pour une nouvelle connexion, nous allons créer une nouvelle connexion à la base de données. Cependant, lorsque le mot de passe a changé, nous obtiendrons une erreur d'authentification à la base de données et je vais alors laisser tomber le BasicDataSource du Map de DataSource s. Après cela, je crée ensuite un nouveau BasicDataSource avec le nouveau mot de passe. La raison de la synchronisation (si cela n'a aucun sens, quelqu'un peut-il me donner un sens?) Est que l'échec de l'authentification à la base de données n'arrive qu'une seule fois et que nous n'essayons pas trop souvent de frapper la base de données le mauvais mot de passe. Les connexions précédentes deviennent périmées et finissent par être nettoyées, puis l'objet doit être récupéré.