2009-12-16 52 views
1

我在我的窗口框上有apache tomcat 5.5.28,我試圖部署一個可以在其他服務器上正常工作的web應用程序(WAR)。tomcat oracle datasource

但是我在創建數據源時遇到了問題。我不確定格式。 db是oracle。

這是我在server.xml中的。

<GlobalNamingResources> 
    <Environment 
     name="simpleValue" 
     type="java.lang.Integer" 
     value="30"/> 
    <Resource 
     name="tomdb11" 
     type="oracle.jdbc.pool.OracleDataSource" 
     maxActive="4" 
     maxIdle="2" 
     username="tomdb11" 
     maxWait="5000" 
     driverClassName="oracle.jdbc.driver.OracleDriver" 
     validationQuery="select * from dual" 
     password="remotedb11" 
     url="jdbc:oracle:thin:@dbserver:1521:orcl"/> 
    <Resource 
     auth="Container" 
     description="User database that can be updated and saved" 
     name="UserDatabase" 
     type="org.apache.catalina.UserDatabase" 
     factory="org.apache.catalina.users.MemoryUserDatabaseFactory" 
     pathname="conf/tomcat-users.xml"/> 
    </GlobalNamingResources> 

如何訪問這個在web.xml通常在那裏我有什麼這在其他服務器的工作原理是

<context-param> 
    <param-name>databaseUser</param-name> 
    <param-value>tomdb11</param-value> 
</context-param> 

<context-param> 
    <param-name>databasePassword</param-name> 
    <param-value>tomdb11</param-value> 
</context-param> 

<context-param> 
    <param-name>databaseSchema</param-name> 
    <param-value>TOMDBADMINN11</param-value> 
</context-param> 

而且我這麼想嗎?

編輯:我得到以下異常:

javax.naming.NameNotFoundException: Name tomdb11 is not bound in this Context 
    at org.apache.naming.NamingContext.lookup(NamingContext.java:770) 
    at org.apache.naming.NamingContext.lookup(NamingContext.java:153) 
    at org.apache.naming.SelectorContext.lookup(SelectorContext.java:137) 
    at javax.naming.InitialContext.lookup(Unknown Source) 
    at com.taw.database.DatabaseService.<init>(DatabaseService.java:19) 
    at com.taw.database.DatabaseServices.init(DatabaseServices.java:40) 
+0

你提到的這些其他服務器是什麼?這些還是Tomcat還是你在使用另一個容器? – 2009-12-16 18:54:22

+0

appserver日誌說什麼?請編輯您的問題併發布錯誤/例外。 – BalusC 2009-12-16 18:58:51

+0

javax.naming.NameNotFoundException:名稱jdbc未綁定在此上下文中\t at org.apache.naming.NamingContext.lookup(NamingContext.java:770) at org.apache.naming.NamingContext.lookup(NamingContext.java:153 ) at org.apache.naming.SelectorContext.lookup(SelectorContext.java:137) at javax.naming.InitialContext.lookup(Unknown Source) at com.taw.database.DatabaseService。 (DatabaseService.java:19) 在com.taw.database.DatabaseServices.init(DatabaseServices.java:40) 在com.taw.web.BaseProxyDispatcher.initializeDatabaseServices(BaseProxyDispatcher.java:225) 中C – user229432 2009-12-16 19:40:36

回答

2

首先...確保你在你的$ TOMCAT_HOME /一個Oracle JDBC JAR common/lib目錄。

二...確保你的web.xml文件也包含這樣的塊...

<resource-ref> 
    <description>Oracle Datasource</description> 
    <res-ref-name>tomdb11</res-ref-name> 
    <res-type>javax.sql.DataSource</res-type> 
</resource-ref> 

至於你<context-param>,我不知道那是做什麼,你已經擁有的那些東西在您的<Resource>中定義。

+0

現在試試這個 – user229432 2009-12-16 19:44:34

+0

我把oralce jdbc jar放在common.lib目錄下,並且還包含了這個資源-ref,但是我沒有看到任何異常,只是應用程序特定的異常顯示它無法連接到數據庫。我的server.xml正確嗎? – user229432 2009-12-16 20:07:18

+0

我是否需要ot起數據源int格式jdbc/tomdb11而不是tomdb11 – user229432 2009-12-16 20:08:58

3

如果在異常告訴它不能找到在JNDI上下文jdbc,那麼它大概的意思是,你想獲得DataSource如下

dataSource = new InitialContext().lookup("jdbc/tomdb11"); 

,而你的server.xml文件告知以下內容:

<Resource 
    name="tomdb11" 
    > 

那些名字是不是一樣。事實上,你應該已經用於:

dataSource = new InitialContext().lookup("tomdb11"); 

在Tomcat中,然而,InitialContext並不直接指向java:comp/env/,所以你需要通過將其替換:

dataSource = new InitialContext().lookup("java:comp/env/tomdb11"); 

正常但是,練習是指定前綴爲jdbc的JDBC數據源。因此,我想通過

dataSource = new InitialContext().lookup("java:comp/env/jdbc/tomdb11"); 

重命名資源作爲

<Resource 
    name="jdbc/tomdb11" 
    > 

和訪問它在WebApp的web.xml你應該然而,也有以下資源聲明:

<resource-env-ref> 
    <resource-env-ref-name>jdbc/tomdb11</resource-env-ref-name> 
    <resource-env-ref-type>javax.sql.DataSource</resource-env-ref-type> 
</resource-env-ref> 

如需詳細瞭解Tomcat JNDI檢查這個HOWTO:http://tomcat.apache.org/tomcat-6.0-doc/jndi-resources-howto.html。希望這可以幫助。

+0

我這樣做改變後,我得到 javax.naming.NamingException中:在org.apache.naming.factory.ResourceFactory.getObjectInstance(ResourceFactory.java:143)無法創建資源實例 \t \t在javax.naming.spi中。 NamingManager.getObjectInstance(Unknown Source) \t at org.apache.naming.NamingContext.lookup(NamingContext.java:793) – user229432 2009-12-16 22:10:41

+0

你是更進一步!你的代碼終於找到了資源,但資源本身的創建失敗了。嘗試在堆棧追蹤中進一步觀察,你沒有看到根本原因?可能的原因是格式錯誤的XML語法(一個''','<' or '>'丟失或太多),或者在類型,工廠或路徑名中存在拼寫錯誤(全部區分大小寫!)讓我們知道是否找到它。參考。 – BalusC 2009-12-16 22:27:24