2013-03-14 32 views
2

在應用程序展開之後,當方法執行時,出現錯誤。當Tomcat 7和JSF 2.0使用Hibernate 4.0時出現JndiException

Caused by: org.hibernate.service.jndi.JndiException: Unable to lookup JNDI name [java:comp/env/JSF_HIBER/ORACLE] 
    at org.hibernate.service.jndi.internal.JndiServiceImpl.locate(JndiServiceImpl.java:68) 
    at org.hibernate.service.jdbc.connections.internal.DatasourceConnectionProviderImpl.configure(DatasourceConnectionProviderImpl.java:116) 
    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.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:77) 
    at org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2283) 
    at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2279) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1748) 
    at com.utils.HibernateUtils.<clinit>(HibernateUtils.java:19) 
    ... 33 more 
Caused by: javax.naming.NamingException: This context must be accessed through a java: URL 
    at org.apache.naming.SelectorContext.parseName(SelectorContext.java:776) 
    at org.apache.naming.SelectorContext.lookup(SelectorContext.java:135) 
    at javax.naming.InitialContext.lookup(Unknown Source) 
    at org.hibernate.service.jndi.internal.JndiServiceImpl.locate(JndiServiceImpl.java:65) 
    ... 47 more 

的context.xml

<Resource name="JSF_HIBER/ORACLE" auth="Container" 
    type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" 
    username="****" password="**** driverClassName="oracle.jdbc.OracleDriver" 
    url="jdbc:oracle:thin:@99.99.999.999:1521:xe" /> 

的hibernate.cfg.xml

<?xml version='1.0' encoding='utf-8'?> 
<!DOCTYPE hibernate-configuration PUBLIC 
"-//Hibernate/Hibernate Configuration DTD//EN" 
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> 

<hibernate-configuration> 
    <session-factory> 
     <property name="hibernate.connection.datasource">java:comp/env/JSF_HIBER/ORACLE</property> 
     <property name="hibernate.bytecode.use_reflection_optimizer">false</property> 
     <property name="dialect">org.hibernate.dialect.Oracle10gDialect</property> 
     <property name="hibernate.connection.pool_size">10</property> 
     <property name="show_sql">true</property> 
     <property name="hibernate.current_session_context_class">thread</property> 
    <mapping class="com.entity.User"/> 
    </session-factory> 
</hibernate-configuration> 

Web.xml中

<resource-ref> 
     <description>JSF_HIBER</description> 
     <res-ref-name>JSF_HIBER/ORACLE</res-ref-name> 
     <res-type>javax.sql.DataSource</res-type> 
     <res-auth>Container</res-auth> 
    </resource-ref> 

我不知道爲什麼我收到此錯誤,請幫我...

+0

你在說什麼'context.xml'? 「META-INF」中的全局​​或一個? – beny23 2013-03-14 14:14:21

回答

0

你可能需要在META-INF/context.xml以下到全局JNDI資源鏈接到應用程序特定的:

<Context> 
    <ResourceLink name="JSF_HIBER/ORACLE" 
      global="JSF_HIBER/ORACLE" 
      type="javax.sql.DataSource" 
</Context> 

它將您的全球數據源JSF_HIBER/ORACLE鏈接到您當地的一個java:comp/env/JSF_HIBER/ORACLE

編輯:

如果你不想創建一個應用程序級的鏈接,你可以改用全球網址:

<property name="hibernate.connection.datasource">JSF_HIBER/ORACLE</property> 
+0

我在server.xml中添加此代碼,但它簡化版,工作.. – 2013-03-14 14:48:25

+0

我認爲問題出在我hibernet代碼.. pleses檢查它的corect或不.. 嘗試{ \t \t \t配置的conf =新組態(); \t \t \t conf.configure(); \t \t \t ServiceRegistry serviceRegistry =新ServiceRegistryBuilder() \t \t \t \t \t .applySettings(conf.getProperties())buildServiceRegistry(); \t \t \t SESSION_FACTORY = conf.buildSessionFactory(serviceRegistry); \t \t} catch(Throwable ex){ \t \t \t throw new ExceptionInInitializerError(ex); \t \t} – 2013-03-14 14:49:21

+0

我確實說過要在你的'META-INF/context.xml'而不是'server.xml'中添加代碼。該錯誤消息指向一個JNDI查找,但設置不正確。 – beny23 2013-03-14 14:52:13

6

您必須之間添加斜線的「java:」和「在hibernate.cfg.xml文件補償」:

<property name="hibernate.connection.datasource">java:/comp/env/JSF_HIBER/ORACLE</property>

它可能會解決這一問題

+1

很好地完成!你是一個紳士和學者。這爲我解決了這個問題。奇怪的是,當你不使用Hibernate來獲取'javax.sql.DataSource'時,舊字符串就可以工作。 – Neil 2014-10-13 07:51:37

+1

@Jimit Tank爲什麼這個答覆不被接受?它解決了你的問題,它解決了我的問題。 – Vishrant 2016-10-02 18:21:18

相關問題