我无法让我的 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", 


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!