2

春のトランザクションを介して既存の webapp にトランザクション サポートを追加しようとしています。

最近、セッション ファクトリ クラスを LocalSessionFactoryBean から AnnotationSessionFactoryBean に変更しました。

webapp の起動時に次のエラーが表示されるようになりました。

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'txManager' defined in class path resource [context.xml]: Cannot resolve reference to bean 'sessionFactory' while setting bean property 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [context.xml]: Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: org/apache/lucene/analysis/standard/StandardAnalyzer
 at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:275)
 at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:104)
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1245)
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1010)
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:472)
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
 at java.security.AccessController.doPrivileged(Native Method)

だから根本原因

nested exception is java.lang.NoClassDefFoundError: org/apache/lucene/analysis/standard/StandardAnalyzer

Web アプリケーションに lucene を含める必要がある理由がわかりません。検索に使用する予定はありません。このエラーが発生するのは非常に間違っているようです。

4

1 に答える 1

2

完全な strack トレースを見ないと確信が持てませんが、これは、内部で Lucene を使用する Hibernate Search と関係があると推測されます。

AnnotationSessionFactoryBean、クラスパスで Hibernate Search の存在を自動検出しようとし、見つかった場合は初期化します。環境によっては、Lucene を見つけるのに失敗する前に、ここまでたどり着く可能性があります。

クラスパスを調べて、Hibernate Search があるかどうかを確認し、それを削除できるかどうかを確認します。もう 1 つのオプションは、hibernate.search.autoregister_listenershibernate プロパティをに設定することfalseです。これにより、Hibernate Search の登録が明示的に無効になります。

于 2010-10-26T21:55:03.460 に答える