2011-11-16 53 views
5

您好,感謝您收看我們;-)休眠拋出ClassCastException在GWT託管模式只

我們的問題/錯誤是:

javax.persistence.PersistenceException: [PersistenceUnit: PUname] Unable to build EntityManagerFactory 
... 
Caused by: org.hibernate.HibernateException: Could not instantiate dialect class 
... 
Caused by: java.lang.ClassCastException: org.hibernate.dialect.MySQLDialect cannot be cast to org.hibernate.dialect.Dialect 
... 

(見完整的堆棧跟蹤底部)

它發生在基於GWT的Web應用程序中使用以下技術:

  • Maven
  • 的Hibernate的EntityManager/JPA
  • 吉斯
  • GWT
  • GWT-P
  • GWT Maven插件
  • ...

強調的事實是,它在Tomcat的工作。 只有在開發模式又名託管模式(使用Jetty)中,使用GWT Maven Plugin(目標gwt:run),我們得到了ClassCastException。我們在沒有運氣的情況下玩Hibernate依賴關係(添加hibernate-validator和/或hibernate-jpa-2.0-api)。 在實際使用任何服務之前,啓動JPA時會引發ClassCastException。 BTW:JPA是設置使用吉斯:

install(new JpaPersistModule("PUname")); 
    filter("/*").through(PersistFilter.class); 

這可能是值得一提的是禁用方言設置(在persistence.xml中)創建另一個ClassCastException異常也JPA啓動:

javax.persistence.PersistenceException: [PersistenceUnit: dsmgmt] Unable to build EntityManagerFactory 
... 
Caused by: org.hibernate.HibernateException: Unable to instantiate specified TransactionFactory class [org.hibernate.engine.transaction.internal.jdbc.JdbcTransactionFactory] 
... 
Caused by: java.lang.ClassCastException: org.hibernate.engine.transaction.internal.jdbc.JdbcTransactionFactory cannot be cast to org.hibernate.engine.transaction.spi.TransactionFactory 
... 

爲什麼它在碼頭休息?什麼可能導致它或如何修復?

文件:META-INF/persistence.xml中

<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"> 
    <persistence-unit name="PUname" transaction-type="RESOURCE_LOCAL"> 
     <provider>org.hibernate.ejb.HibernatePersistence</provider> 
     <class>our.test.class</class> 
     <properties> 
      <property name="hibernate.connection.username" value="user"/> 
      <property name="hibernate.connection.password" value="pass"/> 
      <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/> 
      <property name="hibernate.connection.url" value="jdbc:mysql://machine:3306/db"/> 
      <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/> 
      <property name="hibernate.hbm2ddl.auto" value="update"/> 
     </properties> 
    </persistence-unit> 
</persistence> 

我們在Web應用程序的JAR:

 445.288 antlr-2.7.7.jar 
     150.774 antlr-runtime-3.1.3.jar 
     4.467 aopalliance-1.0.jar 
     57.963 classmate-0.5.4.jar 
     575.389 commons-collections-3.2.1.jar 
     52.543 commons-exec-1.1.jar 
     59.590 commons-fileupload-1.2.2.jar 
     163.151 commons-io-2.1.jar 
     284.220 commons-lang-2.6.jar 
     313.898 dom4j-1.6.1.jar 
     131.929 dsmgmt-shared-0.1-SNAPSHOT.jar 
    1.006.424 ehcache-core-2.4.3.jar 
     710.492 guice-3.0.jar 
     36.998 guice-assistedinject-3.0.jar 
     27.633 guice-persist-3.0.jar 
     65.012 guice-servlet-3.0.jar 
    5.004.997 gwt-servlet-2.3.0.jar 
     28.339 gwtp-dispatch-server-0.6.jar 
     17.184 gwtp-dispatch-server-guice-0.6.jar 
     30.402 gwtp-dispatch-shared-0.6.jar 
     81.426 hibernate-commons-annotations-4.0.0.Final.jar 
    4.347.499 hibernate-core-4.0.0.CR6.jar 
     127.259 hibernate-ehcache-4.0.0.CR6.jar 
     471.832 hibernate-entitymanager-4.0.0.CR6.jar 
     102.661 hibernate-jpa-2.0-api-1.0.1.Final.jar 
     366.592 hibernate-validator-4.2.0.Final.jar 
     70.928 jandex-1.0.3.Final.jar 
     644.148 javassist-3.12.1.GA.jar 
     2.497 javax.inject-1.jar 
     60.542 jboss-logging-3.1.0.CR1.jar 
     11.209 jboss-transaction-api_1.1_spec-1.0.0.Final.jar 
     859.016 jna-3.2.3.jar 
     213.781 jsch-0.1.44-1.jar 
     281.579 jsoup-1.6.1.jar 
     481.535 log4j-1.2.16.jar 
     789.885 mysql-connector-java-5.1.18.jar 
    1.351.561 org.eclipse.jgit-1.0.0.201106090707-r.jar 
     601.287 pd4ml-3.80b1.jar 
     149.846 pd4ml-ss-css-3.80b1.jar 
     25.962 slf4j-api-1.6.4.jar 
     9.748 slf4j-log4j12-1.6.4.jar 
     743.673 sqljet-1.0.4.jar 
     172.023 stringtemplate-3.2.jar 
    1.889.196 svnkit-1.3.5.jar 
     251.371 trilead-ssh2-build213-svnkit-1.3-patch.jar 
     47.433 validation-api-1.0.0.GA.jar 
     109.318 xml-apis-1.0.b2.jar 

