我无法让我的JNDI数据源运行。 随后官方Grails的文档我成立了一个Config.groovy文件datasouce:JNDI数据源到oracle和grails 1.3
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:名称...未在此上下文中绑定”。
另外,当我在tomcat 6的server.xml中设置全局资源时,部署的grails-war无法找到JNDI资源。
任何想法得到这个东西的工作?
THX
编辑:
它工作正常! 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通用(以便它可以在不修改对Tomcat或其他容器中运行)? – dbrin 2012-11-16 19:14:41