InitialContext和lookup

1. InitialContext简介

在Java中,InitialContext是用于查找和访问命名和目录服务(如LDAP,DNS,NIS等)的初始上下文的类。通过它,可以获取与特定 JNDI 实现相关的命名空间、上下文、对象等。

它是Java Naming and Directory Interface (JNDI) API的一部分,并且可以通过不同的工厂方法创建基于不同的JNDI实现的InitialContext实例。

2. lookup方法简介

在 InitialContext 实例中,lookup 方法是用于查找特定命名空间中的对象的方法。在JNDI中,对象是一个具有全局唯一性标识符(例如,JNDI名称)的资源。 该方法将返回指定名称对应的对象或抛出异常。

lookup方法的语法如下:

```

public Object lookup(Name name) throws NamingException

public Object lookup(String name) throws NamingException

```

其中,name参数是要查找的名称,可以是一个javax.naming.Name对象或者一个String类型的名称。

3. 使用InitialContext和lookup的例子

为了更好的理解InitialContext和lookup的使用,让我们来看一个简单的例子。我们将使用Tomcat服务器作为JNDI实现。

首先,我们需要在Tomcat的配置文件server.xml中添加以下行来启用JNDI支持:

```

type="javax.sql.DataSource" driverClassName="com.mysql.cj.jdbc.Driver"

url="jdbc:mysql://localhost:3306/my_db"

username="myuser" password="mypassword"

maxTotal="20" maxIdle="10" maxWaitMillis="-1"/>

```

在上面的配置中,我们定义了一个JNDI资源jdbc/myDB,它是一个javax.sql.DataSource类型的资源,可以使用com.mysql.cj.jdbc.Driver驱动程序链接到localhost上的MySQL数据库my_db。

接下来,我们将在Java代码中使用InitialContext查找此JNDI资源,以便能够使用连接到MySQL数据库。

```

import javax.naming.InitialContext;

import javax.naming.NamingException;

import javax.sql.DataSource;

import java.sql.Connection;

import java.sql.SQLException;

public class JNDIExample {

public static void main(String[] args) {

try {

InitialContext ctx = new InitialContext();

DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/myDB");

Connection conn = ds.getConnection();

// use the connection

conn.close();

} catch (NamingException | SQLException e) {

e.printStackTrace();

}

}

}

```

在上面的代码中,我们首先创建一个InitialContext对象,然后通过lookup方法,查找名为“java:comp/env/jdbc/myDB”的JNDI资源。如果找到资源,则通过DataSource接口获取一个Connection对象,然后使用该对象打开数据库连接。

总结:

InitialContext和lookup是Java中用于访问JNDI命名和目录服务的API。它们可以用于查找特定命名空间中的对象,并返回该对象。在Tomcat服务器中,可以通过修改server.xml文件中的配置,将资源添加到JNDI中,然后可以在Java代码中通过InitialContext进行查找和使用。 如果你喜欢我们三七知识分享网站的文章, 欢迎您分享或收藏知识分享网站文章 欢迎您到我们的网站逛逛喔!https://www.37seo.cn/

点赞(97) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿
发表
评论
返回
顶部