使用grails 1.3将JNDI数据源转换为oracle [英] JNDI datasource to oracle with grails 1.3
问题描述
我无法运行我的JNDI数据源。
在官方的grails文档中,我在Config.groovy中设置了一个datasouce:
grails.naming.entries = [
,用于 Tomcat ,所以在你的情况下它是
mydatasource:[
类型:javax.sql.DataSource,
auth:Container,
描述:Development Datasource,
url: jdbc:oracle:oci:@mydb,
用户名:user,
密码:pass,
maxActive:8,
maxIdle:4
$ b因此,我的DataSource.groovy如下所示: p>
pooled = false
jndiName =mydatasource
我尝试了mydatasource几种不同的符号,例如jdbc / mydatasource或java:comp / env / jdbc / mydatasource。
每个配置都会收到:javax.naming.NameNotFoundException:Name ...未在此上下文中绑定。
当我在tomcat 6的server.xml中设置全局资源时,部署的grails-war无法找到JNDI资源。
这种东西工作?
Thx
编辑: p>
它工作正常!
Tomcat(在我的例子中为版本6)自动添加前缀java:comp / env到您的数据源jndi-name。
Grails中的tomcat插件也是如此。
Grails Config.groovy(在我的开发环境中):
grails.naming.entries = [
jdbc / mydb:[
type:javax.sql.DataSource,
auth:Container,
描述:Development Datasource,
driverClassName:oracle.jdbc.driver.OracleDriver,
url:jdbc:oracle:oci:@mydb,
用户名:user,
密码:pass,
maxActive:8,
maxIdle:4
]
]
在context.xml中(对于生产环境):
< Resource name =jdbc / mydbauth =Container
type =javax.sql.DataSource
driverClassName = oracle.jdbc.driver.OracleDriver
url =jdbc:oracle:oci:@mydb
username =userpassword =passmaxActive =50maxIdle =10
maxWait =5000/>
在DataSource.groovy中
pooled = false
jndiName =java:comp / env / jdbc / mydb
编辑:
如果您使用数据源作为全局资源,这是一件奇怪的事情。
这个配置适用于我:
在server.xml中:
< Resource name =java:comp / env / jdbc / mydbauth =Container
type =javax.sql.DataSource
driverClassName =oracle.jdbc。 driver.OracleDriver
url =jdbc:oracle:oci:@mydb
username =userpassword =passmaxActive =50maxIdle =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
解决方案
java:comp / env /
jndiName =java:comp / env / mydatasource
存入 DataSource.groovy 。
供参考: Grails文档。
编辑:您的 Config.groovy 也缺少
driverClassName
属性。我认为它是
driverClassName:oracle.jdbc.driver.OracleDriver,
I can't get my JNDI datasource running. Followed the official grails doc I set up a datasouce in 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" ] ]
So, my DataSource.groovy looks like:
pooled = false jndiName = "mydatasource"
I tried for "mydatasource" several different notations like "jdbc/mydatasource" or "java:comp/env/jdbc/mydatasource".
With every configuration I receive this: "javax.naming.NameNotFoundException: Name ... is not bound in this Context".
Also when I set up a global resource in the server.xml of my tomcat 6, the deployed grails-war cannot find the JNDI resource.
Any ideas to get this stuff working?
Thx
Edit:
It works fine! Tomcat (version 6 in my case) adds automatically the prefix "java:comp/env" to your datasource jndi-name. So does the tomcat plugin in grails.
Grails Config.groovy (in my case for development environment):
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" ] ]
In context.xml (in my case for production environment):
<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"/>
In DataSource.groovy
pooled = false jndiName = "java:comp/env/jdbc/mydb"
Edit:
A weird thing if you use the datasource as a global resource. The configuration which works for me:
In 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"/>
In context.xml
<ResourceLink name="jdbc/mydb" global="java:comp/env/jdbc/mydb" type="javax.sql.DataSource" />
In DataSource.groovy:
pooled = false jndiName = "java:comp/env/jdbc/mydb"
解决方案The JNDI prefix is
java:comp/env/
for Tomcat, so in your case it'sjndiName = "java:comp/env/mydatasource"
in DataSource.groovy.
For the reference: Grails Docs.
Edit: Your Config.groovy is also missing the
driverClassName
property. I think it isdriverClassName: "oracle.jdbc.driver.OracleDriver",
这篇关于使用grails 1.3将JNDI数据源转换为oracle的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!