了解 JNDI

2022-09-02 00:44:56

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


答案 1

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

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

换句话说,它是服务定位器模式的实现:你的代码从中心注册表中获取由环境配置的服务。

与通常使用服务定位器一样,您的代码应具有一些入口点来访问服务定位器。 是此入口点:使用 创建并从 JNDI 获取所需的服务。InitialContextInitialContextlookup()


答案 2

让我们来谈谈代码,加载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);
}

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

Connection conn = ds.getConnection();

但有什么意义呢?只是存储特定环境的对象,而不考虑其类型。然后动态更改他们的信息。你会注意到,我没有写任何登录名/密码。

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

问候


推荐