失败 - 无法启动上下文路径/ MyProject中的应用程序(JndiException和NameNotFoundException)

时间:2017-08-09 06:56:52

标签: java hibernate tomcat

我正在尝试在Tomcat 7上部署我的项目。我包括

在tomcat / config / context.xml:

<ResourceLink name="jdbc/MyProjectDS"
             global="jdbc/MyProjectDS"
              type="javax.sql.DataSource" />

在tomcat / config / server.xml:

<Resource name="jdbc/MyProjectDS" auth="Container"
    type="javax.sql.DataSource"
    maxActive="100" maxIdle="5" maxWait="30000"
    username="username" password="password"
    driverClassName="com.mysql.jdbc.Driver"
    testOnBorrow="true"
    validationQuery="Select 1"
    url="jdbc:mysql://10.15.101.73:3306/myproject?autoReconnect=true"/>

但它返回例外如下:

Aug 09, 2017 2:41:02 PM org.apache.catalina.core.StandardContext filterStart
SEVERE: Exception starting filter naviox
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 org.openxava.jpa.XPersistence.getEntityManagerFactory(XPersistence.java:197)
    at org.openxava.jpa.XPersistence.createManager(XPersistence.java:112)
    at org.openxava.jpa.XPersistence.openManager(XPersistence.java:128)
    at org.openxava.jpa.XPersistence.getManager(XPersistence.java:98)
    at com.openxava.naviox.impl.DB.isAutoUpdateSchema(DB.java:173)
    at com.openxava.naviox.impl.DB.createDB(DB.java:153)
    at com.openxava.naviox.impl.DB.init(DB.java:32)
    at com.openxava.naviox.Modules.init(Modules.java:38)
    at com.openxava.naviox.web.NaviOXFilter.init(NaviOXFilter.java:22)
    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:4746)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5399)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.manager.ManagerServlet.start(ManagerServlet.java:1256)
    at org.apache.catalina.manager.HTMLManagerServlet.start(HTMLManagerServlet.java:714)
    at org.apache.catalina.manager.HTMLManagerServlet.doPost(HTMLManagerServlet.java:219)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.filters.CsrfPreventionFilter.doFilter(CsrfPreventionFilter.java:213)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:108)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:581)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:947)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1009)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
    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:744)
Caused by: org.hibernate.engine.jndi.JndiException: Unable to lookup JNDI name [java://comp/env/jdbc/MyProjectDS]
    at org.hibernate.engine.jndi.internal.JndiServiceImpl.locate(JndiServiceImpl.java:117)
    at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.configure(DatasourceConnectionProviderImpl.java:115)
    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:857)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:850)
    at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.withTccl(ClassLoaderServiceImpl.java:425)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:849)
    at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:75)
    ... 44 more
Caused by: javax.naming.NameNotFoundException: Name [jdbc/MyProjectDS] is not bound in this Context. Unable to find [jdbc].
    at org.apache.naming.NamingContext.lookup(NamingContext.java:820)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:168)
    at org.apache.naming.factory.ResourceLinkFactory.getObjectInstance(ResourceLinkFactory.java:94)
    at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:321)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:843)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:154)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:831)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:154)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:831)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:154)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:831)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:154)
    at org.apache.naming.SelectorContext.lookup(SelectorContext.java:135)
    at javax.naming.InitialContext.lookup(InitialContext.java:415)
    at org.hibernate.engine.jndi.internal.JndiServiceImpl.locate(JndiServiceImpl.java:114)
    ... 60 more

在myproject / hibernate.cfg.xml中,我有以下代码:

<hibernate-configuration>

    <session-factory>

        <!-- Tomcat + Hypersonic -->
        <property name="hibernate.connection.datasource">java://comp/env/jdbc/MyProjectDS</property>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="hibernate.jdbc.use_get_generated_keys">false</property>     
        <property name="hibernate.show_sql">false</property>
        <property name="hibernate.connection.release_mode">after_transaction</property>

        <!-- Use the C3P0 connection pool provider -->
        <property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
        <property name="hibernate.c3p0.min_size">2</property>
        <property name="hibernate.c3p0.max_size">50</property>
        <property name="hibernate.c3p0.timeout">300</property>
        <property name="hibernate.c3p0.max_statements">50</property>
        <property name="hibernate.c3p0.idle_test_period">3000</property>
        <property name="hibernate.c3p0.validate">true</property>

        <property name="hibernate.c3p0.preferredTestQuery">SELECT 1</property>
        <property name="hibernate.c3p0.testConnectionOnCheckin">true</property>
        <property name="hibernate.c3p0.testConnectionOnCheckout">false</property>
        <property name="hibernate.c3p0.idleConnectionTestPeriod">300</property> <!-- 5 minutes -->

    </session-factory>

</hibernate-configuration>

在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_1_0.xsd"
             version="1.0">

    <!-- Tomcat + Hypersonic -->
    <persistence-unit name="default">
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
        <non-jta-data-source>java://comp/env/jdbc/AdunFormsDS</non-jta-data-source>
        <class>org.openxava.session.GalleryImage</class>
        <class>org.openxava.web.editors.DiscussionComment</class>
        <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
            <property name="hibernate.hbm2ddl.auto" value="update"/>
            <property name="hibernate.connection.release_mode" value="after_transaction"/>
        </properties>
    </persistence-unit>    
</persistence>

我不知道为什么会出现这些异常,因为这是我第一次在tomcat服务器上部署项目。我试图谷歌解决方案,但没有一个解决我的问题。我希望有人可以指导我。提前谢谢。

3 个答案:

答案 0 :(得分:1)

问题已解决

我检查了catalina.log并意识到异常是由于icu4j.jar文件的版本太旧了。只需简单地用最新版本替换即可。

获得的知识:Catalina.log确实输出异常。

感谢。

答案 1 :(得分:0)

而不是

<property name="hibernate.connection.datasource">java://comp/env/jdbc/MyProjectDS</property> <!-- name & JNDI url-->

尝试更改属性名称&amp; JNDI网址如下

<property name="datasource">java:comp/env/jdbc/MyProjectDS</property> 

希望能帮到你

答案 2 :(得分:0)

对于EntityManager使用hibernate:

关注此<{3}},了解有关 persistance.xml 配置文件

的更多信息

获取EntityManager:

EntityManagerFactory entityManFac = Persistence.createEntityManagerFactory("yourpersistenceUnitName");
 // your persistance.xml 
//<persistence-unit name="yourpersistenceUnitName">
//provider>org.hibernate.ejb.HibernatePersistence</provider>
 // <jta-data-source>java:/DefaultDS</jta-data-source>
EntityManager entityManager = entityManFac.createEntityManager();