2012-01-17 21 views
9

Tôi có tệp cấu hình GWT + Hibernate + JPA + Spring OK với Spring 3.0.x + Hibernate 3.6.x. Khi tôi nâng cấp lên Spring 3.1 và Hibernate 4.0, ngoại lệ sau đây được ném:Ngoại lệ trong GWT Dev Mode + Mùa xuân 3.1 + Hibernate 4.0.1

Có bất kỳ sự không tương thích nào đã biết với Hibernate 4 và Spring 3.1 không?

 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [META-INF/application-context.xml]: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: [PersistenceUnit: myPu] Unable to build EntityManagerFactory 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1455) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:567) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:913) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:464) 
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:384) 
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:283) 
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:111) 
    at org.mortbay.jetty.handler.ContextHandler.startContext(ContextHandler.java:543) 
    at org.mortbay.jetty.servlet.Context.startContext(Context.java:136) 
    at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1220) 
    at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:513) 
    at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:448) 
    at com.google.gwt.dev.shell.jetty.JettyLauncher$WebAppContextWithReload.doStart(JettyLauncher.java:468) 
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:39) 
    at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130) 
    at org.mortbay.jetty.handler.RequestLogHandler.doStart(RequestLogHandler.java:115) 
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:39) 
    at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130) 
    at org.mortbay.jetty.Server.doStart(Server.java:222) 
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:39) 
    at com.google.gwt.dev.shell.jetty.JettyLauncher.start(JettyLauncher.java:672) 
    at com.google.gwt.dev.DevMode.doStartUpServer(DevMode.java:509) 
    at com.google.gwt.dev.DevModeBase.startUp(DevModeBase.java:1068) 
    at com.google.gwt.dev.DevModeBase.run(DevModeBase.java:811) 
    at com.google.gwt.dev.DevMode.main(DevMode.java:311) 
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: naftPu] Unable to build EntityManagerFactory 
    at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:914) 
    at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:889) 
    at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:73) 
    at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:257) 
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:310) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1514) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1452) 
    ... 30 more 
Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.service.jdbc.connections.spi.ConnectionProvider] 
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:187) 
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:150) 
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:131) 
    at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.buildJdbcConnectionAccess(JdbcServicesImpl.java:234) 
    at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:91) 
    at org.hibernate.service.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:75) 
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:159) 
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:131) 
    at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:71) 
    at org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2270) 
    at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2266) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1735) 
    at org.hibernate.ejb.EntityManagerFactoryImpl.(EntityManagerFactoryImpl.java:84) 
    at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:904) 
    ... 36 more 
Caused by: org.hibernate.HibernateException: Could not instantiate connection provider [org.hibernate.ejb.connection.InjectedDataSourceConnectionProvider] 
    at org.hibernate.service.jdbc.connections.internal.ConnectionProviderInitiator.instantiateExplicitConnectionProvider(ConnectionProviderInitiator.java:190) 
    at org.hibernate.service.jdbc.connections.internal.ConnectionProviderInitiator.initiateService(ConnectionProviderInitiator.java:112) 
    at org.hibernate.service.jdbc.connections.internal.ConnectionProviderInitiator.initiateService(ConnectionProviderInitiator.java:54) 
    at org.hibernate.service.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:69) 
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:177) 
    ... 49 more 
Caused by: java.lang.ClassCastException: org.hibernate.ejb.connection.InjectedDataSourceConnectionProvider cannot be cast to org.hibernate.service.jdbc.connections.spi.ConnectionProvider 
    at org.hibernate.service.jdbc.connections.internal.ConnectionProviderInitiator.instantiateExplicitConnectionProvider(ConnectionProviderInitiator.java:187) 
    ... 53 more 

Dưới đây là một phần của ứng dụng context.xml cấu hình của tôi:

<bean id="mainDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
    <property name="driverClassName" value="oracle.jdbc.OracleDriver" /> 
    <property name="url" value="***manually deleted***" /> 
    <property name="username" value="myschema" /> 
    <property name="password" value="myschema" /> 
    <property name="initialSize" value="1" /> 
    <property name="maxActive" value="4" /> 
    <property name="maxIdle" value="-1" /> 
    <property name="maxWait" value="10000" /> 
