我们有一个应用程序需要访问由不同团队拥有的数据库。 该数据库在数据库中具有安全性(触发器,表权限等),因此我们需要使用连接到EJB的相同用户名/密码建立与数据库的连接。
我们正在运行JBoss 5.1。标准的Java EE解决方案是首选,但JBoss会有特定的答案。
目前我们的解决方案是
DataSource.getConnection(String, String)
我们遇到的主要问题是连接池。
JBoss连接池不为每个用户名管理单独的池 - 它们都被抛入一个大池中,并且在从池中检索对象(InternalManagedConnectionPool
内)后检查用户名。
如果用户名不匹配,则从池中删除连接&销毁。
这意味着只要我们有2个用户,就有50%的可能性,当下次访问时,放入池中的任何连接都将被销毁。随着我们增加用户数量,这些可能性会变得更糟。
我们不能简单地在SFSB中创建一个连接并保留它,因为JBoss对我们来说太聪明了,它检测到我们已经打开了一个连接并自动将它返回到池中,所以下一个请求通过“无关联”连接,SFSB将失败。
如果我们能够简单地让JBoss创建一个连接作为“当前登录的用户”,那也很好,但我们的解决方案是可以忍受的。
我的谷歌搜索未能找到任何推荐的模式来做这种事情。每个人似乎都认为你希望你的数据源为所有连接使用单个用户(这在可能的情况下很好,但在这种情况下我不能这样做)
我能解决的唯一解决方案是
有没有人有更好的解决方案?或指向该领域的推荐做法?
(数据库是Sybase ASE 15,但我怀疑这对解决方案有什么影响)
答案 0 :(得分:1)
对文档的更多阅读使我看起来似乎是解决方案。
添加
<application-managed-security/>
进入我的数据源文件似乎已经修复了连接池的问题。
我不确定我第一次错过了这个。