我的Web應用程序與Spring 4.3/Hibernate 5.1緊密集成。無法從Web應用程序類路徑加載Jadira Hibernate模塊
我的主SessionFactory
對象由延伸org.springframework.orm.hibernate5.LocalSessionFactoryBean
的工廠處理。
在LSFB的afterPropertiesSet
上,Hibernate掃描模塊和服務。
我目前得到以下錯誤,當Jadira jar文件是存在於網絡的classpath
Caused by: java.util.ServiceConfigurationError: org.hibernate.integrator.spi.Integrator: Provider org.jadira.usertype.dateandtime.joda.integrator.UserTypeJodaTimeHibernateIntegrator not found
at java.util.ServiceLoader.fail(ServiceLoader.java:231)
at java.util.ServiceLoader.access$300(ServiceLoader.java:181)
at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:365)
at java.util.ServiceLoader$1.next(ServiceLoader.java:445)
at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.loadJavaServices(ClassLoaderServiceImpl.java:340)
at org.hibernate.integrator.internal.IntegratorServiceImpl.<init>(IntegratorServiceImpl.java:40)
at org.hibernate.boot.registry.BootstrapServiceRegistryBuilder.build(BootstrapServiceRegistryBuilder.java:213)
at org.springframework.orm.hibernate5.LocalSessionFactoryBean.getMetadataSources(LocalSessionFactoryBean.java:364)
at org.springframework.orm.hibernate5.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:399)
at com.acme.AnnotationSessionFactoryBean.afterPropertiesSet(AnnotationSessionFactoryBean.java:203)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1687)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1624)
... 35 more
我現在正在調查此。看起來像是一個類加載器的問題,因爲我還不明白。
我一直在挖掘Spring和Hibernate代碼。
LocalSessionFactoryBean
的afterPropertiesSet
使用默認MetadataSources
getMetadataSources
調用的LocalSessionFactoryBuilder
構造函數,調用時,第一次,建立一個BootstrapServiceRegistryBuilder
使用的ClassLoader從resourcePatternResolver
,這是WebappClassLoader
(誰可以看看罐)- 當代碼挖入ServiceLoader類時,它嘗試使用ClassLoader實例化類
org.jadira.usertype.dateandtime.joda.integrator.UserTypeJodaTimeHibernateIntegrator
org.hibernate.boot.registry.cla[email protected]70d5297f
cod Ë分爲以下幾個行,我不能,儘管Java調試源
try { c = Class.forName(cn, false, loader); } catch (ClassNotFoundException x) { [OP: exception is swallowed] fail(service, "Provider " + cn + " not found"); }
我不明白爲什麼會這樣。 爲了加載Hibernate服務,有什麼特別的要做嗎?如何處理那些ServiceConfigurationError
?
爲什麼需要繼承FactoryBean?有什麼特別的,你不能使用默認的'Factorybean'? –
它用自定義機制覆蓋了休眠屬性。 –
你爲什麼需要這個?您可以簡單地將其外化並設置屬性。我建議嘗試沒有你的子類(使用常規的'LocalSessionFactoryBean',看看問題是否仍然存在)。 –