2013-09-28 76 views
0

我嘗試從SUSE Linux Enterprise Server爲Tomcat6配置Oracle日期來源。我想補充的數據源context.xml文件:JNDI需要JDK嗎?

<Resource 
    name="jdbc/UCPPool" 
    auth="Container" 
    factory="oracle.ucp.jdbc.PoolDataSourceImpl" 
    type="oracle.ucp.jdbc.PoolDataSource" 
    description="Pas testing UCP Pool in Tomcat" 
    connectionFactoryClassName="oracle.jdbc.pool.OracleDataSource" 
    minPoolSize="2" 
    maxPoolSize="5" 
    inactiveConnectionTimeout="20" 
    user="scott" 
    password="tiger" 
    url="jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP) 
     (HOST=beast.au.oracle.com)(PORT=1523))(CONNECT_DATA= 
     (SERVICE_NAME=linux11gr2)))" 
    connectionPoolName="UCPPool" 
    validateConnectionOnBorrow="true" 
    sqlForValidateConnection="select 1 from DUAL" /> 

在我的persistence.xml應用程序中添加非JTA-DataSource屬性。但是,當我想啓動應用程序每次下,Tomcat拋出此異常:

Caused by: org.hibernate.service.jndi.JndiException: Unable to lookup JNDI name [java:comp/env/jdbc/nameDB] 
     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:78) 
    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 org.hibernate.ejb.EntityManagerFactoryImpl.<init>(EntityManagerFactoryImpl.java:94) 
    at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:920) 
    ... 28 more 
    Caused by: javax.naming.NamingException: This context must be accessed throught a java: URL 
    org.hibernate.service.jndi.internal.JndiServiceImpl.locate(JndiServiceImpl.java:65) 

我試圖在openSUSE相同的配置,有它的工作原理。我發現唯一的區別是SLSE安裝了IBM的JAVA SE,openSUSE使用OpenJDK java作爲默認設置。

那麼JNDI需要JDK還是它是IBM java implmenetation中的一些錯誤?

+1

在您的資源定義中,名稱是'jdbc/UCPPool',但是當您查找它時,您的名字是'jdbc/nameDB'。這不正確嗎? – Jesper

+0

我只是忘了改變,當我從堆棧跟蹤複製。但eache時間我使用相同的名稱 – ostry

回答

0

要回答標題中的問題,不,JNDI是JRE的一部分。不需要JDK。

+0

謝謝你的迴應。你有什麼想法,爲什麼這不起作用? – ostry