JNDI就像一张服用了类固醇的地图,对吧?我使用键来查找对对象的引用。另外,什么是InitialContext?我似乎不明白你的意思。
发布于 2011-02-28 23:00:33
从概念上讲,JNDI就像服用了类固醇的System.getProperties()。
System.getProperties()允许您从命令行将String参数传递给代码。类似地,JNDI允许您在代码外部(例如,在应用服务器配置文件中)配置任意对象,然后在代码中使用它们。
换句话说,它是Service Locator pattern的一种实现:您的代码从中央注册表获取由环境配置的服务。
与通常的服务定位器一样,您的代码应该有一些入口点来访问服务定位器。JNDI就是这个入口点:创建InitialContext,然后使用lookup()从InitialContext获取所需的服务。
发布于 2011-02-28 23:05:17
让我们来谈谈代码,装入jndi的类是一个单例,你将为它提供你的jndi资源的密钥。下面,我正在加载一个数据源(datasource="JDBC/dummy")。
try {
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("jndicontext");
ds = (DataSource) envCtx.lookup("JDBC/dummy");
} catch (Exception e) {
log.error(e);
}初始上下文将资源作为对象返回给我。我也可以用同样的方式加载一个bean。
Connection conn = ds.getConnection();但重点是什么呢?只存储特定环境下的对象,而不考虑它们的类型。然后在飞行中改变他们的信息。你会注意到,我没有写任何登录名/密码。
在本例中,取决于当前环境:-在生产环境中,它返回一个到数据库的连接。-在集成环境中,它返回到另一个数据库的连接-在开发中,它实例化该类的另一个实现(模拟实现),并使用xml文件作为数据源。
问候
https://stackoverflow.com/questions/5143499
复制相似问题