Tomcat 如何在grails中指定可移植jndi数据源查找

Tomcat 如何在grails中指定可移植jndi数据源查找,tomcat,grails,weblogic,datasource,jndi,Tomcat,Grails,Weblogic,Datasource,Jndi,我知道grails中的JNDI查找与 datasource { jndiName = "java:comp/env/myDataSource" } 这在Tomcat上非常有效 在其他容器(WebLogic、JBOSS等)上,相同内容的jndiName将只是myDataSource。问题是如何将其配置为通用的和可移植的,以便代码不需要根据部署目标进行更改?您可以关闭一个系统属性,您知道该属性将在Tomcat中运行时设置,而不在其他任何地方设置,例如 datasource { jndiNa

我知道grails中的JNDI查找与

datasource {
  jndiName = "java:comp/env/myDataSource"
}
这在Tomcat上非常有效


在其他容器(WebLogic、JBOSS等)上,相同内容的jndiName将只是
myDataSource
。问题是如何将其配置为通用的和可移植的,以便代码不需要根据部署目标进行更改?

您可以关闭一个系统属性,您知道该属性将在Tomcat中运行时设置,而不在其他任何地方设置,例如

datasource {
  jndiName = "${System.getProperty('catalina.home') ? 'java:comp/env/' : ''}myDataSource"
}

好主意!但是有没有一种简单的方法呢?我用过一段时间,它很好地区分了Tomcat服务器和Weblogic服务器。但是,我最近尝试将我的Grails应用程序放在Glassfish服务器上,但它不起作用,因为。。。我相信Glassfish也使用Catalina,所以表达式确实返回了一个值。但是Glassfish需要命名为“myDatasource”,而Tomcat需要整个“jav:comp/env/”。。。不确定是否是“最佳方式”,但我在Glassfish、Tomcat和Weblogic上进行了测试,它确实适用于以下情况:jndiName=“${(System.getProperty('catalina.home')&&&&(System.getProperty('java.class.path')).trim().toLowerCase().indexOf('Tomcat')>0”;'java:comp/env/':'}jdbc/myGrails”