GWT(Jetty)+Hibernate 4.1.1(JPA)+c3p0抛出类CastException

GWT(Jetty)+Hibernate 4.1.1(JPA)+c3p0抛出类CastException,hibernate,exception,gwt,jpa,jetty,Hibernate,Exception,Gwt,Jpa,Jetty,首先,我可以在Tomcat中成功地调试应用程序,没有任何错误。当然,我无法在Tomcat中单步执行GWT客户机代码,因此也尝试在Jetty上部署,这给了我这个选项 因此,我试图调试一个应用程序,该应用程序通过Eclipse中的Jetty使用GWT2.4.0,Hibernate 4.1.1使用JPA和c3p0,我得到以下异常 Caused by: java.lang.ExceptionInInitializerError at SOMETHING.HibernateUtil.<clinit&

首先,我可以在Tomcat中成功地调试应用程序,没有任何错误。当然,我无法在Tomcat中单步执行GWT客户机代码,因此也尝试在Jetty上部署,这给了我这个选项

因此,我试图调试一个应用程序,该应用程序通过Eclipse中的Jetty使用GWT2.4.0,Hibernate 4.1.1使用JPA和c3p0,我得到以下异常

Caused by: java.lang.ExceptionInInitializerError
at SOMETHING.HibernateUtil.<clinit>(HibernateUtil.java:23)
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:186)
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:223)
at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:89)
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:2273)
at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2269)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1738)
at SOMETHING.HibernateUtil.<clinit>(HibernateUtil.java:20)
... 29 more
Caused by: org.hibernate.HibernateException: Could not instantiate connection provider [org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider]
at org.hibernate.service.jdbc.connections.internal.ConnectionProviderInitiator.instantiateExplicitConnectionProvider(ConnectionProviderInitiator.java:192)
at org.hibernate.service.jdbc.connections.internal.ConnectionProviderInitiator.initiateService(ConnectionProviderInitiator.java:114)
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:176)
... 41 more
Caused by: java.lang.ClassCastException: org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider cannot be cast to org.hibernate.service.jdbc.connections.spi.ConnectionProvider
at org.hibernate.service.jdbc.connections.internal.ConnectionProviderInitiator.instantiateExplicitConnectionProvider(ConnectionProviderInitiator.java:189)
... 45 more
我的hibernate.cfg.xml是:

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
    <!-- Database connection settings -->
    <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="connection.url">jdbc:mysql://localhost:3306/dbname?autoReconnect=true</property>
    <property name="connection.username">dbuser</property>
    <property name="connection.password">dbpass</property>
    <!-- SQL dialect -->
    <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
    <!-- Enable Hibernate's automatic session context management -->
    <property name="current_session_context_class">thread</property>
    <!-- Disable the second-level cache -->
    <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
    <!-- Echo all executed SQL to stdout -->
    <property name="show_sql">true</property>
    <!-- Drop and re-create the database schema on startup -->
    <property name="hibernate.hbm2ddl.auto">update</property>
    <!-- hibernate.cfg.xml -->


    <property name="hibernate.c3p0.min_size">5</property>
    <property name="hibernate.c3p0.max_size">20</property>
    <property name="hibernate.c3p0.timeout">1800</property>
    <property name="hibernate.c3p0.max_statements">50</property>
    <property name="hibernate.connection.provider_class">org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider</property>
    <property name="hibernate.c3p0.idle_test_period">10</property>
    <property name="hibernate.c3p0.acquire_increment">5</property>
    <!-- no "connection.pool_size" entry! -->    
    <!-- JDBC connection pool (use the built-in) -->
    <!-- <property name="connection.pool_size">1</property> -->  
    <property name="hibernate.transaction.auto_close_session">false</property>

    <!-- Mapping files -->
            <!-- several mapping class files here -->
