2013-03-28 55 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