代码之家  ›  专栏  ›  技术社区  ›  raupach

动态访问多个数据库?

  •  0
  • raupach  · 技术社区  · 17 年前

    我的问题与这一点非常相关: Multiple dynamic data sources for a servlet context . 不过,我还没有找到合适的解决方案,我想再问一次。

    我有一个小的JSF应用程序,它通过JDBC与MS SQL服务器通信。Tomcat用作Web容器。应用程序从单个数据库中检索并存储其数据。提供登录屏幕。如果凭证与数据库中存储的凭证匹配,那么就可以授予访问权限,我可以使用该应用程序。

    现在我想添加更多的数据库,并提供一个登录屏幕,它不仅请求用户名和密码,还请求数据库名称。使用不同的数据库是因为我想要一些用于测试和开发。每个数据库的备份计划也不相同。

    目前,我使用JNDI资源在代码中查找数据库。但是,这迫使我编辑context.xml和web.xml并重新启动Tomcat。我不想那样做。重启迫使我到处跑,告诉大家:嘿,我正在重启,你介意失去所有的连接吗?__

    这样做是不是更有活力?

    4 回复  |  直到 17 年前
        1
  •  0
  •   Jack Leow    17 年前

    出于您的目的,您应该有三个单独的应用程序服务器实例(在三台单独的机器上,或者在同一台机器上,侦听不同的端口,或者不同的主机头等)。开发服务器实例应该始终查找开发数据库,临时服务器查找临时数据库等,并且应该设置JNDI来反映这一点。这就是JNDI的目的。

    也就是说,如果你 必须 只使用一个应用服务器进行设置,您可能需要编写一个自定义的 authentication realm 就是这样。您可以做实际的工作来确定要使用的数据源,或者查找类似的内容 Hibernate Shards .

        2
  •  0
  •   Thorbjørn Ravn Andersen    17 年前

    创建一个数据源数组,并让用户选择要在此数组中使用的索引。

        3
  •  0
  •   djangofan    17 年前

    我不知道答案,但如果你打电话 OSQL -L 从JNI可以获得该区域中可用SQL数据库实例的列表。然后您可以连接并获取其中的数据库列表。

    所以:

    1. 用户输入用户名和密码
    2. app运行osql-l以获取实例列表并提供选择列表
    3. 用户选择实例,JDBC使用步骤1中的凭证从实例中获取数据库列表
    4. JDBC使用选定的数据库进行连接。
        4
  •  0
  •   John Doe    17 年前

    您可以使用select语句获取SQL Server中的数据库,并最终丢弃其中一些与您的应用程序无关的数据库。

    ResultSet rs = stmt.executeQuery("show databases");