簡體   English   中英

如何設置一個<resource>在 Tomcat 7 中,這樣我就不需要在代碼中使用“java:/comp/env”了嗎?</resource>

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM