使用grails 1.3将JNDI数据源转换为oracle [英] JNDI datasource to oracle with grails 1.3

查看:107
本文介绍了使用grails 1.3将JNDI数据源转换为oracle的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我无法运行我的JNDI数据源。
在官方的grails文档中,我在Config.groovy中设置了一个datasouce:

  grails.naming.entries = [ 
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 / ,用于 Tomcat ,所以在你的情况下它是

  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's

jndiName = "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 is

driverClassName: "oracle.jdbc.driver.OracleDriver",

这篇关于使用grails 1.3将JNDI数据源转换为oracle的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