2013-03-28 31 views
0

「javax.naming.Context」通常在Java EE開發中使用。通過在context.xml中使用給定名稱的資源調用其查找函數,使用它建立動態數據庫連接非常方便。示例代碼如下所示,其中「db_name」是用於標識數據庫資源的名稱。Java:同一個servlet中的多個數據資源

Context ctx = new InitialContext(); 
DataSource ds = ctx.lookup("java:comp/env/jdbc/db_name"); 

我擔心的是通過使用不同的上下文使用相同的上下文和查找資源,查找資源之間有什麼區別。哪種方法更有意義或合適?假設所有的數據庫資源都是在同一個context.xml文件中定義的。例如:

Context ctx = new InitialContext(); 
DataSource ds1 = ctx.lookup("java:comp/env/jdbc/db_name_ds1"); 
DataSource ds2 = ctx.lookup("java:comp/env/jdbc/db_name_ds2"); 

Context ctx_ds1 = new InitialContext(); 
Context ctx_ds2 = new InitialContext(); 
DataSource ds1 = ctx_ds1.lookup("java:comp/env/jdbc/db_name_ds1"); 
DataSource ds2 = ctx_ds2.lookup("java:comp/env/jdbc/db_name_ds2"); 

謝謝你的分享。

+0

在這種情況下,我認爲它們是等價的。 'Context#lookup(String)'方法可以返回任何對象(取決於用於處理請求的資源的工廠),甚至可以返回另一個上下文。 – 2013-03-28 03:42:05

+0

再次感謝SD。我不確定你提到的「甚至另一種情況」,你可以進一步詳細說明一下嗎? – ShadowScorpion 2013-03-28 03:50:33

+0

上下文可以包含另一個上下文。所以你可以使用'lookup()'方法返回一個子上下文。 – 2013-03-28 12:36:19

回答

0

除了您創建了一個不必要的額外java對象之外,沒有區別。然而,如果jndi服務器是遠程的,那麼你就會創建兩個不同的網絡連接和管理它們的頭腦 - 而不是人們應該做什麼。

+0

親愛的,謝謝你的建議,我明白了。對我而言,我也認爲一個關係是足夠好的,但我面臨一些例外,所以我想要找出根本原因。 – ShadowScorpion 2013-03-28 05:36:24

相關問題