</bean> 

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" p:persistenceUnitName="myPu"> 
    <property name="dataSource" ref="mainDataSource" /> 
    <property name="jpaVendorAdapter"> 
     <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" p:showSql="true" p:generateDdl="true" 
      p:database="ORACLE" p:databasePlatform="org.hibernate.dialect.Oracle10gDialect" /> 
    </property> 
    <property name="jpaPropertyMap"> 
     <map merge="true"> 
      <entry key="hibernate.archive.autodetection" value="class" /> 
      <entry key="hibernate.format_sql" value="false" /> 
      <entry key="hibernate.hbm2ddl.auto" value="false" /> 
      <entry key="hibernate.default_schema" value="myschema" /> 
     </map> 
    </property> 
</bean> 

persistence.xml:

<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" version="2.0"> 
    <persistence-unit name="myPu" transaction-type="RESOURCE_LOCAL"> 
     <provider>org.hibernate.ejb.HibernatePersistence</provider> 
    </persistence-unit> 
</persistence> 
+0

Dán đậu mainDataSource config và persistence.xml. Máy chủ của bạn là gì? Bạn có sử dụng EJB không? Lớp này lạ: org.hibernate.ejb.connection.InjectedDataSourceConnectionProvider. Những gì tôi đã tìm thấy: http://relation.to/Bloggers/SomeTipsOnUsingHibernateInJBossAS700Final –

+0

Có vẻ như sau: org.hibernate.ejb.HibernatePersistence là nhà cung cấp sai. –

+0

@ peter-gwiazda Cảm ơn, trang đó không hữu ích, vì tôi ở bên ngoài JBoss. BTW, không có nhà cung cấp JPA nào khác cho Hibernate ngoài org.hibernate.ejb.HibernatePersistence. – Mohsen

Trả lời

6

Sự cố này được khắc phục in Hibernate 4.1.4.


tôi đã cùng một vấn đề, và có vẻ như có liên quan đến các classloader Jetty (plugin GWT sử dụng Jetty cho chế độ lưu trữ), plugin GWT và Hibernate (mặc dù nó có vẻ cây trồng lên với các thư viện khác cũng).

Nó tương tự như lỗi được đề cập ở đây Hibernate Bug Report nhưng trong trường hợp của chúng tôi, chúng tôi đang chạy nó thông qua plugin GWT và nó gây ra một ClassCastException cho ConnectionProvider.

Sửa chữa được đề cập trong báo cáo lỗi nên khắc phục sự cố cụ thể đó.

Đối org.hibernate.service.classloading.internalClassLoaderServiceImpl thiết phụ huynh để null qua các nhà xây dựng:

this.classClassLoader = new ClassLoader(null) { 
     @Override 
     protected Class<?> findClass(String name) throws ClassNotFoundException { 
      for (ClassLoader loader : classLoadingClassLoaders) { 
       try { 
        return loader.loadClass(name); 
       } 
       catch (Exception ignore) { 
       } 
      } 
      throw new ClassNotFoundException("Could not load requested class : " + name); 
     } 
}; 
+1

Điều này được sửa trong hibernate 4.1.4 – gabuzo

-2

Tôi nghĩ rằng bạn không cần phải thiết lập <provider>org.hibernate.ejb.HibernatePersistence</provider> trong persistence.xml. Kiểm tra the docs.

+0

Không thay đổi. Phần tử này giúp JPA quyết định chọn nhà cung cấp nào khi có nhiều nhà cung cấp trong đường dẫn lớp. – Mohsen

1

xóa ejb3-persistence.jar trong thư mục/lib nếu đã có; nó xung đột với hibernate-jpa-2.0-api-1.0.1.Final.jar trong hibernate 4. Điều đó làm việc cho tôi sau khi có vấn đề này, tôi đã đạt được để lưu trữ một ứng dụng GWT, Hibernate 4, Spring 3.1.1 trên môi trường Openshift https://openshift.redhat.com/app/

Các vấn đề liên quan