2013-03-06 2 views
4

Я пытаюсь подключить приложение Grails к базе данных Firebird.Шаги по использованию базы данных Firebird в Grails

Я использую:

  • Grails 2.2.1
  • JDK 1.7
  • Firebird 2.5.2
  • Jaybird 2.2.2

До сих пор, это то, что я сделали:

  • Я загрузил Jaybird-2.2.2JDK_1.7.zip от http://www.firebirdsql.org/en/jdbc-driver/
  • Я распаковал этот файл и скопировал jaybird-2.2.2.jar в папку с папкой моего приложения.
  • В BuildConfig.groovy я добавил runtime "org.firebirdsql.jdbc:jaybird:2.2.2" в раздел зависимостей.
  • Я отредактировал DataSource.groovy, как описано ниже.

Секция DataSource:

dataSource { 
    pooled = false 
    driverClassName = "org.firebirdsql.jdbc.FBDriver" 
    dialect = "org.hibernate.dialect.FirebirdDialect" 
    username = "SYSDBA" 
    password = "masterkey" 
} 

Раздел Hibernate:

hibernate { 
    cache.use_second_level_cache = true 
    cache.use_query_cache = true 
    cache.provider_class = 'org.firebirdsql.pool.FBSimpleDataSource' 
} 

(Я также имел cache.region.factory_class = 'net.sf.ehcache.hibernate.EhCacheRegionFactory и cache.provider_class = 'com.opensymphony.oscache.hibernate.OSCacheProvider' в приведенном выше разделе, посвященном отдельных случаях, но ни один из каких-либо различий.)

При запуске приложения Grails запуск запускается с огромной ошибкой, которая сводится к минимуму на следующее сообщение:

java.lang.IllegalStateException: Could not load JDBC driver class [org.firebirdsql.jdbc.FBDriver] 

Я искал в Интернете далеко и широко, но я не могу найти пример рабочего Grails/Firebird конфигурации в любом месте. Существует исправление, плавающее вокруг, которое включает в себя копирование minij2ee.jar, но это для другого сообщения об ошибке. Кроме того, люди предложили опорожнить папку .grails - я пробовал это, но безрезультатно.

Может ли кто-нибудь проконсультироваться, как я могу заставить Grails работать с Firebird?


Здесь весь исключение, хотя, кажется, повторить несколько раз во время запуска:

->> 303 | innerRun in java.util.concurrent.FutureTask$Sync 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
| 138 | run  in java.util.concurrent.FutureTask 
| 886 | runTask in java.util.concurrent.ThreadPoolExecutor$Worker 
| 908 | run  in  '' 
^ 662 | run . . in java.lang.Thread 

Caused by BeanCreationException: Error creating bean with name 'sessionFactory': 
Cannot resolve reference to bean 'dataSource' while setting bean property 'data 
Source'; nested exception is org.springframework.beans.factory.BeanCreationExcep 
tion: Error creating bean with name 'dataSource': Cannot resolve reference to be 
an 'dataSourceUnproxied' while setting constructor argument; nested exception is 
org.springframework.beans.factory.BeanCreationException: Error creating bean wi 
th name 'dataSourceUnproxied': Error setting property values; nested exception i 
s org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessE 
xceptions (1) are: 
PropertyAccessException 1: org.springframework.beans.MethodInvocationException: 
Property 'driverClassName' threw exception; nested exception is java.lang.Illega 
lStateException: Could not load JDBC driver class [org.firebirdsql.jdbc.FBDriver 
] 

Запуск --stacktrace с --verbose:

| Error Error running script --stacktrace --verbose: Cannot invoke method findAl 
l() on null object 
java.lang.NullPointerException: Cannot invoke method findAll() on null object 
     at org.codehaus.groovy.runtime.NullObject.invokeMethod(NullObject.java:7 
7) 
     at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaC 
lassSite.java:45) 
     at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSi 
teArray.java:45) 
     at org.codehaus.groovy.runtime.callsite.NullCallSite.call(NullCallSite.j 
ava:32) 
     at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSi 
teArray.java:45) 
     at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite.call(PojoMeta 
MethodSite.java:55) 
     at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCa 
llSite.java:116) 
     at org.codehaus.groovy.grails.cli.ScriptNameResolver.resolvesTo(ScriptNa 
meResolver.groovy:30) 
     at org.codehaus.groovy.grails.cli.GrailsScriptRunner.getPotentialScripts 
(GrailsScriptRunner.java:489) 
     at org.codehaus.groovy.grails.cli.GrailsScriptRunner.executeScriptWithCa 
ching(GrailsScriptRunner.java:429) 
     at org.codehaus.groovy.grails.cli.GrailsScriptRunner.executeScriptWithCa 
ching(GrailsScriptRunner.java:416) 
     at org.codehaus.groovy.grails.cli.GrailsScriptRunner$executeScriptWithCa 
ching.call(Unknown Source) 
     at org.codehaus.groovy.grails.cli.interactive.InteractiveMode.parseAndEx 
ecute(InteractiveMode.groovy:280) 
     at org.codehaus.groovy.grails.cli.interactive.InteractiveMode$parseAndEx 