完整的堆棧跟蹤:

javax.persistence.PersistenceException: [PersistenceUnit: PUname] Unable to build EntityManagerFactory 
    at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:916) 
    at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:887) 
    at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:56) 
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:63) 
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:47) 
    at com.google.inject.persist.jpa.JpaPersistService.start(JpaPersistService.java:94) 
    at com.google.inject.persist.PersistFilter.init(PersistFilter.java:77) 
    at com.google.inject.servlet.FilterDefinition.init(FilterDefinition.java:114) 
    at com.google.inject.servlet.ManagedFilterPipeline.initPipeline(ManagedFilterPipeline.java:98) 
    at com.google.inject.servlet.GuiceFilter.init(GuiceFilter.java:172) 
    at org.mortbay.jetty.servlet.FilterHolder.doStart(FilterHolder.java:97) 
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:39) 
    at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:593) 
    at org.mortbay.jetty.servlet.Context.startContext(Context.java:140) 
    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: org.hibernate.HibernateException: Could not instantiate dialect class 
    at org.hibernate.service.jdbc.dialect.internal.DialectFactoryImpl.constructDialect(DialectFactoryImpl.java:82) 
    at org.hibernate.service.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:64) 
    at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:142) 
    at org.hibernate.service.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:81) 
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:160) 
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:133) 
    at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:71) 
    at org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2259) 
    at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2255) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1724) 
    at org.hibernate.ejb.EntityManagerFactoryImpl.<init>(EntityManagerFactoryImpl.java:76) 
    at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:907) 
    at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:887) 
    at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:56) 
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:63) 
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:47) 
    at com.google.inject.persist.jpa.JpaPersistService.start(JpaPersistService.java:94) 
    at com.google.inject.persist.PersistFilter.init(PersistFilter.java:77) 
    at com.google.inject.servlet.FilterDefinition.init(FilterDefinition.java:114) 
    at com.google.inject.servlet.ManagedFilterPipeline.initPipeline(ManagedFilterPipeline.java:98) 
    at com.google.inject.servlet.GuiceFilter.init(GuiceFilter.java:172) 
    at org.mortbay.jetty.servlet.FilterHolder.doStart(FilterHolder.java:97) 
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:39) 
    at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:593) 
    at org.mortbay.jetty.servlet.Context.startContext(Context.java:140) 
    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: java.lang.ClassCastException: org.hibernate.dialect.MySQLDialect cannot be cast to org.hibernate.dialect.Dialect 
    at org.hibernate.service.jdbc.dialect.internal.DialectFactoryImpl.constructDialect(DialectFactoryImpl.java:73) 
    at org.hibernate.service.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:64) 
    at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:142) 
    at org.hibernate.service.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:81) 
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:160) 
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:133) 
    at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:71) 
    at org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2259) 
    at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2255) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1724) 
    at org.hibernate.ejb.EntityManagerFactoryImpl.<init>(EntityManagerFactoryImpl.java:76) 
    at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:907) 
    at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:887) 
    at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:56) 
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:63) 
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:47) 
    at com.google.inject.persist.jpa.JpaPersistService.start(JpaPersistService.java:94) 
    at com.google.inject.persist.PersistFilter.init(PersistFilter.java:77) 
    at com.google.inject.servlet.FilterDefinition.init(FilterDefinition.java:114) 
    at com.google.inject.servlet.ManagedFilterPipeline.initPipeline(ManagedFilterPipeline.java:98) 
    at com.google.inject.servlet.GuiceFilter.init(GuiceFilter.java:172) 
    at org.mortbay.jetty.servlet.FilterHolder.doStart(FilterHolder.java:97) 
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:39) 
    at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:593) 
    at org.mortbay.jetty.servlet.Context.startContext(Context.java:140) 
    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) 

最好的問候, 亞歷山大

回答

1

我也遇到過這個問題。 經過一番調查後,我發現它是Google Eclipse Plugin + Jetty + Hibernate類加載的特殊行爲。

詳細說明:事實上從蝕庫運行或應用過程中的兩倍加載:第一至應用程序實例的類加載器和第二時間到碼頭的捲筒紙applciation類加載器。在檢查類加載器層次結構時加載sql語言期間,Hibernate會進行特殊的類加載觀察,並導致實例不同。

解決方案:不實這種情況下的解決方案,但我設法與外部服務器的運行方式調試運行GWT的applcation處理呢 - >網絡Applcaition(外部服務器上運行)

希望它可以幫助

0

使用休眠4.1.4 - 哪個問題有修補 - 完全解決問題