</session-factory>
在我的Eclipse构建路径中,我在上面有hibernate-jpa-2.0-api-1.0.1.Final.jar,后面是hibernate-core-4.1.1.Final.jar。其余的是Apache Tomcat 6、EAR、GWT SDK 2.4.0、JRE 1.6.0.26和指向我的lib文件夹中所有库的web应用程序库,包括hibernate-jpa-2.0-api-1.0.1.Final和hibernate-core-4.1.1.Final。我尝试过将c3p0 hibernate和/或实际的库放在上面,但没有效果。同样的错误。还尝试了稍旧版本的Hibernate4库,但再次出现相同的错误


有什么想法吗?

我认为这是Jetty类加载器的问题。实际上,我在尝试使用c3p0解决由默认ConnectionProvider导致的ClassCastException时遇到了相同的问题,我相信此问题的解决方案应该与相同。

感谢Matt,感谢您的及时回复。在我的搜索过程中,我确实看到了这个bug报告和另一个SO问题,但我不确定这段代码应该驻留在哪里,另外还提到了EJB之类的东西。有什么建议吗?再次感谢,我明白了。我应该覆盖org.hibernate.service.classloading.internal中的ClassLoaderServiceImpl类,并插入我的代码,其中包括父级的null。当然,我现在遇到了其他怪兽,比如无法构建默认的ValidatorFactory,无法找到默认的提供者,但是ClassCastException错误消失了。你也碰到过这些吗?好吧,一切都好!我必须包括validation-api.1.0.0.GA.jar、slf4j-api-1.6.1.jar、slf4j-log4j12-1.6.1.jar和hibernate-validator-4.2.0.Final.jar,才能让它开心,让它开心
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
    <!-- Database connection settings -->
    <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="connection.url">jdbc:mysql://localhost:3306/dbname?autoReconnect=true</property>
    <property name="connection.username">dbuser</property>
    <property name="connection.password">dbpass</property>
    <!-- SQL dialect -->
    <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
    <!-- Enable Hibernate's automatic session context management -->
    <property name="current_session_context_class">thread</property>
    <!-- Disable the second-level cache -->
    <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
    <!-- Echo all executed SQL to stdout -->
    <property name="show_sql">true</property>
    <!-- Drop and re-create the database schema on startup -->
    <property name="hibernate.hbm2ddl.auto">update</property>
    <!-- hibernate.cfg.xml -->


    <property name="hibernate.c3p0.min_size">5</property>
    <property name="hibernate.c3p0.max_size">20</property>
    <property name="hibernate.c3p0.timeout">1800</property>
    <property name="hibernate.c3p0.max_statements">50</property>
    <property name="hibernate.connection.provider_class">org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider</property>
    <property name="hibernate.c3p0.idle_test_period">10</property>
    <property name="hibernate.c3p0.acquire_increment">5</property>
    <!-- no "connection.pool_size" entry! -->    
    <!-- JDBC connection pool (use the built-in) -->
    <!-- <property name="connection.pool_size">1</property> -->  
    <property name="hibernate.transaction.auto_close_session">false</property>

    <!-- Mapping files -->
            <!-- several mapping class files here -->
</session-factory>
antlr-2.7.7.jar
c3p0-0.9.1.2.jar
commons-collections-3.2.1.jar
commons-logging-1.1.1.jar
dom4j-1.6.1.jar
gwt-oauth2-0.2-alpha.jar
gwt-servlet.jar
hibernate-c3p0-4.1.1.Final.jar
hibernate-commons-annotations-4.0.1.Final.jar
hibernate-core-4.1.1.Final.jar
hibernate-jpa-2.0-api-1.0.1.Final.jar
httpclient-4.1.3.jar
httpcore-4.1.4.jar
javassist-3.15.0-GA.jar
jboss-logging-3.1.0.GA.jar
jboss-transaction-api_1.1_spec-1.0.0.Final.jar
log4j-1.2.14.jar
mysql-connector-java-5.1.18-bin.jar