ecute.callCurrent(Unknown Source) 
     at org.codehaus.groovy.grails.cli.interactive.InteractiveMode.run(Intera 
ctiveMode.groovy:133) 
     at org.codehaus.groovy.grails.cli.interactive.InteractiveMode$run.call(U 
nknown Source) 
     at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSi 
teArray.java:45) 
     at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCa 
llSite.java:108) 
     at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCa 
llSite.java:112) 
     at RunApp$_run_closure7_closure11.doCall(RunApp:127) 
     at RunApp$_run_closure7_closure11.doCall(RunApp) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl. 
java:39) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces 
sorImpl.java:25) 
     at java.lang.reflect.Method.invoke(Method.java:597) 
     at org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(Refl 
ectiveInterceptor.java:1243) 
     at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java: 
90) 
     at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233) 
     at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1082) 
     at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:1106) 

     at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:906) 
     at groovy.lang.Closure.call(Closure.java:412) 
     at groovy.lang.Closure.call(Closure.java:406) 
     at groovy.lang.Closure.run(Closure.java:490) 
     at java.lang.Thread.run(Thread.java:662) 
| Error Error running script --stacktrace --verbose: Cannot invoke method findAl 
l() on null object 

Вот блок репозиториев из моего BuildConfig.groovy файла:

repositories { 
    inherits true // Whether to inherit repository definitions from plugins 

    grailsPlugins() 
    grailsHome() 
    grailsCentral() 

    mavenLocal() 
    mavenCentral() 

    // uncomment these (or add new ones) to enable remote dependency resolution from public Maven repositories 
    mavenRepo "http://snapshots.repository.codehaus.org" 
    mavenRepo "http://repository.codehaus.org" 
    mavenRepo "http://download.java.net/maven/2/" 
    mavenRepo "http://repository.jboss.com/maven2/" 
} 
+0

'cache.provider_class = 'org.firebirdsql.pool.FBSimpleDataSource'', вероятно, также неверен,' FBSimpleDataSource' не является поставщиком кеша. –

+0

Спасибо. Любая идея, чем должен быть класс поставщика? Другое значение, которое я видел в Интернете, это 'com.opensymphony.oscache.hibernate.OSCacheProvider', но я честно даже не знаю, действительно ли это так. – Stephan

+0

Поставщик кэширования кэшей, проверьте документацию спящего режима; Я считаю, что он использует значение по умолчанию, если вы его не укажете. –

ответ

5

Возможно, вам не хватает необходимой зависимости от Jaybird. Вам нужно указать connector-api-1.5.jar (в папке lib дистрибутива Jaybird) на пути к классам. Альтернативой является использование jaybird-full-2.2.2.jar (который включает классы connector-api-1.5.jar).

EDIT

Из любопытства я установил Grails и дал ему уйти. Первоначально я тоже получил аналогичную ошибку (с использованием grails console), и stacktrace показал мне java.lang.NoClassDefFoundError: javax/resource/ResourceException. Похоже, что grails - вопреки документации - не извлекает транзитивные зависимости (это было долгое время, см. EDIT 2).

После того как я явно добавил зависимость времени выполнения на 'javax.resource:connector-api:1.5', например:

dependencies { 
    // specify dependencies here under either 'build', 'compile', 'runtime', 'test' or 'provided' scopes e.g. 

    // runtime 'mysql:mysql-connector-java:5.1.22' 
    runtime 'org.firebirdsql.jdbc:jaybird-jdk17:2.2.2', 
      'javax.resource:connector-api:1.5' 
} 

С этой дополнительной зависимостью он работал. Поскольку connector-api обычно предоставляется сервером приложений, может быть лучше указать его вместо provided (вы можете проверить его с реальной средой развертывания).

Если вам нужна поддержка для извлечения сгенерированных ключей (или, возможно, это понадобится Gorm), то я бы предложил вам добавить 'org.antlr:antlr-runtime:3.4' (как зависимость runtime).

EDIT 2

После некоторого дополнительного тестирования, это выглядит как первый установка загруженных библиотек JayBird в lib, а затем объявить зависимость заставит плющ создать зависимость от этой локальной библиотеки вместо получения его из мавена , После удаления библиотеки jaybird из папки lib и, удалив папку org.firebirdsql.jdbc из моего кеша Ivy, она правильно загрузила ее из Maven, включая зависимость connector-api.

+1

Я просто попытался поставить 'connector-api-1.5.jar' в папке lib вместе с' jaybird-2.2.2.jar', но это, похоже, не имеет никакого значения. Я также попытался использовать «jaybird-full-2.2.2.jar» вместо обычного, но все равно не добился успеха. Я обновляю свой вопрос с полной ошибкой ... – Stephan

+0

Я изменил свои зависимости, чтобы соответствовать вашим, и удалил материал jaybird из моего плющ-кеша. Я получил кучу ошибок, таких как «Ошибка доступа к серверу: соединение reset url = http: // grails.org/plugins/grails-jaybird-jdk17/tags/RELEASE_2_2_2/grails-jaybird-jdk17-2.2.2.jar', поэтому Я вручную скопировал 'connector-api-1.5.jar' и' jaybird-jdk17-2.2.2.jar' в папку lib. После очистки я все равно получаю оригинальную ошибку FBDriver. – Stephan

+0

Ваш проект настроен также на получение зависимостей от Maven Central? –

 Смежные вопросы

  • Нет связанных вопросов^_^