我正在尝试配置Grails 1.3.5应用程序以使用JNDI内置到Grails中的默认tomcat实例。该应用程序不使用GORM。我想自己连接到数据源。我正在为我们用于其他应用的模型层使用库。
resources.xml中
和我的bean标题一样:
<import resource="data.xml" />
<import resource="service.xml" />
在 data.xml 中我有:
<bean id="subjectJdbcDao"
class="uk.co.xxx.dao.subjects.SubjectJdbcDao">
<property name="dataSource" ref="jobDataSource"/>
</bean>
在 resources.groovy 我有:
def jobDataSource = new org.springframework.jdbc.datasource.DriverManagerDataSource('oracle.jdbc.driver.OracleDriver','jdbc:oracle:thin:@berlin:1521:casdev','cso','job')
grails.naming.entries = ['jdbc/job':jobDataSource]
我已经尝试了一切,但似乎无法获取data.xml文件来查找jndi数据源。我一直收到这个错误:
2010-11-22 17:09:38,855 ERROR [context.GrailsContextLoader] Error executing bootstraps: Error
creating bean with name 'SubjectJdbcDao' defined in URL [file:grails-app/conf/spring/data.xml]:
Cannot resolve reference to bean 'jobDataSource' while setting bean property 'dataSource'; nested
exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named
'jobDataSource' is defined
org.springframework.beans.factory.BeanCreationException: Error creating bean with name
'SubjectJdbcDao' defined in URL [file:grails-app/conf/spring/data.xml]: Cannot resolve reference to
bean 'jobDataSource' while setting bean property 'dataSource'; nested exception is
org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'jobDataSource' is
defined
at org.grails.tomcat.TomcatServer.start(TomcatServer.groovy:212)
有谁知道我应该把我的数据源定义放在哪里以便它们被拿起来?
答案 0 :(得分:2)
您的数据源应该是org.springframework.jdbc.datasource.lookup.JndiDataSourceLookup的一个实例。
如果运行嵌入grails的tomcat,则需要通过在Config.groovy中添加以下条目来模拟JNDI数据源:
grails.naming.entries = ['jdbc/jobDataSource': [
type: "javax.sql.DataSource", //required
auth: "Container", // optional
description: "Data source for ...",
url: "jdbc:oracle:thin:@berlin:1521:casdev",
username: "cso",
password: "job",
driverClassName: "oracle.jdbc.driver.OracleDriver",
maxActive: "8", //and so on
maxIdle: "4"
]
]
如果您想将您的应用程序作为战争运行并且需要由tomcat部署和管理的实际JNDI数据源,则需要为您的应用程序创建一个tomcat上下文:
如果您的应用程序是jobapp.war,则必须将jobapp.xml放在TOMCAT_HOME / conf / Catalina / localhost / jobapp.xml下
此jobapp.xml应包含以下内容:
<Context path="/jobapp">
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<Resource name="jdbc/jobDataSource"
auth="Container" type="javax.sql.DataSource"
username="cso"
password="job"
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@berlin:1521:casdev""
defaultAutoCommit="false"
<!--
... other parameters
!-->
/>
我相信这应该可以解决问题 (如果您将其作为战争运行,请确保您的驱动程序可用于您的tomcat安装)
此致
VincentGiguère