Java EE数据源(JBoss 5.1)上连接的上下文特定用户名

Java EE数据源(JBoss 5.1)上连接的上下文特定用户名,java,jboss,datasource,Java,Jboss,Datasource,我们有一个需要访问另一个团队拥有的数据库的应用程序。 该数据库在数据库中具有安全性(触发器、表权限等),因此我们需要使用连接到EJB的相同用户名/密码建立到数据库的连接 我们正在运行JBoss5.1。标准JavaEE解决方案是首选,但JBoss特定的解决方案也可以 目前我们的解决方案是 在JBoss中创建一个没有用户id密码的数据源 要求客户端将用户名/密码传递到EJB中(EJB是一个有状态会话bean(SFSB),并记住用户名/密码) 会话bean使用DataSource.getConnec

我们有一个需要访问另一个团队拥有的数据库的应用程序。 该数据库在数据库中具有安全性(触发器、表权限等),因此我们需要使用连接到EJB的相同用户名/密码建立到数据库的连接

我们正在运行JBoss5.1。标准JavaEE解决方案是首选,但JBoss特定的解决方案也可以

目前我们的解决方案是
  • 在JBoss中创建一个没有用户id密码的数据源
  • 要求客户端将用户名/密码传递到EJB中(EJB是一个有状态会话bean(SFSB),并记住用户名/密码)
  • 会话bean使用
    DataSource.getConnection(String,String)
  • 连接是在每个请求开始时从数据源“创建”的(数据源实现可能重用现有连接)

我们面临的主要问题是连接池。 JBoss连接池不会为每个用户名管理单独的池-它们都被放入一个大池中,从池中检索对象后会检查用户名(在
InternalManagedConnectionPool
内部)。 如果用户名不匹配,则连接将从池中删除并销毁。 这意味着,一旦我们有2个用户,就有50%的可能性,在下次访问池时,放入池中的任何连接都将被破坏。随着用户数量的增加,这种可能性会变得更大

我们不能简单地在SFSB中创建一个连接并保留它,因为JBoss对我们来说太聪明了,它检测到我们打开了一个连接并自动将其返回到池中,因此对SFSB的下一个请求将因“未关联”连接而失败

如果我们能简单地让JBoss以“当前登录的用户”的身份创建一个连接也会很好,但是我们的解决方案是可以接受的

我的谷歌搜索没有找到做这类事情的任何推荐模式。每个人似乎都认为您希望您的数据源对所有连接使用单个用户(如果可能,这很好,但在这种情况下我不能这样做)

我能想出的唯一解决办法是
  • 不要使用容器提供的数据源。将JDBCURL放入某个配置值中,然后自己创建连接(可能在spring的帮助下)
  • 将不同的数据源实现(可能是自定义的)绑定到JNDI中

    有谁有更好的解决办法吗?或者这方面的推荐做法


    (数据库是Sybase ASE 15,但我怀疑这对解决方案有什么影响)

    对文档的进一步阅读使我找到了似乎是解决方案的地方。 添加
    在我的数据源文件中,似乎已经修复了连接池的问题


    我不确定我第一次怎么会错过这一点。

    对文档的进一步阅读使我找到了似乎是解决方案。 添加
    在我的数据源文件中,似乎已经修复了连接池的问题

    我不知道第一次怎么会错过