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

如何在Wildfly/JBoss中禁用连接池?

  •  0
  • MikeHoss  · 技术社区  · 10 年前

    我们有一个应用程序,它使用数据库的身份验证,然后将其用于连接。也就是说,当他们登录到应用程序时,应用程序会尝试使用该用户名/密码与数据库建立连接,并将该连接用于会话。因此,如果Fred使用用户名“Fred”登录应用程序,那么数据库中应该有一个名为“Fred“的用户,Fred在使用应用程序时将使用该连接。

    我们已经有了一个数据源来处理这个问题,如果我们关闭数据库连接池,它可以在Glassfish中找到。现在我们想迁移到Wildfly,但似乎无法实现。

    当应用程序启动时,它使用Wildfly中数据库描述符中的用户名/密码运行“初始化”查询。运行正确。当我们尝试登录时,连接属于初始化查询中的用户。

    我已经尝试将最小池大小和最大池大小设置为1,这会导致我们的JPA实现抛出“无法获得托管连接”异常。

    以下配置可启动应用程序,但无法登录,因为登录用户与连接上的用户名不匹配:

        <pool>
         <min-pool-size>1</min-pool-size>
         <max-pool-size>2</max-pool-size>
         <use-strict-min>true</use-strict-min>
         <allow-multiple-users>true</allow-multiple-users>
         <prefill>false</prefill>
      </pool>
    

    连接池似乎把我们搞砸了。有人知道如何关闭池吗?或者有人对如何解决这个问题有什么想法吗?

    2 回复  |  直到 10 年前
        1
  •  2
  •   David M    10 年前

    我永远不会有一个应用程序被设计为使用他们登录应用程序的同一用户访问数据库。由于种种原因,这似乎是个坏主意,也是一场数据库管理噩梦。

    池的存在是有原因的,因此应用程序可以重用连接,并且您不必为每个用户或会话打开和关闭连接。如果您有500个用户,那么您将有500个连接,这些连接大部分时间处于空闲状态,或者可能会过时等。如果您需要记录谁正在访问数据库,您只需将其记录下来,或者让应用程序将信息写入表中。

        2
  •  0
  •   MikeHoss    10 年前

    我发现我做错了什么。原始数据源代码从未调用 getConnection(username,password) 。一旦我改变了这一点,一切似乎都很顺利。