Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Tomcat和Hibernate:HibernateException:无法确定要使用的适当数据源_Java_Hibernate_Postgresql_Tomcat - Fatal编程技术网

Java Tomcat和Hibernate:HibernateException:无法确定要使用的适当数据源

Java Tomcat和Hibernate:HibernateException:无法确定要使用的适当数据源,java,hibernate,postgresql,tomcat,Java,Hibernate,Postgresql,Tomcat,我正试图通过persistence.xml将Hibernate配置为使用Tomcat7的连接池。这是由于HibernateeException导致的失败,因为DatasourceConnectionProviderImpl未能实例化数据源 context.xml: <Context> <Resource name="jdbc/postgresql" type="javax.sql.Datasource" facto

我正试图通过persistence.xml将Hibernate配置为使用Tomcat7的连接池。这是由于HibernateeException导致的失败,因为
DatasourceConnectionProviderImpl
未能实例化数据源

context.xml:

<Context>
    <Resource name="jdbc/postgresql"
              type="javax.sql.Datasource"
              factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
              driverClassName="org.postgresql.Driver"
              url="jdbc:postgresql:sheets"
              username="sheets"
              password="sheets"/>
</Context>

persistence.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<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_1_0.xsd" version="1.0">
    <persistence-unit name="Hibernate">
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
        <jta-data-source>java:comp/env/jdbc/postgresql</jta-data-source>
        <properties>
            <property name="hibernate.connection.datasource" value="java:comp/env/jdbc/postgresql"/>
        </properties>
    </persistence-unit>
</persistence>

org.hibernate.jpa.HibernatePersistenceProvider
java:comp/env/jdbc/postgresql
堆栈跟踪:

javax.persistence.PersistenceException: Unable to build entity manager factory
        at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:83)
        at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:54)
        at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:55)
        at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:39)
        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.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:281)
        at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:262)
        at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:107)
        at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4797)
        at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5473)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
        at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
        at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633)
        at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:976)
        at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1653)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
        at java.util.concurrent.FutureTask.run(FutureTask.java:262)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:745)
Caused by: org.hibernate.HibernateException: Unable to determine appropriate DataSource to use
        at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.configure(DatasourceConnectionProviderImpl.java:119)
        at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:111)
        at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:234)
        at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:206)
        at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.buildJdbcConnectionAccess(JdbcServicesImpl.java:260)
        at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:94)
        at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:111)
        at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:234)
        at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:206)
        at org.hibernate.cfg.Configuration.buildTypeRegistrations(Configuration.java:1887)
        at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1845)
        at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:852)
        at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:845)
        at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.withTccl(ClassLoaderServiceImpl.java:398)
        at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:844)
        at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:75)
        ... 24 more
javax.persistence.PersistenceException:无法构建实体管理器工厂
位于org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:83)
位于org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:54)
位于javax.persistence.persistence.createEntityManagerFactory(persistence.java:55)
位于javax.persistence.persistence.createEntityManagerFactory(persistence.java:39)
位于com.google.inject.persist.jpa.JpaPersistService.start(JpaPersistService.java:94)
位于com.google.inject.persist.PersistFilter.init(PersistFilter.java:77)
位于com.google.inject.servlet.FilterDefinition.init(FilterDefinition.java:114)
位于com.google.inject.servlet.ManagedFilterPipeline.initPipeline(ManagedFilterPipeline.java:98)
位于com.google.inject.servlet.GuiceFilter.init(GuiceFilter.java:172)
位于org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:281)
位于org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:262)
位于org.apache.catalina.core.ApplicationFilterConfig.(ApplicationFilterConfig.java:107)
位于org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4797)
位于org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5473)
位于org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
位于org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
位于org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
位于org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633)
位于org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:976)
位于org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1653)
位于java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
在java.util.concurrent.FutureTask.run(FutureTask.java:262)处
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
运行(Thread.java:745)
原因:org.hibernate.HibernateException:无法确定要使用的适当数据源
位于org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.configure(DatasourceConnectionProviderImpl.java:119)
位于org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:111)
位于org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:234)
位于org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:206)
位于org.hibernate.engine.jdbc.internal.jdbcservicesiml.buildJdbcConnectionAccess(jdbcservicesiml.java:260)
位于org.hibernate.engine.jdbc.internal.jdbcservicesiml.configure(jdbcservicesiml.java:94)
位于org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:111)
位于org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:234)
位于org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:206)
位于org.hibernate.cfg.Configuration.buildTypeRegistrations(Configuration.java:1887)
位于org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1845)
位于org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:852)
位于org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:845)
位于org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.withTccl(ClassLoaderServiceImpl.java:398)
位于org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:844)
在org.hibernate.jpa.HibernatePersistenceProvider.createEntityManager工厂(HibernatePersistenceProvider.java:75)
... 还有24个

我肯定我对某些内容进行了错误配置,但我不确定是什么。

此问题的原因是使用Guice依赖项注入时存在循环依赖项。模块依赖于servlet上下文来构造数据源,但GuiceServletContextListener在上下文可用之前构造注入器。有关更多信息和解决方法,请参阅