我无法让我的 JNDI 数据源运行。
按照官方 grails 文档,我在 Config.groovy 中设置了一个数据源:
grails.naming.entries = [
"mydatasource": [
type: "javax.sql.DataSource",
auth: "Container",
description: "Development Datasource",
url: "jdbc:oracle:oci:@mydb",
username: "user",
password: "pass",
maxActive: "8",
maxIdle: "4"
]
]
所以,我的 DataSource.groovy 看起来像:
pooled = false
jndiName = "mydatasource"
我为“mydatasource”尝试了几种不同的符号,如“jdbc/mydatasource”或“java:comp/env/jdbc/mydatasource”。
对于每个配置,我都会收到:“javax.naming.NameNotFoundException: Name ... is not bound in this Context”。
此外,当我在我的 tomcat 6 的 server.xml 中设置全局资源时,部署的 grails-war 找不到 JNDI 资源。
有什么想法可以让这些东西正常工作吗?
谢谢
编辑:
它工作正常!
Tomcat(在我的例子中是版本 6)自动将前缀“java:comp/env”添加到您的数据源 jndi-name。
grails中的tomcat插件也是如此。
Grails Config.groovy(在我的开发环境中):
grails.naming.entries = [
"jdbc/mydb": [
type: "javax.sql.DataSource",
auth: "Container",
description: "Development Datasource",
driverClassName: "oracle.jdbc.driver.OracleDriver",
url: "jdbc:oracle:oci:@mydb",
username: "user",
password: "pass",
maxActive: "8",
maxIdle: "4"
]
]
在 context.xml 中(在我的生产环境中):
<Resource name="jdbc/mydb" auth="Container"
type="javax.sql.DataSource"
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:oci:@mydb"
username="user" password="pass" maxActive="50" maxIdle="10"
maxWait="5000"/>
在 DataSource.groovy
pooled = false
jndiName = "java:comp/env/jdbc/mydb"
编辑:
如果您将数据源用作全局资源,那将是一件奇怪的事情。
适合我的配置:
在 server.xml 中:
<Resource name="java:comp/env/jdbc/mydb" auth="Container"
type="javax.sql.DataSource"
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:oci:@mydb"
username="user" password="pass" maxActive="50" maxIdle="10"
maxWait="5000"/>
在 context.xml 中
<ResourceLink name="jdbc/mydb"
global="java:comp/env/jdbc/mydb"
type="javax.sql.DataSource" />
在 DataSource.groovy 中:
pooled = false
jndiName = "java:comp/env/jdbc/mydb"
请您参考如下方法:
JNDI 前缀是 java:comp/env/对于 Tomcat ,所以在你的情况下
jndiName = "java:comp/env/mydatasource"
在 DataSource.groovy 中。
供引用: Grails Docs .
编辑:您的 Config.groovy 也缺少
driverClassName属性(property)。我
think它是
driverClassName: "oracle.jdbc.driver.OracleDriver",




