Tomcat(8.5.9)的新用戶Linux CentOS 7上的Java SE 8用戶。我必須犯一個簡單的錯誤。這應該是一個教科書示例,如何爲tomcat配置JDBC連接池。將Web應用程序移植到Tomcat:javax.naming.NameNotFoundException:
我有這樣的錯誤:
javax.naming.NameNotFoundException: Name [jdbc/pool1] is not bound in this Context. Unable to find [jdbc]
任何想法,我可能做錯了嗎? Tomcat的statesIt is NOT recommended to place <Context> elements directly in the server.xml file.
因此,我的設置:
$ CATALINA_HOME/webapps /下的myapp/META-INF/context.xml的如下:
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Resource name="jdbc/pool1"
auth="Container"
type="javax.sql.DataSource"
username="xx"
password="xx"
driverClassName="oracle.jdbc.OracleDriver"
url="xx"
maxTotal="256"
maxIdle="8"
initialSize="4"
removeAbandonedTimeout="7200"
removeAbandonedOnBorrow="true"/>
<Resource name="jdbc/pool2"
auth="Container"
type="javax.sql.DataSource"
username="xx"
password="xx"
driverClassName="oracle.jdbc.OracleDriver"
url="xx"
maxTotal="256"
maxIdle="8"
initialSize="4"
removeAbandonedTimeout="7200"
removeAbandonedOnBorrow="true"/>
<ResourceLink name="jdbc/pool1"
global="jdbc/pool1"
type="javax.sql.DataSource"/>
<ResourceLink name="jdbc/pool2"
global="jdbc/pool2"
type="javax.sql.DataSource"/>
</Context>
$ CATALINA_HOME/webapps /下的myapp/WEB-INF /網頁。 XML是如下:
...
<resource-ref>
<description>xxx</description>
<res-ref-name>jdbc/pool1</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
<resource-ref>
<description>xxx</description>
<res-ref-name>jdbc/pool1</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
...
代碼導致異常:
Context context = new InitialContext();
DataSource ds = (DataSource)context.lookup("jdbc/pool1");
conn = ds.getConnection();
我沒有修改$ CATALINA_HOME/conf/server.xml。我是否錯誤地配置了某些東西,或者我錯過了將某個文件設置在某處?
更新1
我嘗試添加上述ResourceLinks到GlobalNamingResources標籤在$ CATALINA_HOME/conf/server.xml文件,然後停止/啓動Tomcat,但我得到了同樣的錯誤。
UPDATE 2
然後我添加的資源標記從上面的context.xml也到server.xml文件(GlobalNamingResources標籤),停止/開始的Tomcat,並得到了同樣的錯誤。
更新3
我得到的一切安德烈亞斯專家的幫助(謝謝!)通過改變Java的方式工作調用池:
Context initCtx = new InitialContext();
Context context = (Context) initCtx.lookup("java:comp/env");
DataSource ds = (DataSource) context.lookup("jdbc/pool1");
conn = ds.getConnection();
此外,ResourceLinks不應該在server.xml中(他們只是在tomcat日誌中生成警告)。
什麼代碼拋出異常? – EJP
@EJP當然,我添加的代碼拋出異常略高於更新1 – user46688