Попытка заставить Grails 1.3.5 работать с соединениями JNDI, не использующими GORM - PullRequest
0 голосов
/ 22 ноября 2010

Я пытаюсь настроить приложение Grails 1.3.5 для работы с экземпляром tomcat по умолчанию, встроенным в Grails с использованием JNDI. Приложение не использует GORM. Я хочу подключиться к источникам данных самостоятельно. Я использую библиотеку для слоя модели, который мы используем для других приложений.

resources.xml

Как и заголовки бинов, которые у меня есть:

<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)

Кто-нибудь знает, где я должен поместить свои определения источника данных, чтобы они были подобраны?

1 Ответ

2 голосов
/ 02 декабря 2010

Ваш источник данных должен быть экземпляром org.springframework.jdbc.datasource.lookup.JndiDataSourceLookup.

Если вы запустите tomcat, встроенный в grails, вам потребуется смоделировать ваш источник данных JNDI, добавив следующеезапись в Config.groovy:

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"
  ]
]

Если вы хотите запустить свое приложение как войну и вам нужен фактический источник данных JNDI, развернутый и управляемый tomcat, вам нужно создать контекст 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, если вы запускаете ее как войну)

С уважением,

Винсент Жигер

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...