我的问题与此问题非常相关:Multiple dynamic data sources for a servlet context。但是我还没有找到合适的解决方案,并想再次提出。
我有一个小的JSF应用程序通过JDBC与MS SQL Server通信。 Tomcat用作Web容器。应用程序从单个数据库检索并存储其数据。提供登录屏幕。如果凭据与存储在数据库中的凭证匹配,则授予访问权限,我可以使用该应用程序。
现在我想添加更多数据库并提供一个登录屏幕,不仅要求输入用户名和密码,还要提供数据库名称。使用不同的数据库是因为我希望有一些用于测试和开发。每个数据库的备份计划也不相同。
目前,我使用JNDI Resources在我的代码中查找数据库。然而,这迫使我编辑context.xml和web.xml并重新启动tomcat。我不想那样做。重新启动迫使我跑来跑去告诉大家:“嘿,我正在重新启动,你介意失去所有的联系吗?”
这是一种更有活力的方式吗?
答案 0 :(得分:0)
创建一个数据源数组,让用户选择要使用的数组中的索引。
答案 1 :(得分:0)
我不知道答案但是如果你从JNI调用OSQL -L
,你可以获得该区域中可用的SQL数据库实例的列表。然后,您可以连接并获取其中的数据库列表。
所以:
答案 2 :(得分:0)
出于您的目的,您应该有三个独立的应用程序服务器实例(在三台独立的计算机上,或在同一台机器上侦听不同的端口,或不同的主机头等)。开发服务器实例应始终查找开发数据库,登台服务器查找登台数据库等,并应设置JNDI以反映这一点。这就是JNDI的用途。
也就是说,如果必须只使用一个应用程序服务器进行设置,您可能需要考虑编写一个自定义authentication realm来执行此操作。您可以执行确定自己使用哪个数据源的实际工作,也可以查看Hibernate Shards之类的内容。
答案 3 :(得分:0)
您可以使用select语句在SQL Server中获取数据库,并最终丢弃其中一些与您的应用程序无关的数据库。
ResultSet rs = stmt.executeQuery("show databases");