2012-01-08 13 views
1

Grails(V2.0.0.RC1)を使用して2つの小さなhello worldアプリケーションを作成しましたが、Glassfish(v3.1)を使用してそれらを展開します。Glassfishで複数のGrailsアプリケーションを実行しているときにエラーが発生しました

Glassfishでアプリケーションのいずれかを単独で展開すると、アプリケーションは正常に動作し、http://t1-0.1またはhttp://t2-0.1のいずれかにアクセスできます。しかし、代わりに、アプリケーションの1つをデプロイしてから別のデプロイメントを実行すると、2つ目のデプロイメントコマンドで次のエラーメッセージが表示されます。

c :>

リモート障害t2-0.1.warのasadmin展開:エラーが展開中に発生しました:java.lang.IllegalStateException:: ContainerBase.addChild: アプリをロード中に例外を起動します。org.apache.catalina.LifecycleExceptionを: をorg.springframework.beans.factory.BeanCreationException:エラー 名前が 'transactionManagerPostProcessor'のBeanを作成しています: Beanの初期化に失敗しました。入れ子にされた例外は org.springframework.beans.factory.BeanCreationExceptionです:エラー 名前 'transactionManager'でBeanを作成しています:beanFactory 'sessionFactory'を設定している間に参照 をbean 'sessionFactory'に解決できません。 ネストされた例外は org.springframework.beans.factory.BeanCreationExceptionです:名前を持つBeanを作成中にエラーが発生しまし 「SessionFactoryの」: BeanのhibernateProperties 'を設定しながら、Beanのプロパティ 「hibernateProperties」への参照を解決できません。ネストされた例外は org.springframework.beans.factory.BeanCreationExceptionです:名前で BeanをErrorcreating「hibernateProperties」: キー[hibernate.dialect]でプロパティ 『「Beanのプロパティを設定しながら、』 bean'dialectDetectorへの参照を解決できません。入れ子にされた例外は ですorg.springframework.beans.factory.BeanCreationException:エラー 名前 'dialectDetector'でBeanを作成しています:initの呼び出し methodfailed;ネストされた例外は ですorg.springframework.jdbc.support.MetaDataAccessException:エラー中に DatabaseMetaDataを抽出しています。可能性のある解決策:closeall他の接続; サーバーモードを使用してください;他の接続をクローズしてください; org.apache.commons.dbcp.SQLNestedException: PoolableConnectionFactoryを作成できません(データベースは既に使用されている可能性があります: " 別のプロセスによってロックされています)。 SQL ステートメント:null/1349c415392c6dc06a3e7086cd1bb075c7881fc0650 [90020-147])。詳細については、server.logを参照してください。

ここでは何が起こっていますか?私はGrailsとHibernateの使用に関して独特の何かがあると推測します(それ以外の場合、Glassfishは私が一緒に働く2つのアプリケーションを持つことについて不平を言いません)。しかし、おそらく私はエラーメッセージを誤解していますか?誰か推奨事項はありますか?

+0

glassfish持続性プロバイダの設定を投稿してください。通常、アプリケーションは直接glassfish api上のdbにアクセスします - 私は問題がどこかにあると思います。 GrailsのDB設定も非常に役立ちます。 –

答えて

0

Grailsが提供するデフォルト設定を誤用していることが判明しました。ファイルにDataSource.groovy各アプリケーションは、データベースへのポインタを与えられ、デフォルトでそのポインタは、次のようになります。

development { 
    dataSource { 
     dbCreate = "create-drop" 
     url = "jdbc:h2:mem:devDb;MVCC=TRUE" 
    } 
} 

問題は、複数のアプリケーションが同一の構成を与え、基礎となるメモリベースされるということです複数のアプリケーション間のh2データベース参照が競合します。したがって、「hello world」のサンプルアプリケーションの解決策は、これらの参照の1つを変更することです。たとえば:

development { 
    dataSource { 
     dbCreate = "create-drop" 
     url = "jdbc:h2:mem:devDb2;MVCC=TRUE" 
    } 
} 

はもちろん、生産コードではおそらく実際のデータベースを参照することになりますし、お使いのアプリケーションが自然に自分のデータベース参照に協力します。

関連する問題