2011-11-16 6 views
5

नमस्ते और धन्यवाद की मेजबानी की हमारी समस्या/त्रुटि है:हाइबरनेट ClassCastException</p> <p>;-) देखने के लिए मोड केवल

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 
... 

(तल पर पूर्ण स्टैक ट्रेस देखें)

यह तब होता है निम्नलिखित प्रौद्योगिकियों का उपयोग कर एक जीडब्ल्यूटी आधारित वेब एप्लिकेशन में:

  • मेवेन
  • हाइबरनेट EntityManager/जेपीए
  • Guice
  • GWT
  • GWT-पी
  • GWT Maven प्लगइन
  • ...

तनाव के लिए तथ्य यह है कि यह बिलाव में काम करता है। केवल जीडब्ल्यूटी मेवेन प्लगइन (लक्ष्य gwt: run के साथ) का उपयोग करते हुए विकास मोड उर्फ ​​होस्टेड मोड (जेटी के साथ) में, हमें क्लासकास्ट अपवाद प्राप्त होता है। हम भाग्य के बिना हाइबरनेट निर्भरताओं के साथ खेल रहे थे (hibernate-validator और/या hibernate-jpa-2.0-api जोड़ना)। किसी भी सेवा का वास्तव में उपयोग होने से पहले क्लासकास्ट अपवाद जेपीए के स्टार्टअप पर फेंक दिया जाता है। Btw:

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 
... 

यह क्यों:

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

यह उल्लेख है कि बोली सेटिंग (persistence.xml में) को निष्क्रिय भी एक और ClassCastException बनाता जेपीए स्टार्टअप पर लायक हो सकता है: जेपीए Guice का उपयोग कर सेटअप है जेटी में तोड़ना? इसके कारण क्या हो सकता है या इसे कैसे ठीक किया जा सकता है?

फ़ाइल: 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> 

webapp में हमारी जार:

 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 ग्रहण प्लगइन + जेट्टी + हाइबरनेट के क्लासलोडिंग का विशेष व्यवहार है।

विवरण: वास्तव में चल रहा है या libs ग्रहण से आवेदन के दौरान दो बार लोड किए गए हैं: पहला आवेदन उदाहरण classloader और घाट की वेब applciation classloader को दूसरी बार के लिए। हाइबरनेट में क्लासलोडर पदानुक्रम की जांच में एसक्यूएल बोलियों को लोड करने के दौरान विशेष वर्गीकरण देख रहा है और नतीजतन कि उदाहरण अलग हैं।

समाधान: इस मामले के असली नहीं समाधान, लेकिन मैं पर बाहरी सर्वर चलाने के रूप में GWT applcation debuging के साथ संभाल करने के लिए प्रबंधित किया है -> वेब Applcaition (बाहरी सर्वर पर चलने)

आशा है कि यह मदद करता है

0

this patch से org.hibernate.service.classloading.internal.ClassLoaderServiceImpl.java को HHH-7084 में वर्णित अनुसार लागू करने के लिए यह मेरे लिए किया गया था (मूल रूप से jetty launcher for GWT hosted mode to get the JNDI stuff to work के साथ ही अपने वर्ग के साथ उस वर्ग को ओवरराइड करना)।

उत्तर अलेक्जेंडर (@ user845767) के लिए मूल्य के बहुत कम होने की संभावना है, लेकिन किसी अन्य व्यक्ति के लिए सहायक हो सकता है जो समाधान की तलाश में आता है।

0

हाइबरनेट 4.1.4 का उपयोग करते हुए - जिसमें इस समस्या को पैच किया गया है - इस मुद्दे को पूरी तरह हल किया गया है

संबंधित मुद्दे