Question

Ma question est très liée à celui-ci: multiples sources de données dynamiques pour un contexte de servlet . Cependant, je ne l'ai pas trouvé tout de suite une solution appropriée et je voudrais demander à nouveau.

J'ai une petite application JSF qui parle à un serveur MS SQL via JDBC. Tomcat est utilisé comme conteneur Web. L'application récupère et stocke ses données à partir d'une seule base de données. Un écran de connexion est fourni. Si les informations d'identification correspondent à ceux stockés dans la base de données, l'accès est accordé et je peux jouer avec l'application.

Maintenant, je voudrais ajouter d'autres bases de données et de fournir un écran de connexion qui non seulement demande le nom d'utilisateur et mot de passe, mais le nom de la base de données ainsi. Différentes bases de données sont utilisées parce que je voudrais avoir un peu pour les tests et le développement. Les plans de sauvegarde sont pas non plus les mêmes pour chaque base de données.

Actuellement, j'utilise des ressources JNDI pour rechercher les bases de données dans mon code. Cependant, cela me force à modifier context.xml et web.xml et redémarrer tomcat. Je ne veux pas faire cela. Le redémarrage me force à courir autour d'un dire à tous: « Hé, je suis REBOOTING l'esprit vous perdre toutes vos connexions »

est la façon de faire un peu plus dynamique?

Était-ce utile?

La solution

Pour vos besoins, vous devriez vraiment avoir trois instances de serveur d'applications séparées (sur trois machines différentes, ou sur la même machine en écoutant les différents ports, ou différents en-têtes d'hôtes, etc.). L'instance de serveur de développement devrait toujours rechercher la base de données de développement, le serveur de mise en scène semble la base de données de mise en scène, etc., et JNDI doit être mis en place pour tenir compte. C'est ce que JNDI est pour.

Cela dit, si vous doit mettre les choses avec un seul serveur d'applications, vous aurez probablement besoin d'envisager d'écrire une coutume domaine d'authentification qui fait cela. Vous pouvez soit faire le travail de déterminer la source des données à utiliser vous-même, ou quelque chose comme regarder dans Hibernate Shards .

Autres conseils

Créer un tableau de sources de données et de laisser l'utilisateur de sélectionner l'index dans ce tableau que vous souhaitez utiliser.

Je ne sais pas la réponse, mais si vous appelez de JNI vous OSQL -L pouvez obtenir une liste des instances disponibles de base de données SQL dans la région. Ensuite, vous pouvez connecter et obtenir la liste des bases de données dans.

  1. utilisateur entre le nom d'utilisateur et mot de passe
  2. app va OSQL -L pour obtenir la liste des instances et fournit une liste de sélection
  3. utilisateur sélectionne par exemple, utilise des informations d'identification jdbc à l'étape 1 pour obtenir une liste des bases de données de l'instance
  4. jdbc utilise la base de données sélectionnée pour se connecter.

Vous pouvez obtenir les bases de données SQL Server en utilisant une instruction select et éventuellement éliminer certains d'entre eux qui ne sont pas pertinents pour vos applications.

ResultSet rs = stmt.executeQuery("show databases");
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top