5

Grails アプリケーションを Firebird データベースに接続しようとしています。

私は使っている:

  • グレイル 2.2.1
  • JDK1.7
  • 火の鳥 2.5.2
  • ジェイバード 2.2.2

これまでのところ、これは私がやったことです:

  • http://www.firebirdsql.org/en/jdbc-driver/から Jaybird-2.2.2JDK_1.7.zip をダウンロードしました。
  • このファイルを解凍し、jaybird-2.2.2.jar をアプリケーションの lib フォルダーにコピーしました。
  • 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 {
    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.EhCacheRegionFactoryandを持っていcache.provider_class = 'com.opensymphony.oscache.hibernate.OSCacheProvider'ましたが、どちらも違いはありませんでした。)

Grails アプリを実行すると、次のメッセージに要約される巨大なエラーで起動が失敗します。

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

Web を広範囲に検索しましたが、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
]

--verbose を指定して --stacktrace を実行:

| 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/"
}
4

1 に答える 1

5

おそらく、必要な Jaybird の依存関係が不足しています。connector-api-1.5.jarクラスパスに( libJaybird ディストリビューションのフォルダーにある)を含める必要があります。jaybird-full-2.2.2.jar別の方法として、 (のクラスを含む)を使用することもできますconnector-api-1.5.jar

編集

好奇心から、grails をインストールして試してみました。私も最初に同様のエラー(を使用grails console)を受け取り、スタックトレースは私を示しました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依存関係として) も追加することをお勧めします。

編集2

いくつかの追加テストの後、最初にダウンロードした jaybird ライブラリを にインストールしlib、次に依存関係を宣言すると、ivy は maven から取得する代わりにそのローカル ライブラリへの依存関係を作成するように見えます。libフォルダーからjaybirdライブラリーを削除し、Ivyキャッシュからフォルダー削除した後、依存関係org.firebirdsql.jdbcを含めてMavenから正しくダウンロードしました。connector-api

于 2013-03-06T12:37:38.157 に答える