为什么Derby不使用我的WAS数据源中的属性'currentShema'?

时间:2013-09-26 15:15:34

标签: schema datasource derby

我想知道为什么derby没有考虑在给定数据源上定义的属性'currentSchema'(当前示例为WAS)?

我的问题与Nastya在这篇文章中的问题完全相同:Omit schema in the DERBY Query 但他/她的最后评论没有答案。

所以,我有一个应用程序在不同的数据源上工作(相同的数据库,但每个数据源一个模式)。 如果我告诉他使用这个数据源,我认为Derby将使用在数据源上定义的属性'currentSchema',但是我的所有命名查询都在模式'DEV'(数据库用户名)上执行,而不是在我的datasource属性中定义的模式'currentSchema'。我知道当查询没有提供模式时,如果之前没有执行SET CURRENT SCHEMA语句,那就是derby默认行为,但是...

  

是否有任何现有的解决方案或即将到来的改进Derby来解决这个用例?   (我不认为这是一个问题,因为Derby被设计为使用我认为的每个用户的模式)

提前感谢任何建议。

PS :要了解我为什么需要这个:我编写了脚本来自动将derby数据源配置到开发人员的工作站(本地websphere)中,以便他们可以将应用程序部署/运行到本地数据库而不是一个常见的DB2开发者。但我会避免在应用程序代码中的每个请求之前执行SET CURRENT SCHEMA语句来解决此问题...(性能对其他真实环境的影响) 当然,我无法将本地数据库更改为使用除Derby之外的其他内容:)

1 个答案:

答案 0 :(得分:0)

我找到了一个特定于我的用例的解决方案,因为修复已经完成了WebSphere配置。

解决方案:配置数据源以自动执行SQL查询以验证从此数据源汇集的新连接。 SQL查询是

SET CURRENT SCHEMA MY_SCHEMA

其中' MY_SCHEMA'特定于每个数据源。

这当然可以通过更新来配置wsadmin脚本:

  • J2EEResourceProperty' preTestSQLString'在数据源上,使用value = SQL查询
  • ' testConnections'具有值' true'
  • 的数据源池的属性

如果没有特定的服务器环境(如WebSphere)在一个新的连接上自动执行SQL查询,我担心这是不可能的,除非在代码中使用EntityManager生成器执行此操作。但这意味着您必须编写特定于您的环境的代码,这不是......很好。