Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jakarta ee 如何将用户映射到不同的数据源_Jakarta Ee_Jdbc_Jboss_Jndi - Fatal编程技术网

Jakarta ee 如何将用户映射到不同的数据源

Jakarta ee 如何将用户映射到不同的数据源,jakarta-ee,jdbc,jboss,jndi,Jakarta Ee,Jdbc,Jboss,Jndi,我在单个应用程序服务器(jboss4.2.3)中有两个数据源的JNDI设置 如何识别哪个用户请求命中来自哪个数据库连接?如何根据用户请求设置Db连接。我需要一次数据库连接的用户。 i、 我想在我的应用程序中使用动态数据源。我使用纯JDBC连接您正在构建一个多租户应用程序 所以您需要用户和数据源之间的另一个映射(例如在DB表中)。根据该映射选择数据源 用户应该根据您的应用程序进行身份验证,这样您就可以调用request.getRemoteUser()。使用该选项可在映射表中查找数据源名称

我在单个应用程序服务器(
jboss4.2.3
)中有两个数据源的JNDI设置

如何识别哪个用户请求命中来自哪个数据库连接?如何根据用户请求设置Db连接。我需要一次数据库连接的用户。
i、 我想在我的应用程序中使用动态数据源。我使用纯JDBC连接

您正在构建一个多租户应用程序

  • 所以您需要用户和数据源之间的另一个映射(例如在DB表中)。根据该映射选择数据源

  • 用户应该根据您的应用程序进行身份验证,这样您就可以调用
    request.getRemoteUser()
    。使用该选项可在映射表中查找数据源名称

  • 现在您有了数据源的名称。数据源绑定在JNDI中,每个数据源都有一个唯一的名称
在应用程序中,可以按数据源的名称查找数据源:

final DataSource ds = (DataSource) ic.lookup("java:/jdbc/x1");
final Connection conn = ds.getConnection();
try {
  // Do something with connection
} finally {
  conn.close();
}
因此,在您的例子中,有两个名称,如
java:/jdbc/x1
java:/jdbc/x2


您可以在定义数据源的同一位置定义JNDI名称。

请澄清,这里有两个或三个问题(将其简化为一个问题)。顺便问一下,哪个数据库?我有一个应用服务器(JBoss),在其中,我定义了两个数据源(都指向oracle DB),我的问题是,我们如何识别(应用服务器指向哪个DB应该使用)感谢铍,我想知道,在用户请求中是否有任何技术可以传递数据源名称(Java:/jdbc/x1或Java:/jdbc/x2)?是,示例中已经有:只需将字符串参数从请求传递到
lookup()
方法。技术上可能,但请检查您没有打开任何安全漏洞。以我的场景为例,用户A使用x1数据源,用户B使用x2数据源,每当用户A登录应用程序时,我的应用程序中需要x1数据源名称,我们不知道哪个用户一次可以访问应用程序..要么将用户名作为请求参数传递(再次:检查安全漏洞),要么让用户先进行身份验证;在这种情况下,您可以调用
request.getRemoteUser()
。实际上,我的数据库中有数千个用户。A公司的一些,B公司的一些,我的应用程序对两个客户都是一样的,但DB是不同的。所以我们只想使用DataSource techniq来处理一个应用服务器和两个DB DataSource。如果你有其他方法,请分享。