了解JNDI

JNDI就像类固醇的地图吧? 我使用键来查找对象的引用。 什么是InitialContext? 我似乎没有得到这个想法。

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

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

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

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

让我们谈谈代码,加载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文件作为数据源。

问候