[英]How to set up a <Resource> in Tomcat 7 so that I don't need to use “java:/comp/env” in the code?
我是在 Tomcat 中設置 JNDI 資源和設置 JNDI 資源的新手。
我繼承了一個 servlet 應用程序。 它通過 WebLogic 在測試服務器上運行。 servlet 應用程序以下列方式訪問其數據庫資源:
ctx = new InitialContext();
ds = (javax.sql.DataSource)ctx.lookup("myDataBaseName");
conn = ds.getConnection();
當我在測試 JSP 中嘗試這樣做時,它不起作用。 我明白了
javax.naming.NameNotFoundException: Name myDataBaseName is not bound in this Context
但是,如果我更改了測試 JSP 代碼,我能夠使測試 JSP 工作:
ctx = new InitialContext();
Context envContext = (Context)ctx.lookup("java:/comp/env");
ds = (DataSource)envContext.lookup("myDataBaseName");
conn = ds.getConnection();
我在 TOMCAT_HOME/conf/context.html 中有這個條目(我只是將它用作我盒子上的開發環境)
<Resource name="myDataBaseName"
auth="Container"
type="javax.sql.DataSource"
driverClassName="oracle.jdbc.OracleDriver"
url="jdbc:oracle:thin:@blahblahblah:1521:database3"
username="joeuser"
password="password"
maxActive="20"
maxIdle="30"
maxWait="-1"/>
</Context>
我的 TOMCAT_HOME/conf/web.xml 中有這個:
<resource-ref>
<res-ref-name>myDataBaseName</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
我閱讀了大約 10 個有關相關問題的 stackoverflow 頁面,但我對設置 JNDI 資源以將這些解決方案抽象為我的問題還不夠熟悉。
如何更改設置 Tomcat 7 以允許現有 servlet 應用程序以“myDatabaseName”身份訪問其數據庫的方式? 我無法更改 servlet 應用程序中的代碼或更改 WebLogic 在測試服務器上的設置方式。
我需要改變我的 Tomcat 7 副本在我的計算機上的設置方式(用於開發環境),以允許 servlet 應用程序以本文頂部引用的第一塊代碼的樣式訪問其數據庫。
我在這里看到兩種可能性:
實現InitialContextFactory
並使其可用於 tomcat(通過系統屬性),以便new InitialContext()
為您提供查找將處理的上下文。
或者
將數據源綁定到 JNDI 中的另一個位置,盡管它既不推薦也不記錄在案(tomcat FM 聲明樹是只讀的,這似乎只適用於子樹 java:/comp/env),但它實際上可以工作:
Context ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup("java:/comp/env/myDataBaseName");
ctx.bind("myDataBaseName", ds);
使用您提供的配置,您應該能夠執行以下操作:
ctx = new InitialContext();
ds = (DataSource)ctx.lookup("java:/comp/env/myDataBaseName");
conn = ds.getConnection();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.