首页
学习
活动
专区
圈层
工具
发布

理解JNDI
EN

Stack Overflow用户
提问于 2011-02-28 22:51:18
回答 2查看 5.4K关注 0票数 22

JNDI就像一张服用了类固醇的地图,对吧?我使用键来查找对对象的引用。另外,什么是InitialContext?我似乎不明白你的意思。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-02-28 23:00:33

从概念上讲,JNDI就像服用了类固醇的System.getProperties()

System.getProperties()允许您从命令行将String参数传递给代码。类似地,JNDI允许您在代码外部(例如,在应用服务器配置文件中)配置任意对象,然后在代码中使用它们。

换句话说,它是Service Locator pattern的一种实现:您的代码从中央注册表获取由环境配置的服务。

与通常的服务定位器一样,您的代码应该有一些入口点来访问服务定位器。JNDI就是这个入口点:创建InitialContext,然后使用lookup()InitialContext获取所需的服务。

票数 34
EN

Stack Overflow用户

发布于 2011-02-28 23:05:17

让我们来谈谈代码,装入jndi的类是一个单例,你将为它提供你的jndi资源的密钥。下面,我正在加载一个数据源(datasource="JDBC/dummy")。

代码语言:javascript
复制
try {
  Context initCtx = new InitialContext();
  Context envCtx = (Context) initCtx.lookup("jndicontext");
  ds = (DataSource) envCtx.lookup("JDBC/dummy");
} catch (Exception e) {
  log.error(e);
}

初始上下文将资源作为对象返回给我。我也可以用同样的方式加载一个bean。

代码语言:javascript
复制
Connection conn = ds.getConnection();

但重点是什么呢?只存储特定环境下的对象,而不考虑它们的类型。然后在飞行中改变他们的信息。你会注意到,我没有写任何登录名/密码。

在本例中,取决于当前环境:-在生产环境中,它返回一个到数据库的连接。-在集成环境中,它返回到另一个数据库的连接-在开发中,它实例化该类的另一个实现(模拟实现),并使用xml文件作为数据源。

问候

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5143499

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档