axt*_*avt 33
从概念上讲,JNDI就像System.getProperties()
类固醇一样.
System.getProperties()
允许您String
从命令行将参数传递给代码.同样,JNDI允许您在代码之外配置任意对象(例如,在应用程序服务器配置文件中),然后在代码中使用它们.
换句话说,它是Service Locator模式的一种实现:您的代码从中心注册表获取环境配置的服务.
与服务定位器一样,您的代码应该有一些访问服务定位器的入口点.InitialContext
是这个切入点:您创建InitialContext
并从JNDI获取所需的服务lookup()
.
vau*_*ham 11
让我们谈谈代码,加载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);
}
Run Code Online (Sandbox Code Playgroud)
初始上下文将资源作为对象返回给我.我可以用同样的方式加载bean.
Connection conn = ds.getConnection();
Run Code Online (Sandbox Code Playgroud)
但重点是什么?只需存储特定环境的对象而不考虑其类型.然后即时更改他们的信息.你会注意到,我没有写任何登录名/密码.
在此示例中,取决于当前环境: - 在生产中,它返回与数据库的连接. - 在集成环境中,它返回与另一个数据库的连接 - 在开发中,它实例化该类的另一个实现(模拟的)并使用xml文件作为数据源.
问候